From 61904fa67bc0236dde2f4bf26e31c9a28258d414 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?= Date: Sat, 23 Nov 2024 01:23:35 +0100 Subject: [PATCH 01/11] refactor: remove unnecessary highlight links --- after/syntax/gitlab.vim | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/after/syntax/gitlab.vim b/after/syntax/gitlab.vim index 865337c0..c48534d0 100644 --- a/after/syntax/gitlab.vim +++ b/after/syntax/gitlab.vim @@ -2,17 +2,13 @@ if filereadable($VIMRUNTIME . '/syntax/markdown.vim') source $VIMRUNTIME/syntax/markdown.vim endif -syntax match Date "\v\d+\s+\w+\s+ago" -highlight link Date GitlabDate +syntax match GitlabDate "\v\d+\s+\w+\s+ago" -execute 'syntax match Unresolved /\s' . g:gitlab_discussion_tree_unresolved . '\s\?/' -highlight link Unresolved GitlabUnresolved +execute 'syntax match GitlabUnresolved /\s' . g:gitlab_discussion_tree_unresolved . '\s\?/' -execute 'syntax match Unlinked /\s' . g:gitlab_discussion_tree_unlinked . '\s\?/' -highlight link Unlinked GitlabUnlinked +execute 'syntax match GitlabUnlinked /\s' . g:gitlab_discussion_tree_unlinked . '\s\?/' -execute 'syntax match Resolved /\s' . g:gitlab_discussion_tree_resolved . '\s\?/' -highlight link Resolved GitlabResolved +execute 'syntax match GitlabResolved /\s' . g:gitlab_discussion_tree_resolved . '\s\?/' execute 'syntax match GitlabDiscussionOpen /^\s*' . g:gitlab_discussion_tree_expander_open . '/' highlight link GitlabDiscussionOpen GitlabExpander @@ -20,14 +16,11 @@ highlight link GitlabDiscussionOpen GitlabExpander execute 'syntax match GitlabDiscussionClosed /^\s*' . g:gitlab_discussion_tree_expander_closed . '/' highlight link GitlabDiscussionClosed GitlabExpander -execute 'syntax match Draft /' . g:gitlab_discussion_tree_draft . '/' -highlight link Draft GitlabDraft +execute 'syntax match GitlabDraft /' . g:gitlab_discussion_tree_draft . '/' -execute 'syntax match Username "@[a-zA-Z0-9.]\+"' -highlight link Username GitlabUsername +execute 'syntax match GitlabUsername "@[a-zA-Z0-9.]\+"' -execute 'syntax match Mention "\%(' . g:gitlab_discussion_tree_expander_open . '\|' +execute 'syntax match GitlabMention "\%(' . g:gitlab_discussion_tree_expander_open . '\|' \ . g:gitlab_discussion_tree_expander_closed . '\)\@ Date: Sat, 23 Nov 2024 01:25:04 +0100 Subject: [PATCH 02/11] style: unify delimiters --- after/syntax/gitlab.vim | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/after/syntax/gitlab.vim b/after/syntax/gitlab.vim index c48534d0..d5683642 100644 --- a/after/syntax/gitlab.vim +++ b/after/syntax/gitlab.vim @@ -4,19 +4,19 @@ endif syntax match GitlabDate "\v\d+\s+\w+\s+ago" -execute 'syntax match GitlabUnresolved /\s' . g:gitlab_discussion_tree_unresolved . '\s\?/' +execute 'syntax match GitlabUnresolved "\s' . g:gitlab_discussion_tree_unresolved . '\s\?"' -execute 'syntax match GitlabUnlinked /\s' . g:gitlab_discussion_tree_unlinked . '\s\?/' +execute 'syntax match GitlabUnlinked "\s' . g:gitlab_discussion_tree_unlinked . '\s\?"' -execute 'syntax match GitlabResolved /\s' . g:gitlab_discussion_tree_resolved . '\s\?/' +execute 'syntax match GitlabResolved "\s' . g:gitlab_discussion_tree_resolved . '\s\?"' -execute 'syntax match GitlabDiscussionOpen /^\s*' . g:gitlab_discussion_tree_expander_open . '/' +execute 'syntax match GitlabDiscussionOpen "^\s*' . g:gitlab_discussion_tree_expander_open . '"' highlight link GitlabDiscussionOpen GitlabExpander -execute 'syntax match GitlabDiscussionClosed /^\s*' . g:gitlab_discussion_tree_expander_closed . '/' +execute 'syntax match GitlabDiscussionClosed "^\s*' . g:gitlab_discussion_tree_expander_closed . '"' highlight link GitlabDiscussionClosed GitlabExpander -execute 'syntax match GitlabDraft /' . g:gitlab_discussion_tree_draft . '/' +execute 'syntax match GitlabDraft "' . g:gitlab_discussion_tree_draft . '"' execute 'syntax match GitlabUsername "@[a-zA-Z0-9.]\+"' From 4d084c68bc7288b7e3850855830e35994fca6bac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?= Date: Sat, 23 Nov 2024 01:30:47 +0100 Subject: [PATCH 03/11] refactor: simplify expander usage --- after/syntax/gitlab.vim | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/after/syntax/gitlab.vim b/after/syntax/gitlab.vim index d5683642..594ccb84 100644 --- a/after/syntax/gitlab.vim +++ b/after/syntax/gitlab.vim @@ -2,6 +2,8 @@ if filereadable($VIMRUNTIME . '/syntax/markdown.vim') source $VIMRUNTIME/syntax/markdown.vim endif +let expanders = '^\s*\%(' . g:gitlab_discussion_tree_expander_open . '\|' . g:gitlab_discussion_tree_expander_closed . '\)' + syntax match GitlabDate "\v\d+\s+\w+\s+ago" execute 'syntax match GitlabUnresolved "\s' . g:gitlab_discussion_tree_unresolved . '\s\?"' @@ -10,17 +12,12 @@ execute 'syntax match GitlabUnlinked "\s' . g:gitlab_discussion_tree_unlinked . execute 'syntax match GitlabResolved "\s' . g:gitlab_discussion_tree_resolved . '\s\?"' -execute 'syntax match GitlabDiscussionOpen "^\s*' . g:gitlab_discussion_tree_expander_open . '"' -highlight link GitlabDiscussionOpen GitlabExpander - -execute 'syntax match GitlabDiscussionClosed "^\s*' . g:gitlab_discussion_tree_expander_closed . '"' -highlight link GitlabDiscussionClosed GitlabExpander +execute 'syntax match GitlabExpander "' . expanders . '"' execute 'syntax match GitlabDraft "' . g:gitlab_discussion_tree_draft . '"' execute 'syntax match GitlabUsername "@[a-zA-Z0-9.]\+"' -execute 'syntax match GitlabMention "\%(' . g:gitlab_discussion_tree_expander_open . '\|' - \ . g:gitlab_discussion_tree_expander_closed . '\)\@ Date: Sat, 23 Nov 2024 01:32:22 +0100 Subject: [PATCH 04/11] refactor: extract username to variable --- after/syntax/gitlab.vim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/after/syntax/gitlab.vim b/after/syntax/gitlab.vim index 594ccb84..88909ec0 100644 --- a/after/syntax/gitlab.vim +++ b/after/syntax/gitlab.vim @@ -3,6 +3,7 @@ if filereadable($VIMRUNTIME . '/syntax/markdown.vim') endif let expanders = '^\s*\%(' . g:gitlab_discussion_tree_expander_open . '\|' . g:gitlab_discussion_tree_expander_closed . '\)' +let username = '@[a-zA-Z0-9.]\+' syntax match GitlabDate "\v\d+\s+\w+\s+ago" @@ -16,8 +17,8 @@ execute 'syntax match GitlabExpander "' . expanders . '"' execute 'syntax match GitlabDraft "' . g:gitlab_discussion_tree_draft . '"' -execute 'syntax match GitlabUsername "@[a-zA-Z0-9.]\+"' +execute 'syntax match GitlabUsername "' . username . '"' -execute 'syntax match GitlabMention "\%(' . expanders . '\)\@ Date: Sat, 23 Nov 2024 01:44:34 +0100 Subject: [PATCH 05/11] fix: cover more time formats --- after/syntax/gitlab.vim | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/after/syntax/gitlab.vim b/after/syntax/gitlab.vim index 88909ec0..388380ed 100644 --- a/after/syntax/gitlab.vim +++ b/after/syntax/gitlab.vim @@ -5,7 +5,12 @@ endif let expanders = '^\s*\%(' . g:gitlab_discussion_tree_expander_open . '\|' . g:gitlab_discussion_tree_expander_closed . '\)' let username = '@[a-zA-Z0-9.]\+' -syntax match GitlabDate "\v\d+\s+\w+\s+ago" +" Covers times like '14 days ago', 'just now', as well as 'October 3, 2024' +let time_ago = '\d\+ \w\+ ago' +let formatted_date = '\w\+ \{1,2}\d\{1,2}, \d\{4}' +let date = '\%(' . time_ago . '\|' . formatted_date . '\|just now\)' + +execute 'syntax match GitlabDate "' . date . '"' execute 'syntax match GitlabUnresolved "\s' . g:gitlab_discussion_tree_unresolved . '\s\?"' From 19cec83a10a92af603f93880f8afbc094ab0ad8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?= Date: Sat, 23 Nov 2024 01:44:54 +0100 Subject: [PATCH 06/11] style: remove empty lines --- after/syntax/gitlab.vim | 7 ------- 1 file changed, 7 deletions(-) diff --git a/after/syntax/gitlab.vim b/after/syntax/gitlab.vim index 388380ed..ed779338 100644 --- a/after/syntax/gitlab.vim +++ b/after/syntax/gitlab.vim @@ -11,19 +11,12 @@ let formatted_date = '\w\+ \{1,2}\d\{1,2}, \d\{4}' let date = '\%(' . time_ago . '\|' . formatted_date . '\|just now\)' execute 'syntax match GitlabDate "' . date . '"' - execute 'syntax match GitlabUnresolved "\s' . g:gitlab_discussion_tree_unresolved . '\s\?"' - execute 'syntax match GitlabUnlinked "\s' . g:gitlab_discussion_tree_unlinked . '\s\?"' - execute 'syntax match GitlabResolved "\s' . g:gitlab_discussion_tree_resolved . '\s\?"' - execute 'syntax match GitlabExpander "' . expanders . '"' - execute 'syntax match GitlabDraft "' . g:gitlab_discussion_tree_draft . '"' - execute 'syntax match GitlabUsername "' . username . '"' - execute 'syntax match GitlabMention "\%(' . expanders . '\)\@ Date: Sat, 23 Nov 2024 01:46:32 +0100 Subject: [PATCH 07/11] fix: limit syntax highlighting to note header --- after/syntax/gitlab.vim | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/after/syntax/gitlab.vim b/after/syntax/gitlab.vim index ed779338..766dec59 100644 --- a/after/syntax/gitlab.vim +++ b/after/syntax/gitlab.vim @@ -10,13 +10,18 @@ let time_ago = '\d\+ \w\+ ago' let formatted_date = '\w\+ \{1,2}\d\{1,2}, \d\{4}' let date = '\%(' . time_ago . '\|' . formatted_date . '\|just now\)' -execute 'syntax match GitlabDate "' . date . '"' -execute 'syntax match GitlabUnresolved "\s' . g:gitlab_discussion_tree_unresolved . '\s\?"' -execute 'syntax match GitlabUnlinked "\s' . g:gitlab_discussion_tree_unlinked . '\s\?"' -execute 'syntax match GitlabResolved "\s' . g:gitlab_discussion_tree_resolved . '\s\?"' -execute 'syntax match GitlabExpander "' . expanders . '"' -execute 'syntax match GitlabDraft "' . g:gitlab_discussion_tree_draft . '"' -execute 'syntax match GitlabUsername "' . username . '"' +let published = date . ' \%(' . g:gitlab_discussion_tree_resolved . '\|' . g:gitlab_discussion_tree_unresolved . '\|' . g:gitlab_discussion_tree_unlinked . '\)\?' +let state = ' \%(' . published . '\|' . g:gitlab_discussion_tree_draft . '\)' + +execute 'syntax match GitlabNoteHeader "' . expanders . username . state . '" contains=GitlabDate,GitlabUnresolved,GitlabUnlinked,GitlabResolved,GitlabExpander,GitlabDraft,GitlabUsername' + +execute 'syntax match GitlabDate "' . date . '" contained' +execute 'syntax match GitlabUnresolved "\s' . g:gitlab_discussion_tree_unresolved . '\s\?" contained' +execute 'syntax match GitlabUnlinked "\s' . g:gitlab_discussion_tree_unlinked . '\s\?" contained' +execute 'syntax match GitlabResolved "\s' . g:gitlab_discussion_tree_resolved . '\s\?" contained' +execute 'syntax match GitlabExpander "' . expanders . '" contained' +execute 'syntax match GitlabDraft "' . g:gitlab_discussion_tree_draft . '" contained' +execute 'syntax match GitlabUsername "' . username . '" contained' execute 'syntax match GitlabMention "\%(' . expanders . '\)\@ Date: Sat, 23 Nov 2024 01:47:48 +0100 Subject: [PATCH 08/11] perf: remove unnecessary patterns --- after/syntax/gitlab.vim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/after/syntax/gitlab.vim b/after/syntax/gitlab.vim index 766dec59..d19182c5 100644 --- a/after/syntax/gitlab.vim +++ b/after/syntax/gitlab.vim @@ -16,12 +16,12 @@ let state = ' \%(' . published . '\|' . g:gitlab_discussion_tree_draft . '\)' execute 'syntax match GitlabNoteHeader "' . expanders . username . state . '" contains=GitlabDate,GitlabUnresolved,GitlabUnlinked,GitlabResolved,GitlabExpander,GitlabDraft,GitlabUsername' execute 'syntax match GitlabDate "' . date . '" contained' -execute 'syntax match GitlabUnresolved "\s' . g:gitlab_discussion_tree_unresolved . '\s\?" contained' -execute 'syntax match GitlabUnlinked "\s' . g:gitlab_discussion_tree_unlinked . '\s\?" contained' -execute 'syntax match GitlabResolved "\s' . g:gitlab_discussion_tree_resolved . '\s\?" contained' +execute 'syntax match GitlabUnresolved "' . g:gitlab_discussion_tree_unresolved . '" contained' +execute 'syntax match GitlabUnlinked "' . g:gitlab_discussion_tree_unlinked . '" contained' +execute 'syntax match GitlabResolved "' . g:gitlab_discussion_tree_resolved . '" contained' execute 'syntax match GitlabExpander "' . expanders . '" contained' execute 'syntax match GitlabDraft "' . g:gitlab_discussion_tree_draft . '" contained' execute 'syntax match GitlabUsername "' . username . '" contained' -execute 'syntax match GitlabMention "\%(' . expanders . '\)\@ Date: Tue, 10 Dec 2024 11:21:09 +0100 Subject: [PATCH 09/11] docs: add unlinked to discussion_tree settings --- doc/gitlab.nvim.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/gitlab.nvim.txt b/doc/gitlab.nvim.txt index a04c5272..7d56743d 100644 --- a/doc/gitlab.nvim.txt +++ b/doc/gitlab.nvim.txt @@ -268,6 +268,7 @@ you call this function with no values the defaults will be used: relative = "editor", -- Position of tree split relative to "editor" or "window" resolved = '✓', -- Symbol to show next to resolved discussions unresolved = '-', -- Symbol to show next to unresolved discussions + unlinked = "󰌸", -- Symbol to show next to unliked comments (i.e., not threads) tree_type = "simple", -- Type of discussion tree - "simple" means just list of discussions, "by_file_name" means file tree with discussions under file draft_mode = false, -- Whether comments are posted as drafts as part of a review winbar = nil -- Custom function to return winbar title, should return a string. Provided with WinbarTable (defined in annotations.lua) From a91cbf13811b0748d97b5b983a845fd86487cc86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?= Date: Tue, 10 Dec 2024 12:25:23 +0100 Subject: [PATCH 10/11] fix: apply user settings in discussion highlighting --- doc/gitlab.nvim.txt | 1 + lua/gitlab/colors.lua | 14 +++++++------- lua/gitlab/state.lua | 1 + 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/doc/gitlab.nvim.txt b/doc/gitlab.nvim.txt index 7d56743d..c9dd0dff 100644 --- a/doc/gitlab.nvim.txt +++ b/doc/gitlab.nvim.txt @@ -269,6 +269,7 @@ you call this function with no values the defaults will be used: resolved = '✓', -- Symbol to show next to resolved discussions unresolved = '-', -- Symbol to show next to unresolved discussions unlinked = "󰌸", -- Symbol to show next to unliked comments (i.e., not threads) + draft = "✎", -- Symbol to show next to draft comments/notes tree_type = "simple", -- Type of discussion tree - "simple" means just list of discussions, "by_file_name" means file tree with discussions under file draft_mode = false, -- Whether comments are posted as drafts as part of a review winbar = nil -- Custom function to return winbar title, should return a string. Provided with WinbarTable (defined in annotations.lua) diff --git a/lua/gitlab/colors.lua b/lua/gitlab/colors.lua index 98eeb62a..54d557a5 100644 --- a/lua/gitlab/colors.lua +++ b/lua/gitlab/colors.lua @@ -3,13 +3,13 @@ local state = require("gitlab.state") local colors = state.settings.colors -- Set icons into global vim variables for syntax matching -local expanders = state.settings.discussion_tree.expanders -vim.g.gitlab_discussion_tree_expander_open = expanders.expanded -vim.g.gitlab_discussion_tree_expander_closed = expanders.collapsed -vim.g.gitlab_discussion_tree_draft = "✎" -vim.g.gitlab_discussion_tree_resolved = "✓" -vim.g.gitlab_discussion_tree_unresolved = "-" -vim.g.gitlab_discussion_tree_unlinked = "󰌸" +local discussion_tree = state.settings.discussion_tree +vim.g.gitlab_discussion_tree_expander_open = discussion_tree.expanders.expanded +vim.g.gitlab_discussion_tree_expander_closed = discussion_tree.expanders.collapsed +vim.g.gitlab_discussion_tree_draft = discussion_tree.draft +vim.g.gitlab_discussion_tree_resolved = discussion_tree.resolved +vim.g.gitlab_discussion_tree_unresolved = discussion_tree.unresolved +vim.g.gitlab_discussion_tree_unlinked = discussion_tree.unlinked local discussion = colors.discussion_tree diff --git a/lua/gitlab/state.lua b/lua/gitlab/state.lua index 25529efe..e615ee32 100644 --- a/lua/gitlab/state.lua +++ b/lua/gitlab/state.lua @@ -166,6 +166,7 @@ M.settings = { resolved = "✓", unresolved = "-", unlinked = "󰌸", + draft = "✎", tree_type = "simple", draft_mode = false, }, From dfef41a76fa7371148a186965006d9493339e7e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?= Date: Tue, 10 Dec 2024 13:05:44 +0100 Subject: [PATCH 11/11] fix: apply user settings for draft symbol --- lua/gitlab/actions/common.lua | 2 +- lua/gitlab/actions/discussions/winbar.lua | 9 ++++++++- lua/gitlab/actions/help.lua | 3 ++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lua/gitlab/actions/common.lua b/lua/gitlab/actions/common.lua index 99d5a57d..a6734d26 100644 --- a/lua/gitlab/actions/common.lua +++ b/lua/gitlab/actions/common.lua @@ -13,7 +13,7 @@ local M = {} ---@return string M.build_note_header = function(note) if note.note then - return "@" .. state.USER.username .. " " .. "✎" + return "@" .. state.USER.username .. " " .. state.settings.discussion_tree.draft end return "@" .. note.author.username .. " " .. u.time_since(note.created_at) end diff --git a/lua/gitlab/actions/discussions/winbar.lua b/lua/gitlab/actions/discussions/winbar.lua index 09c4c6a9..8f92f433 100644 --- a/lua/gitlab/actions/discussions/winbar.lua +++ b/lua/gitlab/actions/discussions/winbar.lua @@ -222,7 +222,14 @@ end M.get_drafts_text = function(base_title, drafts_count, focused) return get_connector(base_title) - .. string.format("%d%s", drafts_count, (focused and ("%#GitlabDraft#" .. "✎" .. "%#Text#") or "✎")) + .. string.format( + "%d%s", + drafts_count, + ( + focused and ("%#GitlabDraft#" .. state.settings.discussion_tree.draft .. "%#Text#") + or state.settings.discussion_tree.draft + ) + ) end M.get_nonresolveable_text = function(base_title, non_resolvable_count, focused) diff --git a/lua/gitlab/actions/help.lua b/lua/gitlab/actions/help.lua index 4e1b652a..991a1623 100644 --- a/lua/gitlab/actions/help.lua +++ b/lua/gitlab/actions/help.lua @@ -21,7 +21,8 @@ M.open = function() table.insert( help_content_lines, string.format( - "✎ = draft; %s = unlinked comment; %s = resolved", + "%s = draft; %s = unlinked comment; %s = resolved", + state.settings.discussion_tree.draft, state.settings.discussion_tree.unlinked, state.settings.discussion_tree.resolved )