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

    matlab-ts-mode--ei: left align string columns in multi-line matrices
---
 matlab-ts-mode--ei.el                              | 13 ++++--
 matlab-ts-mode.el                                  | 14 +++---
 .../electric_indent_m_matrix_strings.m             | 20 ++++++++
 .../electric_indent_m_matrix_strings_expected.m    | 20 ++++++++
 ...lectric_indent_m_matrix_strings_expected_msgs.m | 20 ++++++++
 .../electric_indent_method_attributes.m            |  2 +
 .../electric_indent_method_attributes_expected.m   |  2 +
 ...ectric_indent_method_attributes_expected_msgs.m |  2 +
 .../electric_indent_m_matrix_strings.m             | 20 ++++++++
 .../electric_indent_m_matrix_strings_expected.txt  | 54 ++++++++++++++++++++++
 .../electric_indent_method_attributes.m            |  2 +
 .../electric_indent_method_attributes_expected.txt | 44 +++++++++---------
 12 files changed, 181 insertions(+), 32 deletions(-)

diff --git a/matlab-ts-mode--ei.el b/matlab-ts-mode--ei.el
index 4d51f1580c..fcdf4d45b8 100644
--- a/matlab-ts-mode--ei.el
+++ b/matlab-ts-mode--ei.el
@@ -777,7 +777,7 @@ See `matlab-ts-mode--ei-get-new-line' for EI-INFO contents."
           (matlab-ts-mode--ei-fast-back-to-indentation)
           (let* ((row-node (matlab-ts-mode--ei-get-m-matrix-row-in-line))
                  (ei-line (buffer-substring (pos-bol) (pos-eol)))
-                 (indent-offset (string-match-p "[^ \t]+" ei-line)) ;; nil if 
at blank line in matrix
+                 (indent-offset (string-match-p "[^ \t]+" ei-line)) ;; nil if 
at blank line
                  n-spaces)
             (when (and row-node indent-offset)
               (let* ((col-num (length column-widths))
@@ -806,9 +806,14 @@ See `matlab-ts-mode--ei-get-new-line' for EI-INFO 
contents."
                                      (or (= indent-start-pt (point-min))
                                          (<= (+ offset matrix-offset) 
pt-offset)))
                             (setq pt-offset (+ pt-offset n-spaces)))
