emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

feature/tree-sitter 285f8c7cfe 2/4: Add in new font lock features in js/


From: Yuan Fu
Subject: feature/tree-sitter 285f8c7cfe 2/4: Add in new font lock features in js/ts-mode
Date: Fri, 28 Oct 2022 19:47:06 -0400 (EDT)

branch: feature/tree-sitter
commit 285f8c7cfecee0c91568cd850139c48ec3f21a28
Author: Theodor Thornhill <theo@thornhill.no>
Commit: Yuan Fu <casouri@gmail.com>

    Add in new font lock features in js/ts-mode
    
    We want to support font lock features on the syntactic level, not only
    the decoration-level level.
    
    New supported features are:
      - comment
      - constant
      - keyword
      - string
      - declaration
      - identifier
      - expression
      - property
      - pattern
      - jsx
    
    * lisp/progmodes/js.el (js--treesit-font-lock-settings, js-mode): Add
    in the new features.
    
    * lisp/progmodes/ts-mode.el (ts-mode--indent-rules): Remove faulty '.'
    anchor.
    
    (ts-mode--font-lock-settings, ts-mode): Add in the new features.
---
 lisp/progmodes/js.el      |  95 +++++++++++++++++++---------------
 lisp/progmodes/ts-mode.el | 129 +++++++++++++++++++++++++---------------------
 2 files changed, 124 insertions(+), 100 deletions(-)

diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index dae6de1052..d786fa7415 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -3463,28 +3463,32 @@ This function is intended for use in 
`after-change-functions'."
   (treesit-font-lock-rules
    :language 'javascript
    :override t
-   :feature 'minimal
-   `(
-     ((identifier) @font-lock-constant-face
+   :feature 'comment
+   `((comment) @font-lock-comment-face)
+   :language 'javascript
+   :override t
+   :feature 'constant
+   `(((identifier) @font-lock-constant-face
       (:match "^[A-Z_][A-Z_\\d]*$" @font-lock-constant-face))
 
-     [(this) (super)] @font-lock-keyword-face
-
      [(true) (false) (null)] @font-lock-constant-face
-     (regex pattern: (regex_pattern)) @font-lock-string-face
-     (number) @font-lock-constant-face
-
+     (number) @font-lock-constant-face)
+   :language 'javascript
+   :override t
+   :feature 'keyword
+   `([,@js--treesit-keywords] @font-lock-keyword-face
+     [(this) (super)] @font-lock-keyword-face)
+   :language 'javascript
+   :override t
+   :feature 'string
+   `((regex pattern: (regex_pattern)) @font-lock-string-face
      (string) @font-lock-string-face
-     (comment) @font-lock-comment-face
-     [,@js--treesit-keywords] @font-lock-keyword-face
-
      (template_string) @js--fontify-template-string
-     (template_substitution ["${" "}"] @font-lock-constant-face))
+     (template_substitution ["${" "}"] @font-lock-builtin-face))
    :language 'javascript
    :override t
-   :feature 'moderate
-   `(
-     (function
+   :feature 'declaration
+   `((function
       name: (identifier) @font-lock-function-name-face)
 
      (class_declaration
@@ -3499,18 +3503,6 @@ This function is intended for use in 
`after-change-functions'."
      (variable_declarator
       name: (identifier) @font-lock-variable-name-face)
 
-     (new_expression
-      constructor: (identifier) @font-lock-type-face)
-
-     (for_in_statement
-      left: (identifier) @font-lock-variable-name-face)
-
-     (arrow_function
-      parameter: (identifier) @font-lock-variable-name-face))
-   :language 'javascript
-   :override t
-   :feature 'full
-   `(
      (variable_declarator
       name: (identifier) @font-lock-function-name-face
       value: [(function) (arrow_function)])
@@ -3520,9 +3512,22 @@ This function is intended for use in 
`after-change-functions'."
              (identifier)
              (identifier)
              @font-lock-function-name-face)
-      value: (array (number) (function)))
+      value: (array (number) (function))))
+   :language 'javascript
+   :override t
+   :feature 'identifier
+   `((new_expression
+      constructor: (identifier) @font-lock-type-face)
 
-     (assignment_expression
+     (for_in_statement
+      left: (identifier) @font-lock-variable-name-face)
+
+     (arrow_function
+      parameter: (identifier) @font-lock-variable-name-face))
+   :language 'javascript
+   :override t
+   :feature 'expression
+   `((assignment_expression
       left: [(identifier) @font-lock-function-name-face
              (member_expression property: (property_identifier)
                                 @font-lock-function-name-face)]
@@ -3537,9 +3542,11 @@ This function is intended for use in 
`after-change-functions'."
      (assignment_expression
       left: [(identifier) @font-lock-variable-name-face
              (member_expression
-              property: (property_identifier) @font-lock-variable-name-face)])
-
-     (pair key: (property_identifier) @font-lock-variable-name-face)
+              property: (property_identifier) @font-lock-variable-name-face)]))
+   :language 'javascript
+   :override t
+   :feature 'property
+   `((pair key: (property_identifier) @font-lock-variable-name-face)
 
      (pair value: (identifier) @font-lock-variable-name-face)
 
@@ -3549,12 +3556,16 @@ This function is intended for use in 
`after-change-functions'."
 
      ((shorthand_property_identifier) @font-lock-variable-name-face)
 
-     (pair_pattern key: (property_identifier) @font-lock-variable-name-face)
-
-     ((shorthand_property_identifier_pattern) @font-lock-variable-name-face)
-
-     (array_pattern (identifier) @font-lock-variable-name-face)
-
+     ((shorthand_property_identifier_pattern) @font-lock-variable-name-face))
+   :language 'javascript
+   :override t
+   :feature 'pattern
+   `((pair_pattern key: (property_identifier) @font-lock-variable-name-face)
+     (array_pattern (identifier) @font-lock-variable-name-face))
+   :language 'javascript
+   :override t
+   :feature 'jsx
+   `(
      (jsx_opening_element
       [(nested_identifier (identifier)) (identifier)]
       @font-lock-function-name-face)
@@ -3780,7 +3791,10 @@ definition*\"."
                         "lexical_declaration")))
     ;; Fontification.
     (setq-local treesit-font-lock-settings js--treesit-font-lock-settings)
