Skip to content

Commit

Permalink
Fix: Show non-resolvable comments in discussion tree
Browse files Browse the repository at this point in the history
  • Loading branch information
jakubbortlik committed Nov 5, 2024
1 parent 51f3d96 commit 420de78
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 17 deletions.
51 changes: 34 additions & 17 deletions lua/gitlab/actions/discussions/winbar.lua
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
local u = require("gitlab.utils")
local List = require("gitlab.utils.list")
local state = require("gitlab.state")

Expand All @@ -17,12 +18,13 @@ M.set_buffers = function(linked_bufnr, unlinked_bufnr)
end

---@param nodes Discussion[]|UnlinkedDiscussion[]|nil
---@return number, number
---@return number, number, number
local get_data = function(nodes)
local total_resolvable = 0
local total_resolved = 0
local total_non_resolvable = 0
if nodes == nil or nodes == vim.NIL then
return total_resolvable, total_resolved
return total_resolvable, total_resolved, total_non_resolvable
end

total_resolvable = List.new(nodes):reduce(function(agg, d)
Expand All @@ -33,6 +35,14 @@ local get_data = function(nodes)
return agg
end, 0)

total_non_resolvable = List.new(nodes):reduce(function(agg, d)
local first_child = d.notes[1]
if first_child and not first_child.resolvable then
agg = agg + 1
end
return agg
end, 0)

total_resolved = List.new(nodes):reduce(function(agg, d)
local first_child = d.notes[1]
if first_child and first_child.resolved then
Expand All @@ -41,12 +51,12 @@ local get_data = function(nodes)
return agg
end, 0)

return total_resolvable, total_resolved
return total_resolvable, total_resolved, total_non_resolvable
end

local function content()
local resolvable_discussions, resolved_discussions = get_data(state.DISCUSSION_DATA.discussions)
local resolvable_notes, resolved_notes = get_data(state.DISCUSSION_DATA.unlinked_discussions)
local resolvable_discussions, resolved_discussions, non_resolvable_discussions = get_data(state.DISCUSSION_DATA.discussions)
local resolvable_notes, resolved_notes, non_resolvable_notes = get_data(state.DISCUSSION_DATA.unlinked_discussions)

local draft_notes = require("gitlab.actions.draft_notes")
local inline_draft_notes, unlinked_draft_notes = List.new(state.DRAFT_NOTES):partition(function(note)
Expand All @@ -64,10 +74,12 @@ local function content()
local t = {
resolvable_discussions = resolvable_discussions,
resolved_discussions = resolved_discussions,
non_resolvable_discussions = non_resolvable_discussions,
inline_draft_notes = #inline_draft_notes,
unlinked_draft_notes = #unlinked_draft_notes,
resolvable_notes = resolvable_notes,
resolved_notes = resolved_notes,
non_resolvable_notes = non_resolvable_notes,
help_keymap = state.settings.keymaps.help,
}

Expand All @@ -94,34 +106,39 @@ M.update_winbar = function()
vim.api.nvim_set_option_value("winbar", c, { scope = "local", win = win_id })
end

local function get_connector(base_title)
return string.match(base_title, "%($") and "" or "; "
end

---Builds the title string for both sections, using the count of resolvable and draft nodes
---@param base_title string
---@param resolvable_count integer
---@param resolved_count integer
---@param drafts_count integer
---@return string
local add_drafts_and_resolvable = function(base_title, resolvable_count, resolved_count, drafts_count)
local add_drafts_and_resolvable = function(base_title, resolvable_count, resolved_count, drafts_count, non_resolvable_count)
if resolvable_count == 0 and drafts_count == 0 and non_resolvable_count == 0 then
return base_title
end
base_title = base_title .. " ("
if non_resolvable_count ~= 0 then
base_title = base_title .. u.pluralize(non_resolvable_count, "comment")
end
if resolvable_count ~= 0 then
base_title = base_title .. string.format(" (%d/%d resolved", resolvable_count, resolved_count)
base_title = base_title .. get_connector(base_title) .. string.format("%d/%s", resolved_count, u.pluralize(resolvable_count, "thread"))
end
if drafts_count ~= 0 then
if resolvable_count ~= 0 then
base_title = base_title .. string.format("; %d drafts)", drafts_count)
else
base_title = base_title .. string.format(" (%d drafts)", drafts_count)
end
elseif resolvable_count ~= 0 then
base_title = base_title .. ")"
base_title = base_title .. get_connector(base_title) .. u.pluralize(drafts_count, "draft")
end

base_title = base_title .. ")"
return base_title
end

---@param t WinbarTable
M.make_winbar = function(t)
local discussion_title =
add_drafts_and_resolvable("Inline Comments", t.resolvable_discussions, t.resolved_discussions, t.inline_draft_notes)
local notes_title = add_drafts_and_resolvable("Notes", t.resolvable_notes, t.resolved_notes, t.unlinked_draft_notes)
add_drafts_and_resolvable("Inline Comments", t.resolvable_discussions, t.resolved_discussions, t.inline_draft_notes, t.non_resolvable_discussions)
local notes_title = add_drafts_and_resolvable("Notes", t.resolvable_notes, t.resolved_notes, t.unlinked_draft_notes, t.non_resolvable_notes)

-- Colorize the active tab
if M.current_view_type == "discussions" then
Expand Down
2 changes: 2 additions & 0 deletions lua/gitlab/annotations.lua
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,12 @@
---@field view_type string
---@field resolvable_discussions number
---@field resolved_discussions number
---@field non_resolvable_discussions number
---@field inline_draft_notes number
---@field unlinked_draft_notes number
---@field resolvable_notes number
---@field resolved_notes number
---@field non_resolvable_notes number
---@field help_keymap string
---
---@class SignTable
Expand Down

0 comments on commit 420de78

Please sign in to comment.