Skip to content

Commit c8e6bca

Browse files
committed
toggle clangd inlay-hints
1 parent 02fdec1 commit c8e6bca

1 file changed

Lines changed: 40 additions & 1 deletion

File tree

fnl/mods/lsp/lsp.fnl

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,34 @@
7373
(map [:n] :fk (bindf vim.lsp.buf.format {:async false})
7474
{:desc "Format code [LSP]"})
7575

76+
(var clangd_hints_enabled (or vim.g.clangd_hints_enabled false))
77+
(set vim.g.clangd_hints_enabled clangd_hints_enabled)
78+
79+
(local clangd_filetypes [:c :cpp :cuda])
80+
81+
(local clangd_cmd
82+
(fn []
83+
(if clangd_hints_enabled
84+
[:clangd "--function-arg-placeholders=true" "--inlay-hints=true"]
85+
[:clangd "--function-arg-placeholders=false" "--inlay-hints=false"])))
86+
87+
(local restart_clangd
88+
(fn []
89+
(each [_ client (ipairs (vim.lsp.get_clients {:name :clangd}))]
90+
;; graceful shutdown avoids non-zero "killed" exit warnings
91+
(client.stop false))
92+
(when (vim.tbl_contains clangd_filetypes vim.bo.filetype)
93+
(vim.defer_fn (fn []
94+
(vim.lsp.enable :clangd))
95+
120))))
96+
7697
(local on_attach
7798
(fn [client buf]
7899
(when client.server_capabilities.documentSymbolProvider
79100
(navic.attach client buf))
101+
(when (= client.name :clangd)
102+
(when (and vim.lsp.inlay_hint vim.lsp.inlay_hint.enable)
103+
(vim.lsp.inlay_hint.enable clangd_hints_enabled {:bufnr buf})))
80104
(lspsignature.on_attach {:bind true
81105
:handler_opts {:border :rounded}
82106
:hint_enable false}
@@ -169,6 +193,7 @@
169193
:jdtls {:filetypes [:java]}
170194
:rust_analyzer {:filetypes [:rust]}
171195
:clangd {:autostart true
196+
:cmd (clangd_cmd)
172197
:capabilities {:offsetEncoding :utf-8}
173198
:filetypes [:c :cpp :cuda]}})
174199

@@ -185,14 +210,28 @@
185210
default_lsp_capabilities
186211
(or (. opts :capabilities) {})))
187212
(vim.lsp.config server opts)
188-
(let [filetypes (or (. opts :filetypes)
213+
(let [filetypes (or (. opts :filetypes)
189214
(. (. vim.lsp.config server) :filetypes)
190215
[])]
191216
(each [_ ft (ipairs filetypes)]
192217
(when (not (. ft_to_servers ft))
193218
(tset ft_to_servers ft []))
194219
(table.insert (. ft_to_servers ft) server))))))
195220

221+
(vim.api.nvim_create_user_command :ClangdHintsToggle
222+
(fn []
223+
(set clangd_hints_enabled
224+
(not clangd_hints_enabled))
225+
(set vim.g.clangd_hints_enabled
226+
clangd_hints_enabled)
227+
(tset (. lsp_opt :clangd) :cmd
228+
(clangd_cmd))
229+
(restart_clangd)
230+
(vim.notify (if clangd_hints_enabled
231+
"clangd hints/placeholders: ON"
232+
"clangd hints/placeholders: OFF")))
233+
{})
234+
196235
(vim.api.nvim_create_autocmd :FileType
197236
{:group (vim.api.nvim_create_augroup :lsp-enable
198237
{:clear true})

0 commit comments

Comments
 (0)