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

Reply via email to