branch: externals/matlab-mode
commit e26119063bf8a9b7c116b1c7b6fd356d34d70018
Author: John Ciolfi <[email protected]>
Commit: John Ciolfi <[email protected]>
matlab-ts-mode--ei: handle m-matrix assigned to a variable using matrix
indexing
---
matlab-ts-mode--ei.el | 10 ++++++++--
.../electric_indent_m_matrix_assign_to_matrix.m | 7 +++++++
...tric_indent_m_matrix_assign_to_matrix_expected.m | 7 +++++++
...indent_m_matrix_assign_to_matrix_expected_msgs.m | 7 +++++++
.../electric_indent_m_matrix_assign_to_matrix.m | 7 +++++++
...ic_indent_m_matrix_assign_to_matrix_expected.txt | 21 +++++++++++++++++++++
6 files changed, 57 insertions(+), 2 deletions(-)
diff --git a/matlab-ts-mode--ei.el b/matlab-ts-mode--ei.el
index 68722caeb0..fe5e169b55 100644
--- a/matlab-ts-mode--ei.el
+++ b/matlab-ts-mode--ei.el
@@ -809,8 +809,14 @@ See `matlab-ts-mode--ei-get-new-line' for EI-INFO
contents."
(with-temp-buffer
(setq end-linenum (matlab-ts-mode--ei-indent-matrix-in-tmp-buf
assign-node))
- (let* ((matrix-node (treesit-node-parent (treesit-search-subtree
- (treesit-buffer-root-node) (rx
bos "[" eos) nil t)))
+ (let* ((assign-node (save-excursion
+ (matlab-ts-mode--ei-fast-back-to-indentation)
+ (treesit-parent-until (treesit-node-at (point))
"assignment")))
+ (matrix-node (if assign-node
+ (treesit-node-child-by-field-name assign-node
"right")
+ ;; else property:
+ (treesit-node-parent (treesit-search-subtree
+ (treesit-buffer-root-node)
(rx bos "[" eos) nil t)) ))
(first-col-extra (matlab-ts-mode--ei-m-matrix-first-col-extra
matrix-node))
(column-widths (matlab-ts-mode--ei-m-matrix-col-widths
matrix-node first-col-extra)))
diff --git
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_assign_to_matrix.m
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_assign_to_matrix.m
new file mode 100644
index 0000000000..4e55fca7c3
--- /dev/null
+++
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_assign_to_matrix.m
@@ -0,0 +1,7 @@
+% -*- matlab-ts -*-
+
+% t-utils-test-indent: no-line-by-line-indent - line-by-line typing results in
error nodes
+
+ a([1, 2], :) = ...
+ [1, 2, 3; ...
+ 100 200 300];
diff --git
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_assign_to_matrix_expected.m
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_assign_to_matrix_expected.m
new file mode 100644
index 0000000000..bd66dbdd44
--- /dev/null
+++
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_assign_to_matrix_expected.m
@@ -0,0 +1,7 @@
+% -*- matlab-ts -*-
+
+% t-utils-test-indent: no-line-by-line-indent - line-by-line typing results in
error nodes
+
+a([ 1, 2], :) = ...
+ [ 1, 2, 3; ...
+ 100, 200, 300];
diff --git
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_assign_to_matrix_expected_msgs.m
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_assign_to_matrix_expected_msgs.m
new file mode 100644
index 0000000000..f96c5417b7
--- /dev/null
+++
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_assign_to_matrix_expected_msgs.m
@@ -0,0 +1,7 @@
+% -*- matlab-ts -*- % <{Matched rule: (matlab-ts-mode--i-top-level
matlab-ts-mode--column-0 0)}>
+
+% t-utils-test-indent: no-line-by-line-indent - line-by-line typing results in
error nodes % <{Matched rule: (matlab-ts-mode--i-top-level
matlab-ts-mode--column-0 0)}>
+
+a([ 1, 2], :) = ... % <{Matched rule: (matlab-ts-mode--i-top-level
matlab-ts-mode--column-0 0)}>
+ [ 1, 2, 3; ... % <{Matched rule: ((parent-is "\\`assignment\\'")
parent 4)}>
+ 100, 200, 300]; % <{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-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_assign_to_matrix.m
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_assign_to_matrix.m
new file mode 100644
index 0000000000..4e55fca7c3
--- /dev/null
+++
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_assign_to_matrix.m
@@ -0,0 +1,7 @@
+% -*- matlab-ts -*-
+
+% t-utils-test-indent: no-line-by-line-indent - line-by-line typing results in
error nodes
+
+ a([1, 2], :) = ...
+ [1, 2, 3; ...
+ 100 200 300];
diff --git
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_assign_to_matrix_expected.txt
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_assign_to_matrix_expected.txt
new file mode 100644
index 0000000000..11d04e5dde
--- /dev/null
+++
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_assign_to_matrix_expected.txt
@@ -0,0 +1,21 @@
+# -*- t-utils-ts-parse-tree -*-
+(source_file<1,171> (comment[1,20]@{% -*- matlab-ts -*-}@) (comment[22,112]@{%
t-utils-test-indent: no-line-by-line-indent - li...}@)
+ (assignment<116,169>
+ left:
+ (function_call<116,128> name: (identifier[116,117]@{a}@) ([117,118]
+ (arguments<118,127>
+ argument:
+ (matrix<118,124> [[118,119]
+ (row<119,123> (number[119,120]@{1}@) ,[120,121] (number[122,123]@{2}@))
+ ][123,124])
+ ,[124,125]
+ (spread_operator<126,127> :[126,127]))
+ )[127,128])
+ =[129,130] (line_continuation[131,135]@{...\n}@)
+ right:
+ (matrix<137,169> [[137,138]
+ (row<138,145> (number[138,139]@{1}@) ,[139,140] (number[141,142]@{2}@)
,[142,143] (number[144,145]@{3}@))
+ (line_continuation[147,151]@{...\n}@)
+ (row<157,168> (number[157,160]@{100}@) ,[161,161] (number[161,164]@{200}@)
,[165,165] (number[165,168]@{300}@))
+ ][168,169]))
+ ;[169,170] \n[170,171])