-    (setq-local treesit-font-lock-feature-list '((minimal) (moderate) (full)))
+    (setq-local treesit-font-lock-feature-list
+                '((comment declaration)
+                  (string keyword identifier expression constant)
+                  (property pattern jsx )))
     ;; Imenu
     (setq-local imenu-create-index-function
                 #'js--treesit-imenu)
@@ -3802,8 +3816,7 @@ definition*\"."
     (add-hook 'syntax-propertize-extend-region-functions
               #'syntax-propertize-multiline 'append 'local)
     (add-hook 'syntax-propertize-extend-region-functions
-              #'js--syntax-propertize-extend-region 'append 'local)
-    )))
+              #'js--syntax-propertize-extend-region 'append 'local))))
 
 (defvar js-json--treesit-font-lock-settings
   (treesit-font-lock-rules
diff --git a/lisp/progmodes/ts-mode.el b/lisp/progmodes/ts-mode.el
index 15b8cbf711..1f0a7fd5c4 100644
--- a/lisp/progmodes/ts-mode.el
+++ b/lisp/progmodes/ts-mode.el
@@ -60,8 +60,6 @@
      ((node-is ")") parent-bol 0)
      ((node-is "]") parent-bol 0)
      ((node-is ">") parent-bol 0)
-     ((node-is ".")
-      parent-bol ,ts-mode-indent-offset)
      ((parent-is "ternary_expression")
       parent-bol ,ts-mode-indent-offset)
      ((parent-is "member_expression")
@@ -123,39 +121,32 @@
   (treesit-font-lock-rules
    :language 'tsx
    :override t
-   :feature 'minimal
-   `(
-     ((identifier) @font-lock-constant-face
+   :feature 'comment
+   `((comment) @font-lock-comment-face)
+   :language 'tsx
+   :override t
+   :feature 'constant
+   `(((identifier) @font-lock-constant-face
       (:match "^[A-Z_][A-Z_\\d]*$" @font-lock-constant-face))
 
-     [,@ts-mode--keywords] @font-lock-keyword-face
-     [(this) (super)] @font-lock-keyword-face
-
      [(true) (false) (null)] @font-lock-constant-face
-     (regex pattern: (regex_pattern)) @font-lock-string-face
-     (number) @font-lock-constant-face
-
+     (number) @font-lock-constant-face)
+   :language 'tsx
+   :override t
+   :feature 'keyword
+   `([,@ts-mode--keywords] @font-lock-keyword-face
+     [(this) (super)] @font-lock-keyword-face)
+   :language 'tsx
+   :override t
+   :feature 'string
+   `((regex pattern: (regex_pattern)) @font-lock-string-face
      (string) @font-lock-string-face
-
      (template_string) @js--fontify-template-string
-     (template_substitution ["${" "}"] @font-lock-builtin-face)
-
-     (comment) @font-lock-comment-face)
+     (template_substitution ["${" "}"] @font-lock-builtin-face))
    :language 'tsx
    :override t
-   :feature 'moderate
-   '(
-     (nested_type_identifier
-      module: (identifier) @font-lock-type-face)
-
-     (type_identifier) @font-lock-type-face
-
-     (predefined_type) @font-lock-type-face
-
-     (new_expression
-      constructor: (identifier) @font-lock-type-face)
-
-     (function
+   :feature 'declaration
+   `((function
       name: (identifier) @font-lock-function-name-face)
 
      (function_declaration
@@ -169,6 +160,31 @@
 
      (enum_declaration (identifier) @font-lock-type-face)
 
+     (arrow_function
+      parameter: (identifier) @font-lock-variable-name-face)
+
+     (variable_declarator
+      name: (identifier) @font-lock-function-name-face
+      value: [(function) (arrow_function)])
+
+     (variable_declarator
+      name: (array_pattern
+             (identifier)
+             (identifier) @font-lock-function-name-face)
+      value: (array (number) (function))))
+   :language 'tsx
+   :override t
+   :feature 'identifier
+   `((nested_type_identifier
+      module: (identifier) @font-lock-type-face)
+
+     (type_identifier) @font-lock-type-face
+
+     (predefined_type) @font-lock-type-face
+
+     (new_expression
+      constructor: (identifier) @font-lock-type-face)
+
      (enum_body (property_identifier) @font-lock-type-face)
 
      (enum_assignment name: (property_identifier) @font-lock-type-face)
@@ -182,22 +198,14 @@
       left: (identifier) @font-lock-variable-name-face)
 
      (arrow_function
-      parameter: (identifier) @font-lock-variable-name-face))
+      parameters:
+      [(_ (identifier) @font-lock-variable-name-face)
+       (_ (_ (identifier) @font-lock-variable-name-face))
+       (_ (_ (_ (identifier) @font-lock-variable-name-face)))]))
    :language 'tsx
    :override t
-   :feature 'full
-   '(
-     (variable_declarator
-      name: (identifier) @font-lock-function-name-face
-      value: [(function) (arrow_function)])
-
-     (variable_declarator
-      name: (array_pattern
-             (identifier)
-             (identifier) @font-lock-function-name-face)
-      value: (array (number) (function)))
-
-     (assignment_expression
+   :feature 'expression
+   '((assignment_expression
       left: [(identifier) @font-lock-function-name-face
              (member_expression
               property: (property_identifier) @font-lock-function-name-face)]
@@ -207,15 +215,11 @@
       function:
       [(identifier) @font-lock-function-name-face
        (member_expression
-        property: (property_identifier) @font-lock-function-name-face)])
-
-     (arrow_function
-      parameters:
-      [(_ (identifier) @font-lock-variable-name-face)
-       (_ (_ (identifier) @font-lock-variable-name-face))
-       (_ (_ (_ (identifier) @font-lock-variable-name-face)))])
-
-     (pair key: (property_identifier) @font-lock-variable-name-face)
+        property: (property_identifier) @font-lock-function-name-face)]))
+   :language 'tsx
+   :override t
+   :feature 'property
+   `((pair key: (property_identifier) @font-lock-variable-name-face)
 
      (pair value: (identifier) @font-lock-variable-name-face)
 
@@ -228,15 +232,19 @@
 
      ((shorthand_property_identifier) @font-lock-variable-name-face)
 
-     (pair_pattern
-      key: (property_identifier) @font-lock-variable-name-face)
-
      ((shorthand_property_identifier_pattern)
-      @font-lock-variable-name-face)
-
-     (array_pattern (identifier) @font-lock-variable-name-face)
+      @font-lock-variable-name-face))
+   :language 'tsx
+   :override t
+   :feature 'pattern
+   `((pair_pattern
+      key: (property_identifier) @font-lock-variable-name-face)
 
-     (jsx_opening_element
+     (array_pattern (identifier) @font-lock-variable-name-face))
+   :language 'tsx
+   :override t
+   :feature 'jsx
+   `((jsx_opening_element
       [(nested_identifier (identifier)) (identifier)]
       @font-lock-function-name-face)
 
@@ -283,7 +291,10 @@
                         "lexical_declaration")))
     ;; Font-lock.
     (setq-local treesit-font-lock-settings ts-mode--font-lock-settings)
-    (setq-local treesit-font-lock-feature-list '((minimal) (moderate) (full)))
+    (setq-local treesit-font-lock-feature-list
+                '((comment declaration)
+                  (string keyword identifier expression constant)
+                  (property pattern jsx)))
     ;; Imenu.
     (setq-local imenu-create-index-function #'js--treesit-imenu)
     ;; Which-func (use imenu).



reply via email to

[Prev in Thread] Current Thread [Next in Thread]