Hi Eric, On Thu, 1 Sep 2022, Eric Sunshine via GitGitGadget wrote: > contrib/buildsystems/CMakeLists.txt | 2 +- > t/Makefile | 49 +- > t/README | 5 - > t/chainlint.pl | 730 ++++++++++++++++++ > t/chainlint.sed | 399 ---------- > t/chainlint/blank-line-before-esac.expect | 18 + > t/chainlint/blank-line-before-esac.test | 19 + > t/chainlint/block.expect | 15 +- > t/chainlint/block.test | 15 +- > t/chainlint/chain-break-background.expect | 9 + > t/chainlint/chain-break-background.test | 10 + > t/chainlint/chain-break-continue.expect | 12 + > t/chainlint/chain-break-continue.test | 13 + > t/chainlint/chain-break-false.expect | 9 + > t/chainlint/chain-break-false.test | 10 + > t/chainlint/chain-break-return-exit.expect | 19 + > t/chainlint/chain-break-return-exit.test | 23 + > t/chainlint/chain-break-status.expect | 9 + > t/chainlint/chain-break-status.test | 11 + > t/chainlint/chained-block.expect | 9 + > t/chainlint/chained-block.test | 11 + > t/chainlint/chained-subshell.expect | 10 + > t/chainlint/chained-subshell.test | 13 + > .../command-substitution-subsubshell.expect | 2 + > .../command-substitution-subsubshell.test | 3 + > t/chainlint/complex-if-in-cuddled-loop.expect | 2 +- > t/chainlint/double-here-doc.expect | 2 + > t/chainlint/double-here-doc.test | 12 + > t/chainlint/dqstring-line-splice.expect | 3 + > t/chainlint/dqstring-line-splice.test | 7 + > t/chainlint/dqstring-no-interpolate.expect | 11 + > t/chainlint/dqstring-no-interpolate.test | 15 + > t/chainlint/empty-here-doc.expect | 3 + > t/chainlint/empty-here-doc.test | 5 + > t/chainlint/exclamation.expect | 4 + > t/chainlint/exclamation.test | 8 + > t/chainlint/for-loop-abbreviated.expect | 5 + > t/chainlint/for-loop-abbreviated.test | 6 + > t/chainlint/for-loop.expect | 4 +- > t/chainlint/function.expect | 11 + > t/chainlint/function.test | 13 + > t/chainlint/here-doc-indent-operator.expect | 5 + > t/chainlint/here-doc-indent-operator.test | 13 + > t/chainlint/here-doc-multi-line-string.expect | 3 +- > t/chainlint/if-condition-split.expect | 7 + > t/chainlint/if-condition-split.test | 8 + > t/chainlint/if-in-loop.expect | 2 +- > t/chainlint/if-in-loop.test | 2 +- > t/chainlint/loop-detect-failure.expect | 15 + > t/chainlint/loop-detect-failure.test | 17 + > t/chainlint/loop-detect-status.expect | 18 + > t/chainlint/loop-detect-status.test | 19 + > t/chainlint/loop-in-if.expect | 2 +- > t/chainlint/loop-upstream-pipe.expect | 10 + > t/chainlint/loop-upstream-pipe.test | 11 + > t/chainlint/multi-line-string.expect | 11 +- > t/chainlint/nested-loop-detect-failure.expect | 31 + > t/chainlint/nested-loop-detect-failure.test | 35 + > t/chainlint/nested-subshell.expect | 2 +- > t/chainlint/one-liner-for-loop.expect | 9 + > t/chainlint/one-liner-for-loop.test | 10 + > t/chainlint/return-loop.expect | 5 + > t/chainlint/return-loop.test | 6 + > t/chainlint/semicolon.expect | 2 +- > t/chainlint/sqstring-in-sqstring.expect | 4 + > t/chainlint/sqstring-in-sqstring.test | 5 + > t/chainlint/t7900-subtree.expect | 13 +- > t/chainlint/token-pasting.expect | 27 + > t/chainlint/token-pasting.test | 32 + > t/chainlint/while-loop.expect | 4 +- > t/t0027-auto-crlf.sh | 7 +- > t/t3070-wildmatch.sh | 5 - > t/test-lib.sh | 12 +- > 73 files changed, 1439 insertions(+), 449 deletions(-) > create mode 100755 t/chainlint.pl > delete mode 100644 t/chainlint.sed > create mode 100644 t/chainlint/blank-line-before-esac.expect > create mode 100644 t/chainlint/blank-line-before-esac.test > create mode 100644 t/chainlint/chain-break-background.expect > create mode 100644 t/chainlint/chain-break-background.test > create mode 100644 t/chainlint/chain-break-continue.expect > create mode 100644 t/chainlint/chain-break-continue.test > create mode 100644 t/chainlint/chain-break-false.expect > create mode 100644 t/chainlint/chain-break-false.test > create mode 100644 t/chainlint/chain-break-return-exit.expect > create mode 100644 t/chainlint/chain-break-return-exit.test > create mode 100644 t/chainlint/chain-break-status.expect > create mode 100644 t/chainlint/chain-break-status.test > create mode 100644 t/chainlint/chained-block.expect > create mode 100644 t/chainlint/chained-block.test > create mode 100644 t/chainlint/chained-subshell.expect > create mode 100644 t/chainlint/chained-subshell.test > create mode 100644 t/chainlint/command-substitution-subsubshell.expect > create mode 100644 t/chainlint/command-substitution-subsubshell.test > create mode 100644 t/chainlint/double-here-doc.expect > create mode 100644 t/chainlint/double-here-doc.test > create mode 100644 t/chainlint/dqstring-line-splice.expect > create mode 100644 t/chainlint/dqstring-line-splice.test > create mode 100644 t/chainlint/dqstring-no-interpolate.expect > create mode 100644 t/chainlint/dqstring-no-interpolate.test > create mode 100644 t/chainlint/empty-here-doc.expect > create mode 100644 t/chainlint/empty-here-doc.test > create mode 100644 t/chainlint/exclamation.expect > create mode 100644 t/chainlint/exclamation.test > create mode 100644 t/chainlint/for-loop-abbreviated.expect > create mode 100644 t/chainlint/for-loop-abbreviated.test > create mode 100644 t/chainlint/function.expect > create mode 100644 t/chainlint/function.test > create mode 100644 t/chainlint/here-doc-indent-operator.expect > create mode 100644 t/chainlint/here-doc-indent-operator.test > create mode 100644 t/chainlint/if-condition-split.expect > create mode 100644 t/chainlint/if-condition-split.test > create mode 100644 t/chainlint/loop-detect-failure.expect > create mode 100644 t/chainlint/loop-detect-failure.test > create mode 100644 t/chainlint/loop-detect-status.expect > create mode 100644 t/chainlint/loop-detect-status.test > create mode 100644 t/chainlint/loop-upstream-pipe.expect > create mode 100644 t/chainlint/loop-upstream-pipe.test > create mode 100644 t/chainlint/nested-loop-detect-failure.expect > create mode 100644 t/chainlint/nested-loop-detect-failure.test > create mode 100644 t/chainlint/one-liner-for-loop.expect > create mode 100644 t/chainlint/one-liner-for-loop.test > create mode 100644 t/chainlint/return-loop.expect > create mode 100644 t/chainlint/return-loop.test > create mode 100644 t/chainlint/sqstring-in-sqstring.expect > create mode 100644 t/chainlint/sqstring-in-sqstring.test > create mode 100644 t/chainlint/token-pasting.expect > create mode 100644 t/chainlint/token-pasting.test This looks like it was a lot of work. And that it would be a lot of work to review, too, and certainly even more work to maintain. Are we really sure that we want to burden the Git project with this much stuff that is not actually related to Git's core functionality? It would be one thing if we could use a well-maintained third-party tool to do this job. But adding this to our plate? I hope we can avoid that. Ciao, Dscho