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

    matlab-ts-mode--ei: handle keyword used as a variable
---
 matlab-ts-mode--ei.el                              |  6 ++--
 matlab-ts-mode.el                                  |  2 +-
 .../electric_indent_keyword_as_var.m               | 11 ++++++
 .../electric_indent_keyword_as_var_expected.m      | 11 ++++++
 .../electric_indent_keyword_as_var_expected_msgs.m | 11 ++++++
 .../electric_indent_keyword_as_var.m               | 11 ++++++
 .../electric_indent_keyword_as_var_expected.txt    | 41 ++++++++++++++++++++++
 7 files changed, 89 insertions(+), 4 deletions(-)

diff --git a/matlab-ts-mode--ei.el b/matlab-ts-mode--ei.el
index 6d471884fa..029a1e9073 100644
--- a/matlab-ts-mode--ei.el
+++ b/matlab-ts-mode--ei.el
@@ -177,10 +177,10 @@
     ("."                              ,(rx bos "[" eos)                        
                  1)
 
     ;; Case: foo(1) or foo.bar
-    (,(rx bos "identifier" eos)       ,(rx bos (or "(" "{") eos)               
                  0)
+    ;; Case: events(thing), enumeration(thing), methods(thing)
+    (,(rx bos (or (seq (1+ (in "a-z")) "-fcn") "identifier") eos)  ,(rx bos 
(or "(" "{") eos)    0)
     (,(rx bos "identifier" eos)       "."                                      
                  1)
-    ;; Case: {events(thing)}, {enumeration(thing)}, {methods(thing)}
-    (,(rx "-fcn" eos)                 "."                                      
                  0)
+    (,(rx "-fcn" eos)                 "."                                      
                  1)
 
     ;; Case: number in matrix: [123 456]
     (,(rx bos "number" eos)           "."                                      
                  1)
diff --git a/matlab-ts-mode.el b/matlab-ts-mode.el
index 8435b05d1b..bb4894a02b 100644
--- a/matlab-ts-mode.el
+++ b/matlab-ts-mode.el
@@ -990,7 +990,7 @@ Example, disp variable is overriding the disp builtin 
function:
    )
   "The matlab-ts-mode font-lock settings.")
 
-;;; Indent
+;;; Indent (see doc/matlab_code_indent.org)
 
 (defvar matlab-ts-mode--indent-level 4
   "Indentation level.")
diff --git 
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_keyword_as_var.m
 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_keyword_as_var.m
new file mode 100644
index 0000000000..b6cfd75875
--- /dev/null
+++ 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_keyword_as_var.m
@@ -0,0 +1,11 @@
+% -*- matlab-ts -*-
+
+function out = electric_indent_keyword_as_var(in1, arguments)
+    arguments
+        in1 {mustBeTextScalar}
+        arguments     cell{mustBeText}={  }
+    end
+
+    % following both returns the first entry of arguments, then the arguments, 
and a {1}!
+    out = {in1 , arguments{1} arguments {1}};
+end
diff --git 
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_keyword_as_var_expected.m
 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_keyword_as_var_expected.m
new file mode 100644
index 0000000000..1a889c4423
--- /dev/null
+++ 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_keyword_as_var_expected.m
@@ -0,0 +1,11 @@
+% -*- matlab-ts -*-
+
+function out = electric_indent_keyword_as_var(in1, arguments)
+    arguments
+        in1 {mustBeTextScalar}
+        arguments cell {mustBeText} = {}
+    end
+
+    % following both returns the first entry of arguments, then the arguments, 
and a {1}!
+    out = {in1, arguments{1}, arguments, {1}};
+end
diff --git 
a/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_keyword_as_var_expected_msgs.m
 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_keyword_as_var_expected_msgs.m
new file mode 100644
index 0000000000..34ca7e2dd5
--- /dev/null
+++ 
b/tests/test-matlab-ts-mode-electric-indent-files/electric_indent_keyword_as_var_expected_msgs.m
@@ -0,0 +1,11 @@
+% -*- matlab-ts -*- %  <{Matched rule: (matlab-ts-mode--i-top-level 
matlab-ts-mode--column-0 0)}>
+
+function out = electric_indent_keyword_as_var(in1, arguments) %  <{Matched 
rule: (matlab-ts-mode--i-top-level matlab-ts-mode--column-0 0)}>
+    arguments %  <{Matched rule: ((parent-is "\\`function_definition\\'") 
parent matlab-ts-mode--set-function-indent-level-for-gp)}>
+        in1 {mustBeTextScalar} %  <{Matched rule: ((node-is 
"\\`\\(?:arguments_statement\\|block\\|e\\(?:num\\(?:eration\\)?\\|vents\\)\\|function_definition\\|methods\\|propert\\(?:ies\\|y\\)\\)\\'")
 parent 4)}>
