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

    matlab-ts-mode: indent blank line when adding args to fcn call
---
 matlab-ts-mode.el                                  |   9 ++
 .../indent_xr_blank_line_in_fcn_call.m             |  29 +++++
 .../indent_xr_blank_line_in_fcn_call_expected.org  | 117 +++++++++++++++++++++
 3 files changed, 155 insertions(+)

diff --git a/matlab-ts-mode.el b/matlab-ts-mode.el
index 2ab2c27ae4..fca772051c 100644
--- a/matlab-ts-mode.el
+++ b/matlab-ts-mode.el
@@ -2714,6 +2714,15 @@ Example:
       ,#'matlab-ts-mode--i-prior-line-anchor
       0)
 
+     ;; I-Rule: indent blank line when adding args to fcn call
+     ;; See: 
tests/test-matlab-ts-mode-indent-xr-files/indent_xr_blank_line_in_fcn_call.m
+     ((and no-node
+           (parent-is ,(rx bos "function_call" eos)))
+      (lambda (_node parent _bol &rest _)
+        (let ((fcn-name (treesit-node-child-by-field-name parent "name")))
+          (treesit-node-start (treesit-node-next-sibling fcn-name))))
+      1)
+
      ;; I-Rule: Assert if no rule matched and asserts are enabled.
      ,matlab-ts-mode--indent-assert-rule
      ))
diff --git 
a/tests/test-matlab-ts-mode-indent-xr-files/indent_xr_blank_line_in_fcn_call.m 
b/tests/test-matlab-ts-mode-indent-xr-files/indent_xr_blank_line_in_fcn_call.m
new file mode 100644
index 0000000000..11233e3451
--- /dev/null
+++ 
b/tests/test-matlab-ts-mode-indent-xr-files/indent_xr_blank_line_in_fcn_call.m
@@ -0,0 +1,29 @@
+% -*- matlab-ts -*-
+
+%{
+  Exercise inserting a blankline in an existing function call.
+
+  Case1:
+  (t-utils-xr
+  
+  (re-search-forward "in2 \\.\\.\\.")
+  (re-search-backward " ")
+
+  (insert ",")
+  "C-e"
+
+  "C-m"
+  (insert "in3 ...")
+
+  (re-search-backward "^fun")
+  (t-utils-xr-print-code (point) (point-max))
+  )
+
+%}
+
+function indent_xr_blank_line_in_fcn_call(in1, in2, in3)
+    fprintf(1, '%s:%s:%s\n', ...
+            in1, ...
+            in2 ...
+            );
+end
diff --git 
a/tests/test-matlab-ts-mode-indent-xr-files/indent_xr_blank_line_in_fcn_call_expected.org
 
b/tests/test-matlab-ts-mode-indent-xr-files/indent_xr_blank_line_in_fcn_call_expected.org
new file mode 100644
index 0000000000..9fffb8c194
--- /dev/null
+++ 
b/tests/test-matlab-ts-mode-indent-xr-files/indent_xr_blank_line_in_fcn_call_expected.org
@@ -0,0 +1,117 @@
+#+startup: showall
+
+* Executing commands from indent_xr_blank_line_in_fcn_call.m:7:2:
+
+  Case1: (t-utils-xr
+  
+  (re-search-forward "in2 \\.\\.\\.")
+  (re-search-backward " ")
+
+  (insert ",")
+  "C-e"
+
+  "C-m"
+  (insert "in3 ...")
+
+  (re-search-backward "^fun")
+  (t-utils-xr-print-code (point) (point-max))
+  )
+
+- Invoking      : (re-search-forward "in2 \\.\\.\\.")
+  Start point   :  314
+  Moved to point:  450
+  : 27:19:             in2 ...
+  :                           ^
+  No buffer modifications
+
+- Invoking      : (re-search-backward " ")
+  Start point   :  450
+  Moved to point:  446
+  : 27:15:             in2 ...
+  :                       ^
+  No buffer modifications
+
+- Invoking      : (insert ",")
+  Start point   :  446
+  Moved to point:  447
+  : 27:16:             in2, ...
+  :                        ^
+  Buffer modified:
+  #+begin_src diff
+--- start_contents
++++ end_contents
+@@ -24,6 +24,6 @@
+ function indent_xr_blank_line_in_fcn_call(in1, in2, in3)
+     fprintf(1, '%s:%s:%s\n', ...
+             in1, ...
+-            in2 ...
++            in2, ...
+             );
+ end
+  #+end_src diff
+
+- Invoking      : "C-e" = move-end-of-line
+  Start point   :  447
+  Moved to point:  451
+  : 27:20:             in2, ...
+  :                            ^
+  No buffer modifications
+
+- Invoking      : "C-m" = newline
+  Start point   :  451
+  Moved to point:  464
+  : 28:12:             
+  :                    ^
+  Buffer modified:
+  #+begin_src diff
+--- start_contents
++++ end_contents
+@@ -25,5 +25,6 @@
+     fprintf(1, '%s:%s:%s\n', ...
+             in1, ...
+             in2, ...
++            
+             );
+ end
+  #+end_src diff
+
+- Invoking      : (insert "in3 ...")
+  Start point   :  464
+  Moved to point:  471
+  : 28:19:             in3 ...
+  :                           ^
+  Buffer modified:
+  #+begin_src diff
+--- start_contents
++++ end_contents
+@@ -25,6 +25,6 @@
+     fprintf(1, '%s:%s:%s\n', ...
+             in1, ...
+             in2, ...
+-            
++            in3 ...
+             );
+ end
+  #+end_src diff
+
+- Invoking      : (re-search-backward "^fun")
+  Start point   :  471
+  Moved to point:  320
+  : 24:0: function indent_xr_blank_line_in_fcn_call(in1, in2, in3)
+  :       ^
+  No buffer modifications
+
+- Invoking      : (t-utils-xr-print-code (point) (point-max))
+  Start point   :  320
+  No point movement
+  standard-output:
+  #+begin_src matlab-ts
+function indent_xr_blank_line_in_fcn_call(in1, in2, in3)
+    fprintf(1, '%s:%s:%s\\n', ...
+            in1, ...
+            in2, ...
+            in3 ...
+            );
+end
+  #+end_src
+  No buffer modifications

Reply via email to