|
62 | 62 | ---@param silent? boolean if true then don't sent a notification |
63 | 63 | function M.buffer_semantic_tokens(bufnr, silent) |
64 | 64 | bufnr = bufnr or 0 |
65 | | - vim.b[bufnr].semantic_tokens = not vim.b[bufnr].semantic_tokens |
66 | | - local toggled = false |
67 | | - for _, client in ipairs(vim.lsp.get_clients { bufnr = bufnr }) do |
68 | | - if client:supports_method("textDocument/semanticTokens/full", bufnr) then |
69 | | - vim.lsp.semantic_tokens[vim.b[bufnr].semantic_tokens and "start" or "stop"](bufnr, client.id) |
70 | | - vim.lsp.semantic_tokens.force_refresh(bufnr) |
71 | | - toggled = true |
| 65 | + if vim.lsp.semantic_tokens.enable then |
| 66 | + vim.lsp.semantic_tokens.enable(not vim.lsp.semantic_tokens.is_enabled { bufnr = bufnr }, { bufnr = bufnr }) |
| 67 | + vim.lsp.semantic_tokens.force_refresh(bufnr) |
| 68 | + ui_notify( |
| 69 | + silent, |
| 70 | + ("Buffer lsp semantic highlighting %s"):format(bool2str(vim.lsp.semantic_tokens.is_enabled { bufnr = bufnr })) |
| 71 | + ) |
| 72 | + else -- TODO: remove when dropping support for Neovim v0.11 |
| 73 | + vim.b[bufnr].semantic_tokens = not vim.b[bufnr].semantic_tokens |
| 74 | + local toggled = false |
| 75 | + for _, client in ipairs(vim.lsp.get_clients { bufnr = bufnr }) do |
| 76 | + if client:supports_method("textDocument/semanticTokens/full", bufnr) then |
| 77 | + vim.lsp.semantic_tokens[vim.b[bufnr].semantic_tokens and "start" or "stop"](bufnr, client.id) |
| 78 | + toggled = true |
| 79 | + end |
72 | 80 | end |
| 81 | + if toggled then vim.lsp.semantic_tokens.force_refresh(bufnr) end |
| 82 | + ui_notify(silent, ("Buffer lsp semantic highlighting %s"):format(bool2str(vim.b[bufnr].semantic_tokens))) |
73 | 83 | end |
74 | | - ui_notify( |
75 | | - not toggled or silent, |
76 | | - ("Buffer lsp semantic highlighting %s"):format(bool2str(vim.b[bufnr].semantic_tokens)) |
77 | | - ) |
| 84 | +end |
| 85 | + |
| 86 | +--- Toggle global semantic token highlighting for all language servers that support it |
| 87 | +---@param silent? boolean if true then don't sent a notification |
| 88 | +function M.semantic_tokens(silent) |
| 89 | + if not vim.lsp.semantic_tokens.enable then |
| 90 | + ui_notify(silent, "Only available in Neovim v0.12+", vim.log.levels.WARN) |
| 91 | + return |
| 92 | + end |
| 93 | + vim.lsp.semantic_tokens.enable(not vim.lsp.semantic_tokens.is_enabled()) |
| 94 | + vim.lsp.semantic_tokens.force_refresh() |
| 95 | + ui_notify(silent, ("Global lsp semantic highlighting %s"):format(bool2str(vim.lsp.semantic_tokens.is_enabled()))) |
78 | 96 | end |
79 | 97 |
|
80 | 98 | --- Toggle codelens |
|
0 commit comments