Subject: Re: bug#46093: Shell-script mode formatting error eats half the page

From: Lars Ingebrigtsen <[email-masked]>
Date: Wed, 27 Jan 2021 03:09:23 +0100

積丹尼 Dan Jacobson <[email-masked]> writes:

> Here we observe lines severely shoved over due to Shell-script mode not
> recognizing the statement has terminated. emacs-version "27.1".
>
> $ cat x.sh
> set /home/$j/.adobe /home/$j/.macromedia && for i do if test -d $i; then rm -vr $i; fi; done
>                                                 echo these lines are now indented wrongly
>                                                 echo these lines are now indented wrongly for the rest of the file.
>                                                 echo There is no recovery.

Here's a simpler reproducer:

for i do; if test -d $i; then rm -vr $i; fi; done
    echo these lines are now indented wrongly
    echo these lines are now indented wrongly for the rest of the file.
    echo There is no recovery.

This indents correctly, though:

for i; do if test -d $i; then rm -vr $i; fi; done
echo these lines are now indented wrongly
echo these lines are now indented wrongly for the rest of the file.
echo There is no recovery.

(I moved the semicolon to before the "do", not after.  Which is
apparently the correct syntax according to

https://www.gnu.org/software/bash/manual/bash.html#Compound-Commands

for

    The syntax of the for command is:

    for name [ [in [words …] ] ; ] do commands; done

So Emacs seems to do the correct thing here; closing.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no