Eric Sunshine <sunshine@xxxxxxxxxxxxxx> writes: > 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. Is this step merely completeness and future-proofing, or do we have existing instances that the linter would be confused without this patch? I am primarily wondering what the reason is that <<"EOF" is not looked for while we are at it (the answer could be that we have tests that use <<'EOF' but not <<"EOF"). > Signed-off-by: Eric Sunshine <sunshine@xxxxxxxxxxxxxx> > --- > t/chainlint.sed | 8 ++++---- > t/chainlint/here-doc.expect | 2 ++ > t/chainlint/here-doc.test | 7 +++++++ > t/chainlint/subshell-here-doc.expect | 1 + > 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 > )