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:
Vincenzo Pupillo 2023-07-29 21:10:57 +02:00 committed by Theodor Thornhill
parent c2d95dd00e
commit 7da1cee56b

View file

@ -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