From 0701b3552e78b0ad1112e2fe2460467ddaabcc5a Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Mon, 28 Dec 2020 21:43:55 +0200 Subject: [PATCH] refactoring: fix scanning double dollar in template string --- internal/scanner/scanner.go | Bin 410134 -> 410157 bytes internal/scanner/scanner.rl | 11 ++++---- internal/scanner/scanner_test.go | 42 +++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/internal/scanner/scanner.go b/internal/scanner/scanner.go index 49e8150e909af3178d6c5ad83cbd6dcc40a33cd0..7fd94d176e2d989db815d6262845a74f30270ca9 100644 GIT binary patch delta 4790 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 CNLXC} delta 4939 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 final ), double_qoute_nonvarname: ( - (any - [\\{"\r\n] - varname_first) -> double_qoute - | "\r" @new_line -> double_qoute - | "\n" @new_line -> double_qoute - | "\\" -> double_qoute_any - | '"' -> final + (any - [\\${"\r\n] - varname_first) -> double_qoute + | "\r" @new_line -> double_qoute + | "\n" @new_line -> double_qoute + | "\\" -> double_qoute_any + | '$' -> double_qoute_nonvarname + | '"' -> final ); main := |* diff --git a/internal/scanner/scanner_test.go b/internal/scanner/scanner_test.go index 04888c4..a51e6ea 100644 --- a/internal/scanner/scanner_test.go +++ b/internal/scanner/scanner_test.go @@ -1628,3 +1628,45 @@ func TestIgnoreControllCharactersAtStringVarOffset(t *testing.T) { actual = string(tkn.Value) assert.DeepEqual(t, expected, actual) } + +func TestDoubleDollar(t *testing.T) { + src := `