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])