Subject: bug#61913: java-ts-mode query error for string highlight, due to recent commit in tree-sitter-java.

From: Vincenzo Pupillo <[email-masked]>
Date: Thu, 02 Mar 2023 17:18:32 +0100

Yes, indeed "text_block" are not recognized by earlier versions of tree-sitter-java. 
I have prepared a new patch that checks if "text_block" are recognized and adjusts the query accordingly.

Also java-mode seems not to recognize "text_block".
You can check the result in the attached images.

Thank you.

Vincenzo

In data gioved� 2 marzo 2023 14:01:56 CET, Eli Zaretskii ha scritto:
> > From: Vincenzo Pupillo <[email-masked]>
> > Date: Thu, 02 Mar 2023 13:21:05 +0100
> > 
> > a recent commit in tree-sitter-java (https://github.com/tree-sitter/tree-sitter-java/commit/2b3b776b953a34ccffb647dd89732db79690d4c5) 
> > removed "text_block" from grammar.js. This causes a bug in java-ts-mode when treesit-fon-lock-level is > 1
> > 
> > Error during redeployment: (jit-lock-function 8295) reported (treesit-query-error "Node type error at" 42 "(string_literal) @font-lock-string-face (text_block) @font-lock-string-face" "Debugging the query with `treesit-query-validate'")
> > 
> > 
> > The attached patch fixes the problem. 
> 
> Wouldn't removing text_block from our code cause problems if someone
> uses tree-sitter-java from before the removal?
> 
> Is there a way to write code which handles text_block if it exists?
> 
diff --git a/lisp/progmodes/java-ts-mode.el b/lisp/progmodes/java-ts-mode.el
index d31d2d71c3..19b5fab20c 100644
--- a/lisp/progmodes/java-ts-mode.el
+++ b/lisp/progmodes/java-ts-mode.el
@@ -145,6 +145,16 @@ java-ts-mode--operators
     "|=" "~" ">>" ">>>" "<<" "::" "?" "&=")
   "Java operators for tree-sitter font-locking.")
 
+(defun java-ts-mode--string-highlight-helper ()
+"Returns, for strings, a query based on what is supported by
+the available version of Tree-sitter for java."  
+  (condition-case nil
+      (progn (treesit-query-capture 'java '((text_block) @font-lock-string-face))
+	     `((string_literal) @font-lock-string-face
+	       (text_block) @font-lock-string-face))
+    (error
+     `((string_literal) @font-lock-string-face))))
+
 (defvar java-ts-mode--font-lock-settings
   (treesit-font-lock-rules
    :language 'java
@@ -182,8 +192,7 @@ java-ts-mode--font-lock-settings
    :language 'java
    :override t
    :feature 'string
-   `((string_literal) @font-lock-string-face
-     (text_block) @font-lock-string-face)
+   (java-ts-mode--string-highlight-helper)
    :language 'java
    :override t
    :feature 'literal