branch: externals/matlab-mode
commit 8301cc2ef3ee0a129f1b5381ae4624ad519f9db6
Author: John Ciolfi <[email protected]>
Commit: John Ciolfi <[email protected]>
matlab-ts-mode: speedup workaround issue 143, fix matrix align issue
---
matlab-ts-mode--ei.el | 102 +++++++++----------
matlab-ts-mode.el | 108 ++++++++++-----------
.../electric_indent_matrix_with_blank_line.m | 5 +
...ectric_indent_matrix_with_blank_line_expected.m | 5 +
...c_indent_matrix_with_blank_line_expected_msgs.m | 5 +
.../electric_indent_workaround_issue143.m | 6 ++
.../electric_indent_workaround_issue143_expected.m | 6 ++
...tric_indent_workaround_issue143_expected_msgs.m | 6 ++
.../electric_indent_matrix_with_blank_line.m | 5 +
...tric_indent_matrix_with_blank_line_expected.txt | 9 ++
.../electric_indent_two_matrices.m | 14 +++
.../electric_indent_two_matrices_expected.txt | 36 +++++++
.../electric_indent_workaround_issue143.m | 6 ++
...lectric_indent_workaround_issue143_expected.txt | 16 ++-
14 files changed, 224 insertions(+), 105 deletions(-)
diff --git a/matlab-ts-mode--ei.el b/matlab-ts-mode--ei.el
index a31d1e88f0..f6a32d6f9f 100644
--- a/matlab-ts-mode--ei.el
+++ b/matlab-ts-mode--ei.el
@@ -219,6 +219,20 @@
(,(rx bos (or ")" "}") eos) "."
1)
))
+(defun matlab-ts-mode--ei-fast-back-to-indentation ()
+ "Fast back to indentation.
+The `back-to-indentation' function uses the syntax table causes
+slowdowns. In MATLAB mode, the only whitespace characters we are
+concerned with are SPC and TAB. Thus, we can be fast. Returns t if
+there are non-whitespace characters on the line, nil otherwise."
+ (beginning-of-line)
+ (if (re-search-forward "[^ \t]" (line-end-position) t)
+ (progn
+ (backward-char)
+ t)
+ (end-of-line)
+ nil))
+
(cl-defun matlab-ts-mode--ei-move-to-and-get-node ()
"Move to and return node.
Will return nil if no next node before end-of-line.
@@ -710,19 +724,18 @@ See `matlab-ts-mode--ei-get-new-line' for EI-INFO
contents."
(while (< (line-number-at-pos) end-linenum) ;; Adjust column widths
(back-to-indentation)
(let* ((row-node (matlab-ts-mode--ei-get-m-matrix-row-in-line))
- (indent-start-pt (point))
- ;; line content does not have leading indent-level spaces
- (content (buffer-substring indent-start-pt
(line-end-position)))
(ei-line (buffer-substring (line-beginning-position)
(line-end-position)))
+ (indent-offset (string-match-p "[^ \t]+" ei-line)) ;; nil if
at blank line in matrix
n-spaces)
- (when row-node
+ (when (and row-node indent-offset)
(let* ((col-num (length column-widths))
+ (indent-start-pt (point))
+ ;; line content does not have leading indent-level spaces
+ (content (buffer-substring indent-start-pt
(line-end-position)))
(pt-offset (nth 1 ei-info))
(matrix-offset (save-excursion
(goto-char (treesit-node-start
matrix-node))
- (1+ (- (point)
(line-beginning-position)))))
- (indent-offset (or (string-match-p "[^ \t]+" ei-line)
- (error "Assert: no offset"))))
+ (1+ (- (point)
(line-beginning-position))))))
(when (< matrix-offset indent-offset)
(when pt-offset
@@ -875,8 +888,7 @@ mat-info a (list matrix-node n-rows n-cols) if in a
multi-line matrix."
(when parent ;; In an assignment?
(save-excursion
(goto-char (treesit-node-start parent))
- (beginning-of-line)
- (back-to-indentation)
+ (matlab-ts-mode--ei-fast-back-to-indentation)
(let ((first-node (treesit-node-at (point))))
(matlab-ts-mode--ei-is-assign first-node 'multi-line-matrix))))))
@@ -1154,44 +1166,38 @@ start-node is the identifier node for width and
start-offset is 2."
(setq start-offset (- (point) (treesit-node-start node)))))))
(cons start-node start-offset)))
-(defun matlab-ts-mode--ei-workaround-143 ()
- "Workaround https://github.com/acristoffers/tree-sitter-matlab/issues/143."
-
- (let ((line-pt (point))
- (eol-pt (line-end-position)))
- (save-excursion
- (back-to-indentation)
-
- (while (< (point) eol-pt)
- (let ((node (if (looking-at "[ \t]")
- (if (re-search-forward "[^ \t]" (line-end-position) t)
- (progn (backward-char)
- (treesit-node-at (point)))
- (goto-char eol-pt)
- nil)
- (treesit-node-at (point)))))
- (when node
- (if (<= (treesit-node-end node) (point))
- ;; Consider
- ;; a= [1, 2; 3, 44 ];
- ;; ^ ==> node at ';' returns the node for 2
because
- ;; ';' is an ignored node.
- (forward-char)
- (if (string= (or (treesit-node-type node) "") "number") ;;
Something like 1234./2?
- (progn
- (goto-char (treesit-node-end node))
- (backward-char)
- ;; Note, .' (e.g. 1234.') is not parsed correctly and
that's okay because
- ;; electric indent binds the transpose to the item to its
left.
- (if (looking-at "\\.[/\\*\\\\]")
- (progn
- (when (<= (point) line-pt)
- (setq line-pt (1+ line-pt)))
- (insert " ")
- (setq eol-pt (line-end-position)))
- (forward-char)))
- ;; Nodes can span multiple lines, so new point maybe > eol-pt.
- (goto-char (treesit-node-end node))))))))
+(defun matlab-ts-mode--ei-workaround-143 (beg end &optional line-pt)
+ "Workaround https://github.com/acristoffers/tree-sitter-matlab/issues/143.
+Between BEG and END points, insert a space between numbers and dot
+operators. For example,
+
+ 123./ => 123 ./
+ 123.* => 123 .*
+ 123.\\ => 123 .\\
+
+When optional LINE-PT point is specified, it must be between BEG and END
+inclusive and the adjusted LINE-PT will be adjusted to stay on the same
+semantic element. For example if BEG and END are the line beginning and
+end positions of the following assignment line, LINE-PT is adjusted as
+shown.
+
+ x = 123./1 + 567
+ ^ <= LINE-PT
+TAB> x = 123 ./1 + 567
+ ^ <= LINE-PT adjusted to here"
+ (save-excursion
+ (goto-char beg)
+ (while (re-search-forward "[0-9]\\.[/\\*\\\\]" end t)
+ (backward-char 2) ;; on the "."
+ (let ((node (treesit-node-at (point))))
+ (when (equal (treesit-node-type node) "number")
+ (when (and line-pt
+ (<= (point) line-pt))
+ (setq line-pt (1+ line-pt)))
+ (insert " ")
+ (setq end (1+ end))))
+ (forward-char 2)))
+ (when line-pt
(goto-char line-pt)))
(cl-defun matlab-ts-mode--ei-indent-elements-in-line (&optional
is-indent-region)
@@ -1199,8 +1205,6 @@ start-node is the identifier node for width and
start-offset is 2."
When IS-INDENT-REGION is nil, we restore the point to it's logical
location when the line is updated. Returns t if line was updated."
- (matlab-ts-mode--ei-workaround-143)
-
;; If line was indented (nth 0 ei-info) is not same as current line, then
update the buffer
(let* ((start-pair (when (not is-indent-region)
(matlab-ts-mode--ei-get-start-info)))
diff --git a/matlab-ts-mode.el b/matlab-ts-mode.el
index 83181f645c..4d66055736 100644
--- a/matlab-ts-mode.el
+++ b/matlab-ts-mode.el
@@ -2878,69 +2878,69 @@ Example:
(defun matlab-ts-mode--treesit-indent ()
"Call `treesit-indent', then do electric indent."
- (treesit-indent)
+ (treesit-indent) ;; treesit-indent before electric indent to get updated
point on the line
(when matlab-ts-mode-electric-indent
(let ((at-eol (looking-at "[ \t]*$")))
- (when (matlab-ts-mode--ei-indent-elements-in-line)
- (when at-eol
- (end-of-line))))))
+ (matlab-ts-mode--ei-workaround-143 (line-beginning-position)
(line-end-position) (point))
+ (when (and (matlab-ts-mode--ei-indent-elements-in-line)
+ at-eol)
+ (end-of-line)))))
(defun matlab-ts-mode--treesit-indent-region (beg end)
"Call `treesit-indent-region' on BEG END, then do electric indent."
;; `treesit-indent-region' will not alter the number of lines, but it may
reduce the buffer size,
;; thus grab the start/end lines for
`matlab-ts-mode--ei-indent-elements-in-line'.
- (if matlab-ts-mode-electric-indent
- (let* ((start-linenum (line-number-at-pos beg))
- (curr-linenum start-linenum)
- (end-linenum (save-excursion
- (goto-char end)
- (let ((linenum (line-number-at-pos)))
- (when (= (point) (line-beginning-position))
- (setq linenum (1- linenum)))
- linenum))))
-
- ;; We need to run electric indent before treesit-indent-region.
Consider
- ;; l2 = @(x)((ischar(x) || isstring(x) || isnumeric(x)) && ...
- ;; ~strcmpi(x, 'fubar'));
- ;; If we indent-region first, we'll get
- ;; l2 = @(x)((ischar(x) || isstring(x) || isnumeric(x)) && ...
- ;; ~strcmpi(x, 'fubar'));
- ;; then when we adjust spacing, we'll have the following where the 2nd
line is not
- ;; indented correctly.
- ;; l2 = @(x) ((ischar(x) || isstring(x) || isnumeric(x)) && ...
- ;; ~strcmpi(x, 'fubar'));
- (unwind-protect
- (progn
- ;; Add invalid entry to matlab-ts-mode--ei-align-assign-alist as
a marker to activate
- ;; caching of computed offsets for assignment alignment.
- (setq-local matlab-ts-mode--ei-align-assign-alist '((-1 . 0))
- matlab-ts-mode--ei-align-prop-alist '((-1 . 0))
- matlab-ts-mode--ei-align-comment-alist '((-1 . 0))
- matlab-ts-mode--ei-align-matrix-alist '((-1 . "")))
- (save-excursion
- (goto-char beg)
- (while (<= curr-linenum end-linenum)
- (beginning-of-line)
- (matlab-ts-mode--ei-indent-elements-in-line 'indent-region)
- (forward-line)
- (setq curr-linenum (1+ curr-linenum)))
- ;; Restore point accounting for whitespace adjustments in the
lines
- (goto-char (point-min))
- (forward-line (1- start-linenum))
- (setq beg (point))
- (goto-char (point-min))
- (forward-line end-linenum)
- (setq end (point)))
-
- (treesit-indent-region beg end))
+ (when matlab-ts-mode-electric-indent
+ (let* ((start-linenum (line-number-at-pos beg))
+ (curr-linenum start-linenum)
+ (end-linenum (save-excursion
+ (goto-char end)
+ (let ((linenum (line-number-at-pos)))
+ (when (= (point) (line-beginning-position))
+ (setq linenum (1- linenum)))
+ linenum))))
+
+ (matlab-ts-mode--ei-workaround-143 beg end)
+
+ ;; We need to run electric indent before treesit-indent-region. Consider
+ ;; l2 = @(x)((ischar(x) || isstring(x) || isnumeric(x)) && ...
+ ;; ~strcmpi(x, 'fubar'));
+ ;; If we indent-region first, we'll get
+ ;; l2 = @(x)((ischar(x) || isstring(x) || isnumeric(x)) && ...
+ ;; ~strcmpi(x, 'fubar'));
+ ;; then when we adjust spacing, we'll have the following where the 2nd
line is not
+ ;; indented correctly.
+ ;; l2 = @(x) ((ischar(x) || isstring(x) || isnumeric(x)) && ...
+ ;; ~strcmpi(x, 'fubar'));
+ (unwind-protect
(progn
- (setq-local matlab-ts-mode--ei-align-assign-alist nil
- matlab-ts-mode--ei-align-prop-alist nil
- matlab-ts-mode--ei-align-comment-alist nil
- matlab-ts-mode--ei-align-matrix-alist nil))))
+ ;; Add invalid entry to matlab-ts-mode--ei-align-assign-alist as a
marker to activate
+ ;; caching of computed offsets for assignment alignment.
+ (setq-local matlab-ts-mode--ei-align-assign-alist '((-1 . 0))
+ matlab-ts-mode--ei-align-prop-alist '((-1 . 0))
+ matlab-ts-mode--ei-align-comment-alist '((-1 . 0))
+ matlab-ts-mode--ei-align-matrix-alist '((-1 . "")))
- ;; else indent without electric additions
- (treesit-indent-region beg end)))
+ (save-excursion
+ (goto-char beg)
+ (while (<= curr-linenum end-linenum)
+ (beginning-of-line)
+ (matlab-ts-mode--ei-indent-elements-in-line 'indent-region)
+ (forward-line)
+ (setq curr-linenum (1+ curr-linenum)))
+ ;; Restore point accounting for whitespace adjustments in the
lines
+ (goto-char (point-min))
+ (forward-line (1- start-linenum))
+ (setq beg (point))
+ (goto-char (point-min))
+ (forward-line end-linenum)
+ (setq end (point))))
+ (setq-local matlab-ts-mode--ei-align-assign-alist nil
+ matlab-ts-mode--ei-align-prop-alist nil
+ matlab-ts-mode--ei-align-comment-alist nil
+ matlab-ts-mode--ei-align-matrix-alist nil))))
+
+ (treesit-indent-region beg end))
;;; Thing settings for movement, etc.
diff --git
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_matrix_with_blank_line.m
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_matrix_with_blank_line.m
new file mode 100644
index 0000000000..698e75e69b
--- /dev/null
+++
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_matrix_with_blank_line.m
@@ -0,0 +1,5 @@
+% -*- matlab-ts -*-
+
+m = [ 123 23333
+
+ 333 4];
diff --git
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_matrix_with_blank_line_expected.m
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_matrix_with_blank_line_expected.m
new file mode 100644
index 0000000000..a5b4abe853
--- /dev/null
+++
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_matrix_with_blank_line_expected.m
@@ -0,0 +1,5 @@
+% -*- matlab-ts -*-
+
+m = [123 23333
+
+ 333 4];
diff --git
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_matrix_with_blank_line_expected_msgs.m
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_matrix_with_blank_line_expected_msgs.m
new file mode 100644
index 0000000000..69ab4b66c6
--- /dev/null
+++
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_matrix_with_blank_line_expected_msgs.m
@@ -0,0 +1,5 @@
+% -*- matlab-ts -*- % <{Matched rule: (matlab-ts-mode--i-top-level
matlab-ts-mode--column-0 0)}>
+
+m = [123 23333 % <{Matched rule: (matlab-ts-mode--i-top-level
matlab-ts-mode--column-0 0)}>
+
+ 333 4]; % <{Matched rule: (matlab-ts-mode--i-row-matcher
matlab-ts-mode--i-row-matcher-anchor matlab-ts-mode--i-row-matcher-offset)}>
diff --git
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143.m
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143.m
index 411af10c5c..f37f645c5c 100644
---
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143.m
+++
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143.m
@@ -5,3 +5,9 @@
if 1
a=1234./2+500./4+600.'+700.\1+800.*2+sum([444.,555.]);
end
+
+x = 123.* 4 + 567
+
+% x = 123.*4 + 567
+
+y = 123.*4 + 567
diff --git
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143_expected.m
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143_expected.m
index 676d722d5f..11925cf998 100644
---
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143_expected.m
+++
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143_expected.m
@@ -5,3 +5,9 @@
if 1
a = 1234 ./ 2 + 500 ./ 4 + 600.' + 700 .\ 1 + 800 .* 2 + sum([444., 555.]);
end
+
+x = 123 .* 4 + 567
+
+% x = 123.*4 + 567
+
+y = 123 .* 4 + 567
diff --git
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143_expected_msgs.m
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143_expected_msgs.m
index 5d3e8d8e68..a101cf8a89 100644
---
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143_expected_msgs.m
+++
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143_expected_msgs.m
@@ -5,3 +5,9 @@
if 1 % <{Matched rule: (matlab-ts-mode--i-top-level matlab-ts-mode--column-0
0)}>
a = 1234 ./ 2 + 500 ./ 4 + 600.' + 700 .\ 1 + 800 .* 2 + sum([444.,
555.]); % <{Matched rule: ((node-is
"\\`\\(?:arguments_statement\\|block\\|e\\(?:num\\(?:eration\\)?\\|vents\\)\\|function_definition\\|methods\\|propert\\(?:ies\\|y\\)\\)\\'")
parent 4)}>
end % <{Matched rule: ((node-is
"\\`\\(?:catch_clause\\|e\\(?:lse\\(?:\\(?:if\\)?_clause\\)\\|nd\\)\\)\\'")
parent 0)}>
+
+x = 123 .* 4 + 567 % <{Matched rule: (matlab-ts-mode--i-top-level
matlab-ts-mode--column-0 0)}>
+
+% x = 123.*4 + 567 % <{Matched rule: (matlab-ts-mode--i-top-level
matlab-ts-mode--column-0 0)}>
+
+y = 123 .* 4 + 567 % <{Matched rule: (matlab-ts-mode--i-top-level
matlab-ts-mode--column-0 0)}>
diff --git
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_matrix_with_blank_line.m
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_matrix_with_blank_line.m
new file mode 100644
index 0000000000..698e75e69b
--- /dev/null
+++
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_matrix_with_blank_line.m
@@ -0,0 +1,5 @@
+% -*- matlab-ts -*-
+
+m = [ 123 23333
+
+ 333 4];
diff --git
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_matrix_with_blank_line_expected.txt
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_matrix_with_blank_line_expected.txt
new file mode 100644
index 0000000000..fba2bac92d
--- /dev/null
+++
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_matrix_with_blank_line_expected.txt
@@ -0,0 +1,9 @@
+# -*- t-utils-ts-parse-tree -*-
+(source_file<1,52> (comment[1,20]@{% -*- matlab-ts -*-}@)
+ (assignment<22,50> left: (identifier[22,23]@{m}@) =[24,25]
+ right:
+ (matrix<26,50> [[26,27]
+ (row<30,39> (number[30,33]@{123}@) ,[34,34] (number[34,39]@{23333}@))
+ (row<44,49> (number[44,47]@{333}@) ,[48,48] (number[48,49]@{4}@))
+ ][49,50]))
+ ;[50,51] \n[51,52])
diff --git
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_two_matrices.m
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_two_matrices.m
new file mode 100644
index 0000000000..97bdfae5a9
--- /dev/null
+++
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_two_matrices.m
@@ -0,0 +1,14 @@
+% -*- matlab-ts -*-
+
+% t-utils-test-indent: no-line-by-line-indent - when typing matrix
line-by-line, there are
+% error nodes and thus the matrix alignment doesn't occur
+
+% The following two matrices do not have blank lines between them. This
validates that
+% the indent-region of the matrix in the temporary buffer doesn't pickup
invalid content.
+
+if 1
+ tp_taper_BorderVertices = [neg_BorderVertices;...
+ topcover_taper_Face_BV];
+ tp_taper_Polygons = [neg_Polygons;...
+ topcover_taper_Face_poly{1} + max(max(neg_Polygons))];
+end
diff --git
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_two_matrices_expected.txt
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_two_matrices_expected.txt
new file mode 100644
index 0000000000..0ed8d57ae8
--- /dev/null
+++
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_two_matrices_expected.txt
@@ -0,0 +1,36 @@
+# -*- t-utils-ts-parse-tree -*-
+(source_file<1,555> (comment[1,20]@{% -*- matlab-ts -*-}@) (comment[22,170]@{%
t-utils-test-indent: no-line-by-line-indent - wh...}@) (comment[172,348]@{% The
following two matrices do not have blank lin...}@) \n[348,350]
+ (if_statement<350,554> if[350,352] condition: (number[353,354]@{1}@)
+ (block<363,551>
+ (assignment<363,444> left: (identifier[363,386]@{tp_taper_BorderVertices}@)
=[387,388]
+ right:
+ (matrix<389,444> [[389,390]
+ (row<390,408> (identifier[390,408]@{neg_BorderVertices}@))
+ (line_continuation[409,413]@{...\n}@)
+ (row<421,443> (identifier[421,443]@{topcover_taper_Face_BV}@))
+ ][443,444]))
+ ;[444,445]
+ (assignment<450,549> left: (identifier[450,467]@{tp_taper_Polygons}@)
=[468,469]
+ right:
+ (matrix<470,549> [[470,471]
+ (row<471,483> (identifier[471,483]@{neg_Polygons}@))
+ (line_continuation[484,488]@{...\n}@)
+ (row<496,548>
+ (binary_operator<496,548>
+ left:
+ (function_call<496,523> name:
(identifier[496,520]@{topcover_taper_Face_poly}@) {[520,521]
+ (arguments<521,522> argument: (number[521,522]@{1}@))
+ }[522,523])
+ +[524,525]
+ right:
+ (function_call<526,548> name: (identifier[526,529]@{max}@) ([529,530]
+ (arguments<530,547>
+ argument:
+ (function_call<530,547> name: (identifier[530,533]@{max}@)
([533,534]
+ (arguments<534,546> argument:
(identifier[534,546]@{neg_Polygons}@))
+ )[546,547]))
+ )[547,548])))
+ ][548,549]))
+ ;[549,550] \n[550,551])
+ end[551,554])
+ \n[554,555])
diff --git
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143.m
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143.m
index 411af10c5c..f37f645c5c 100644
---
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143.m
+++
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143.m
@@ -5,3 +5,9 @@
if 1
a=1234./2+500./4+600.'+700.\1+800.*2+sum([444.,555.]);
end
+
+x = 123.* 4 + 567
+
+% x = 123.*4 + 567
+
+y = 123.*4 + 567
diff --git
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143_expected.txt
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143_expected.txt
index bc12c512a4..a6c6070da8 100644
---
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143_expected.txt
+++
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_workaround_issue143_expected.txt
@@ -1,5 +1,5 @@
# -*- t-utils-ts-parse-tree -*-
-(source_file<1,180> (comment[1,20]@{% -*- matlab-ts -*-}@) (comment[22,96]@{%
workaround https://github.com/acristoffers/tree-...}@) \n[96,98]
+(source_file<1,237> (comment[1,20]@{% -*- matlab-ts -*-}@) (comment[22,96]@{%
workaround https://github.com/acristoffers/tree-...}@) \n[96,98]
(if_statement<98,179> if[98,100] condition: (number[101,102]@{1}@)
(block<118,176>
(assignment<118,171> left: (identifier[118,119]@{a}@) =[119,120]
@@ -33,4 +33,16 @@
)[170,171])))
;[171,172] \n[175,176])
end[176,179])
- \n[179,180])
+ \n[179,181]
+ (assignment<181,198> left: (identifier[181,182]@{x}@) =[183,184]
+ right:
+ (binary_operator<185,198>
+ left: (binary_operator<185,192> left: (number[185,189]@{123.}@) *[189,190]
right: (number[191,192]@{4}@))
+ +[193,194] right: (number[195,198]@{567}@)))
+ (comment[200,218]@{% x = 123.*4 + 567}@) \n[218,220]
+ (assignment<220,236> left: (identifier[220,221]@{y}@) =[222,223]
+ right:
+ (binary_operator<224,236>
+ left: (binary_operator<224,230> left: (number[224,228]@{123.}@) *[228,229]
right: (number[229,230]@{4}@))
+ +[231,232] right: (number[233,236]@{567}@)))
+ \n[236,237])