-                          (setq content (concat (substring content 0 offset)
-                                                (make-string n-spaces ? )
-                                                (substring content offset)))))
+                          (if (string= (treesit-node-type element) "string") 
;; left align strings
+                              (let ((e-len (length (treesit-node-text 
element))))
+                                (setq content (concat (substring content 0 (+ 
offset e-len))
+                                                      (make-string n-spaces ? )
+                                                      (substring content (+ 
offset e-len)))))
+                            (setq content (concat (substring content 0 offset) 
;; else right align
+                                                  (make-string n-spaces ? )
+                                                  (substring content 
offset))))))
                       (setq col-num (1- col-num)))))
 
                 (setq ei-line (concat (substring ei-line 0 indent-offset) 
content))
diff --git a/matlab-ts-mode.el b/matlab-ts-mode.el
index 27c2657b07..c9c872fb7a 100644
--- a/matlab-ts-mode.el
+++ b/matlab-ts-mode.el
@@ -2491,12 +2491,14 @@ Example:
     ;;                                              |          4444]
     (let* ((first-col-extra (matlab-ts-mode--ei-m-matrix-first-col-extra 
parent))
            (column-widths (matlab-ts-mode--ei-m-matrix-col-widths parent 
first-col-extra t))
-           (el-width (save-excursion
-                       (goto-char (treesit-node-start node))
-                       (let ((el (matlab-ts-mode--i-matrix-element)))
-                         (- (treesit-node-end el) (treesit-node-start el)))))
-           (el-spaces (- (alist-get 1 column-widths) el-width)))
-      (setq matlab-ts-mode--i-row-matcher-pair (cons (treesit-node-start 
parent) (1+ el-spaces)))
+           (n-el-spaces (if (equal (treesit-node-type (treesit-node-child node 
0)) "string")
+                            0
+                          (let ((el-width (save-excursion
+                                            (goto-char (treesit-node-start 
node))
+                                            (let ((el 
(matlab-ts-mode--i-matrix-element)))
+                                              (- (treesit-node-end el) 
(treesit-node-start el))))))
+                            (- (alist-get 1 column-widths) el-width)))))
+      (setq matlab-ts-mode--i-row-matcher-pair (cons (treesit-node-start 
parent) (1+ n-el-spaces)))
       (cl-return-from matlab-ts-mode--i-row-matcher t)))
 
   (when (string-match-p (rx bos (or "cell" "matrix") eos) (treesit-node-type 
parent))
diff --git 
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_strings.m
 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_strings.m
new file mode 100644
index 0000000000..ad20a1f0f2
--- /dev/null
+++ 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_strings.m
@@ -0,0 +1,20 @@
+% -*- matlab-ts -*-
+
+% t-utils-test-indent: no-line-by-line-indent - line-by-line typing results in 
error nodes
+
+str1 = [      "{"     ;
+         "2";
+           'linethree';
+           '4'   ;
+          'five'  ;
+            '6.1'    
+             "}"     ];
+
+
+str2 = [      "{"     ,  "foo";
+         "2",            "b" ;
+           'linethree',  "fooboar";
+           '4'   ,      "goo";
+          'five'  ,     "tooooo";
+            '6.1'    , "x";
+             "}"     , "zzzzzzzzzzzzz"];
diff --git 
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_strings_expected.m
 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_strings_expected.m
new file mode 100644
index 0000000000..6c16e31b7b
--- /dev/null
+++ 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_strings_expected.m
@@ -0,0 +1,20 @@
+% -*- matlab-ts -*-
+
+% t-utils-test-indent: no-line-by-line-indent - line-by-line typing results in 
error nodes
+
+str1 = ["{"        ;
+        "2"        ;
+        'linethree';
+        '4'        ;
+        'five'     ;
+        '6.1'
+        "}"        ];
+
+
+str2 = ["{"        , "foo"          ;
+        "2"        , "b"            ;
+        'linethree', "fooboar"      ;
+        '4'        , "goo"          ;
+        'five'     , "tooooo"       ;
+        '6.1'      , "x"            ;
+        "}"        , "zzzzzzzzzzzzz"];
diff --git 
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_strings_expected_msgs.m
 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_strings_expected_msgs.m
new file mode 100644
index 0000000000..9fed67803c
--- /dev/null
+++ 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_strings_expected_msgs.m
@@ -0,0 +1,20 @@
+% -*- 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)}>
+
+str1 = ["{"        ; %  <{Matched rule: (matlab-ts-mode--i-top-level 
matlab-ts-mode--column-0 0)}>
+        "2"        ; %  <{Matched rule: (matlab-ts-mode--i-row-matcher 
matlab-ts-mode--i-row-matcher-anchor matlab-ts-mode--i-row-matcher-offset)}>
+        'linethree'; %  <{Matched rule: (matlab-ts-mode--i-row-matcher 
matlab-ts-mode--i-row-matcher-anchor matlab-ts-mode--i-row-matcher-offset)}>
+        '4'        ; %  <{Matched rule: (matlab-ts-mode--i-row-matcher 
matlab-ts-mode--i-row-matcher-anchor matlab-ts-mode--i-row-matcher-offset)}>
+        'five'     ; %  <{Matched rule: (matlab-ts-mode--i-row-matcher 
matlab-ts-mode--i-row-matcher-anchor matlab-ts-mode--i-row-matcher-offset)}>
+        '6.1'       %  <{Matched rule: (matlab-ts-mode--i-row-matcher 
matlab-ts-mode--i-row-matcher-anchor matlab-ts-mode--i-row-matcher-offset)}>
+        "}"        ]; %  <{Matched rule: (matlab-ts-mode--i-row-matcher 
matlab-ts-mode--i-row-matcher-anchor matlab-ts-mode--i-row-matcher-offset)}>
+
+
+str2 = ["{"        , "foo"          ; %  <{Matched rule: 
(matlab-ts-mode--i-top-level matlab-ts-mode--column-0 0)}>
+        "2"        , "b"            ; %  <{Matched rule: 
(matlab-ts-mode--i-row-matcher matlab-ts-mode--i-row-matcher-anchor 
matlab-ts-mode--i-row-matcher-offset)}>
+        'linethree', "fooboar"      ; %  <{Matched rule: 
(matlab-ts-mode--i-row-matcher matlab-ts-mode--i-row-matcher-anchor 
matlab-ts-mode--i-row-matcher-offset)}>
+        '4'        , "goo"          ; %  <{Matched rule: 
(matlab-ts-mode--i-row-matcher matlab-ts-mode--i-row-matcher-anchor 
matlab-ts-mode--i-row-matcher-offset)}>
+        'five'     , "tooooo"       ; %  <{Matched rule: 
(matlab-ts-mode--i-row-matcher matlab-ts-mode--i-row-matcher-anchor 
matlab-ts-mode--i-row-matcher-offset)}>
+        '6.1'      , "x"            ; %  <{Matched rule: 
(matlab-ts-mode--i-row-matcher matlab-ts-mode--i-row-matcher-anchor 
matlab-ts-mode--i-row-matcher-offset)}>
+        "}"        , "zzzzzzzzzzzzz"]; %  <{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_method_attributes.m
 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes.m
index fc13955f65..05927f8993 100644
--- 
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes.m
+++ 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes.m
@@ -1,5 +1,7 @@
 % -*- matlab-ts -*-
 
+% t-utils-test-indent: no-line-by-line-indent - line-by-line typing results in 
error nodes
+
 classdef electric_indent_method_attributes
     methods (Access =   private, Static)
         function b = foo(a)
diff --git 
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes_expected.m
 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes_expected.m
index a97b57b9d2..cf5168349e 100644
--- 
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes_expected.m
+++ 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes_expected.m
@@ -1,5 +1,7 @@
 % -*- matlab-ts -*-
 
+% t-utils-test-indent: no-line-by-line-indent - line-by-line typing results in 
error nodes
+
 classdef electric_indent_method_attributes
     methods (Access=private, Static)
         function b = foo(a)
diff --git 
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes_expected_msgs.m
 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes_expected_msgs.m
index f9db916fb6..0b4dbbdd96 100644
--- 
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes_expected_msgs.m
+++ 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes_expected_msgs.m
@@ -1,5 +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)}>
+
 classdef electric_indent_method_attributes %  <{Matched rule: 
(matlab-ts-mode--i-top-level matlab-ts-mode--column-0 0)}>
     methods (Access=private, Static) %  <{Matched rule: ((node-is 
"\\`\\(?:arguments_statement\\|block\\|e\\(?:num\\(?:eration\\)?\\|vents\\)\\|function_definition\\|methods\\|propert\\(?:ies\\|y\\)\\)\\'")
 parent 4)}>
         function b = foo(a) %  <{Matched rule: ((node-is 
"\\`\\(?:arguments_statement\\|block\\|e\\(?:num\\(?:eration\\)?\\|vents\\)\\|function_definition\\|methods\\|propert\\(?:ies\\|y\\)\\)\\'")
 parent 4)}>
