Skip to content

Commit 7087b60

Browse files
committed
plugins/cmp-git: general cleanup of options
- Replace all pre-formatted plugin defaults - Move several options to `strLuaFn` - Refactored "action" options to use a `mkAction` helper - Fix some incorrect examples/tests - Remove undocumented `filter_fn` from settings example
1 parent 130a66b commit 7087b60

File tree

2 files changed

+120
-160
lines changed

2 files changed

+120
-160
lines changed

plugins/completion/cmp/sources/cmp-git.nix

Lines changed: 102 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,26 @@
77
with lib;
88
let
99
cfg = config.plugins.cmp-git;
10+
11+
mkAction =
12+
action: target:
13+
helpers.defaultNullOpts.mkLuaFn "require('cmp_git.${action}').git.${target}" ''
14+
Function used to ${action} the ${replaceStrings [ "_" ] [ " " ] target}.
15+
'';
1016
in
1117
{
1218
options.plugins.cmp-git.settings = helpers.neovim-plugin.mkSettingsOption {
1319
pluginName = "cmp_git";
1420
options = {
15-
filetypes = helpers.defaultNullOpts.mkListOf types.str ''["gitcommit" "octo"]'' ''
16-
Filetypes for which to trigger.
17-
'';
21+
filetypes = helpers.defaultNullOpts.mkListOf types.str [
22+
"gitcommit"
23+
"octo"
24+
] "Filetypes for which to trigger.";
1825

19-
remotes = helpers.defaultNullOpts.mkListOf types.str ''["upstream" "origin"]'' ''
20-
List of git remotes.
21-
'';
26+
remotes = helpers.defaultNullOpts.mkListOf types.str [
27+
"upstream"
28+
"origin"
29+
] "List of git remotes.";
2230

2331
enableRemoteUrlRewrites = helpers.defaultNullOpts.mkBool false ''
2432
Whether to enable remote URL rewrites.
@@ -30,27 +38,24 @@ in
3038
Max number of git commits to fetch.
3139
'';
3240

33-
sort_by =
34-
helpers.defaultNullOpts.mkNullable types.anything
35-
''{__raw = "require('cmp_git.sort').git.commits";}''
36-
"Function used to sort the commits.";
37-
38-
format =
39-
helpers.defaultNullOpts.mkNullable types.anything
40-
''{__raw = "require('cmp_git.format').git.commits";}''
41-
"Function used to format the commits.";
41+
sort_by = mkAction "sort" "commits";
42+
format = mkAction "format" "commits";
4243
};
4344
};
4445

4546
github = {
46-
hosts = helpers.defaultNullOpts.mkListOf types.str "[]" ''
47+
hosts = helpers.defaultNullOpts.mkListOf types.str [ ] ''
4748
List of private instances of github.
4849
'';
4950

5051
issues = {
51-
fields =
52-
helpers.defaultNullOpts.mkListOf types.str ''["title" "number" "body" "updatedAt" "state"]''
53-
"The fields used for issues.";
52+
fields = helpers.defaultNullOpts.mkListOf types.str [
53+
"title"
54+
"number"
55+
"body"
56+
"updatedAt"
57+
"state"
58+
] "The fields used for issues.";
5459

5560
filter = helpers.defaultNullOpts.mkStr "all" ''
5661
The filter to use when fetching issues.
@@ -64,37 +69,27 @@ in
6469
Which issues to fetch (`"open"`, `"closed"` or `"all"`).
6570
'';
6671

67-
sort_by =
68-
helpers.defaultNullOpts.mkNullable types.anything
69-
''{__raw = "require('cmp_git.sort').github.issues";}''
70-
"Function used to sort the issues.";
71-
72-
format =
73-
helpers.defaultNullOpts.mkNullable types.anything
74-
''{__raw = "require('cmp_git.format').github.issues";}''
75-
"Function used to format the issues.";
72+
sort_by = mkAction "sort" "issues";
73+
format = mkAction "format" "issues";
7674
};
7775

7876
mentions = {
7977
limit = helpers.defaultNullOpts.mkUnsignedInt 100 ''
8078
Max number of mentions to fetch.
8179
'';
8280

83-
sort_by =
84-
helpers.defaultNullOpts.mkNullable types.anything
85-
''{__raw = "require('cmp_git.sort').github.mentions";}''
86-
"Function used to sort the mentions.";
87-
88-
format =
89-
helpers.defaultNullOpts.mkNullable types.anything
90-
''{__raw = "require('cmp_git.format').github.mentions";}''
91-
"Function used to format the mentions.";
81+
sort_by = mkAction "sort" "mentions";
82+
format = mkAction "format" "mentions";
9283
};
9384

9485
pull_requests = {
95-
fields =
96-
helpers.defaultNullOpts.mkListOf types.str ''["title" "number" "body" "updatedAt" "state"]''
97-
"The fields used for pull requests.";
86+
fields = helpers.defaultNullOpts.mkListOf types.str [
87+
"title"
88+
"number"
89+
"body"
90+
"updatedAt"
91+
"state"
92+
] "The fields used for pull requests.";
9893

9994
limit = helpers.defaultNullOpts.mkUnsignedInt 100 ''
10095
Max number of pull requests to fetch.
@@ -104,20 +99,13 @@ in
10499
Which issues to fetch (`"open"`, `"closed"`, `"merged"` or `"all"`).
105100
'';
106101

107-
sort_by =
108-
helpers.defaultNullOpts.mkNullable types.anything
109-
''{__raw = "require('cmp_git.sort').github.pull_requests";}''
110-
"Function used to sort the pull requests.";
111-
112-
format =
113-
helpers.defaultNullOpts.mkNullable types.anything
114-
''{__raw = "require('cmp_git.format').github.pull_requests";}''
115-
"Function used to format the pull requests.";
102+
sort_by = mkAction "sort" "pull_requests";
103+
format = mkAction "format" "pull_requests";
116104
};
117105
};
118106

119107
gitlab = {
120-
hosts = helpers.defaultNullOpts.mkListOf types.str "[]" ''
108+
hosts = helpers.defaultNullOpts.mkListOf types.str [ ] ''
121109
List of private instances of gitlab.
122110
'';
123111

@@ -130,31 +118,17 @@ in
130118
Which issues to fetch (`"open"`, `"closed"` or `"all"`).
131119
'';
132120

133-
sort_by =
134-
helpers.defaultNullOpts.mkNullable types.anything
135-
''{__raw = "require('cmp_git.sort').gitlab.issues";}''
136-
"Function used to sort the issues.";
137-
138-
format =
139-
helpers.defaultNullOpts.mkNullable types.anything
140-
''{__raw = "require('cmp_git.format').gitlab.issues";}''
141-
"Function used to format the issues.";
121+
sort_by = mkAction "sort" "issues";
122+
format = mkAction "format" "issues";
142123
};
143124

144125
mentions = {
145126
limit = helpers.defaultNullOpts.mkUnsignedInt 100 ''
146127
Max number of mentions to fetch.
147128
'';
148129

149-
sort_by =
150-
helpers.defaultNullOpts.mkNullable types.anything
151-
''{__raw = "require('cmp_git.sort').gitlab.mentions";}''
152-
"Function used to sort the mentions.";
153-
154-
format =
155-
helpers.defaultNullOpts.mkNullable types.anything
156-
''{__raw = "require('cmp_git.format').gitlab.mentions";}''
157-
"Function used to format the mentions.";
130+
sort_by = mkAction "sort" "mentions";
131+
format = mkAction "format" "mentions";
158132
};
159133

160134
merge_requests = {
@@ -166,15 +140,8 @@ in
166140
Which issues to fetch (`"open"`, `"closed"`, `"locked"` or `"merged"`).
167141
'';
168142

169-
sort_by =
170-
helpers.defaultNullOpts.mkNullable types.anything
171-
''{__raw = "require('cmp_git.sort').gitlab.merge_requests";}''
172-
"Function used to sort the merge requests.";
173-
174-
format =
175-
helpers.defaultNullOpts.mkNullable types.anything
176-
''{__raw = "require('cmp_git.format').gitlab.merge_requests";}''
177-
"Function used to format the merge requests.";
143+
sort_by = mkAction "sort" "merge_requests";
144+
format = mkAction "format" "merge_requests";
178145
};
179146
};
180147

