emacs-diffs
[Top][All Lists]
Advanced

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

emacs-29 2f69353e4a7 1/2: Fix incompatibility with tree-sitter-javascrip


From: Eli Zaretskii
Subject: emacs-29 2f69353e4a7 1/2: Fix incompatibility with tree-sitter-javascript >= 0.20.2
Date: Sat, 3 Feb 2024 04:20:42 -0500 (EST)

branch: emacs-29
commit 2f69353e4a756cf53459c14c5618bd262331b568
Author: Vincenzo Pupillo <v.pupillo@gmail.com>
Commit: Eli Zaretskii <eliz@gnu.org>

    Fix incompatibility with tree-sitter-javascript >= 0.20.2
    
    Starting from version 0.20.2 the grammar's primary expression
    "function" has been renamed to "function_expression".  A new
    function checks if the new primary expression is available,
    and if so, it returns the correct rules.
    * lisp/progmodes/js.el
    (js--treesit-font-lock-compatibility-definition-feature): New
    function.
    (js--treesit-font-lock-settings): Use it.  (Bug#68879)
---
 lisp/progmodes/js.el | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index e4ccfd73cc7..12c4d0aedb8 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -3427,6 +3427,26 @@ This function is intended for use in 
`after-change-functions'."
 
 ;;; Tree sitter integration
 
+(defun js--treesit-font-lock-compatibility-definition-feature ()
+  "Font lock helper, to handle different releases of tree-sitter-javascript.
+Check if a node type is available, then return the right font lock rules
+for \"definition\" feature."
+  (condition-case nil
+      (progn (treesit-query-capture 'javascript '((function_expression) @cap))
+             ;; starting from 0.20.2
+             '((function_expression
+                name: (identifier) @font-lock-function-name-face)
+               (variable_declarator
+                name: (identifier) @font-lock-function-name-face
+                value: [(function_expression) (arrow_function)])))
+    (error
+     ;; older version
+     '((function
+        name: (identifier) @font-lock-function-name-face)
+       (variable_declarator
+        name: (identifier) @font-lock-function-name-face
+        value: [(function) (arrow_function)])))))
+
 (defun js-jsx--treesit-indent-compatibility-bb1f97b ()
   "Indent rules helper, to handle different releases of tree-sitter-javascript.
 Check if a node type is available, then return the right indent rules."
@@ -3538,8 +3558,7 @@ Check if a node type is available, then return the right 
indent rules."
 
    :language 'javascript
    :feature 'definition
-   '((function
-      name: (identifier) @font-lock-function-name-face)
+   `(,@(js--treesit-font-lock-compatibility-definition-feature)
 
      (class_declaration
       name: (identifier) @font-lock-type-face)
@@ -3558,10 +3577,6 @@ Check if a node type is available, then return the right 
indent rules."
      (variable_declarator
       name: (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) @font-lock-variable-name-face)
              (object_pattern



reply via email to

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