Update CMake support due to upstream changes (bug#64922)
A recent change in tree-sitter-cmake grammar support for CMake (commit fe9b5e0), now put arguments are wrapped in a new argument_list node. To support the old and new version of the grammar, a new function was added on which string syntax highlighting now depends. * lisp/progmodes/cmake-ts-mode.el (cmake-ts-mode--font-lock-compatibility-fe9b5e0): Indent helper function to handle different tree-sitter-cmake version. * lisp/progmodes/cmake-ts-mode.el (cmake-ts-mode--font-lock-settings): Use the new function to handle the new argument_list node.
This commit is contained in:
parent
c2d95dd00e
commit
7da1cee56b
1 changed files with 38 additions and 14 deletions
|
@ -31,6 +31,7 @@
|
||||||
(eval-when-compile (require 'rx))
|
(eval-when-compile (require 'rx))
|
||||||
|
|
||||||
(declare-function treesit-parser-create "treesit.c")
|
(declare-function treesit-parser-create "treesit.c")
|
||||||
|
(declare-function treesit-query-capture "treesit.c")
|
||||||
(declare-function treesit-induce-sparse-tree "treesit.c")
|
(declare-function treesit-induce-sparse-tree "treesit.c")
|
||||||
(declare-function treesit-node-child "treesit.c")
|
(declare-function treesit-node-child "treesit.c")
|
||||||
(declare-function treesit-node-start "treesit.c")
|
(declare-function treesit-node-start "treesit.c")
|
||||||
|
@ -87,6 +88,42 @@
|
||||||
"VERSION_GREATER_EQUAL" "VERSION_LESS" "VERSION_LESS_EQUAL")
|
"VERSION_GREATER_EQUAL" "VERSION_LESS" "VERSION_LESS_EQUAL")
|
||||||
"CMake if conditions for tree-sitter font-locking.")
|
"CMake if conditions for tree-sitter font-locking.")
|
||||||
|
|
||||||
|
(defun cmake-ts-mode--font-lock-compatibility-fe9b5e0 ()
|
||||||
|
"Indent rules helper, to handle different releases of tree-sitter-cmake.
|
||||||
|
Check if a node type is available, then return the right indent rules."
|
||||||
|
;; handle commit fe9b5e0
|
||||||
|
(condition-case nil
|
||||||
|
(progn (treesit-query-capture 'cmake '((argument_list) @capture))
|
||||||
|
`(((foreach_command
|
||||||
|
((argument_list) @font-lock-constant-face
|
||||||
|
(:match ,(rx-to-string
|
||||||
|
`(seq bol
|
||||||
|
(or ,@cmake-ts-mode--foreach-options)
|
||||||
|
eol))
|
||||||
|
@font-lock-constant-face))))
|
||||||
|
((if_command
|
||||||
|
((argument_list) @font-lock-constant-face
|
||||||
|
(:match ,(rx-to-string
|
||||||
|
`(seq bol
|
||||||
|
(or ,@cmake-ts-mode--if-conditions)
|
||||||
|
eol))
|
||||||
|
@font-lock-constant-face))))))
|
||||||
|
(error
|
||||||
|
`(((foreach_command
|
||||||
|
((argument) @font-lock-constant-face
|
||||||
|
(:match ,(rx-to-string
|
||||||
|
`(seq bol
|
||||||
|
(or ,@cmake-ts-mode--foreach-options)
|
||||||
|
eol))
|
||||||
|
@font-lock-constant-face))))
|
||||||
|
((if_command
|
||||||
|
((argument) @font-lock-constant-face
|
||||||
|
(:match ,(rx-to-string
|
||||||
|
`(seq bol
|
||||||
|
(or ,@cmake-ts-mode--if-conditions)
|
||||||
|
eol))
|
||||||
|
@font-lock-constant-face))))))))
|
||||||
|
|
||||||
(defvar cmake-ts-mode--font-lock-settings
|
(defvar cmake-ts-mode--font-lock-settings
|
||||||
(treesit-font-lock-rules
|
(treesit-font-lock-rules
|
||||||
:language 'cmake
|
:language 'cmake
|
||||||
|
@ -95,20 +132,7 @@
|
||||||
|
|
||||||
:language 'cmake
|
:language 'cmake
|
||||||
:feature 'builtin
|
:feature 'builtin
|
||||||
`(((foreach_command
|
(cmake-ts-mode--font-lock-compatibility-fe9b5e0)
|
||||||
((argument) @font-lock-constant-face
|
|
||||||
(:match ,(rx-to-string
|
|
||||||
`(seq bol
|
|
||||||
(or ,@cmake-ts-mode--foreach-options)
|
|
||||||
eol))
|
|
||||||
@font-lock-constant-face))))
|
|
||||||
((if_command
|
|
||||||
((argument) @font-lock-constant-face
|
|
||||||
(:match ,(rx-to-string
|
|
||||||
`(seq bol
|
|
||||||
(or ,@cmake-ts-mode--if-conditions)
|
|
||||||
eol))
|
|
||||||
@font-lock-constant-face)))))
|
|
||||||
|
|
||||||
:language 'cmake
|
:language 'cmake
|
||||||
:feature 'comment
|
:feature 'comment
|
||||||
|
|
Loading…
Add table
Reference in a new issue