git-commit-vandalism/t/chainlint
Eric Sunshine d00113ec34 t/Makefile: apply chainlint.pl to existing self-tests
Now that chainlint.pl is functional, take advantage of the existing
chainlint self-tests to validate its operation. (While at it, stop
validating chainlint.sed against the self-tests since it will soon be
retired.)

Due to chainlint.sed implementation limitations leaking into the
self-test "expect" files, a few of them require minor adjustment to make
them compatible with chainlint.pl which does not share those
limitations.

First, because `sed` does not provide any sort of real recursion,
chainlint.sed only emulates recursion into subshells, and each level of
recursion leads to a multiplicative increase in complexity of the `sed`
rules. To avoid substantial complexity, chainlint.sed, therefore, only
emulates subshell recursion one level deep. Any subshell deeper than
that is passed through as-is, which means that &&-chains are not checked
in deeper subshells. chainlint.pl, on the other hand, employs a proper
recursive descent parser, thus checks subshells to any depth and
correctly flags broken &&-chains in deep subshells.

Second, due to sed's line-oriented nature, chainlint.sed, by necessity,
folds multi-line quoted strings into a single line. chainlint.pl, on the
other hand, employs a proper lexical analyzer which preserves quoted
strings as-is, including embedded newlines.

Furthermore, the output of chainlint.sed and chainlint.pl do not match
precisely in terms of whitespace. However, since the purpose of the
self-checks is to verify that the ?!AMP?! annotations are being
correctly added, minor whitespace differences are immaterial. For this
reason, rather than adjusting whitespace in all existing self-test
"expect" files to match the new linter's output, the `check-chainlint`
target ignores whitespace differences. Since `diff -w` is not POSIX,
`check-chainlint` attempts to employ `git diff -w`, and only falls back
to non-POSIX `diff -w` (and `-u`) if `git diff` is not available.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-09-01 10:07:40 -07:00
..
arithmetic-expansion.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
arithmetic-expansion.test
bash-array.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
bash-array.test
blank-line.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
blank-line.test t/chainlint/*.test: generalize self-test commentary 2021-12-13 14:15:28 -08:00
block-comment.expect chainlint.sed: swallow comments consistently 2021-12-13 14:15:29 -08:00
block-comment.test chainlint.sed: swallow comments consistently 2021-12-13 14:15:29 -08:00
block.expect t/Makefile: apply chainlint.pl to existing self-tests 2022-09-01 10:07:40 -07:00
block.test t/chainlint/*.test: generalize self-test commentary 2021-12-13 14:15:28 -08:00
broken-chain.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
broken-chain.test
case-comment.expect chainlint.sed: swallow comments consistently 2021-12-13 14:15:29 -08:00
case-comment.test chainlint.sed: swallow comments consistently 2021-12-13 14:15:29 -08:00
case.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
case.test
chain-break-continue.expect chainlint.pl: don't require return|exit|continue to end with && 2022-09-01 10:07:40 -07:00
chain-break-continue.test chainlint.pl: don't require return|exit|continue to end with && 2022-09-01 10:07:40 -07:00
chain-break-return-exit.expect chainlint.pl: don't require return|exit|continue to end with && 2022-09-01 10:07:40 -07:00
chain-break-return-exit.test chainlint.pl: don't require return|exit|continue to end with && 2022-09-01 10:07:40 -07:00
close-nested-and-parent-together.expect chainlint.sed: stop splitting "(..." into separate lines "(" and "..." 2021-12-13 14:15:29 -08:00
close-nested-and-parent-together.test
close-subshell.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
close-subshell.test
command-substitution.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
command-substitution.test
comment.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
comment.test
complex-if-in-cuddled-loop.expect chainlint.sed: stop splitting "(..." into separate lines "(" and "..." 2021-12-13 14:15:29 -08:00
complex-if-in-cuddled-loop.test
cuddled-if-then-else.expect chainlint.sed: stop splitting "(..." into separate lines "(" and "..." 2021-12-13 14:15:29 -08:00
cuddled-if-then-else.test
cuddled-loop.expect chainlint.sed: stop splitting "(..." into separate lines "(" and "..." 2021-12-13 14:15:29 -08:00
cuddled-loop.test
cuddled.expect chainlint.sed: stop splitting "(..." into separate lines "(" and "..." 2021-12-13 14:15:29 -08:00
cuddled.test t/chainlint/*.test: generalize self-test commentary 2021-12-13 14:15:28 -08:00
exit-loop.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
exit-loop.test
exit-subshell.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
exit-subshell.test
for-loop.expect chainlint.sed: stop throwing away here-doc tags 2021-12-13 14:15:29 -08:00
for-loop.test
here-doc-close-subshell.expect chainlint.sed: stop throwing away here-doc tags 2021-12-13 14:15:29 -08:00
here-doc-close-subshell.test
here-doc-multi-line-command-subst.expect chainlint.sed: stop throwing away here-doc tags 2021-12-13 14:15:29 -08:00
here-doc-multi-line-command-subst.test
here-doc-multi-line-string.expect t/Makefile: apply chainlint.pl to existing self-tests 2022-09-01 10:07:40 -07:00
here-doc-multi-line-string.test
here-doc.expect chainlint.sed: stop throwing away here-doc tags 2021-12-13 14:15:29 -08:00
here-doc.test
if-in-loop.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
if-in-loop.test
if-then-else.expect chainlint.sed: stop throwing away here-doc tags 2021-12-13 14:15:29 -08:00
if-then-else.test
incomplete-line.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
incomplete-line.test
inline-comment.expect chainlint.sed: stop splitting "(..." into separate lines "(" and "..." 2021-12-13 14:15:29 -08:00
inline-comment.test
loop-in-if.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
loop-in-if.test
multi-line-nested-command-substitution.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
multi-line-nested-command-substitution.test
multi-line-string.expect t/Makefile: apply chainlint.pl to existing self-tests 2022-09-01 10:07:40 -07:00
multi-line-string.test
negated-one-liner.expect chainlint.sed: drop unnecessary distinction between ?!AMP?! and ?!SEMI?! 2021-12-13 14:15:29 -08:00
negated-one-liner.test
nested-cuddled-subshell.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
nested-cuddled-subshell.test
nested-here-doc.expect chainlint.sed: stop throwing away here-doc tags 2021-12-13 14:15:29 -08:00
nested-here-doc.test
nested-subshell-comment.expect chainlint.sed: swallow comments consistently 2021-12-13 14:15:29 -08:00
nested-subshell-comment.test
nested-subshell.expect t/Makefile: apply chainlint.pl to existing self-tests 2022-09-01 10:07:40 -07:00
nested-subshell.test t/chainlint/*.test: generalize self-test commentary 2021-12-13 14:15:28 -08:00
not-heredoc.expect chainlint.sed: don't mistake << word in string as here-doc operator 2021-12-13 14:15:29 -08:00
not-heredoc.test chainlint.sed: don't mistake << word in string as here-doc operator 2021-12-13 14:15:29 -08:00
one-liner.expect chainlint.sed: drop unnecessary distinction between ?!AMP?! and ?!SEMI?! 2021-12-13 14:15:29 -08:00
one-liner.test t/chainlint/one-liner: avoid overly intimate chainlint.sed knowledge 2021-12-13 14:15:28 -08:00
p4-filespec.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
p4-filespec.test
pipe.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
pipe.test
return-loop.expect chainlint.pl: don't require return|exit|continue to end with && 2022-09-01 10:07:40 -07:00
return-loop.test chainlint.pl: don't require return|exit|continue to end with && 2022-09-01 10:07:40 -07:00
semicolon.expect chainlint.sed: stop splitting "(..." into separate lines "(" and "..." 2021-12-13 14:15:29 -08:00
semicolon.test t/chainlint/*.test: generalize self-test commentary 2021-12-13 14:15:28 -08:00
subshell-here-doc.expect chainlint.sed: stop throwing away here-doc tags 2021-12-13 14:15:29 -08:00
subshell-here-doc.test
subshell-one-liner.expect chainlint.sed: drop subshell-closing ">" annotation 2021-12-13 14:15:29 -08:00
subshell-one-liner.test
t7900-subtree.expect t/Makefile: apply chainlint.pl to existing self-tests 2022-09-01 10:07:40 -07:00
t7900-subtree.test
while-loop.expect chainlint.sed: stop throwing away here-doc tags 2021-12-13 14:15:29 -08:00
while-loop.test