Fix c++-ts-mode font-lock for latest c++ grammar (bug#73191)
* lisp/progmodes/c-ts-mode.el: (c-ts-mode--keywords): Add "thread_local" keyword. (c-ts-mode--test-virtual-named-p): New function. (c-ts-mode--font-lock-settings): Use named/anonymous "virtual" depending on the grammar.
This commit is contained in:
parent
ffc00eac53
commit
21efdd5ef3
1 changed files with 13 additions and 3 deletions
|
@ -574,7 +574,7 @@ MODE is either `c' or `cpp'."
|
|||
"or_eq" "override" "private" "protected"
|
||||
"public" "requires" "template" "throw"
|
||||
"try" "typename" "using"
|
||||
"xor" "xor_eq"))
|
||||
"xor" "xor_eq" "thread_local"))
|
||||
(append '("auto") c-keywords))))
|
||||
|
||||
(defvar c-ts-mode--type-keywords
|
||||
|
@ -592,6 +592,11 @@ MODE is either `c' or `cpp'."
|
|||
"LIVE_BUFFER" "FRAME"))
|
||||
"A regexp matching all the variants of the FOR_EACH_* macro.")
|
||||
|
||||
(defun c-ts-mode--test-virtual-named-p ()
|
||||
"Return t if the virtual keyword is a namded node, nil otherwise."
|
||||
(ignore-errors
|
||||
(progn (treesit-query-compile 'cpp "(virtual)" t) t)))
|
||||
|
||||
(defun c-ts-mode--font-lock-settings (mode)
|
||||
"Tree-sitter font-lock settings.
|
||||
MODE is either `c' or `cpp'."
|
||||
|
@ -636,8 +641,13 @@ MODE is either `c' or `cpp'."
|
|||
`([,@(c-ts-mode--keywords mode)] @font-lock-keyword-face
|
||||
,@(when (eq mode 'cpp)
|
||||
'((auto) @font-lock-keyword-face
|
||||
(this) @font-lock-keyword-face
|
||||
(virtual) @font-lock-keyword-face)))
|
||||
(this) @font-lock-keyword-face))
|
||||
,@(when (and (eq mode 'cpp)
|
||||
(c-ts-mode--test-virtual-named-p))
|
||||
'((virtual) @font-lock-keyword-face))
|
||||
,@(when (and (eq mode 'cpp)
|
||||
(not (c-ts-mode--test-virtual-named-p)))
|
||||
'("virtual" @font-lock-keyword-face)))
|
||||
|
||||
:language mode
|
||||
:feature 'operator
|
||||
|
|
Loading…
Add table
Reference in a new issue