chainlint.sed: swallow comments consistently
commit31da22d1fd46e80c592f6b04c6cafdb983c8a903
authorEric Sunshine <sunshine@sunshineco.com>
Mon, 13 Dec 2021 06:30:58 +0000 (13 01:30 -0500)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 Dec 2021 22:15:29 +0000 (13 14:15 -0800)
tree962057bfa9769dc73138cb78e378affc2e33aa18
parent34ba05c2966f9e96b74ea984251e3bda802d6a7a
chainlint.sed: swallow comments consistently

When checking for broken a &&-chain, chainlint.sed knows that the final
statement in a subshell should not end with `&&`, so it takes care to
make a distinction between the final line which is an actual statement
and any lines which may be mere comments preceding the closing ')'. As
such, it swallows comment lines so that they do not interfere with the
&&-chain check.

However, since `sed` does not provide any sort of real recursion,
chainlint.sed only checks &&-chains in subshells one level deep; it
doesn't do any checking in deeper subshells or in `{...}` blocks within
subshells. Furthermore, on account of potential implementation
complexity, it doesn't check &&-chains within `case` arms.

Due to an oversight, it also doesn't swallow comments inside deep
subshells, `{...}` blocks, or `case` statements, which makes its output
inconsistent (swallowing comments in some cases but not others).
Unfortunately, this inconsistency seeps into the chainlint self-test
"expect" files, which potentially makes it difficult to reuse the
self-tests should a more capable chainlint ever be developed. Therefore,
teach chainlint.sed to consistently swallow comments in all cases.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/chainlint.sed
t/chainlint/block-comment.expect [new file with mode: 0644]
t/chainlint/block-comment.test [new file with mode: 0644]
t/chainlint/case-comment.expect [new file with mode: 0644]
t/chainlint/case-comment.test [new file with mode: 0644]
t/chainlint/nested-subshell-comment.expect