aboutsummaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
authorChristian Clason <c.clason@uni-graz.at>2022-12-12 20:43:14 +0100
committerGitHub <noreply@github.com>2022-12-12 20:43:14 +0100
commit54d6a32fbdcbd5b26b72f4dca8906e60f5186d2c (patch)
tree263df641e5480ed7e0c36c5ce1858355d02183b2 /runtime
parent3869a2e0cf25323a8e5235840678b147ca908517 (diff)
downloadrneovim-54d6a32fbdcbd5b26b72f4dca8906e60f5186d2c.tar.gz
rneovim-54d6a32fbdcbd5b26b72f4dca8906e60f5186d2c.tar.bz2
rneovim-54d6a32fbdcbd5b26b72f4dca8906e60f5186d2c.zip
feat(lsp): highlight semantic token modifiers (#21390)
Apply semantic token modifiers as separate extmarks with corresponding highlight groups (e.g., `@readonly`). This is a low-effort PR to enable the most common use cases (applying, e.g., italics or backgrounds on top of type highlights; language-specific fallbacks like `@global.lua` are also available). This can be replaced by more complicated selector-style themes later on.
Diffstat (limited to 'runtime')
-rw-r--r--runtime/doc/lsp.txt2
-rw-r--r--runtime/lua/vim/lsp/semantic_tokens.lua14
2 files changed, 13 insertions, 3 deletions
diff --git a/runtime/doc/lsp.txt b/runtime/doc/lsp.txt
index 89a6e89511..75d5c067b1 100644
--- a/runtime/doc/lsp.txt
+++ b/runtime/doc/lsp.txt
@@ -1340,7 +1340,7 @@ start({bufnr}, {client_id}, {opts}) *vim.lsp.semantic_tokens.start()*
|vim.lsp.buf_attach_client()|. To opt-out of semantic highlighting with a
server that supports it, you can delete the semanticTokensProvider table
from the {server_capabilities} of your client in your |LspAttach| callback
- or your configuration's `on_attach` callback. >lua
+ or your configuration's `on_attach` callback: >lua
client.server_capabilities.semanticTokensProvider = nil
<
diff --git a/runtime/lua/vim/lsp/semantic_tokens.lua b/runtime/lua/vim/lsp/semantic_tokens.lua
index f06d136801..b7ffedab2b 100644
--- a/runtime/lua/vim/lsp/semantic_tokens.lua
+++ b/runtime/lua/vim/lsp/semantic_tokens.lua
@@ -409,7 +409,17 @@ function STHighlighter:on_win(topline, botline)
strict = false,
})
- --TODO(jdrouhard): do something with the modifiers
+ -- TODO(bfredl) use single extmark when hl_group supports table
+ if #token.modifiers > 0 then
+ for _, modifier in pairs(token.modifiers) do
+ api.nvim_buf_set_extmark(self.bufnr, state.namespace, token.line, token.start_col, {
+ hl_group = '@' .. modifier,
+ end_col = token.end_col,
+ priority = vim.highlight.priorities.semantic_tokens,
+ strict = false,
+ })
+ end
+ end
token.extmark_added = true
end
@@ -494,7 +504,7 @@ local M = {}
--- opt-out of semantic highlighting with a server that supports it, you can
--- delete the semanticTokensProvider table from the {server_capabilities} of
--- your client in your |LspAttach| callback or your configuration's
---- `on_attach` callback.
+--- `on_attach` callback:
--- <pre>lua
--- client.server_capabilities.semanticTokensProvider = nil
--- </pre>