Fix: Keep empty lines in discussion tree (#173)

* Docs: Fix typos and remove trailing spaces

* Fix: Split strings by new lines correctly

* Docs: Recommend breakindent option to improve tree nodes indentation

* Fix: Replace whole buffer when creating a new suggestion

Previously, a trailing empty line was left in the buffer.

---------

Co-authored-by: Jakub Bortlík <jakub.bortlik@phonexia.com>
This commit is contained in:
Jakub F. Bortlík
2024-02-10 17:06:56 +01:00
committed by GitHub
parent 132dd60b95
commit d05a23a7d5
7 changed files with 46 additions and 22 deletions

View File

@@ -1,4 +1,4 @@
*gitlab.nvim.txt* Create, review, and manage Gitlab reources without leaving Neovim
*gitlab.nvim.txt* Create, review, and manage Gitlab resources without leaving Neovim
==============================================================================
Table of Contents *gitlab.nvim.table-of-contents*
@@ -354,6 +354,16 @@ delete/edit/reply are available on the note tree.
require("gitlab").create_note()
<
When the 'wrap' option is on, line wrapping can make the discussion tree
harder to read. You can use the 'breakindent' option to visually indent tree
nodes at the same level. If you don't want to set 'breakindent' globally, you
can set this only for the `gitlab` file type (the file type of discussions and
notes). One way of doing this is by creating a file called
$XDG_CONFIG_HOME/nvim/after/ftplugin/gitlab.lua with the following contents:
>lua
vim.o.breakindent = true
<
LABELS *gitlab.nvim.labels*
You can add or remove labels from the current MR.
@@ -630,7 +640,7 @@ reviewer pane (see the gitlab.nvim.review command), otherwise it will error.
>lua
require("gitlab").comment()
Afer the comment is typed, submit it to Gitlab via the |settings.popup.perform_action|
After the comment is typed, submit it to Gitlab via the |settings.popup.perform_action|
keybinding, by default `<leader>l`
create_multiline_comment() *gitlab.nvim.create_multiline_comment*
@@ -640,8 +650,8 @@ mode, and will use the currently selected lines.
>lua
require("gitlab").create_multiline_comment()
Afer the comment is typed, submit it to Gitlab via the |settings.popup.perform_linewise_action|
keybinding, by default `<leader>l`
After the comment is typed, submit it to Gitlab via the |settings.popup.perform_linewise_action|
keybinding, by default `<leader>l`.
create_comment_suggestion() *gitlab.nvim.create_comment_suggestion*
@@ -650,7 +660,7 @@ change suggestion to the currently selected lines).
>lua
require("gitlab").create_multiline_comment()
Afer the comment is typed, submit it to Gitlab via the |settings.popup.perform_linewise_action|
After the comment is typed, submit it to Gitlab via the |settings.popup.perform_linewise_action|
keybinding, by default |<leader>l|
create_mr({opts}) *gitlab.nvim.create_mr*
@@ -680,12 +690,12 @@ If there are no diagnostics for the current line, shows a warning message.
gitlab.create_note() *gitlab.nvim.create_note*
Opens a popup to create a note. Notes are like commments except they are not
Opens a popup to create a note. Notes are like comments except they are not
tied to specific changes in an MR.
>lua
require("gitlab").create_note()
Afer the comment is typed, submit it to Gitlab via the |settings.popup.perform_action|
After the comment is typed, submit it to Gitlab via the |settings.popup.perform_action|
keybinding, by default |<leader>l|
gitlab.toggle_discussions() *gitlab.nvim.toggle_discussions*

View File

@@ -77,7 +77,7 @@ M.create_comment_suggestion = function()
table.insert(suggestion_lines, backticks)
comment_popup:mount()
vim.api.nvim_buf_set_lines(comment_popup.bufnr, 0, 0, false, suggestion_lines)
vim.api.nvim_buf_set_lines(comment_popup.bufnr, 0, -1, false, suggestion_lines)
state.set_popup_keymaps(comment_popup, function(text)
if range > 0 then
M.confirm_create_comment(text, { start_line = start_line, end_line = end_line })

View File

@@ -259,10 +259,11 @@ end
---Builds a lua list of strings that contain the MR description
M.build_description_lines = function(template_content)
local description_lines = {}
for line in template_content:gmatch("[^\n]+") do
for line in u.split_by_new_lines(template_content) do
table.insert(description_lines, line)
table.insert(description_lines, "")
end
-- TODO: @harrisoncramer Same as in lua/gitlab/actions/summary.lua:114
table.insert(description_lines, "")
return description_lines
end

View File

@@ -92,7 +92,7 @@ end
---@return NuiTree.Node[]
local function build_note_body(note, resolve_info)
local text_nodes = {}
for bodyLine in note.body:gmatch("[^\n]+") do
for bodyLine in u.split_by_new_lines(note.body) do
local line = attach_uuid(bodyLine)
table.insert(
text_nodes,

View File

@@ -148,7 +148,7 @@ M.see_logs = function()
end
local lines = {}
for line in file:gmatch("[^\n]+") do
for line in u.split_by_new_lines(file) do
table.insert(lines, line)
end

View File

@@ -108,10 +108,13 @@ M.build_description_lines = function()
local description_lines = {}
local description = state.INFO.description
for line in description:gmatch("[^\n]+") do
for line in u.split_by_new_lines(description) do
table.insert(description_lines, line)
table.insert(description_lines, "")
end
-- TODO: @harrisoncramer Not sure whether the following line should be here at all. It definitely
-- didn't belong into the for loop, since it inserted an empty line after each line. But maybe
-- there is a purpose for an empty line at the end of the buffer?
table.insert(description_lines, "")
return description_lines
end

View File

@@ -148,6 +148,16 @@ M.trim = function(s)
return res
end
---Splits a string by new lines and returns an iterator
---@param s string The string to split
---@return table: An iterator object
M.split_by_new_lines = function(s)
if s:sub(-1) ~= "\n" then
s = s .. "\n"
end -- Append a new line to the string, if there's none, otherwise the last line would be lost.
return s:gmatch("(.-)\n") -- Match 0 or more (as few as possible) characters followed by a new line.
end
-- Reverses the order of elements in a list
---@param list table The list to reverse
---@return table