branch: externals/matlab-mode
commit e5718b96c2fb818011b01639c7e9663eeeea0946
Author: John Ciolfi <[email protected]>
Commit: John Ciolfi <[email protected]>

    t-utils: improve syntax tree baseline, add t-utils-ts-syntax-tree-mode
---
 tests/t-utils.el                                   | 77 +++++++++++++++--
 ...binary_operator_continued_issue107_expected.txt | 97 +++++++++++-----------
 .../parser_cell_expected.txt                       | 37 +++++----
 .../parser_comments.m                              |  6 ++
 .../parser_comments_expected.txt                   | 14 ++++
 .../parser_simple_expected.txt                     | 11 +--
 .../parser_simple_with_error_expected.txt          | 11 +--
 .../parser_variable_ids_expected.txt               | 37 +++++----
 8 files changed, 191 insertions(+), 99 deletions(-)

diff --git a/tests/t-utils.el b/tests/t-utils.el
index 38ce0d0e8d..edab15ecfa 100644
--- a/tests/t-utils.el
+++ b/tests/t-utils.el
@@ -2792,15 +2792,19 @@ Similar `treesit--explorer-draw-node' but designed for 
test baselines."
                 (setq node-text (replace-regexp-in-string (car pair) (cdr 
pair) node-text)))
               (when (> (length node-text) 50)
                 (setq node-text (concat (substring node-text 0 50) "...")))
-              (insert (format "[%d,%d)@{%s}@"
+              (insert (format "[%d,%d]@{%s}@"
                               (treesit-node-start node)
                               (treesit-node-end node)
                               node-text)))))
+      ;; else unnamed node
       (pcase type
         ("\n" (insert "\\n"))
         ("\t" (insert "\\t"))
         (" "  (insert "SPC"))
-        (_    (insert type))))
+        (_    (insert type)))
+      (insert (format "[%d,%d]"
+                      (treesit-node-start node)
+                      (treesit-node-end node))))
 
     ;; Draw children.
     (dolist (child children)
@@ -2826,13 +2830,78 @@ Similar `treesit--explorer-draw-node' but designed for 
test baselines."
   (let ((root (or (treesit-buffer-root-node)
                   (error "No tree-sitter root node"))))
     (with-temp-buffer
-      (insert "# tree-sitter parse tree annotated with 
[NODE_START,NODE_END)@{NODE_TEXT}@\n")
+      (insert "# -*- t-utils-ts-syntax-tree -*-\n")
+      (insert "# tree-sitter parse tree annotated with 
[NODE_START,NODE_END]@{NODE_TEXT}@\n")
       (insert "# where node is of length NODE-END - NODE_START\n")
       (t-utils--syntax-tree-draw-node root)
       (goto-char (point-max))
       (insert "\n")
       (buffer-string))))
 
+(defvar t-utils--ts-syntax-tree-mode-syntax-table
+  (let ((table (make-syntax-table)))
+    (modify-syntax-entry ?\# "<" table)
+    (modify-syntax-entry ?\n ">" table)
+    (modify-syntax-entry ?'  "_" table)
+    (modify-syntax-entry ?\" "_" table)
+    table)
+  "Syntax table for `t-utils-ts-syntax-tree-mode'.")
+
+(defface t-utils-ts-syntax-tree-code-face
+  '((t
+     :inherit default
+     :box t
+     :bold t))
+  "The face used for code.")
+
+(defvar t-utils--ts-syntax-tree-font-lock-keywords
+  (list
+   ;; (NODE_TYPE[NODE_START,NODE_END)@{NODE_TEXT}@
+   (list (concat "\\((\\)"                      ;; 1 (
+                 "\\([a-zA-Z][^[ \t\n\r]+\\)"   ;; 2 NODE_TYPE
+                 "\\(\\["                       ;; 3 [
+                 "[0-9]+"                       ;;   NODE_START
+                 ","                            ;;   ,
+                 "[0-9]+"                       ;;   NODE_END
+                 "\\]\\)"                         ;;   ]
+                 "\\(@{\\)"                     ;; 4 @{
+                 "\\(.+?\\)"                    ;; 5 NODE_TEXT
+                 "\\(}@\\)")                    ;; 6 }@
+         '(1 'shadow)
+         '(2 'font-lock-function-name-face)
+         '(3 'font-lock-constant-face)
+         '(4 'shadow)
+         '(5 't-utils-ts-syntax-tree-code-face prepend)
+         '(6 'shadow prepend))
+   ;; FIELD:
+   (list "\\([a-zA-Z]+:\\)"
+         '(1 'font-lock-property-name-face))
+   ;; CODE[START,END)
+   (list (concat "\\([^ \t\n\r]+\\)" ;; 1 CODE
+                 "\\(\\["            ;; 2 [
+                 "[0-9]+"            ;;   START
+                 ","                 ;;   ,
+                 "[0-9]+"            ;;   END
+                 "\\]\\)")           ;;   ]
+         '(1 't-utils-ts-syntax-tree-code-face)
+         '(2 ''font-lock-constant-face))
+   ;; (NODE
+   (list (concat "\\((\\)"              ;; 1 (
+                 "\\([^ \t\n\r]+\\)")   ;; 2 NODE
+         '(1 'shadow)
+         '(2 'font-lock-keyword-face))
+   ;; ) closing end of node
+   (list "\\()\\)"
+         '(1 'shadow))
+   )
+  "Keywords to fontify in `sbmgr-mode'.")
+
+(define-derived-mode t-utils-ts-syntax-tree-mode fundamental-mode 
"ts-syntax-tree" ()
+  "Major mode for treesit syntax trees created by `t-utils--get-syntax-tree'."
+  (set-syntax-table t-utils--ts-syntax-tree-mode-syntax-table)
+  (setq-local font-lock-defaults 
'((t-utils--ts-syntax-tree-font-lock-keywords) nil nil nil))
+  (read-only-mode 1))
+
 (defun t-utils--test-parser-error-node-checker (lang-file _got _got-file 
_expected _expected-file)
   "Check ERROR node status for `t-utils-test-parser'.
 
@@ -2947,8 +3016,6 @@ To debug a specific -parser test file
                               lang-file got got-file expected expected-file
                               #'t-utils--test-parser-error-node-checker)))
 
-              (kill-buffer)
-
               (when error-msg
                 (push error-msg error-msgs)))))))
 
