]> git.eshelyaron.com Git - emacs.git/commitdiff
Use c-ts-common baseline rule in java-ts-mode (bug#75154)
authorYuan Fu <casouri@gmail.com>
Fri, 14 Feb 2025 02:24:41 +0000 (18:24 -0800)
committerEshel Yaron <me@eshelyaron.com>
Mon, 17 Mar 2025 11:06:07 +0000 (12:06 +0100)
Use it for function parameters.

* lisp/progmodes/java-ts-mode.el:
(java-ts-mode--standalone-predicate): New function.
(java-ts-mode--indent-rules): Comment out rules for function
parameters and statements, and add
c-ts-common-baseline-indent-rule as fallback.
(java-ts-mode): Setup.
(java-ts-mode--first-line-on-multi-line-string): Mark BOL as
unused.
* test/lisp/progmodes/java-ts-mode-resources/indent.erts:
New test.

(cherry picked from commit 93cd55f40e5e1788e55d82c572f1fafac1dee499)

lisp/progmodes/java-ts-mode.el
test/lisp/progmodes/java-ts-mode-resources/indent.erts

index d92850bf629b443355b4f7995a6f841bea1e9578..28f8ef3c8f2bb4b938eaf387dac491184e99762b 100644 (file)
@@ -99,7 +99,18 @@ again."
     table)
   "Syntax table for `java-ts-mode'.")
 
-(defun java-ts-mode--first-line-on-multi-line-string (_node parent bol &rest _)
+(defun java-ts-mode--standalone-predicate (node)
+  "Java's standalone predicate.
+Return t if NODE is on the start of a line."
+  (save-excursion
+    (goto-char (treesit-node-start node))
+    (if (looking-back (rx bol (* whitespace) (? ".")) (pos-bol))
+        t
+      (back-to-indentation)
+      (when (eq (char-after) ?.)
+        (point)))))
+
+(defun java-ts-mode--first-line-on-multi-line-string (_node parent _bol &rest _)
   "Simple-indent matcher for the first line in a multi-line string block.
 PARENT and BOL are the as in other matchers."
   (and (treesit-node-match-p parent "multiline_string_fragment")
@@ -162,8 +173,8 @@ PARENT and BOL are the as in other matchers."
      ((parent-is "argument_list") parent-bol java-ts-mode-indent-offset)
      ((parent-is "annotation_argument_list") parent-bol java-ts-mode-indent-offset)
      ((parent-is "modifiers") parent-bol 0)
-     ((parent-is "formal_parameters") parent-bol java-ts-mode-indent-offset)
-     ((parent-is "formal_parameter") parent-bol 0)
+     ;; ((parent-is "formal_parameters") parent-bol java-ts-mode-indent-offset)
+     ;; ((parent-is "formal_parameter") parent-bol 0)
      ((parent-is "init_declarator") parent-bol java-ts-mode-indent-offset)
      ((parent-is "if_statement") parent-bol java-ts-mode-indent-offset)
      ((parent-is "for_statement") parent-bol java-ts-mode-indent-offset)
@@ -172,7 +183,8 @@ PARENT and BOL are the as in other matchers."
      ((parent-is "case_statement") parent-bol java-ts-mode-indent-offset)
      ((parent-is "labeled_statement") parent-bol java-ts-mode-indent-offset)
      ((parent-is "do_statement") parent-bol java-ts-mode-indent-offset)
-     ((parent-is "block") standalone-parent java-ts-mode-indent-offset)))
+     ;; ((parent-is "block") standalone-parent java-ts-mode-indent-offset)
+     c-ts-common-baseline-indent-rule))
   "Tree-sitter indent rules.")
 
 (defvar java-ts-mode--keywords
@@ -409,6 +421,9 @@ Return nil if there is no name or if NODE is not a defun node."
                   (do . "do_statement")))
     (setq-local c-ts-common-indent-offset 'java-ts-mode-indent-offset)
     (setq-local treesit-simple-indent-rules java-ts-mode--indent-rules)
+    (setq-local treesit-simple-indent-standalone-predicate
+                #'java-ts-mode--standalone-predicate)
+    (setq-local c-ts-common-list-indent-style 'simple)
 
     ;; Electric
     (setq-local electric-indent-chars
index 514d2e08977ac543dad1cd6acb2d895a3285f629..7cf593404545b9ef11f5416bf16cd132f3a72109 100644 (file)
@@ -141,3 +141,31 @@ public class Java {
     }
 }
 =-=-=
+
+Name: Method chaining
+
+=-=
+public class FloodFill {
+public static void main(String[] args) {
+List<Foo> stream = students.stream(MAX_VALUE)
+.filter(item -> {
+return item.getValue() > 100 &&
+item.isActive();
+})
+.map()
+.collect();
+}
+}
+=-=
+public class FloodFill {
+    public static void main(String[] args) {
+        List<Foo> stream = students.stream(MAX_VALUE)
+                .filter(item -> {
+                    return item.getValue() > 100 &&
+                           item.isActive();
+                })
+                .map()
+                .collect();
+    }
+}
+=-=-=