On Fri, Apr 09, 2021 at 09:03:24PM -0400, Derrick Stolee wrote: > On 4/9/2021 6:26 PM, Jeff King wrote: > > I've been wanting to do this for years, but after getting bitten by a > > misplaced quote the other day, I finally did. This series allows you to > > do: > > > > test_expect_success <<\EOT > > something 'with single quotes' > > EOT > > > > Thoughts? > > Odd. I _just_ hit this for the first time today. I didn't know > about the $SQ trick, so I just modified my 'sed' call to drop > the single quotes from the string I was trying to match [1]. > > [1] https://lore.kernel.org/git/36aa6837-722c-9ef0-84cc-77e982db9f6e@xxxxxxxxx/ Yep, that case would definitely benefit. We have a variety of little workarounds now, but it would be nice to not even need them. > I think this is a good pattern for this kind of thing. I > imagine that if the test itself needed heredocs, then they > would be interpreted correctly when evaluating stdin (as > long as a different identifier is used). Yeah, some of the tests I converted in t1404 have their own here-docs. It works for the same reason that the single-quoted snippets work: the outer doc slurps the whole thing to the "EOT" marker. So we do not even consider the inner here-docs until we are eval-ing the snippet. > I also like the "EOT" pattern as an example. I think it would make sense to have a convention here for readability. Also, I added this to the sharness vim highlighter from [1]: diff --git a/sharness.vim b/sharness.vim index 6ffc64f..7dbcd18 100644 --- a/sharness.vim +++ b/sharness.vim @@ -21,6 +21,9 @@ syn region shsTestBody contained transparent excludenl matchgroup=shQuote start= syn region shsTestBody contained oneline transparent excludenl keepend matchgroup=shQuote start=+ '+hs=s+1 end=+'$+ contains=@shSubShList syn region shsTestBody contained oneline transparent excludenl keepend matchgroup=shQuote start=+ "+hs=s+1 end=+"$+ contains=@shSubShList +" here-doc body +syn region shsTestBody contained transparent excludenl matchgroup=shQuote start=+ <<\\EOT+ end=+EOT$+ contains=@shSubShList + syn match shsPrereq contained "\<[A-Z_,]\+\>" nextgroup=shsTestTitle syn match shsPrereqLazy contained "\<[A-Z_,]\+\>" nextgroup=shsTestBody which makes the innards look nice. :) I think it could be written to allow any marker, but there would probably need to be some magic with matching the opening and closing markers. -Peff [1] https://lore.kernel.org/git/CAMP44s1D-Zp3KDS+Hi74a=Lkc7Nc_0qiEzQEF0Pmj=bD8i+=JQ@xxxxxxxxxxxxxx/