diff --git 
a/tests/test-matlab-ts-mode-parser-files/parser_binary_operator_continued_issue107_expected.txt
 
b/tests/test-matlab-ts-mode-parser-files/parser_binary_operator_continued_issue107_expected.txt
index 542477887b..2990228786 100644
--- 
a/tests/test-matlab-ts-mode-parser-files/parser_binary_operator_continued_issue107_expected.txt
+++ 
b/tests/test-matlab-ts-mode-parser-files/parser_binary_operator_continued_issue107_expected.txt
@@ -1,64 +1,65 @@
-# tree-sitter parse tree annotated with [NODE_START,NODE_END)@{NODE_TEXT}@
+# -*- t-utils-ts-syntax-tree -*-
+# tree-sitter parse tree annotated with [NODE_START,NODE_END]@{NODE_TEXT}@
 # where node is of length NODE-END - NODE_START
-(source_file (comment[1,20)@{% -*- matlab-ts -*-}@) (comment[22,89)@{% See 
https://github.com/acristoffers/tree-sitter-...}@)
- (assignment left: (identifier[91,93)@{v1}@) =
+(source_file (comment[1,20]@{% -*- matlab-ts -*-}@) (comment[22,89]@{% See 
https://github.com/acristoffers/tree-sitter-...}@)
+ (assignment left: (identifier[91,93]@{v1}@) =[94,95]
   right: 
-   (cell {
+   (cell {[96,97]
     (row
-     (binary_operator left: (number[97,98)@{1}@) + right: 
(number[101,102)@{2}@)))
-    }))
- ;
- (assignment left: (identifier[106,108)@{v2}@) =
+     (binary_operator left: (number[97,98]@{1}@) +[99,100] right: 
(number[101,102]@{2}@)))
+    }[102,103]))
+ ;[103,104]
+ (assignment left: (identifier[106,108]@{v2}@) =[109,110]
   right: 
-   (cell { (line_continuation[113,117)@{...\n}@)
+   (cell {[111,112] (line_continuation[113,117]@{...\n}@)
     (row
-     (binary_operator left: (number[124,125)@{1}@) 
(line_continuation[126,137)@{...\n       }@) + 
(line_continuation[139,143)@{...\n}@) right: (number[150,151)@{2}@)))
-    }))
- ;
- (function_call name: (identifier[161,167)@{assert}@) (
+     (binary_operator left: (number[124,125]@{1}@) 
(line_continuation[126,137]@{...\n       }@) +[137,138] 
(line_continuation[139,143]@{...\n}@) right: (number[150,151]@{2}@)))
+    }[157,158]))
+ ;[158,159]
+ (function_call name: (identifier[161,167]@{assert}@) ([167,168]
   (arguments
    argument: 
-    (function_call name: (identifier[168,175)@{isequal}@) (
-     (arguments argument: (identifier[176,178)@{v1}@) , 
(identifier[180,182)@{v2}@))
-     )))
-  ))
- \n
- (assignment left: (identifier[186,188)@{v3}@) =
+    (function_call name: (identifier[168,175]@{isequal}@) ([175,176]
+     (arguments argument: (identifier[176,178]@{v1}@) ,[178,179] 
(identifier[180,182]@{v2}@))
+     )[182,183]))
+  )[183,184])
+ \n[184,186]
+ (assignment left: (identifier[186,188]@{v3}@) =[189,190]
   right: 
-   (matrix [
+   (matrix [[191,192]
     (row
-     (binary_operator left: (number[192,193)@{1}@) + right: 
(number[196,197)@{2}@)))
-    ]))
- ;
- (assignment left: (identifier[201,203)@{v4}@) =
+     (binary_operator left: (number[192,193]@{1}@) +[194,195] right: 
(number[196,197]@{2}@)))
+    ][197,198]))
+ ;[198,199]
+ (assignment left: (identifier[201,203]@{v4}@) =[204,205]
   right: 
-   (matrix [ (line_continuation[208,212)@{...\n}@)
+   (matrix [[206,207] (line_continuation[208,212]@{...\n}@)
     (row
-     (binary_operator left: (number[219,220)@{1}@) 
(line_continuation[221,232)@{...\n       }@) + 
(line_continuation[234,238)@{...\n}@) right: (number[245,246)@{2}@)))
-    ]))
- ;
- (function_call name: (identifier[256,262)@{assert}@) (
+     (binary_operator left: (number[219,220]@{1}@) 
(line_continuation[221,232]@{...\n       }@) +[232,233] 
(line_continuation[234,238]@{...\n}@) right: (number[245,246]@{2}@)))
+    ][252,253]))
+ ;[253,254]
+ (function_call name: (identifier[256,262]@{assert}@) ([262,263]
   (arguments
    argument: 
-    (function_call name: (identifier[263,270)@{isequal}@) (
-     (arguments argument: (identifier[271,273)@{v3}@) , 
(identifier[275,277)@{v4}@))
-     )))
-  ))
- \n
- (assignment left: (identifier[281,283)@{v5}@) =
-  right: (binary_operator left: (number[286,287)@{1}@) + right: 
(number[290,291)@{2}@)))
- ;
- (assignment left: (identifier[294,296)@{v6}@) =
+    (function_call name: (identifier[263,270]@{isequal}@) ([270,271]
+     (arguments argument: (identifier[271,273]@{v3}@) ,[273,274] 
(identifier[275,277]@{v4}@))
+     )[277,278]))
+  )[278,279])
+ \n[279,281]
+ (assignment left: (identifier[281,283]@{v5}@) =[284,285]
+  right: (binary_operator left: (number[286,287]@{1}@) +[288,289] right: 
(number[290,291]@{2}@)))
+ ;[291,292]
+ (assignment left: (identifier[294,296]@{v6}@) =[297,298]
   right: 
-   (parenthesis (
-    (binary_operator left: (number[300,301)@{1}@) 
(line_continuation[302,306)@{...\n}@) + (line_continuation[314,318)@{...\n}@) 
right: (number[324,325)@{2}@))
-    )))
- ;
- (function_call name: (identifier[329,335)@{assert}@) (
+   (parenthesis ([299,300]
+    (binary_operator left: (number[300,301]@{1}@) 
(line_continuation[302,306]@{...\n}@) +[312,313] 
(line_continuation[314,318]@{...\n}@) right: (number[324,325]@{2}@))
+    )[325,326]))
+ ;[326,327]
+ (function_call name: (identifier[329,335]@{assert}@) ([335,336]
   (arguments
    argument: 
-    (function_call name: (identifier[336,343)@{isequal}@) (
-     (arguments argument: (identifier[344,346)@{v5}@) , 
(identifier[348,350)@{v6}@))
-     )))
-  ))
- \n)
+    (function_call name: (identifier[336,343]@{isequal}@) ([343,344]
+     (arguments argument: (identifier[344,346]@{v5}@) ,[346,347] 
(identifier[348,350]@{v6}@))
+     )[350,351]))
+  )[351,352])
+ \n[352,353])
diff --git a/tests/test-matlab-ts-mode-parser-files/parser_cell_expected.txt 
b/tests/test-matlab-ts-mode-parser-files/parser_cell_expected.txt
index 31e67dac75..6bd68e79e1 100644
--- a/tests/test-matlab-ts-mode-parser-files/parser_cell_expected.txt
+++ b/tests/test-matlab-ts-mode-parser-files/parser_cell_expected.txt
@@ -1,23 +1,24 @@
-# tree-sitter parse tree annotated with [NODE_START,NODE_END)@{NODE_TEXT}@
+# -*- t-utils-ts-syntax-tree -*-
+# tree-sitter parse tree annotated with [NODE_START,NODE_END]@{NODE_TEXT}@
 # where node is of length NODE-END - NODE_START
