]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve treesit settings for css-ts-mode (bug#73404)
authorJuri Linkov <juri@linkov.net>
Sun, 2 Mar 2025 18:07:21 +0000 (20:07 +0200)
committerEshel Yaron <me@eshelyaron.com>
Tue, 4 Mar 2025 21:02:49 +0000 (22:02 +0100)
* 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'.

(cherry picked from commit a5e82110b087f05d50a9d628e70009ce33c33bc2)

lisp/textmodes/css-mode.el

index 625f5b77de7dfdd46eefb7a93347021b1aac6e63..9a93a7c591f88f2996aa4f5785fdf10fa444e1e4 100644 (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)