diff --git a/internal/scanner/scanner.go b/internal/scanner/scanner.go index 49e8150..7fd94d1 100644 Binary files a/internal/scanner/scanner.go and b/internal/scanner/scanner.go differ diff --git a/internal/scanner/scanner.rl b/internal/scanner/scanner.rl index 30d12af..812c742 100644 --- a/internal/scanner/scanner.rl +++ b/internal/scanner/scanner.rl @@ -115,11 +115,12 @@ func (lex *Lexer) Lex() *token.Token { | '"' -> 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 := `