Skip to content

Commit 1e5a95f

Browse files
committed
feat: add subcommands for Minuet lsp.
1 parent ab17e72 commit 1e5a95f

File tree

3 files changed

+90
-2
lines changed

3 files changed

+90
-2
lines changed

README.md

+10
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
- [`Minuet change_preset`](#minuet-change_preset)
3030
- [`Minuet blink`, `Minuet cmp`](#minuet-blink-minuet-cmp)
3131
- [`Minuet virtualtext`](#minuet-virtualtext)
32+
- [`Minuet lsp`](#minuet-lsp)
3233
- [API](#api)
3334
- [Virtual Text](#virtual-text)
3435
- [FAQ](#faq)
@@ -1003,6 +1004,15 @@ Enable or disable the automatic display of `virtual-text` completion in the
10031004
Example usage: `Minuet virtualtext toggle`, `Minuet virtualtext enable`,
10041005
`Minuet virtualtext disable`.
10051006

1007+
## `Minuet lsp`
1008+
1009+
The Minuet LSP command provides commands for managing the in-process LSP server:
1010+
1011+
- `:Minuet lsp attach`: Attach the Minuet LSP server to the **current buffer**.
1012+
- `:Minuet lsp detach`: Detach the Minuet LSP server from the **current buffer**.
1013+
- `:Minuet lsp enable_auto_trigger`: Enable automatic completion triggering using `vim.lsp.completion.enable` for **current buffer**.
1014+
- `:Minuet lsp disable_auto_trigger`: Disable automatic completion triggering for **current buffer**.
1015+
10061016
# API
10071017

10081018
## Virtual Text

lua/minuet/init.lua

+12-1
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,8 @@ vim.api.nvim_create_user_command('Minuet', function(args)
176176
toggle = require('minuet.virtualtext').action.toggle_auto_trigger,
177177
}
178178

179+
actions.lsp = require('minuet.lsp').actions
180+
179181
actions.change_provider = setmetatable({}, {
180182
__index = function(_, key)
181183
return function()
@@ -213,6 +215,15 @@ end, {
213215
}
214216
end
215217

218+
if cmdline:find 'lsp' then
219+
return {
220+
'attach',
221+
'detach',
222+
'enable_auto_trigger',
223+
'disable_auto_trigger',
224+
}
225+
end
226+
216227
if cmdline:find 'change_provider' then
217228
if not M.config then
218229
return
@@ -232,7 +243,7 @@ end, {
232243
return presets
233244
end
234245

235-
return { 'cmp', 'virtualtext', 'blink', 'change_provider', 'change_model', 'change_preset' }
246+
return { 'cmp', 'virtualtext', 'blink', 'lsp', 'change_provider', 'change_model', 'change_preset' }
236247
end,
237248
})
238249

lua/minuet/lsp.lua

+68-1
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,10 @@ function M.start_server(args)
222222

223223
utils.notify('Minuet LSP attached to current buffer', 'verbose', vim.log.levels.INFO)
224224

225-
if
225+
if vim.b[bufnr].minuet_lsp_enable_auto_trigger then
226+
vim.lsp.completion.enable(true, client.id, bufnr, { autotrigger = true })
227+
utils.notify('Minuet LSP is enabled for auto triggering', 'verbose', vim.log.levels.INFO)
228+
elseif
226229
(vim.tbl_contains(auto_trigger_ft, ft) or vim.tbl_contains(auto_trigger_ft, '*'))
227230
and not vim.tbl_contains(disable_trigger_ft, ft)
228231
then
@@ -288,4 +291,68 @@ function M.setup()
288291
end
289292
end
290293

294+
M.actions = {}
295+
296+
M.actions.attach = function()
297+
local bufnr = vim.api.nvim_get_current_buf()
298+
local lsps = vim.lsp.get_clients { name = 'minuet', bufnr = bufnr }
299+
300+
if #lsps and #lsps > 0 then
301+
utils.notify('Minuet LSP already attached to current buffer', 'verbose', vim.log.levels.INFO)
302+
return
303+
end
304+
305+
M.start_server { buf = bufnr }
306+
end
307+
308+
M.actions.detach = function()
309+
local bufnr = vim.api.nvim_get_current_buf()
310+
local lsps = vim.lsp.get_clients { name = 'minuet', bufnr = bufnr }
311+
312+
if #lsps == 0 then
313+
utils.notify('Minuet LSP not attached to current buffer', 'verbose', vim.log.levels.INFO)
314+
return
315+
end
316+
317+
for _, client in ipairs(lsps) do
318+
vim.lsp.buf_detach_client(bufnr, client.id)
319+
end
320+
321+
utils.notify('Minuet LSP detached from current buffer', 'verbose', vim.log.levels.INFO)
322+
end
323+
324+
M.actions.enable_auto_trigger = function()
325+
local bufnr = vim.api.nvim_get_current_buf()
326+
local lsps = vim.lsp.get_clients { name = 'minuet', bufnr = bufnr }
327+
328+
if #lsps == 0 then
329+
vim.b[bufnr].minuet_lsp_enable_auto_trigger = true
330+
M.actions.attach()
331+
return
332+
end
333+
334+
for _, client in ipairs(lsps) do
335+
vim.lsp.completion.enable(false, client.id, bufnr)
336+
vim.lsp.completion.enable(true, client.id, bufnr, { autotrigger = true })
337+
end
338+
339+
utils.notify('Minuet LSP is enabled for auto triggering', 'verbose', vim.log.levels.INFO)
340+
end
341+
342+
M.actions.disable_auto_trigger = function()
343+
local bufnr = vim.api.nvim_get_current_buf()
344+
vim.b[bufnr].minuet_lsp_enable_auto_trigger = nil
345+
local lsps = vim.lsp.get_clients { name = 'minuet', bufnr = bufnr }
346+
347+
if #lsps == 0 then
348+
return
349+
end
350+
351+
for _, client in ipairs(lsps) do
352+
vim.lsp.completion.enable(false, client.id, bufnr)
353+
vim.lsp.completion.enable(true, client.id, bufnr, { autotrigger = false })
354+
utils.notify('Minuet LSP is disabled for auto triggering', 'verbose', vim.log.levels.INFO)
355+
end
356+
end
357+
291358
return M

0 commit comments

Comments
 (0)