diff options
Diffstat (limited to 't')
-rw-r--r-- | t/Makefile | 4 | ||||
-rw-r--r-- | t/chainlint.sed | 38 | ||||
-rw-r--r-- | t/chainlint/close-nested-and-parent-together.expect | 3 | ||||
-rw-r--r-- | t/chainlint/complex-if-in-cuddled-loop.expect | 3 | ||||
-rw-r--r-- | t/chainlint/cuddled-if-then-else.expect | 3 | ||||
-rw-r--r-- | t/chainlint/cuddled-loop.expect | 3 | ||||
-rw-r--r-- | t/chainlint/cuddled.expect | 12 | ||||
-rw-r--r-- | t/chainlint/inline-comment.expect | 3 | ||||
-rw-r--r-- | t/chainlint/semicolon.expect | 3 |
9 files changed, 37 insertions, 35 deletions
diff --git a/t/Makefile b/t/Makefile index f4ae40be46..46cd5fc527 100644 --- a/t/Makefile +++ b/t/Makefile @@ -72,8 +72,8 @@ clean-chainlint: check-chainlint: @mkdir -p '$(CHAINLINTTMP_SQ)' && \ sed -e '/^# LINT: /d' $(patsubst %,chainlint/%.test,$(CHAINLINTTESTS)) >'$(CHAINLINTTMP_SQ)'/tests && \ - cat $(patsubst %,chainlint/%.expect,$(CHAINLINTTESTS)) >'$(CHAINLINTTMP_SQ)'/expect && \ - $(CHAINLINT) '$(CHAINLINTTMP_SQ)'/tests >'$(CHAINLINTTMP_SQ)'/actual && \ + sed -e '/^[ ]*$$/d' $(patsubst %,chainlint/%.expect,$(CHAINLINTTESTS)) >'$(CHAINLINTTMP_SQ)'/expect && \ + $(CHAINLINT) '$(CHAINLINTTMP_SQ)'/tests | grep -v '^[ ]*$$' >'$(CHAINLINTTMP_SQ)'/actual && \ diff -u '$(CHAINLINTTMP_SQ)'/expect '$(CHAINLINTTMP_SQ)'/actual test-lint: test-lint-duplicates test-lint-executable test-lint-shell-syntax \ diff --git a/t/chainlint.sed b/t/chainlint.sed index b1505ef2cd..dc4ce37cb5 100644 --- a/t/chainlint.sed +++ b/t/chainlint.sed @@ -131,11 +131,15 @@ b h bnextln } -# "(..." line -- split off and stash "(", then process "..." as its own line +# "(..." line -- "(" opening subshell cuddled with command; temporarily replace +# "(" with sentinel "^" and process the line as if "(" had been seen solo on +# the preceding line; this temporary replacement prevents several rules from +# accidentally thinking "(" introduces a nested subshell; "^" is changed back +# to "(" at output time x -s/.*/(/ +s/.*// x -s/(// +s/(/^/ bslurp :nextln @@ -168,12 +172,12 @@ s/.*\n// /"[^"]*#[^"]*"/!s/[ ]#.*$// } # one-liner "case ... esac" -/^[ ]*case[ ]*..*esac/bchkchn +/^[ ^]*case[ ]*..*esac/bchkchn # multi-line "case ... esac" -/^[ ]*case[ ]..*[ ]in/bcase +/^[ ^]*case[ ]..*[ ]in/bcase # multi-line "for ... done" or "while ... done" -/^[ ]*for[ ]..*[ ]in/bcont -/^[ ]*while[ ]/bcont +/^[ ^]*for[ ]..*[ ]in/bcont +/^[ ^]*while[ ]/bcont /^[ ]*do[ ]/bcont /^[ ]*do[ ]*$/bcont /;[ ]*do/bcont @@ -184,7 +188,7 @@ s/.*\n// /||[ ]*exit[ ]/bcont /||[ ]*exit[ ]*$/bcont # multi-line "if...elsif...else...fi" -/^[ ]*if[ ]/bcont +/^[ ^]*if[ ]/bcont /^[ ]*then[ ]/bcont /^[ ]*then[ ]*$/bcont /;[ ]*then/bcont @@ -197,15 +201,15 @@ s/.*\n// /^[ ]*fi[ ]*[<>|]/bdone /^[ ]*fi[ ]*)/bdone # nested one-liner "(...) &&" -/^[ ]*(.*)[ ]*&&[ ]*$/bchkchn +/^[ ^]*(.*)[ ]*&&[ ]*$/bchkchn # nested one-liner "(...)" -/^[ ]*(.*)[ ]*$/bchkchn +/^[ ^]*(.*)[ ]*$/bchkchn # nested one-liner "(...) >x" (or "2>x" or "<x" or "|x") -/^[ ]*(.*)[ ]*[0-9]*[<>|]/bchkchn +/^[ ^]*(.*)[ ]*[0-9]*[<>|]/bchkchn # nested multi-line "(...\n...)" -/^[ ]*(/bnest +/^[ ^]*(/bnest # multi-line "{...\n...}" -/^[ ]*{/bblock +/^[ ^]*{/bblock # closing ")" on own line -- exit subshell /^[ ]*)/bclssolo # "$((...))" -- arithmetic expansion; not closing ")" @@ -237,6 +241,7 @@ s/.*\n// :cont # retrieve and print previous line x +s/^\([ ]*\)^/\1(/ s/?!HERE?!/<</g n bslurp @@ -292,6 +297,7 @@ bfolded # found "case ... in" -- pass through untouched :case x +s/^\([ ]*\)^/\1(/ s/?!HERE?!/<</g n :cascom @@ -326,6 +332,7 @@ bchkchn :nest x :nstslrp +s/^\([ ]*\)^/\1(/ s/?!HERE?!/<</g n :nstcom @@ -354,6 +361,7 @@ bchkchn # found multi-line "{...\n...}" block -- pass through untouched :block x +s/^\([ ]*\)^/\1(/ s/?!HERE?!/<</g n :blkcom @@ -371,17 +379,21 @@ bblock :clssolo x s/\( ?!AMP?!\)* ?!AMP?!$// +s/^\([ ]*\)^/\1(/ s/?!HERE?!/<</g p x +s/^\([ ]*\)^/\1(/ s/?!HERE?!/<</g b # found closing "...)" -- exit subshell loop :close x +s/^\([ ]*\)^/\1(/ s/?!HERE?!/<</g p x +s/^\([ ]*\)^/\1(/ s/?!HERE?!/<</g b diff --git a/t/chainlint/close-nested-and-parent-together.expect b/t/chainlint/close-nested-and-parent-together.expect index 5ef509eb49..72d482f76d 100644 --- a/t/chainlint/close-nested-and-parent-together.expect +++ b/t/chainlint/close-nested-and-parent-together.expect @@ -1,4 +1,3 @@ -( -cd foo && +(cd foo && (bar && baz)) diff --git a/t/chainlint/complex-if-in-cuddled-loop.expect b/t/chainlint/complex-if-in-cuddled-loop.expect index b8aa626ed0..2fca183409 100644 --- a/t/chainlint/complex-if-in-cuddled-loop.expect +++ b/t/chainlint/complex-if-in-cuddled-loop.expect @@ -1,5 +1,4 @@ -( -for i in a b c; do +(for i in a b c; do if test "$(echo $(waffle bat))" = "eleventeen" && test "$x" = "$y"; then : diff --git a/t/chainlint/cuddled-if-then-else.expect b/t/chainlint/cuddled-if-then-else.expect index 4e089b087a..1d8ed58c49 100644 --- a/t/chainlint/cuddled-if-then-else.expect +++ b/t/chainlint/cuddled-if-then-else.expect @@ -1,5 +1,4 @@ -( -if test -z ""; then +(if test -z ""; then echo empty else echo bizzy diff --git a/t/chainlint/cuddled-loop.expect b/t/chainlint/cuddled-loop.expect index 7932303763..9cf260708e 100644 --- a/t/chainlint/cuddled-loop.expect +++ b/t/chainlint/cuddled-loop.expect @@ -1,5 +1,4 @@ -( - while read x +( while read x do foobar bop || exit 1 done <file ) && outside subshell diff --git a/t/chainlint/cuddled.expect b/t/chainlint/cuddled.expect index 773476adc8..c3e0be4047 100644 --- a/t/chainlint/cuddled.expect +++ b/t/chainlint/cuddled.expect @@ -1,10 +1,8 @@ -( -cd foo && +(cd foo && bar ) && -( -cd foo ?!AMP?! +(cd foo ?!AMP?! bar ) && @@ -12,10 +10,8 @@ cd foo ?!AMP?! cd foo && bar) && -( -cd foo && +(cd foo && bar) && -( -cd foo ?!AMP?! +(cd foo ?!AMP?! bar) diff --git a/t/chainlint/inline-comment.expect b/t/chainlint/inline-comment.expect index f6b42757d2..dd0dace077 100644 --- a/t/chainlint/inline-comment.expect +++ b/t/chainlint/inline-comment.expect @@ -4,6 +4,5 @@ flibble "not a # comment" ) && -( -cd foo && +(cd foo && flibble "not a # comment") diff --git a/t/chainlint/semicolon.expect b/t/chainlint/semicolon.expect index 05141a96cf..ed0b3707ae 100644 --- a/t/chainlint/semicolon.expect +++ b/t/chainlint/semicolon.expect @@ -13,8 +13,7 @@ ( foo; ) && -( -cd foo && +(cd foo && for i in a b c; do echo; done) |