From 5a620635f1bf9d982a1d68e49b0744187bd42042 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?= Date: Sat, 12 Oct 2024 16:55:34 +0200 Subject: [PATCH 1/2] Fix: Show draft replies in the correct tree --- lua/gitlab/actions/discussions/winbar.lua | 14 +++++++++++--- lua/gitlab/utils/list.lua | 17 +++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/lua/gitlab/actions/discussions/winbar.lua b/lua/gitlab/actions/discussions/winbar.lua index 09fb9934..6191c993 100644 --- a/lua/gitlab/actions/discussions/winbar.lua +++ b/lua/gitlab/actions/discussions/winbar.lua @@ -49,9 +49,17 @@ local function content() local resolvable_notes, resolved_notes = get_data(state.DISCUSSION_DATA.unlinked_discussions) local draft_notes = require("gitlab.actions.draft_notes") - local inline_draft_notes = List.new(state.DRAFT_NOTES):filter(draft_notes.has_position) - local unlinked_draft_notes = List.new(state.DRAFT_NOTES):filter(function(note) - return not draft_notes.has_position(note) + local inline_draft_notes, unlinked_draft_notes = List.new(state.DRAFT_NOTES):partition(function(note) + if note.discussion_id == "" then + return draft_notes.has_position(note) + else + for _, discussion in ipairs(state.DISCUSSION_DATA.unlinked_discussions) do + if discussion.id == note.discussion_id then + return false + end + end + end + return true end) local t = { diff --git a/lua/gitlab/utils/list.lua b/lua/gitlab/utils/list.lua index ea54b90c..775522ff 100644 --- a/lua/gitlab/utils/list.lua +++ b/lua/gitlab/utils/list.lua @@ -33,6 +33,23 @@ function List:filter(func) return result end +---Partitions a given list into two lists +---@generic T +---@param func fun(v: T, i: integer):boolean +---@return List, List @Returns two lists: the 1st with elements for which func returns true, the 2nd with elements for which it returns false +function List:partition(func) + local result_true = List.new() + local result_false = List.new() + for i, v in ipairs(self) do + if func(v, i) == true then + table.insert(result_true, v) + else + table.insert(result_false, v) + end + end + return result_true, result_false +end + function List:reduce(func, agg) for i, v in ipairs(self) do agg = func(agg, v, i) From f84b16e81146f813acbca3a7c483eb302d8e6fbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?= Date: Sun, 13 Oct 2024 06:59:36 +0200 Subject: [PATCH 2/2] Refactor: Remove else block --- lua/gitlab/actions/discussions/winbar.lua | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lua/gitlab/actions/discussions/winbar.lua b/lua/gitlab/actions/discussions/winbar.lua index 6191c993..d97c17d5 100644 --- a/lua/gitlab/actions/discussions/winbar.lua +++ b/lua/gitlab/actions/discussions/winbar.lua @@ -52,11 +52,10 @@ local function content() local inline_draft_notes, unlinked_draft_notes = List.new(state.DRAFT_NOTES):partition(function(note) if note.discussion_id == "" then return draft_notes.has_position(note) - else - for _, discussion in ipairs(state.DISCUSSION_DATA.unlinked_discussions) do - if discussion.id == note.discussion_id then - return false - end + end + for _, discussion in ipairs(state.DISCUSSION_DATA.unlinked_discussions) do + if discussion.id == note.discussion_id then + return false end end return true