|
73 | 73 | (map [:n] :fk (bindf vim.lsp.buf.format {:async false}) |
74 | 74 | {:desc "Format code [LSP]"}) |
75 | 75 |
|
| 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 | + |
76 | 97 | (local on_attach |
77 | 98 | (fn [client buf] |
78 | 99 | (when client.server_capabilities.documentSymbolProvider |
79 | 100 | (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}))) |
80 | 104 | (lspsignature.on_attach {:bind true |
81 | 105 | :handler_opts {:border :rounded} |
82 | 106 | :hint_enable false} |
|
169 | 193 | :jdtls {:filetypes [:java]} |
170 | 194 | :rust_analyzer {:filetypes [:rust]} |
171 | 195 | :clangd {:autostart true |
| 196 | + :cmd (clangd_cmd) |
172 | 197 | :capabilities {:offsetEncoding :utf-8} |
173 | 198 | :filetypes [:c :cpp :cuda]}}) |
174 | 199 |
|
|
185 | 210 | default_lsp_capabilities |
186 | 211 | (or (. opts :capabilities) {}))) |
187 | 212 | (vim.lsp.config server opts) |
188 | | - (let [filetypes (or (. opts :filetypes) |
| 213 | + (let [filetypes (or (. opts :filetypes) |
189 | 214 | (. (. vim.lsp.config server) :filetypes) |
190 | 215 | [])] |
191 | 216 | (each [_ ft (ipairs filetypes)] |
192 | 217 | (when (not (. ft_to_servers ft)) |
193 | 218 | (tset ft_to_servers ft [])) |
194 | 219 | (table.insert (. ft_to_servers ft) server)))))) |
195 | 220 |
|
| 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 | + |
196 | 235 | (vim.api.nvim_create_autocmd :FileType |
197 | 236 | {:group (vim.api.nvim_create_augroup :lsp-enable |
198 | 237 | {:clear true}) |
|
0 commit comments