-
Notifications
You must be signed in to change notification settings - Fork 57
Expand file tree
/
Copy pathinit.lua
More file actions
131 lines (125 loc) · 5.31 KB
/
init.lua
File metadata and controls
131 lines (125 loc) · 5.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
require("gitlab.utils.list")
local u = require("gitlab.utils")
local async = require("gitlab.async")
local server = require("gitlab.server")
local emoji = require("gitlab.emoji")
local state = require("gitlab.state")
local reviewer = require("gitlab.reviewer")
local discussions = require("gitlab.actions.discussions")
local merge_requests = require("gitlab.actions.merge_requests")
local merge = require("gitlab.actions.merge")
local summary = require("gitlab.actions.summary")
local data = require("gitlab.actions.data")
local assignees_and_reviewers = require("gitlab.actions.assignees_and_reviewers")
local comment = require("gitlab.actions.comment")
local version = require("gitlab.version")
local pipeline = require("gitlab.actions.pipeline")
local create_mr = require("gitlab.actions.create_mr")
local approvals = require("gitlab.actions.approvals")
local draft_notes = require("gitlab.actions.draft_notes")
local labels = require("gitlab.actions.labels")
local health = require("gitlab.health")
local user = state.dependencies.user
local info = state.dependencies.info
local labels_dep = state.dependencies.labels
local project_members = state.dependencies.project_members
local latest_pipeline = state.dependencies.latest_pipeline
local revisions = state.dependencies.revisions
local merge_requests_dep = state.dependencies.merge_requests
local merge_requests_by_username_dep = state.dependencies.merge_requests_by_username
local draft_notes_dep = state.dependencies.draft_notes
local discussion_data = state.dependencies.discussion_data
---@param args Settings | {} | nil
---@return nil
local function setup(args)
if args == nil then
args = {}
end
local version_issue = version.check_go_version()
if version_issue ~= nil then
u.notify(version_issue, vim.log.levels.ERROR)
return
end
state.merge_settings(args) -- Merges user settings with default settings
server.build() -- Builds the Go binary if it doesn't exist
state.set_global_keymaps() -- Sets keymaps that are not bound to a specific buffer
require("gitlab.colors") -- Sets colors
reviewer.init()
discussions.initialize_discussions() -- place signs / diagnostics for discussions in reviewer
emoji.init() -- Read in emojis for lookup purposes
local is_healthy = health.check(true)
if not is_healthy then
u.notify("Plugin unhealthy, please run ':checkhealth gitlab' for details", vim.log.levels.WARN)
end
end
return {
setup = setup,
summary = async.sequence({
u.merge(info, { refresh = true }),
labels_dep,
}, summary.summary),
approve = async.sequence({ info }, approvals.approve),
revoke = async.sequence({ info }, approvals.revoke),
add_reviewer = async.sequence({ info, project_members }, assignees_and_reviewers.add_reviewer),
delete_reviewer = async.sequence({ info, project_members }, assignees_and_reviewers.delete_reviewer),
add_label = async.sequence({ info, labels_dep }, labels.add_label),
delete_label = async.sequence({ info, labels_dep }, labels.delete_label),
add_assignee = async.sequence({ info, project_members }, assignees_and_reviewers.add_assignee),
delete_assignee = async.sequence({ info, project_members }, assignees_and_reviewers.delete_assignee),
create_comment = async.sequence({ info, revisions }, comment.create_comment),
create_multiline_comment = async.sequence({ info, revisions }, comment.create_multiline_comment),
create_comment_suggestion = async.sequence({ info, revisions }, comment.create_comment_suggestion),
move_to_discussion_tree_from_diagnostic = async.sequence({}, discussions.move_to_discussion_tree),
create_note = async.sequence({ info }, comment.create_note),
create_mr = async.sequence({}, create_mr.start),
review = async.sequence({ u.merge(info, { refresh = true }), revisions, user }, function()
reviewer.open()
end),
close_review = function()
reviewer.close()
end,
pipeline = async.sequence({ latest_pipeline }, pipeline.open),
merge = async.sequence({ u.merge(info, { refresh = true }) }, merge.merge),
-- Discussion Tree Actions 🌴
toggle_discussions = function()
if discussions.split_visible then
discussions.close()
else
async.sequence({
info,
user,
u.merge(draft_notes_dep, { refresh = true }),
u.merge(discussion_data, { refresh = true }),
}, discussions.open)()
end
end,
toggle_draft_mode = discussions.toggle_draft_mode,
toggle_sort_method = discussions.toggle_sort_method,
publish_all_drafts = draft_notes.publish_all_drafts,
refresh_data = function()
-- This also rebuilds the regular views
draft_notes.rebuild_view(false, true)
end,
-- Other functions 🤷
state = state,
data = data.data,
print_settings = state.print_settings,
choose_merge_request = async.sequence({ merge_requests_dep }, merge_requests.choose_merge_request),
choose_merge_request_by_username = async.sequence(
{ project_members, merge_requests_by_username_dep },
merge_requests.choose_merge_request
),
open_in_browser = async.sequence({ info }, function()
local web_url = u.get_web_url()
if web_url ~= nil then
u.open_in_browser(web_url)
end
end),
copy_mr_url = async.sequence({ info }, function()
local web_url = u.get_web_url()
if web_url ~= nil then
vim.fn.setreg("+", web_url)
u.notify("Copied '" .. web_url .. "' to clipboard", vim.log.levels.INFO)
end
end),
}