On Tue, Aug 07, 2018 at 04:21:31AM -0400, Eric Sunshine wrote:

> diff --git a/t/chainlint.sed b/t/chainlint.sed
> index 5f0882cb38..bd76c5d181 100644
> --- a/t/chainlint.sed
> +++ b/t/chainlint.sed
> @@ -61,6 +61,22 @@
>  # "else", and "fi" in if-then-else likewise must not end with "&&", thus
>  # receives similar treatment.
>  #
> +# Swallowing here-docs with arbitrary tags requires a bit of finesse. When a
> +# line such as "cat <<EOF >out" is seen, the here-doc tag is moved to the 
> front
> +# of the line enclosed in angle brackets as a sentinel, giving "<EOF>cat 
> >out".
> +# As each subsequent line is read, it is appended to the target line and a
> +# (whitespace-loose) back-reference match /^<(.*)>\n\1$/ is attempted to see 
> if
> +# the content inside "<...>" matches the entirety of the newly-read line. For
> +# instance, if the next line read is "some data", when concatenated with the
> +# target line, it becomes "<EOF>cat >out\nsome data", and a match is 
> attempted
> +# to see if "EOF" matches "some data". Since it doesn't, the next line is
> +# attempted. When a line consisting of only "EOF" (and possible whitespace) 
> is
> +# encountered, it is appended to the target line giving "<EOF>cat >out\nEOF",
> +# in which case the "EOF" inside "<...>" does match the text following the
> +# newline, thus the closing here-doc tag has been found. The closing tag line
> +# and the "<...>" prefix on the target line are then discarded, leaving just
> +# the target line "cat >out".

Gross, but OK, as long as we would not get confused by a line that
actually started with <EOF> at the start.

> +/<<[         ]*[-\\]*[A-Z0-9_][A-Z0-9_]*/ {
> +     s/^\(.*\)<<[    ]*[-\\]*\([A-Z0-9_][A-Z0-9_]*\)/<\2>\1<</
> +     s/[     ]*<<//

Here-docs can use lowercase, too, though I'd personally frown on that
from a style perspective.

It looks like this doesn't catch:

  cat <<'EOF'
  EOF

either. I think we prefer the backslash style, but there are quite a few
<<-'EOF' hits. Is it covered somewhere else?

-Peff

Reply via email to