chainlint: recognize multi-line $(...) when command cuddled with "$("

For multi-line $(...) expressions nested within subshells, chainlint.sed
only recognizes:

    x=$(
        echo foo &&
        ...

but it is not unlikely that test authors may also cuddle the command
with the opening "$(", so support that style, as well:

    x=$(echo foo &&
        ...

The closing ")" is already correctly recognized when cuddled or not.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Eric Sunshine 2018-08-13 04:47:36 -04:00 committed by Junio C Hamano
parent 7e32a31b21
commit 06fc5c9f90
3 changed files with 21 additions and 3 deletions

View File

@ -216,7 +216,7 @@ s/.*\n//
# "$(...)" -- command substitution; not closing ")"
/\$([^)][^)]*)[^)]*$/bcheckchain
# multi-line "$(...\n...)" -- command substitution; treat as nested subshell
/\$([ ]*$/bnest
/\$([^)]*$/bnest
# "=(...)" -- Bash array assignment; not closing ")"
/=(/bcheckchain
# closing "...) &&"

View File

@ -6,4 +6,13 @@
>> ) &&
echo ok
>) |
sort
sort &&
(
bar &&
x=$(echo bar |
cat
>> ) &&
y=$(echo baz |
>> fip) &&
echo fail
>)

View File

@ -6,4 +6,13 @@
) &&
echo ok
) |
sort
sort &&
(
bar &&
x=$(echo bar |
cat
) &&
y=$(echo baz |
fip) &&
echo fail
)