-(source_file (comment[1,20)@{% -*- matlab-ts -*-}@)
- (assignment left: (identifier[22,23)@{a}@) =
+(source_file (comment[1,20]@{% -*- matlab-ts -*-}@)
+ (assignment left: (identifier[22,23]@{a}@) =[24,25]
   right: 
-   (cell {
+   (cell {[26,27]
     (row
-     (cell {
-      (row (number[28,29)@{1}@) , (number[31,32)@{2}@))
-      }))
-    ;
+     (cell {[27,28]
+      (row (number[28,29]@{1}@) ,[29,30] (number[31,32]@{2}@))
+      }[32,33]))
+    ;[33,34]
     (row
-     (cell {
-      (row (number[41,42)@{3}@) , (number[44,45)@{4}@))
-      }))
-    ; (comment[53,64)@{% comment 1}@)
+     (cell {[40,41]
+      (row (number[41,42]@{3}@) ,[42,43] (number[44,45]@{4}@))
+      }[45,46]))
+    ;[46,47] (comment[53,64]@{% comment 1}@)
     (row
-     (range (number[70,71)@{1}@) : (number[72,74)@{10}@)))
-    (comment[80,91)@{% comment 2}@) }))
- ;
- (assignment left: (identifier[100,101)@{b}@) =
-  right: (string " (string_content[105,117)@{not a \{cell\}}@) "))
- ; (comment[121,132)@{%\{\n  foo\n%\}}@) \n)
+     (range (number[70,71]@{1}@) :[71,72] (number[72,74]@{10}@)))
+    (comment[80,91]@{% comment 2}@) }[96,97]))
+ ;[97,98]
+ (assignment left: (identifier[100,101]@{b}@) =[102,103]
+  right: (string "[104,105] (string_content[105,117]@{not a \{cell\}}@) 
"[117,118]))
+ ;[118,119] (comment[121,132]@{%\{\n  foo\n%\}}@) \n[132,133])
diff --git a/tests/test-matlab-ts-mode-parser-files/parser_comments.m 
b/tests/test-matlab-ts-mode-parser-files/parser_comments.m
new file mode 100644
index 0000000000..fd4e34039d
--- /dev/null
+++ b/tests/test-matlab-ts-mode-parser-files/parser_comments.m
@@ -0,0 +1,6 @@
+% -*- matlab-ts -*-
+
+function out = parser_comments
+    a = 1; %#ok
+    out = 1;
+end
diff --git 
a/tests/test-matlab-ts-mode-parser-files/parser_comments_expected.txt 
b/tests/test-matlab-ts-mode-parser-files/parser_comments_expected.txt
new file mode 100644
index 0000000000..4ca94f4f40
--- /dev/null
+++ b/tests/test-matlab-ts-mode-parser-files/parser_comments_expected.txt
@@ -0,0 +1,14 @@
+# -*- t-utils-ts-syntax-tree -*-
+# tree-sitter parse tree annotated with [NODE_START,NODE_END]@{NODE_TEXT}@
+# where node is of length NODE-END - NODE_START
+(source_file (comment[1,20]@{% -*- matlab-ts -*-}@)
+ (function_definition function[22,30]
+  (function_output (identifier[31,34]@{out}@) =[35,36])
+  name: (identifier[37,52]@{parser_comments}@) \n[52,53]
+  (block
+   (assignment left: (identifier[57,58]@{a}@) =[59,60] right: 
(number[61,62]@{1}@))
+   ;[62,63] (comment[64,68]@{%#ok}@)
+   (assignment left: (identifier[73,76]@{out}@) =[77,78] right: 
(number[79,80]@{1}@))
+   ;[80,81] \n[81,82])
+  end[82,85])
+ \n[85,86])
diff --git a/tests/test-matlab-ts-mode-parser-files/parser_simple_expected.txt 
b/tests/test-matlab-ts-mode-parser-files/parser_simple_expected.txt
index b311380e23..650b9f568f 100644
--- a/tests/test-matlab-ts-mode-parser-files/parser_simple_expected.txt
+++ b/tests/test-matlab-ts-mode-parser-files/parser_simple_expected.txt
@@ -1,6 +1,7 @@
-# tree-sitter parse tree annotated with [NODE_START,NODE_END)@{NODE_TEXT}@
+# -*- t-utils-ts-syntax-tree -*-
+# tree-sitter parse tree annotated with [NODE_START,NODE_END]@{NODE_TEXT}@
 # where node is of length NODE-END - NODE_START
-(source_file (comment[1,20)@{% -*- matlab-ts -*-}@)
- (assignment left: (identifier[22,23)@{a}@) =
-  right: (binary_operator left: (number[26,27)@{1}@) + right: 
(number[30,31)@{2}@)))
- ; \n)
+(source_file (comment[1,20]@{% -*- matlab-ts -*-}@)
+ (assignment left: (identifier[22,23]@{a}@) =[24,25]
+  right: (binary_operator left: (number[26,27]@{1}@) +[28,29] right: 
(number[30,31]@{2}@)))
+ ;[31,32] \n[32,33])
diff --git 
a/tests/test-matlab-ts-mode-parser-files/parser_simple_with_error_expected.txt 
b/tests/test-matlab-ts-mode-parser-files/parser_simple_with_error_expected.txt
index 17cd6c0858..fafae6d54a 100644
--- 
a/tests/test-matlab-ts-mode-parser-files/parser_simple_with_error_expected.txt
+++ 
b/tests/test-matlab-ts-mode-parser-files/parser_simple_with_error_expected.txt
@@ -1,6 +1,7 @@
-# tree-sitter parse tree annotated with [NODE_START,NODE_END)@{NODE_TEXT}@
+# -*- t-utils-ts-syntax-tree -*-
+# tree-sitter parse tree annotated with [NODE_START,NODE_END]@{NODE_TEXT}@
 # where node is of length NODE-END - NODE_START
-(source_file (comment[1,20)@{% -*- matlab-ts -*-}@)
- (ERROR (identifier[22,23)@{a}@) =
-  (binary_operator left: (number[26,27)@{1}@) + right: (number[30,31)@{2}@))
-  +))
+(source_file (comment[1,20]@{% -*- matlab-ts -*-}@)
+ (ERROR (identifier[22,23]@{a}@) =[24,25]
+  (binary_operator left: (number[26,27]@{1}@) +[28,29] right: 
(number[30,31]@{2}@))
+  +[32,33]))
diff --git 
a/tests/test-matlab-ts-mode-parser-files/parser_variable_ids_expected.txt 
b/tests/test-matlab-ts-mode-parser-files/parser_variable_ids_expected.txt
index 3c07a7f5de..0c966b03c0 100644
--- a/tests/test-matlab-ts-mode-parser-files/parser_variable_ids_expected.txt
+++ b/tests/test-matlab-ts-mode-parser-files/parser_variable_ids_expected.txt
@@ -1,23 +1,24 @@
-# tree-sitter parse tree annotated with [NODE_START,NODE_END)@{NODE_TEXT}@
+# -*- t-utils-ts-syntax-tree -*-
+# tree-sitter parse tree annotated with [NODE_START,NODE_END]@{NODE_TEXT}@
 # where node is of length NODE-END - NODE_START
-(source_file (comment[1,20)@{% -*- matlab-ts -*-}@)
- (function_definition function
-  (function_output (identifier[31,35)@{out1}@) =)
-  name: (identifier[38,57)@{parser_variable_ids}@)
-  (function_arguments ( arguments: (identifier[58,61)@{in1}@) ))
-  \n
+(source_file (comment[1,20]@{% -*- matlab-ts -*-}@)
+ (function_definition function[22,30]
+  (function_output (identifier[31,35]@{out1}@) =[36,37])
+  name: (identifier[38,57]@{parser_variable_ids}@)
+  (function_arguments ([57,58] arguments: (identifier[58,61]@{in1}@) )[61,62])
+  \n[63,64]
   (block
-   (assignment left: (identifier[68,72)@{out1}@) =
+   (assignment left: (identifier[68,72]@{out1}@) =[73,74]
     right: 
      (binary_operator
-      left: (binary_operator left: (identifier[75,78)@{in1}@) * right: 
(number[81,82)@{2}@))
-      +
-      right: (field_expression object: (identifier[85,88)@{foo}@) . field: 
(identifier[89,93)@{out1}@))))
-   ;
-   (assignment left: (identifier[99,103)@{out1}@) =
+      left: (binary_operator left: (identifier[75,78]@{in1}@) *[79,80] right: 
(number[81,82]@{2}@))
+      +[83,84]
+      right: (field_expression object: (identifier[85,88]@{foo}@) .[88,89] 
field: (identifier[89,93]@{out1}@))))
+   ;[93,94]
+   (assignment left: (identifier[99,103]@{out1}@) =[104,105]
     right: 
-     (binary_operator left: (identifier[106,110)@{out1}@) +
-      right: (binary_operator left: (number[113,114)@{2}@) * right: 
(identifier[117,121)@{out1}@))))
-   ; \n)
-  end)
- \n)
+     (binary_operator left: (identifier[106,110]@{out1}@) +[111,112]
+      right: (binary_operator left: (number[113,114]@{2}@) *[115,116] right: 
(identifier[117,121]@{out1}@))))
+   ;[121,122] \n[122,123])
+  end[123,126])
+ \n[126,128])

Reply via email to