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:
@@ -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*
|
||||
|
||||
@@ -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 })
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user