Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
3bad682
Fix: Jumping to renamed files (#484)
jakubbortlik Mar 1, 2025
870b55d
Fix: Store reviewer data before creating comment popup (#476)
jakubbortlik Mar 1, 2025
1cbd7ec
Fix: Make publishing drafts more robust (#483)
jakubbortlik Mar 1, 2025
4fc1bbd
Fix: Swap file_name and old_file_name in reviewer data (#485)
jakubbortlik Apr 9, 2025
aac1ebc
Feat: Enable toggling date format between relative and absolute (#491)
jakubbortlik Jun 19, 2025
cd06875
Fix: Add opts to help popup (#492)
jakubbortlik Jun 19, 2025
a4b9859
Fix: Force start_line for jumping to diagnostic to be inside buffer (…
jakubbortlik Jun 19, 2025
f5fbab4
fix: redefine colors after reloading colorscheme (#500)
jakubbortlik Jun 19, 2025
e9141cf
Fix: Use path instead of oldpath as fallback for unrenamed files (#496)
jakubbortlik Jun 19, 2025
72af0d0
Fix: Use file_name when old_file_name is not set (#495)
jakubbortlik Jun 19, 2025
25aada3
fix(ci): fix lua tests (#501)
harrisoncramer Jun 19, 2025
b12236f
Proxy Support (#499)
duckbrain Jun 25, 2025
f66fbdb
feat(ci): Cancel obsolete after a new commit is pushed in an open PR …
kitsiosk Jul 12, 2025
128c3f5
fix: start and clean up winbar timer properly (#513)
jakubbortlik Jan 24, 2026
dc2c1d8
fix: put attach_file markdown on new line (#512)
jakubbortlik Jan 24, 2026
1584b69
docs: fix incorrect value for 'relative' option to Split (#511)
jakubbortlik Jan 24, 2026
388baac
docs: add default keybinding maps available in the help (#506)
makbari Jan 24, 2026
871c562
feat: enable setting discussion tree options (#509)
jakubbortlik Jan 24, 2026
08b6a37
Merge branch 'main' into develop
harrisoncramer Jan 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/go.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@ on:
- 'cmd/**' # Ignore changes to the Lua code
- 'go.sum'
- 'go.mod'

concurrency:
group: pr-${{ github.workflow }}-${{ github.head_ref }}
cancel-in-progress: true

jobs:
go_lint:
name: Lint Go 💅
Expand Down
81 changes: 81 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,3 +122,84 @@ For a list of all these settings please run `:h gitlab.nvim.configuring-the-plug
The plugin sets up a number of useful keybindings in the special buffers it creates, and some global keybindings as well. Refer to the relevant section of the manual `:h gitlab.nvim.keybindings` for more details.

For more information about each of these commands, and about the APIs in general, run `:h gitlab.nvim.api`

`gitlab.nvim` comes with a set of default `keymaps` for different contexts. You can override any of these in your configuration.

### Global Keymaps

These keymaps are available globally (i.e., in any buffer).

```
g? Open a help popup for local keymaps
glaa Add assignee
glad Delete assignee
glla Add label
glld Delete label
glra Add reviewer
glrd Delete reviewer
glA Approve MR
glR Revoke MR approval
glM Merge the feature branch to the target branch and close MR
glC Create a new MR for currently checked-out feature branch
glc Chose MR for review
glS Start review for the currently checked-out branch
gls Show the editable summary of the MR
glu Copy the URL of the MR to the system clipboard
glo Open the URL of the MR in the default Internet browser
gln Create a note (comment not linked to a specific line)
glp Show the pipeline status
gld Toggle the discussions window
glD Toggle between draft mode and live mode
glP Publish all draft comments/notes
```

#### Popup Keymaps

These `keymaps` are active in the popup windows (e.g., for creating comments, editing the summary, etc.).

```
<Tab> Cycle to the next field
<S-Tab> Cycle to the previous field
ZZ Perform action (e.g., save comment)
ZA Perform linewise action
ZQ Discard changes and quit the popup
```

#### Discussion Tree Keymaps

These `keymaps` are active in the discussion tree window.

```
Ea Add an emoji to the note/comment
Ed Remove an emoji from a note/comment
dd Delete comment
e Edit comment
r Reply to comment
- Toggle the resolved status of the whole discussion
o Jump to comment location in file
a Jump to the comment location in the reviewer window
b Jump to the URL of the current note/discussion
u Copy the URL of the current node to clipboard
c Toggle between the notes and discussions views
i Toggle type of discussion tree
P Publish the currently focused note/comment
dt Toggle between date formats
D Toggle between draft mode and live mode
st Toggle whether discussions are sorted by the "latest_reply", or by "original_comment"
t Open or close the discussion
T Open or close separately both resolved and unresolved discussions
R Open or close all resolved discussions
U Open or close all unresolved discussions
<C-R> Refresh the data in the view
<leader>p Print the current node (for debugging)
```

#### Reviewer Keymaps

These `keymaps` are active in the reviewer window (the diff view).

```
c Create a comment for the lines that the following {motion} moves over
s Create a suggestion for the lines that the following {motion} moves over
a Jump to the comment in the discussion tree
```
29 changes: 28 additions & 1 deletion doc/gitlab.nvim.txt
Original file line number Diff line number Diff line change
Expand Up @@ -262,14 +262,20 @@ you call this function with no values the defaults will be used:
keep_current_open = false, -- If true, current discussion stays open even if it should otherwise be closed when toggling
position = "bottom", -- "top", "right", "bottom" or "left"
size = "20%", -- Size of split
relative = "editor", -- Position of tree split relative to "editor" or "window"
relative = "editor", -- Position of tree split relative to "editor" or "win" (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)
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
relative_date = true, -- Whether to show relative time like "5 days ago" or absolute time like "03/01/2025 at 01:43"
winopts = { -- Window-local options for the discussion tree split
number = false,
relativenumber = false,
breakindent = true, -- Every wrapped line will continue visually indented
showbreak = "+ ", -- String to put at the start of lines that have been wrapped
}
winbar = nil, -- Custom function to return winbar title, should return a string. Provided with WinbarTable (defined in annotations.lua)
-- If using lualine, please add "gitlab" to disabled file types, otherwise you will not see the winbar.
},
Expand Down Expand Up @@ -1078,4 +1084,25 @@ execute and passed the data as an argument.
with each resource as a key-value pair, with the key being it's
type.

*gitlab.nvim.data*
gitlab.refresh_data() ~

Fetches discussion tree data from Gitlab and refreshes the tree views. It can
be used in an autocommand to refresh the data every time you enter the
discussion tree. This exmaple shows how to easily limit the refresh rate to at
least 10 seconds:
>lua
local last_updated = os.time()
local gitlab = vim.api.nvim_create_augroup("Gitlab", {})
vim.api.nvim_create_autocmd("BufEnter", {
group = gitlab,
callback = function()
if vim.bo.filetype == "gitlab" and os.time() - last_updated > 10 then
require("gitlab").refresh_data()
last_updated = os.time()
end
end
})
<

vim:tw=78:ts=4:sw=4:expandtab:ft=help:norl:
1 change: 0 additions & 1 deletion lua/gitlab/actions/common.lua
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ M.switch_can_edit_bufs = function(bool, ...)
---@param v integer
for _, v in ipairs(bufnrs) do
u.switch_can_edit_buf(v, bool)
vim.api.nvim_set_option_value("filetype", "gitlab", { buf = v })
end
end

Expand Down
10 changes: 7 additions & 3 deletions lua/gitlab/actions/discussions/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -115,15 +115,19 @@ M.open = function(callback, view_type)
M.linked_bufnr = linked_bufnr
M.unlinked_bufnr = unlinked_bufnr

vim.api.nvim_set_option_value("filetype", "gitlab", { buf = M.split.bufnr })
vim.api.nvim_set_option_value("filetype", "gitlab", { buf = M.unlinked_bufnr })
for opt, val in pairs(state.settings.discussion_tree.winopts) do
vim.api.nvim_set_option_value(opt, val, { win = M.split.winid })
end

vim.api.nvim_set_option_value("filetype", "gitlab", { buf = M.linked_bufnr })
vim.api.nvim_set_option_value("filetype", "gitlab", { buf = M.unlinked_bufnr })

M.split = split
M.split_visible = true
split:mount()

-- Initialize winbar module with data from buffers
winbar.start_timer()
winbar.set_buffers(M.linked_bufnr, M.unlinked_bufnr)
winbar.switch_view_type(view_type)

Expand Down Expand Up @@ -156,6 +160,7 @@ M.close = function()
end
M.split_visible = false
M.discussion_tree = nil
winbar.cleanup_timer()
end

---Move to the discussion tree at the discussion from diagnostic on current line.
Expand Down Expand Up @@ -455,7 +460,6 @@ M.rebuild_discussion_tree = function()
M.set_tree_keymaps(discussion_tree, M.linked_bufnr, false)
M.discussion_tree = discussion_tree
common.switch_can_edit_bufs(false, M.linked_bufnr, M.unlinked_bufnr)
vim.api.nvim_set_option_value("filetype", "gitlab", { buf = M.linked_bufnr })
state.discussion_tree.resolved_expanded = false
state.discussion_tree.unresolved_expanded = false
end
Expand Down
19 changes: 16 additions & 3 deletions lua/gitlab/actions/discussions/winbar.lua
Original file line number Diff line number Diff line change
Expand Up @@ -271,8 +271,21 @@ M.switch_view_type = function(override)
M.update_winbar()
end

-- Set up a timer to update the winbar periodically
local timer = vim.uv.new_timer()
timer:start(0, 100, vim.schedule_wrap(M.update_winbar))
---Set up a timer to update the winbar periodically
M.start_timer = function()
M.cleanup_timer()
---@type nil|uv_timer_t
M.timer = vim.uv.new_timer()
M.timer:start(0, 100, vim.schedule_wrap(M.update_winbar))
end

--Stop and close the timer
M.cleanup_timer = function()
if M.timer ~= nil then
M.timer:stop()
M.timer:close()
M.timer = nil
end
end

return M
4 changes: 1 addition & 3 deletions lua/gitlab/actions/miscellaneous.lua
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,7 @@ M.attach_file = function()
local body = { file_path = full_path, file_name = choice }
job.run_job("/attachment", "POST", body, function(data)
local markdown = data.markdown
local current_line = u.get_current_line_number()
local bufnr = vim.api.nvim_get_current_buf()
vim.api.nvim_buf_set_lines(bufnr, current_line - 1, current_line, false, { markdown })
vim.api.nvim_put({ markdown }, "l", true, false)
end)
end)
end
Expand Down
1 change: 1 addition & 0 deletions lua/gitlab/reviewer/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ M.open = function()
local on_diffview_closed = function(view)
if view.tabpage == M.tabnr then
M.tabnr = nil
require("gitlab.actions.discussions.winbar").cleanup_timer()
end
end
require("diffview.config").user_emitter:on("view_closed", function(_, args)
Expand Down
6 changes: 6 additions & 0 deletions lua/gitlab/state.lua
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,12 @@ M.settings = {
tree_type = "simple",
draft_mode = false,
relative_date = true,
winopts = {
number = false,
relativenumber = false,
breakindent = true,
showbreak = "+ ",
},
},
emojis = {
formatter = nil,
Expand Down
Loading