diff --git 
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_strings.m
 
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_strings.m
new file mode 100644
index 0000000000..ad20a1f0f2
--- /dev/null
+++ 
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_strings.m
@@ -0,0 +1,20 @@
+% -*- matlab-ts -*-
+
+% t-utils-test-indent: no-line-by-line-indent - line-by-line typing results in 
error nodes
+
+str1 = [      "{"     ;
+         "2";
+           'linethree';
+           '4'   ;
+          'five'  ;
+            '6.1'    
+             "}"     ];
+
+
+str2 = [      "{"     ,  "foo";
+         "2",            "b" ;
+           'linethree',  "fooboar";
+           '4'   ,      "goo";
+          'five'  ,     "tooooo";
+            '6.1'    , "x";
+             "}"     , "zzzzzzzzzzzzz"];
diff --git 
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_strings_expected.txt
 
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_strings_expected.txt
new file mode 100644
index 0000000000..f0af911e6b
--- /dev/null
+++ 
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_m_matrix_strings_expected.txt
@@ -0,0 +1,54 @@
+# -*- t-utils-ts-parse-tree -*-
+(source_file<1,496> (comment[1,20]@{% -*- matlab-ts -*-}@) (comment[22,112]@{% 
t-utils-test-indent: no-line-by-line-indent - li...}@)
+ (assignment<114,259> left: (identifier[114,118]@{str1}@) =[119,120]
+  right: 
+   (matrix<121,259> [[121,122]
+    (row<128,131>
+     (string<128,131> "[128,129] (string_content[129,130]@{\{}@) "[130,131]))
+    (row<147,150>
+     (string<147,150> "[147,148] (string_content[148,149]@{2}@) "[149,150]))
+    (row<163,174>
+     (string<163,174> '[163,164] (string_content[164,173]@{linethree}@) 
'[173,174]))
+    (row<187,190>
+     (string<187,190> '[187,188] (string_content[188,189]@{4}@) '[189,190]))
+    (row<205,211>
+     (string<205,211> '[205,206] (string_content[206,210]@{five}@) '[210,211]))
+    (row<227,232>
+     (string<227,232> '[227,228] (string_content[228,231]@{6.1}@) '[231,232]))
+    (row<250,253>
+     (string<250,253> "[250,251] (string_content[251,252]@{\}}@) "[252,253]))
+    ][258,259]))
+ ;[259,260]
+ (assignment<263,494> left: (identifier[263,267]@{str2}@) =[268,269]
+  right: 
+   (matrix<270,494> [[270,271]
+    (row<277,293>
+     (string<277,280> "[277,278] (string_content[278,279]@{\{}@) "[279,280])
+     ,[285,286]
+     (string<288,293> "[288,289] (string_content[289,292]@{foo}@) "[292,293]))
+    (row<304,323>
+     (string<304,307> "[304,305] (string_content[305,306]@{2}@) "[306,307])
+     ,[307,308]
+     (string<320,323> "[320,321] (string_content[321,322]@{b}@) "[322,323]))
+    (row<337,360>
+     (string<337,348> '[337,338] (string_content[338,347]@{linethree}@) 
'[347,348])
+     ,[348,349]
+     (string<351,360> "[351,352] (string_content[352,359]@{fooboar}@) 
"[359,360]))
+    (row<373,391>
+     (string<373,376> '[373,374] (string_content[374,375]@{4}@) '[375,376])
+     ,[379,380]
+     (string<386,391> "[386,387] (string_content[387,390]@{goo}@) "[390,391]))
+    (row<403,425>
+     (string<403,409> '[403,404] (string_content[404,408]@{five}@) '[408,409])
+     ,[411,412]
+     (string<417,425> "[417,418] (string_content[418,424]@{tooooo}@) 
"[424,425]))
+    (row<439,453>
+     (string<439,444> '[439,440] (string_content[440,443]@{6.1}@) '[443,444])
+     ,[448,449]
+     (string<450,453> "[450,451] (string_content[451,452]@{x}@) "[452,453]))
+    (row<468,493>
+     (string<468,471> "[468,469] (string_content[469,470]@{\}}@) "[470,471])
+     ,[476,477]
+     (string<478,493> "[478,479] (string_content[479,492]@{zzzzzzzzzzzzz}@) 
"[492,493]))
+    ][493,494]))
+ ;[494,495] \n[495,496])
diff --git 
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes.m
 
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes.m
index fc13955f65..05927f8993 100644
--- 
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes.m
+++ 
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes.m
@@ -1,5 +1,7 @@
 % -*- matlab-ts -*-
 
+% t-utils-test-indent: no-line-by-line-indent - line-by-line typing results in 
error nodes
+
 classdef electric_indent_method_attributes
     methods (Access =   private, Static)
         function b = foo(a)
diff --git 
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes_expected.txt
 
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes_expected.txt
index d207d0b0e3..31a724cfc3 100644
--- 
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes_expected.txt
+++ 
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_method_attributes_expected.txt
@@ -1,23 +1,23 @@
 # -*- t-utils-ts-parse-tree -*-
-(source_file<1,169> (comment[1,20]@{% -*- matlab-ts -*-}@) \n[20,22]
- (class_definition<22,168> classdef[22,30] name: 
(identifier[31,64]@{electric_indent_method_attributes}@) \n[64,65]
-  (methods<69,164> methods[69,76]
-   (attributes<77,105> ([77,78]
-    (attribute<78,96> (identifier[78,84]@{Access}@) =[85,86] 
(identifier[89,96]@{private}@))
-    ,[96,97]
-    (attribute<98,104> (identifier[98,104]@{Static}@))
-    )[104,105])
-   \n[105,106]
-   (function_definition<114,156> function[114,122]
-    (function_output<123,126> (identifier[123,124]@{b}@) =[125,126])
-    name: (identifier[127,130]@{foo}@)
-    (function_arguments<130,133> ([130,131] arguments: 
(identifier[131,132]@{a}@) )[132,133])
-    \n[133,134]
-    (block<134,145>
-     (assignment<134,143> left: (identifier[134,135]@{b}@) =[136,137]
-      right: (binary_operator<138,143> left: (number[138,139]@{2}@) *[140,141] 
right: (identifier[142,143]@{a}@)))
-     ;[143,144] \n[144,145])
-    end[153,156])
-   \n[156,157] end[161,164])
-  \n[164,165] end[165,168])
- \n[168,169])
+(source_file<1,261> (comment[1,20]@{% -*- matlab-ts -*-}@) (comment[22,112]@{% 
t-utils-test-indent: no-line-by-line-indent - li...}@) \n[112,114]
+ (class_definition<114,260> classdef[114,122] name: 
(identifier[123,156]@{electric_indent_method_attributes}@) \n[156,157]
+  (methods<161,256> methods[161,168]
+   (attributes<169,197> ([169,170]
+    (attribute<170,188> (identifier[170,176]@{Access}@) =[177,178] 
(identifier[181,188]@{private}@))
+    ,[188,189]
+    (attribute<190,196> (identifier[190,196]@{Static}@))
+    )[196,197])
+   \n[197,198]
+   (function_definition<206,248> function[206,214]
+    (function_output<215,218> (identifier[215,216]@{b}@) =[217,218])
+    name: (identifier[219,222]@{foo}@)
+    (function_arguments<222,225> ([222,223] arguments: 
(identifier[223,224]@{a}@) )[224,225])
+    \n[225,226]
+    (block<226,237>
+     (assignment<226,235> left: (identifier[226,227]@{b}@) =[228,229]
+      right: (binary_operator<230,235> left: (number[230,231]@{2}@) *[232,233] 
right: (identifier[234,235]@{a}@)))
+     ;[235,236] \n[236,237])
+    end[245,248])
+   \n[248,249] end[253,256])
+  \n[256,257] end[257,260])
+ \n[260,261])

Reply via email to