Skip to content

Commit 1d4ab80

Browse files
committed
refactor: no state across macro completion
1 parent 50842c4 commit 1d4ab80

File tree

5 files changed

+33
-24
lines changed

5 files changed

+33
-24
lines changed

lua/gp/init.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,15 +197,15 @@ M.setup = function(opts)
197197

198198
local ft_completion = M.macro.build_completion({
199199
require("gp.macros.target_filetype"),
200-
}, {})
200+
})
201201

202202
M.logger.debug("ft_completion done")
203203

204204
local do_completion = M.macro.build_completion({
205205
require("gp.macros.target"),
206206
require("gp.macros.target_filetype"),
207207
require("gp.macros.target_filename"),
208-
}, {})
208+
})
209209

210210
M.logger.debug("do_completion done")
211211

lua/gp/macro.lua

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ local logger = require("gp.logger")
2525
---@field description string
2626
---@field default? string
2727
---@field max_occurrences? number
28-
---@field triggered fun(params: gp.Macro_cmd_params, state: table): boolean
29-
---@field completion fun(params: gp.Macro_cmd_params, state: table): string[]
28+
---@field triggered fun(params: gp.Macro_cmd_params): boolean
29+
---@field completion fun(params: gp.Macro_cmd_params): string[]
3030
---@field parser fun(params: gp.Macro_parser_result): gp.Macro_parser_result
3131

3232
---@param value string # string to hash
@@ -81,21 +81,20 @@ M.build_parser = function(macros)
8181
end
8282

8383
---@param macros gp.Macro[]
84-
---@param state table
85-
---@return fun(arg_lead: string, cmd_line: string, cursor_pos: number): string[]
86-
M.build_completion = function(macros, state)
84+
---@param raw boolean | nil # which function to return (completion or raw_completion)
85+
---@return fun(arg_lead: string, cmd_line: string, cursor_pos: number): string[], boolean | nil
86+
M.build_completion = function(macros, raw)
8787
---@type table<string, gp.Macro>
8888
local map = {}
8989
for _, macro in pairs(macros) do
9090
map[macro.name] = macro
91-
state[macro.name .. "_default"] = macro.default
9291
end
9392

9493
---@param arg_lead string
9594
---@param cmd_line string
9695
---@param cursor_pos number
97-
---@return string[]
98-
local function completion(arg_lead, cmd_line, cursor_pos)
96+
---@return string[], boolean # returns suggestions and whether some macro was triggered
97+
local function raw_completion(arg_lead, cmd_line, cursor_pos)
9998
local cropped_line = cmd_line:sub(1, cursor_pos)
10099

101100
---@type gp.Macro_cmd_params
@@ -106,11 +105,13 @@ M.build_completion = function(macros, state)
106105
cropped_line = cropped_line,
107106
}
108107

108+
cropped_line = " " .. cropped_line
109+
109110
local suggestions = {}
111+
local triggered = false
110112

111113
logger.debug("macro completion input: " .. vim.inspect({
112114
params = params,
113-
state = state,
114115
}))
115116

116117
---@type table<string, number>
@@ -122,8 +123,9 @@ M.build_completion = function(macros, state)
122123
end
123124
logger.debug("macro completion candidates: " .. vim.inspect(candidates))
124125

125-
if cand and map[cand] and map[cand].triggered(params, state) then
126-
suggestions = map[cand].completion(params, state)
126+
if cand and map[cand] and map[cand].triggered(params) then
127+
suggestions = map[cand].completion(params)
128+
triggered = true
127129
elseif cropped_line:match("%s$") or cropped_line:match("%s@%S*$") then
128130
for _, c in pairs(macros) do
129131
if not candidates[c.name] or candidates[c.name] < c.max_occurrences then
@@ -133,7 +135,16 @@ M.build_completion = function(macros, state)
133135
end
134136

135137
logger.debug("macro completion suggestions: " .. vim.inspect(suggestions))
136-
return vim.deepcopy(suggestions)
138+
return vim.deepcopy(suggestions), triggered
139+
end
140+
141+
local completion = function(arg_lead, cmd_line, cursor_pos)
142+
local suggestions, _ = raw_completion(arg_lead, cmd_line, cursor_pos)
143+
return suggestions
144+
end
145+
146+
if raw then
147+
return raw_completion
137148
end
138149

139150
return completion

lua/gp/macros/target.lua

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,11 @@ M = {
2020
default = "rewrite",
2121
max_occurrences = 1,
2222

23-
triggered = function(params, state)
24-
local cropped_line = params.cropped_line
25-
return cropped_line:match("@target%s+%S*$")
23+
triggered = function(params)
24+
return params.cropped_line:match("@target%s+%S*$")
2625
end,
2726

28-
completion = function(params, state)
27+
completion = function(params)
2928
return values
3029
end,
3130

lua/gp/macros/target_filename.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ M = {
99
default = nil,
1010
max_occurrences = 1,
1111

12-
triggered = function(params, state)
12+
triggered = function(params)
1313
local cropped_line = params.cropped_line
1414
return cropped_line:match("@target_filename`[^`]*$")
1515
end,
1616

17-
completion = function(params, state)
17+
completion = function(params)
1818
-- TODO state.root_dir ?
1919
local files = vim.fn.glob("**", true, true)
2020
-- local files = vim.fn.getcompletion("", "file")

lua/gp/macros/target_filetype.lua

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,11 @@ M = {
1111
default = "markdown",
1212
max_occurrences = 1,
1313

14-
triggered = function(params, state)
15-
local cropped_line = params.cropped_line
16-
return cropped_line:match("@target_filetype%s+%S*$")
14+
triggered = function(params)
15+
return params.cropped_line:match("@target_filetype%s+%S*$")
1716
end,
1817

19-
completion = function(params, state)
18+
completion = function(params)
2019
return values
2120
end,
2221

0 commit comments

Comments
 (0)