Skip to content

Commit 78ac65f

Browse files
Further state cleanup
1 parent 18658c5 commit 78ac65f

File tree

6 files changed

+99
-94
lines changed

6 files changed

+99
-94
lines changed

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,7 @@ local gitlab = require("gitlab")
189189
vim.keymap.set("n", "<leader>gls", gitlab.summary)
190190
vim.keymap.set("n", "<leader>glA", gitlab.approve)
191191
vim.keymap.set("n", "<leader>glR", gitlab.revoke)
192-
vim.keymap.set("n", "<leader>glc", gitlab.create_comment)
193-
vim.keymap.set("n", "<leader>gld", gitlab.list_discussions)
192+
vim.keymap.set("n", "<leader>glr", gitlab.review)
194193
vim.keymap.set("n", "<leader>glaa", gitlab.add_assignee)
195194
vim.keymap.set("n", "<leader>glad", gitlab.delete_assignee)
196195
vim.keymap.set("n", "<leader>glra", gitlab.add_reviewer)

lua/gitlab/comment.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,17 @@ M.confirm_create_comment = function(text)
2727

2828
if file_name == nil then
2929
vim.notify("Reviewer did not provide file name", vim.log.levels.ERROR)
30+
return
3031
end
3132

3233
if line_numbers == nil then
3334
vim.notify("Reviewer did not provide line numbers of change", vim.log.levels.ERROR)
35+
return
3436
end
3537

3638
if text == nil then
3739
vim.notify("Reviewer did not provide text of change", vim.log.levels.ERROR)
40+
return
3841
end
3942

4043
local revision = state.MR_REVISIONS[1]

lua/gitlab/discussions.lua

Lines changed: 69 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
1-
local u = require("gitlab.utils")
2-
local Menu = require("nui.menu")
3-
local NuiTree = require("nui.tree")
4-
local NuiSplit = require("nui.split")
5-
local job = require("gitlab.job")
6-
local state = require("gitlab.state")
7-
local Popup = require("nui.popup")
8-
local settings = require("gitlab.settings")
9-
local reviewer = require("gitlab.reviewer")
10-
11-
local edit_popup = Popup(u.create_popup_state("Edit Comment", "80%", "80%"))
12-
local reply_popup = Popup(u.create_popup_state("Reply", "80%", "80%"))
13-
1+
local u = require("gitlab.utils")
2+
local Menu = require("nui.menu")
3+
local NuiTree = require("nui.tree")
4+
local NuiSplit = require("nui.split")
5+
local job = require("gitlab.job")
6+
local state = require("gitlab.state")
7+
local Popup = require("nui.popup")
8+
local settings = require("gitlab.settings")
9+
local reviewer = require("gitlab.reviewer")
10+
11+
local edit_popup = Popup(u.create_popup_state("Edit Comment", "80%", "80%"))
12+
local reply_popup = Popup(u.create_popup_state("Reply", "80%", "80%"))
1413

1514
-- This module is responsible for the discussion tree. That includes things like
1615
-- editing existing notes in the tree, replying to notes in the tree,
1716
-- and marking discussions as resolved/unresolved.
18-
local M = {}
1917

20-
M.split = nil
21-
M.split_visible = false
18+
local M = {
19+
split_visible = false,
20+
split = nil,
21+
split_buf = nil,
22+
tree = nil
23+
}
24+
2225
M.list_discussions = function()
2326
job.run_job("discussions", "GET", nil, function(data)
2427
if type(data.discussions) ~= "table" then
@@ -34,21 +37,31 @@ M.list_discussions = function()
3437
})
3538

3639
split:mount()
40+
local buf = split.bufnr
3741

3842
M.split = split
3943
M.split_visible = true
40-
41-
local buf = split.bufnr
42-
state.SPLIT_BUF = buf
44+
M.split_buf = split.bufnr
4345

4446
local tree_nodes = M.add_discussions_to_table(data.discussions)
4547

46-
state.tree = NuiTree({ nodes = tree_nodes, bufnr = buf })
48+
M.tree = NuiTree({ nodes = tree_nodes, bufnr = buf })
4749
M.set_tree_keymaps(buf)
4850

49-
state.tree:render()
51+
M.tree:render()
5052
vim.api.nvim_buf_set_option(buf, 'filetype', 'markdown')
5153
u.darken_metadata(buf, '')
54+
55+
vim.keymap.set('n', state.settings.review_pane.toggle_discussions, function()
56+
if not M.split then return end
57+
if M.split_visible then
58+
M.split:hide()
59+
M.split_visible = false
60+
else
61+
M.split:show()
62+
M.split_visible = true
63+
end
64+
end)
5265
end)
5366
end
5467

@@ -72,7 +85,7 @@ end
7285
-- This function (settings.discussion_tree.jump_to_location) will
7386
-- jump you to the file and line where the comment was left
7487
M.jump_to_location = function()
75-
local node = state.tree:get_node()
88+
local node = M.tree:get_node()
7689
if node == nil then return end
7790

