]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/progmodes/sh-script.el (sh-smie-sh-rules): Tweak indent of new `for`
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 26 Jan 2021 22:57:26 +0000 (17:57 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 26 Jan 2021 22:58:42 +0000 (17:58 -0500)
The new `for (TEST) { BODY }` syntax introduces various challenges.
This patch just fixes a trivial subcase.

lisp/progmodes/sh-script.el
test/manual/indent/shell.sh

index cc045a1b2d1b98b456c44e5e52d05b3e62b4ac0e..fd689527676b8f84d4584615fd03a620f45fa408 100644 (file)
@@ -1957,12 +1957,18 @@ May return nil if the line should not be treated as continued."
     ('(:after . "case-)") (- (sh-var-value 'sh-indent-for-case-alt)
                              (sh-var-value 'sh-indent-for-case-label)))
     (`(:before . ,(or "(" "{" "[" "while" "if" "for" "case"))
-     (if (not (smie-rule-prev-p "&&" "||" "|"))
-         (when (smie-rule-hanging-p)
-           (smie-rule-parent))
+     (cond
+      ((and (equal token "{") (smie-rule-parent-p "for"))
+       (let ((data (smie-backward-sexp "in")))
+         (when (equal (nth 2 data) "for")
+           `(column . ,(smie-indent-virtual)))))
+      ((not (smie-rule-prev-p "&&" "||" "|"))
+       (when (smie-rule-hanging-p)
+         (smie-rule-parent)))
+      (t
        (unless (smie-rule-bolp)
         (while (equal "|" (nth 2 (smie-backward-sexp 'halfexp))))
-        `(column . ,(smie-indent-virtual)))))
+        `(column . ,(smie-indent-virtual))))))
     ;; FIXME: Maybe this handling of ;; should be made into
     ;; a smie-rule-terminator function that takes the substitute ";" as arg.
     (`(:before . ,(or ";;" ";&" ";;&"))
index dc184ea0d77cbeeacd6f24171b4355b78f2ba9f7..bd4a74f705450959fb982626e7e88c43a361aeaf 100755 (executable)
@@ -6,6 +6,13 @@ setlock -n /tmp/getmail.lock && echo getmail isn\'t running
 toto=$(grep hello foo |
            wc)
 
+myfun () {
+    for ((it=0; it<${limit}; ++it))
+    {
+       echo "whatever $it"
+    }
+}
+
 # adsgsdg
 
 if foo; then