+        arguments cell {mustBeText} = {} %  <{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)}>
+
+    % following both returns the first entry of arguments, then the arguments, 
and a {1}! %  <{Matched rule: ((parent-is "\\`function_definition\\'") parent 
matlab-ts-mode--set-function-indent-level-for-gp)}>
+    out = {in1, arguments{1}, arguments, {1}}; %  <{Matched rule: ((parent-is 
"\\`function_definition\\'") parent 
matlab-ts-mode--set-function-indent-level-for-gp)}>
+end %  <{Matched rule: ((node-is 
"\\`\\(?:catch_clause\\|e\\(?:lse\\(?:\\(?:if\\)?_clause\\)\\|nd\\)\\)\\'") 
parent 0)}>
diff --git 
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_keyword_as_var.m
 
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_keyword_as_var.m
new file mode 100644
index 0000000000..b6cfd75875
--- /dev/null
+++ 
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_keyword_as_var.m
@@ -0,0 +1,11 @@
+% -*- matlab-ts -*-
+
+function out = electric_indent_keyword_as_var(in1, arguments)
+    arguments
+        in1 {mustBeTextScalar}
+        arguments     cell{mustBeText}={  }
+    end
+
+    % following both returns the first entry of arguments, then the arguments, 
and a {1}!
+    out = {in1 , arguments{1} arguments {1}};
+end
diff --git 
a/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_keyword_as_var_expected.txt
 
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_keyword_as_var_expected.txt
new file mode 100644
index 0000000000..14a8f0748f
--- /dev/null
+++ 
b/tests/test-matlab-ts-mode-parser-files/copy-of-test-matlab-ts-mode-electric-indent-files/electric_indent_keyword_as_var_expected.txt
@@ -0,0 +1,41 @@
+# -*- t-utils-ts-parse-tree -*-
+(source_file<1,322> (comment[1,20]@{% -*- matlab-ts -*-}@) \n[20,22]
+ (function_definition<22,321> function[22,30]
+  (function_output<31,36> (identifier[31,34]@{out}@) =[35,36])
+  name: (identifier[37,67]@{electric_indent_keyword_as_var}@)
+  (function_arguments<67,83> ([67,68] arguments: (identifier[68,71]@{in1}@) 
,[71,72]
+   (identifier<73,82> arguments[73,82])
+   )[82,83])
+  \n[83,84]
+  (arguments_statement<88,180> arguments[88,97] \n[97,98]
+   (property<106,128> name: (identifier[106,109]@{in1}@)
+    (validation_functions<110,128> {[110,111] 
(identifier[111,127]@{mustBeTextScalar}@) }[127,128]))
+   \n[128,129]
+   (property<137,172>
+    name: (identifier<137,146> arguments[137,146])
+    (identifier[151,155]@{cell}@)
+    (validation_functions<155,167> {[155,156] 
(identifier[156,166]@{mustBeText}@) }[166,167])
+    (default_value<167,172> =[167,168]
+     (cell<168,172> {[168,169] }[171,172])))
+   \n[172,173] end[177,180])
+  (comment[186,271]@{% following both returns the first entry of argume...}@)
+  (block<276,318>
+   (assignment<276,316> left: (identifier[276,279]@{out}@) =[280,281]
+    right: 
+     (cell<282,316> {[282,283]
+      (row<283,315> (identifier[283,286]@{in1}@) ,[287,288]
+       (function_call<289,301>
+        name: (identifier<289,298> arguments[289,298])
+        {[298,299]
+        (arguments<299,300> argument: (number[299,300]@{1}@))
+        }[300,301])
+       ,[302,302]
+       (identifier<302,311> arguments[302,311])
+       ,[312,312]
+       (cell<312,315> {[312,313]
+        (row<313,314> (number[313,314]@{1}@))
+        }[314,315]))
+      }[315,316]))
+   ;[316,317] \n[317,318])
+  end[318,321])
+ \n[321,322])

Reply via email to