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*
|
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()
|
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*
|
LABELS *gitlab.nvim.labels*
|
||||||
|
|
||||||
You can add or remove labels from the current MR.
|
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
|
>lua
|
||||||
require("gitlab").comment()
|
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`
|
keybinding, by default `<leader>l`
|
||||||
|
|
||||||
create_multiline_comment() *gitlab.nvim.create_multiline_comment*
|
create_multiline_comment() *gitlab.nvim.create_multiline_comment*
|
||||||
@@ -640,8 +650,8 @@ mode, and will use the currently selected lines.
|
|||||||
>lua
|
>lua
|
||||||
require("gitlab").create_multiline_comment()
|
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`
|
keybinding, by default `<leader>l`.
|
||||||
|
|
||||||
create_comment_suggestion() *gitlab.nvim.create_comment_suggestion*
|
create_comment_suggestion() *gitlab.nvim.create_comment_suggestion*
|
||||||
|
|
||||||
@@ -650,7 +660,7 @@ change suggestion to the currently selected lines).
|
|||||||
>lua
|
>lua
|
||||||
require("gitlab").create_multiline_comment()
|
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|
|
keybinding, by default |<leader>l|
|
||||||
|
|
||||||
create_mr({opts}) *gitlab.nvim.create_mr*
|
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*
|
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.
|
tied to specific changes in an MR.
|
||||||
>lua
|
>lua
|
||||||
require("gitlab").create_note()
|
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|
|
keybinding, by default |<leader>l|
|
||||||
|
|
||||||
gitlab.toggle_discussions() *gitlab.nvim.toggle_discussions*
|
gitlab.toggle_discussions() *gitlab.nvim.toggle_discussions*
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ M.create_comment_suggestion = function()
|
|||||||
table.insert(suggestion_lines, backticks)
|
table.insert(suggestion_lines, backticks)
|
||||||
|
|
||||||
comment_popup:mount()
|
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)
|
state.set_popup_keymaps(comment_popup, function(text)
|
||||||
if range > 0 then
|
if range > 0 then
|
||||||
M.confirm_create_comment(text, { start_line = start_line, end_line = end_line })
|
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
|
---Builds a lua list of strings that contain the MR description
|
||||||
M.build_description_lines = function(template_content)
|
M.build_description_lines = function(template_content)
|
||||||
local description_lines = {}
|
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, line)
|
||||||
table.insert(description_lines, "")
|
|
||||||
end
|
end
|
||||||
|
-- TODO: @harrisoncramer Same as in lua/gitlab/actions/summary.lua:114
|
||||||
|
table.insert(description_lines, "")
|
||||||
|
|
||||||
return description_lines
|
return description_lines
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ end
|
|||||||
---@return NuiTree.Node[]
|
---@return NuiTree.Node[]
|
||||||
local function build_note_body(note, resolve_info)
|
local function build_note_body(note, resolve_info)
|
||||||
local text_nodes = {}
|
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)
|
local line = attach_uuid(bodyLine)
|
||||||
table.insert(
|
table.insert(
|
||||||
text_nodes,
|
text_nodes,
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ M.see_logs = function()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local lines = {}
|
local lines = {}
|
||||||
for line in file:gmatch("[^\n]+") do
|
for line in u.split_by_new_lines(file) do
|
||||||
table.insert(lines, line)
|
table.insert(lines, line)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -108,10 +108,13 @@ M.build_description_lines = function()
|
|||||||
local description_lines = {}
|
local description_lines = {}
|
||||||
|
|
||||||
local description = state.INFO.description
|
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, line)
|
||||||
table.insert(description_lines, "")
|
|
||||||
end
|
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
|
return description_lines
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -148,6 +148,16 @@ M.trim = function(s)
|
|||||||
return res
|
return res
|
||||||
end
|
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
|
-- Reverses the order of elements in a list
|
||||||
---@param list table The list to reverse
|
---@param list table The list to reverse
|
||||||
---@return table
|
---@return table
|
||||||
|
|||||||
Reference in New Issue
Block a user