-
Notifications
You must be signed in to change notification settings - Fork 199
Semantic Tokens [简体中文版]
Andy Stewart edited this page May 2, 2024
·
1 revision
Emacs 中符号的高亮基于 treesit ,但是 treesit 无法高亮一些语义符号,比如 C 或者 C++ 中的宏定义:
所以 lsp-bridge
提供 lsp-bridge-semantic-tokens-mode
,指定 Emacs 高亮一些特殊语义符号,下图是启用后的效果:
在 lsp 协议中,语义符号由类型和修饰组成,比如全局变量,它的类型是变量,修饰是全局作用域,某些语义符号没有修饰,比如注释类型。
lsp-bridge-semantic-tokens-mode 提供三个变量控制高亮哪些语义符号:
-
lsp-bridge-semantic-tokens-type-faces
: 符号类型对应的 face -
lsp-bridge-semantic-tokens-type-modifier-faces
: 符号修饰对应的 face -
lsp-bridge-semantic-tokens-ignore-modifier-limit-types
: 符号定义了类型的 face 和修饰的 face 才能够高亮,将类型加到这个变量中能够忽略符号修饰的检查
比如高亮全局变量需要在 lsp-bridge-mode
启动前做如下的设置
(defface lsp-bridge-semantic-tokens-variable-face
'((t (:inherit font-lock-variable-name-face)))
"Face used for variable name."
:group 'lsp-bridge-semantic-tokens)
(defface lsp-bridge-semantic-tokens-global-scope-face
'((t :weight extra-bold))
"Face used for globalScope token."
:group 'lsp-bridge-semantic-tokens)
(setq-default lsp-bridge-semantic-tokens-type-faces
[("variable" . lsp-bridge-semantic-tokens-variable-face)])
(setq-default lsp-bridge-semantic-tokens-type-modifier-faces
[("globalScope" . lsp-bridge-semantic-tokens-global-scope-face)])
(setq-default lsp-bridge-semantic-tokens-ignore-modifier-limit-types [])
如果想要高亮所有变量,不管它是全局变量还是本地变量,可以将 variable 类型加入到 lsp-bridge-semantic-tokens-ignore-modifier-limit-types
中,忽略掉修饰的检查
(setq-default lsp-bridge-semantic-tokens-ignore-modifier-limit-types ["variable"])