Improve treesit settings for css-ts-mode (bug#73404)

* lisp/textmodes/css-mode.el (css--treesit-settings): Add
"@supports" and '(at_keyword)' to 'keyword', 'keyframe_block' to
'selector', 'keyframes_name' to 'query'.
(css--treesit-defun-name): Support "keyframe_block",
"keyframes_statement" and "supports_statement" as well.
(css--treesit-simple-imenu-settings): Add "keyframes_statement",
"keyframe_block", "supports_statement".
(css--treesit-defun-type-regexp): Add "keyframe_block".
(css-ts-mode): Add 'treesit-thing-settings'.
This commit is contained in:
Juri Linkov 2025-03-02 20:07:21 +02:00
parent 1b77e94bcc
commit a5e82110b0

View file

@ -1372,7 +1372,9 @@ for determining whether point is within a selector."
"@import"
"@charset"
"@namespace"
"@keyframes"] @font-lock-builtin-face
"@keyframes"
"@supports"] @font-lock-builtin-face
(at_keyword) @font-lock-builtin-face
["and"
"or"
"not"
@ -1393,7 +1395,8 @@ for determining whether point is within a selector."
(child_selector) @css-selector
(id_selector) @css-selector
(tag_name) @css-selector
(class_name) @css-selector)
(class_name) @css-selector
(keyframe_block (integer_value) @css-selector) )
:feature 'property
:language 'css
@ -1413,7 +1416,8 @@ for determining whether point is within a selector."
:feature 'query
:language 'css
'((keyword_query) @font-lock-property-use-face
(feature_name) @font-lock-property-use-face)
(feature_name) @font-lock-property-use-face
(keyframes_name) @font-lock-property-use-face)
:feature 'bracket
:language 'css
@ -1428,9 +1432,10 @@ for determining whether point is within a selector."
"Return the defun name of NODE.
Return nil if there is no name or if NODE is not a defun node."
(pcase (treesit-node-type node)
("rule_set" (treesit-node-text
(treesit-node-child node 0) t))
("media_statement"
((or "rule_set" "keyframe_block")
(treesit-node-text
(treesit-node-child node 0) t))
((or "media_statement" "keyframes_statement" "supports_statement")
(let ((block (treesit-node-child node -1)))
(string-trim
(buffer-substring-no-properties
@ -1782,12 +1787,17 @@ rgb()/rgba()."
"Settings for `treesit-font-lock-feature-list'.")
(defvar css--treesit-simple-imenu-settings
`(( nil ,(rx bos (or "rule_set" "media_statement") eos)
`(( nil ,(rx bos (or "rule_set"
"media_statement"
"keyframes_statement"
"keyframe_block"
"supports_statement")
eos)
nil nil))
"Settings for `treesit-simple-imenu'.")
(defvar css--treesit-defun-type-regexp
"rule_set"
(rx bos (or "rule_set" "keyframe_block") eos)
"Settings for `treesit-defun-type-regexp'.")
(define-derived-mode css-base-mode prog-mode "CSS"
@ -1849,6 +1859,33 @@ can also be used to fill comments.
(setq-local treesit-font-lock-settings css--treesit-settings)
(setq-local treesit-font-lock-feature-list css--treesit-font-lock-feature-list)
(setq-local treesit-simple-imenu-settings css--treesit-simple-imenu-settings)
(setq-local treesit-thing-settings
`((css
(list
,(rx bos (or "keyframe_block_list"
"block"
"pseudo_class_arguments"
"pseudo_class_with_selector_arguments"
"pseudo_class_nth_child_arguments"
"pseudo_element_arguments"
"feature_query"
"parenthesized_query"
"selector_query"
"parenthesized_value"
"grid_value"
"arguments")
eos))
(sentence
,(rx bos (or "import_statement"
"charset_statement"
"namespace_statement"
"postcss_statement"
"at_rule"
"declaration"
)
eos))
(text
,(rx bos (or "comment") eos)))))
(treesit-major-mode-setup)