@@ -209,64 +176,62 @@ in
209176
};
210177
};
211178
})
212-
''
213-
[
214-
{
215-
debug_name = "git_commits";
216-
trigger_character = ":";
217-
action = \'\'
218-
function(sources, trigger_char, callback, params, git_info)
219-
return sources.git:get_commits(callback, params, trigger_char)
220-
end
221-
\'\';
222-
}
223-
{
224-
debug_name = "gitlab_issues";
225-
trigger_character = "#";
226-
action = \'\'
227-
function(sources, trigger_char, callback, params, git_info)
228-
return sources.gitlab:get_issues(callback, git_info, trigger_char)
229-
end
230-
\'\';
231-
}
232-
{
233-
debug_name = "gitlab_mentions";
234-
trigger_character = "@";
235-
action = \'\'
236-
function(sources, trigger_char, callback, params, git_info)
237-
return sources.gitlab:get_mentions(callback, git_info, trigger_char)
238-
end
239-
\'\';
240-
}
241-
{
242-
debug_name = "gitlab_mrs";
243-
trigger_character = "!";
244-
action = \'\'
245-
function(sources, trigger_char, callback, params, git_info)
246-
return sources.gitlab:get_merge_requests(callback, git_info, trigger_char)
247-
end
248-
\'\';
249-
}
250-
{
251-
debug_name = "github_issues_and_pr";
252-
trigger_character = "#";
253-
action = \'\'
254-
function(sources, trigger_char, callback, params, git_info)
255-
return sources.github:get_issues_and_prs(callback, git_info, trigger_char)
256-
end
257-
\'\';
258-
}
259-
{
260-
debug_name = "github_mentions";
261-
trigger_character = "@";
262-
action = \'\'
263-
function(sources, trigger_char, callback, params, git_info)
264-
return sources.github:get_mentions(callback, git_info, trigger_char)
265-
end
266-
\'\';
267-
}
268-
]
269-
''
179+
[
180+
{
181+
debug_name = "git_commits";
182+
trigger_character = ":";
183+
action = ''
184+
function(sources, trigger_char, callback, params, git_info)
185+
return sources.git:get_commits(callback, params, trigger_char)
186+
end
187+
'';
188+
}
189+
{
190+
debug_name = "gitlab_issues";
191+
trigger_character = "#";
192+
action = ''
193+
function(sources, trigger_char, callback, params, git_info)
194+
return sources.gitlab:get_issues(callback, git_info, trigger_char)
195+
end
196+
'';
197+
}
198+
{
199+
debug_name = "gitlab_mentions";
200+
trigger_character = "@";
201+
action = ''
202+
function(sources, trigger_char, callback, params, git_info)
203+
return sources.gitlab:get_mentions(callback, git_info, trigger_char)
204+
end
205+
'';
206+
}
207+
{
208+
debug_name = "gitlab_mrs";
209+
trigger_character = "!";
210+
action = ''
211+
function(sources, trigger_char, callback, params, git_info)
212+
return sources.gitlab:get_merge_requests(callback, git_info, trigger_char)
213+
end
214+
'';
215+
}
216+
{
217+
debug_name = "github_issues_and_pr";
218+
trigger_character = "#";
219+
action = ''
220+
function(sources, trigger_char, callback, params, git_info)
221+
return sources.github:get_issues_and_prs(callback, git_info, trigger_char)
222+
end
223+
'';
224+
}
225+
{
226+
debug_name = "github_mentions";
227+
trigger_character = "@";
228+
action = ''
229+
function(sources, trigger_char, callback, params, git_info)
230+
return sources.github:get_mentions(callback, git_info, trigger_char)
231+
end
232+
'';
233+
}
234+
]
270235
''
271236
If you want specific behaviour for a trigger or new behaviour for a trigger, you need to
272237
add an entry in the `trigger_actions` list of the config.
@@ -284,7 +249,7 @@ in
284249
filter = "all";
285250
limit = 250;
286251
state = "all";
287-
format.label.__raw = ''
252+
format = ''
288253
function(_, issue)
289254
local icon = ({
290255
open = '',
@@ -293,19 +258,14 @@ in
293258
return string.format('%s #%d: %s', icon, issue.number, issue.title)
294259
end
295260
'';
296-
sort_by.__raw = ''
261+
sort_by = ''
297262
function(issue)
298263
local kind_rank = issue.pull_request and 1 or 0
299264
local state_rank = issue.state == 'open' and 0 or 1
300265
local age = os.difftime(os.time(), require('cmp_git.utils').parse_github_date(issue.updatedAt))
301266
return string.format('%d%d%010d', kind_rank, state_rank, age)
302267
end
303268
'';
304-
filter_fn.__raw = ''
305-
function(trigger_char, issue)
306-
return string.format('%s %s %s', trigger_char, issue.number, issue.title)
307-
end
308-
'';
309269
};
310270
trigger_actions = [
311271
{

0 commit comments

Comments
 (0)