diff options
author | Eric Sunshine <sunshine@sunshineco.com> | 2018-08-13 04:47:35 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-08-13 12:22:11 -0700 |
commit | 7e32a31b2101c3ced65ea9367c747930a4eb39d9 (patch) | |
tree | 86893d053f76b38cef1056130bbfad77999847ae | |
parent | chainlint: match arbitrary here-docs tags rather than hard-coded names (diff) | |
download | tgif-7e32a31b2101c3ced65ea9367c747930a4eb39d9.tar.xz |
chainlint: match 'quoted' here-doc tags
A here-doc tag can be quoted ('EOF') or escaped (\EOF) to suppress
interpolation within the body. Although, chainlint recognizes escaped
tags, it does not know about quoted tags. For completeness, teach it to
recognize quoted tags, as well.
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | t/chainlint.sed | 8 | ||||
-rw-r--r-- | t/chainlint/here-doc.expect | 2 | ||||
-rw-r--r-- | t/chainlint/here-doc.test | 7 | ||||
-rw-r--r-- | t/chainlint/subshell-here-doc.expect | 1 | ||||
-rw-r--r-- | t/chainlint/subshell-here-doc.test | 4 |
5 files changed, 18 insertions, 4 deletions
diff --git a/t/chainlint.sed b/t/chainlint.sed index 2af1a687f8..2901494e8a 100644 --- a/t/chainlint.sed +++ b/t/chainlint.sed @@ -94,8 +94,8 @@ # here-doc -- swallow it to avoid false hits within its body (but keep the # command to which it was attached) -/<<[ ]*[-\\]*[A-Za-z0-9_]/ { - s/^\(.*\)<<[ ]*[-\\]*\([A-Za-z0-9_][A-Za-z0-9_]*\)/<\2>\1<</ +/<<[ ]*[-\\']*[A-Za-z0-9_]/ { + s/^\(.*\)<<[ ]*[-\\']*\([A-Za-z0-9_][A-Za-z0-9_]*\)'*/<\2>\1<</ s/[ ]*<<// :hereslurp N @@ -158,7 +158,7 @@ s/.*\n// /"[^'"]*'[^'"]*"/!bsqstring } # here-doc -- swallow it -/<<[ ]*[-\\]*[A-Za-z0-9_]/bheredoc +/<<[ ]*[-\\']*[A-Za-z0-9_]/bheredoc # comment or empty line -- discard since final non-comment, non-empty line # before closing ")", "done", "elsif", "else", or "fi" will need to be # re-visited to drop "suspect" marking since final line of those constructs @@ -268,7 +268,7 @@ bcheckchain # found here-doc -- swallow it to avoid false hits within its body (but keep # the command to which it was attached) :heredoc -s/^\(.*\)<<[ ]*[-\\]*\([A-Za-z0-9_][A-Za-z0-9_]*\)/<\2>\1<</ +s/^\(.*\)<<[ ]*[-\\']*\([A-Za-z0-9_][A-Za-z0-9_]*\)'*/<\2>\1<</ s/[ ]*<<// :hereslurpsub N diff --git a/t/chainlint/here-doc.expect b/t/chainlint/here-doc.expect index 33bc3cc0b4..aff6568716 100644 --- a/t/chainlint/here-doc.expect +++ b/t/chainlint/here-doc.expect @@ -2,4 +2,6 @@ boodle wobba gorgo snoot wafta snurb && cat >foo && +cat >bar && + horticulture diff --git a/t/chainlint/here-doc.test b/t/chainlint/here-doc.test index 8986eefe74..f2bb14b693 100644 --- a/t/chainlint/here-doc.test +++ b/t/chainlint/here-doc.test @@ -14,6 +14,13 @@ boz woz Arbitrary_Tag_42 +# LINT: swallow 'quoted' here-doc +cat <<'FUMP' >bar && +snoz +boz +woz +FUMP + # LINT: swallow here-doc (EOF is last line of test) horticulture <<\EOF gomez diff --git a/t/chainlint/subshell-here-doc.expect b/t/chainlint/subshell-here-doc.expect index 7c2da63bc7..7663ea7fc4 100644 --- a/t/chainlint/subshell-here-doc.expect +++ b/t/chainlint/subshell-here-doc.expect @@ -5,5 +5,6 @@ >) && ( cat >bup && + cat >bup2 && meep >) diff --git a/t/chainlint/subshell-here-doc.test b/t/chainlint/subshell-here-doc.test index 05139af0b5..b6b5a9b33a 100644 --- a/t/chainlint/subshell-here-doc.test +++ b/t/chainlint/subshell-here-doc.test @@ -27,5 +27,9 @@ glink FIZZ ARBITRARY + cat <<-'ARBITRARY2' >bup2 && + glink + FIZZ + ARBITRARY2 meep ) |