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