fix: date fixes; go middleware refactors; regex fixes; etc (#368)
fix: format of date when MR was closed or merged (#367) refactor: Add Payload Validators + Middleware In Go Code (#366) fix: Add better checks for leaving comments (#369) fix: regex support for http credentials embedded in remote url (#372) fix: Comment on single line selects two lines (#371) This is a #PATCH release.
This commit is contained in:
committed by
GitHub
parent
f1faf603b0
commit
22bfd0c83e
@@ -3,6 +3,7 @@
|
||||
--- to this module the data required to make the API calls
|
||||
local Popup = require("nui.popup")
|
||||
local Layout = require("nui.layout")
|
||||
local diffview_lib = require("diffview.lib")
|
||||
local state = require("gitlab.state")
|
||||
local job = require("gitlab.job")
|
||||
local u = require("gitlab.utils")
|
||||
@@ -153,17 +154,45 @@ end
|
||||
|
||||
---@class LayoutOpts
|
||||
---@field ranged boolean
|
||||
---@field discussion_id string|nil
|
||||
---@field unlinked boolean
|
||||
---@field discussion_id string|nil
|
||||
|
||||
---This function sets up the layout and popups needed to create a comment, note and
|
||||
---multi-line comment. It also sets up the basic keybindings for switching between
|
||||
---window panes, and for the non-primary sections.
|
||||
---@param opts LayoutOpts|nil
|
||||
---@return NuiLayout
|
||||
---@param opts LayoutOpts
|
||||
---@return NuiLayout|nil
|
||||
M.create_comment_layout = function(opts)
|
||||
if opts == nil then
|
||||
opts = {}
|
||||
if opts.unlinked ~= true then
|
||||
-- Check that diffview is initialized
|
||||
if reviewer.tabnr == nil then
|
||||
u.notify("Reviewer must be initialized first", vim.log.levels.ERROR)
|
||||
return
|
||||
end
|
||||
|
||||
-- Check that Diffview is the current view
|
||||
local view = diffview_lib.get_current_view()
|
||||
if view == nil then
|
||||
u.notify("Comments should be left in the reviewer pane", vim.log.levels.ERROR)
|
||||
return
|
||||
end
|
||||
|
||||
-- Check that we are in the diffview tab
|
||||
local tabnr = vim.api.nvim_get_current_tabpage()
|
||||
if tabnr ~= reviewer.tabnr then
|
||||
u.notify("Line location can only be determined within reviewer window", vim.log.levels.ERROR)
|
||||
return
|
||||
end
|
||||
|
||||
-- Check that we are hovering over the code
|
||||
local filetype = vim.bo[0].filetype
|
||||
if filetype == "DiffviewFiles" or filetype == "gitlab" then
|
||||
u.notify(
|
||||
"Comments can only be left on the code. To leave unlinked comments, use gitlab.create_note() instead",
|
||||
vim.log.levels.ERROR
|
||||
)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local title = opts.discussion_id and "Reply" or "Comment"
|
||||
@@ -229,7 +258,8 @@ M.create_comment = function()
|
||||
if err ~= nil then
|
||||
return
|
||||
end
|
||||
local is_modified = vim.api.nvim_buf_get_option(0, "modified")
|
||||
|
||||
local is_modified = vim.bo[0].modified
|
||||
if state.settings.reviewer_settings.diffview.imply_local and (is_modified or not has_clean_tree) then
|
||||
u.notify(
|
||||
"Cannot leave comments on changed files. \n Please stash all local changes or push them to the feature branch.",
|
||||
@@ -243,7 +273,9 @@ M.create_comment = function()
|
||||
end
|
||||
|
||||
local layout = M.create_comment_layout({ ranged = false, unlinked = false })
|
||||
layout:mount()
|
||||
if layout ~= nil then
|
||||
layout:mount()
|
||||
end
|
||||
end
|
||||
|
||||
--- This function will open a multi-line comment popup in order to create a multi-line comment
|
||||
@@ -257,14 +289,18 @@ M.create_multiline_comment = function()
|
||||
end
|
||||
|
||||
local layout = M.create_comment_layout({ ranged = true, unlinked = false })
|
||||
layout:mount()
|
||||
if layout ~= nil then
|
||||
layout:mount()
|
||||
end
|
||||
end
|
||||
|
||||
--- This function will open a a popup to create a "note" (e.g. unlinked comment)
|
||||
--- on the changed/updated line in the current MR
|
||||
M.create_note = function()
|
||||
local layout = M.create_comment_layout({ ranged = false, unlinked = true })
|
||||
layout:mount()
|
||||
if layout ~= nil then
|
||||
layout:mount()
|
||||
end
|
||||
end
|
||||
|
||||
---Given the current visually selected area of text, builds text to fill in the
|
||||
@@ -319,7 +355,9 @@ M.create_comment_suggestion = function()
|
||||
local suggestion_lines, range_length = build_suggestion()
|
||||
|
||||
local layout = M.create_comment_layout({ ranged = range_length > 0, unlinked = false })
|
||||
layout:mount()
|
||||
if layout ~= nil then
|
||||
layout:mount()
|
||||
end
|
||||
vim.schedule(function()
|
||||
if suggestion_lines then
|
||||
vim.api.nvim_buf_set_lines(M.comment_popup.bufnr, 0, -1, false, suggestion_lines)
|
||||
|
||||
@@ -84,7 +84,7 @@ end
|
||||
|
||||
---Publishes all draft notes and comments. Re-renders all discussion views.
|
||||
M.confirm_publish_all_drafts = function()
|
||||
local body = { publish_all = true }
|
||||
local body = {}
|
||||
job.run_job("/mr/draft_notes/publish", "POST", body, function(data)
|
||||
u.notify(data.message, vim.log.levels.INFO)
|
||||
state.DRAFT_NOTES = {}
|
||||
@@ -109,7 +109,7 @@ M.confirm_publish_draft = function(tree)
|
||||
|
||||
---@type integer
|
||||
local note_id = note_node.is_root and root_node.id or note_node.id
|
||||
local body = { note = note_id, publish_all = false }
|
||||
local body = { note = note_id }
|
||||
job.run_job("/mr/draft_notes/publish", "POST", body, function(data)
|
||||
u.notify(data.message, vim.log.levels.INFO)
|
||||
|
||||
|
||||
@@ -226,6 +226,8 @@
|
||||
---@class DebugSettings: table
|
||||
---@field go_request? boolean -- Log the requests to Gitlab sent by the Go server
|
||||
---@field go_response? boolean -- Log the responses received from Gitlab to the Go server
|
||||
---@field request? boolean -- Log the requests to the Go server
|
||||
---@field response? boolean -- Log the responses from the Go server
|
||||
|
||||
---@class PopupSettings: table
|
||||
---@field width? string -- The width of the popup, by default "40%"
|
||||
|
||||
@@ -26,6 +26,8 @@ M.run_job = function(endpoint, method, body, callback)
|
||||
return
|
||||
end
|
||||
local data_ok, data = pcall(vim.json.decode, output)
|
||||
|
||||
-- Failing to unmarshal JSON
|
||||
if not data_ok then
|
||||
local msg = string.format("Failed to parse JSON from %s endpoint", endpoint)
|
||||
if type(output) == "string" then
|
||||
@@ -34,17 +36,22 @@ M.run_job = function(endpoint, method, body, callback)
|
||||
u.notify(string.format(msg, endpoint, output), vim.log.levels.WARN)
|
||||
return
|
||||
end
|
||||
|
||||
-- If JSON provided, handle success or error cases
|
||||
if data ~= nil then
|
||||
local status = (tonumber(data.status) >= 200 and tonumber(data.status) < 300) and "success" or "error"
|
||||
if status == "success" and callback ~= nil then
|
||||
callback(data)
|
||||
elseif status == "success" then
|
||||
if data.details == nil then
|
||||
if callback then
|
||||
callback(data)
|
||||
return
|
||||
end
|
||||
local message = string.format("%s", data.message)
|
||||
u.notify(message, vim.log.levels.INFO)
|
||||
else
|
||||
local message = string.format("%s: %s", data.message, data.details)
|
||||
u.notify(message, vim.log.levels.ERROR)
|
||||
return
|
||||
end
|
||||
|
||||
-- Handle error case
|
||||
local message = string.format("%s: %s", data.message, data.details)
|
||||
u.notify(message, vim.log.levels.ERROR)
|
||||
end
|
||||
end, 0)
|
||||
end,
|
||||
|
||||
@@ -67,11 +67,11 @@ M.open = function()
|
||||
end
|
||||
|
||||
if state.INFO.state == "closed" then
|
||||
u.notify(string.format("This MR was closed on %s", u.format_date(state.INFO.closed_at)), vim.log.levels.WARN)
|
||||
u.notify(string.format("This MR was closed %s", u.time_since(state.INFO.closed_at)), vim.log.levels.WARN)
|
||||
end
|
||||
|
||||
if state.INFO.state == "merged" then
|
||||
u.notify(string.format("This MR was merged on %s", u.format_date(state.INFO.merged_at)), vim.log.levels.WARN)
|
||||
u.notify(string.format("This MR was merged %s", u.time_since(state.INFO.merged_at)), vim.log.levels.WARN)
|
||||
end
|
||||
|
||||
if state.settings.discussion_diagnostic ~= nil or state.settings.discussion_sign ~= nil then
|
||||
@@ -151,25 +151,7 @@ end
|
||||
---other modules such as the comment module to create line codes or set diagnostics
|
||||
---@return DiffviewInfo | nil
|
||||
M.get_reviewer_data = function()
|
||||
if M.tabnr == nil then
|
||||
u.notify("Diffview reviewer must be initialized first", vim.log.levels.ERROR)
|
||||
return
|
||||
end
|
||||
|
||||
-- Check if we are in the diffview tab
|
||||
local tabnr = vim.api.nvim_get_current_tabpage()
|
||||
if tabnr ~= M.tabnr then
|
||||
u.notify("Line location can only be determined within reviewer window", vim.log.levels.ERROR)
|
||||
return
|
||||
end
|
||||
|
||||
-- Check if we are in the diffview buffer
|
||||
local view = diffview_lib.get_current_view()
|
||||
if view == nil then
|
||||
u.notify("Could not find Diffview view", vim.log.levels.ERROR)
|
||||
return
|
||||
end
|
||||
|
||||
local layout = view.cur_layout
|
||||
local old_win = u.get_window_id_by_buffer_id(layout.a.file.bufnr)
|
||||
local new_win = u.get_window_id_by_buffer_id(layout.b.file.bufnr)
|
||||
@@ -321,7 +303,7 @@ local set_keymaps = function(bufnr, keymaps)
|
||||
if keymaps.reviewer.create_comment ~= false then
|
||||
-- Set keymap for repeated operator keybinding
|
||||
vim.keymap.set("o", keymaps.reviewer.create_comment, function()
|
||||
vim.api.nvim_cmd({ cmd = "normal", bang = true, args = { tostring(vim.v.count1) .. "j" } }, {})
|
||||
vim.api.nvim_cmd({ cmd = "normal", bang = true, args = { tostring(vim.v.count1) .. "$" } }, {})
|
||||
end, {
|
||||
buffer = bufnr,
|
||||
desc = "Create comment for [count] lines",
|
||||
@@ -351,7 +333,7 @@ local set_keymaps = function(bufnr, keymaps)
|
||||
if keymaps.reviewer.create_suggestion ~= false then
|
||||
-- Set keymap for repeated operator keybinding
|
||||
vim.keymap.set("o", keymaps.reviewer.create_suggestion, function()
|
||||
vim.api.nvim_cmd({ cmd = "normal", bang = true, args = { tostring(vim.v.count1) .. "j" } }, {})
|
||||
vim.api.nvim_cmd({ cmd = "normal", bang = true, args = { tostring(vim.v.count1) .. "$" } }, {})
|
||||
end, {
|
||||
buffer = bufnr,
|
||||
desc = "Create suggestion for [count] lines",
|
||||
|
||||
@@ -47,8 +47,10 @@ M.settings = {
|
||||
file_separator = u.path_separator,
|
||||
port = nil, -- choose random port
|
||||
debug = {
|
||||
go_request = false,
|
||||
go_response = false,
|
||||
request = false,
|
||||
response = false,
|
||||
gitlab_request = false,
|
||||
gitlab_response = false,
|
||||
},
|
||||
log_path = (vim.fn.stdpath("cache") .. "/gitlab.nvim.log"),
|
||||
config_path = nil,
|
||||
|
||||
Reference in New Issue
Block a user