7891
local discussion_node = M.get_root_node(node)
@@ -135,7 +148,7 @@ end
135148
-- when you make a selection
136149
M.send_deletion = function(item)
137150
if item.text == "Confirm" then
138-
local current_node = state.tree:get_node()
151+
local current_node = M.tree:get_node()
139152

140153
local note_node = M.get_note_node(current_node)
141154
local root_node = M.get_root_node(current_node)
@@ -147,8 +160,8 @@ M.send_deletion = function(item)
147160
job.run_job("comment", "DELETE", json, function(data)
148161
vim.notify(data.message, vim.log.levels.INFO)
149162
if not note_node.is_root then
150-
state.tree:remove_node("-" .. note_id)
151-
state.tree:render()
163+
M.tree:remove_node("-" .. note_id)
164+
M.tree:render()
152165
else
153166
-- We are removing the root node of the discussion,
154167
-- we need to move all the children around, the easiest way
@@ -162,7 +175,7 @@ end
162175

163176
-- This function (settings.discussion_tree.edit_comment) will open the edit popup for the current comment in the discussion tree
164177
M.edit_comment = function()
165-
local current_node = state.tree:get_node()
178+
local current_node = M.tree:get_node()
166179
local note_node = M.get_note_node(current_node)
167180
local root_node = M.get_root_node(current_node)
168181

@@ -171,9 +184,9 @@ M.edit_comment = function()
171184
local lines = {} -- Gather all lines from immediate children that aren't note nodes
172185
local children_ids = note_node:get_child_ids()
173186
for _, child_id in ipairs(children_ids) do
174-
local child_node = state.tree:get_node(child_id)
187+
local child_node = M.tree:get_node(child_id)
175188
if (not child_node:has_children()) then
176-
local line = state.tree:get_node(child_id).text
189+
local line = M.tree:get_node(child_id).text
177190
table.insert(lines, line)
178191
end
179192
end
@@ -201,7 +214,7 @@ end
201214

202215
-- This comment (settings.discussion_tree.toggle_resolved) will toggle the resolved status of the current discussion and send the change to the Go server
203216
M.toggle_resolved = function()
204-
local note = state.tree:get_node()
217+
local note = M.tree:get_node()
205218
if not note or not note.resolvable then return end
206219

207220
local json_table = {
@@ -219,12 +232,12 @@ end
219232

220233
-- Helpers
221234
M.update_resolved_status = function(note, mark_resolved)
222-
local current_text = state.tree.nodes.by_id["-" .. note.id].text
235+
local current_text = M.tree.nodes.by_id["-" .. note.id].text
223236
local target = mark_resolved and 'resolved' or 'unresolved'
224237
local current = mark_resolved and 'unresolved' or 'resolved'
225238

226239
local function set_property(key, val)
227-
state.tree.nodes.by_id["-" .. note.id][key] = val
240+
M.tree.nodes.by_id["-" .. note.id][key] = val
228241
end
229242

230243
local has_symbol = function(s)
@@ -243,7 +256,7 @@ M.update_resolved_status = function(note, mark_resolved)
243256
set_property('text', (u.remove_last_chunk(current_text) .. " " .. state.settings.discussion_tree[target]))
244257
end
245258

246-
state.tree:render()
259+
M.tree:render()
247260
end
248261

249262
M.set_tree_keymaps = function(buf)
@@ -257,29 +270,29 @@ M.set_tree_keymaps = function(buf)
257270

258271
-- Expands/collapses the current node
259272
vim.keymap.set('n', state.settings.discussion_tree.toggle_node, function()
260-
local node = state.tree:get_node()
273+
local node = M.tree:get_node()
261274
if node == nil then return end
262275
local children = node:get_child_ids()
263276
if node == nil then return end
264277
if node:is_expanded() then
265278
node:collapse()
266279
for _, child in ipairs(children) do
267-
state.tree:get_node(child):collapse()
280+
M.tree:get_node(child):collapse()
268281
end
269282
else
270283
for _, child in ipairs(children) do
271-
state.tree:get_node(child):expand()
284+
M.tree:get_node(child):expand()
272285
end
273286
node:expand()
274287
end
275288

276-
state.tree:render()
289+
M.tree:render()
277290
u.darken_metadata(buf, '')
278291
end,
279292
{ buffer = true })
280293

281294
vim.keymap.set('n', 'r', function()
282-
local node = state.tree:get_node()
295+
local node = M.tree:get_node()
283296
if node == nil then return end
284297
local discussion_node = M.get_root_node(node)
285298
M.reply(tostring(discussion_node.id))
@@ -291,30 +304,30 @@ end
291304
--
292305

293306
M.redraw_text = function(text)
294-
local current_node = state.tree:get_node()
307+
local current_node = M.tree:get_node()
295308
local note_node = M.get_note_node(current_node)
296309

297310
local childrenIds = note_node:get_child_ids()
298311
for _, value in ipairs(childrenIds) do
299-
state.tree:remove_node(value)
312+
M.tree:remove_node(value)
300313
end
301314

302315
local newNoteTextNodes = {}
303316
for bodyLine in text:gmatch("[^\n]+") do
304317
table.insert(newNoteTextNodes, NuiTree.Node({ text = bodyLine, is_body = true }, {}))
305318
end
306319

307-
state.tree:set_nodes(newNoteTextNodes, "-" .. note_node.id)
320+
M.tree:set_nodes(newNoteTextNodes, "-" .. note_node.id)
308321

309-
state.tree:render()
322+
M.tree:render()
310323
local buf = vim.api.nvim_get_current_buf()
311324
u.darken_metadata(buf, '')
312325
end
313326

314327
M.get_root_node = function(node)
315328
if (not node.is_root) then
316329
local parent_id = node:get_parent_id()
317-
return M.get_root_node(state.tree:get_node(parent_id))
330+
return M.get_root_node(M.tree:get_node(parent_id))
318331
else
319332
return node
320333
end
@@ -324,7 +337,7 @@ M.get_note_node = function(node)
324337
if (not node.is_note) then
325338
local parent_id = node:get_parent_id()
326339
if parent_id == nil then return node end
327-
return M.get_note_node(state.tree:get_node(parent_id))
340+
return M.get_note_node(M.tree:get_node(parent_id))
328341
else
329342
return node
330343
end
@@ -371,8 +384,8 @@ end
371384
M.add_note_to_tree = function(note, discussion_id)
372385
local note_node = M.build_note(note)
373386
note_node:expand()
374-
state.tree:add_node(note_node, discussion_id and ("-" .. discussion_id) or nil)
375-
state.tree:render()
387+
M.tree:add_node(note_node, discussion_id and ("-" .. discussion_id) or nil)
388+
M.tree:render()
376389
local buf = vim.api.nvim_get_current_buf()
377390
u.darken_metadata(buf, '')
378391
vim.notify("Sent reply!", vim.log.levels.INFO)
@@ -385,20 +398,20 @@ M.refresh_tree = function()
385398
return
386399
end
387400

388-
if not state.SPLIT_BUF or (vim.fn.bufwinid(state.SPLIT_BUF) == -1) then return end
401+
if not M.split_buf or (vim.fn.bufwinid(M.split_buf) == -1) then return end
389402

390-
vim.api.nvim_buf_set_option(state.SPLIT_BUF, 'modifiable', true)
391-
vim.api.nvim_buf_set_option(state.SPLIT_BUF, 'readonly', false)
392-
vim.api.nvim_buf_set_lines(state.SPLIT_BUF, 0, -1, false, {})
393-
vim.api.nvim_buf_set_option(state.SPLIT_BUF, 'readonly', true)
394-
vim.api.nvim_buf_set_option(state.SPLIT_BUF, 'modifiable', false)
403+
vim.api.nvim_buf_set_option(M.split_buf, 'modifiable', true)
404+
vim.api.nvim_buf_set_option(M.split_buf, 'readonly', false)
405+
vim.api.nvim_buf_set_lines(M.split_buf, 0, -1, false, {})
406+
vim.api.nvim_buf_set_option(M.split_buf, 'readonly', true)
407+
vim.api.nvim_buf_set_option(M.split_buf, 'modifiable', false)
395408

396409
local tree_nodes = M.add_discussions_to_table(data.discussions)
397-
state.tree = NuiTree({ nodes = tree_nodes, bufnr = state.SPLIT_BUF })
398-
M.set_tree_keymaps(state.SPLIT_BUF)
399-
state.tree:render()
400-
vim.api.nvim_buf_set_option(state.SPLIT_BUF, 'filetype', 'markdown')
401-
u.darken_metadata(state.SPLIT_BUF, '')
410+
M.tree = NuiTree({ nodes = tree_nodes, bufnr = M.split_buf })
411+
M.set_tree_keymaps(M.split_buf)
412+
M.tree:render()
413+
vim.api.nvim_buf_set_option(M.split_buf, 'filetype', 'markdown')
414+
u.darken_metadata(M.split_buf, '')
402415
end)
403416
end
404417

lua/gitlab/init.lua

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
local state = require("gitlab.state")
22
local discussions = require("gitlab.discussions")
3-
local review = require("gitlab.review")
3+
local reviewer = require("gitlab.reviewer")
44
local summary = require("gitlab.summary")
55
local assignees_and_reviewers = require("gitlab.assignees_and_reviewers")
66
local settings = require("gitlab.settings")
@@ -185,7 +185,11 @@ M.summary = M.ensureState(summary.summary)
185185
M.approve = M.ensureState(function() job.run_job("approve", "POST") end)
186186
M.revoke = M.ensureState(function() job.run_job("revoke", "POST") end)
187187

188-
M.review = M.ensureState(review.open)
188+
M.review = M.ensureState(function()
189+
reviewer.open()
190+
discussions.list_discussions()
191+
end)
192+
189193
M.create_comment = M.ensureState(M.ensureRevisions(comment.create_comment))
190194

191195
-- Discussion Tree

lua/gitlab/review.lua

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)