hcl/scanner: scan interpolations properly
This commit is contained in:
parent
96291d2dbe
commit
22bdcc2db1
@ -375,6 +375,7 @@ func (s *Scanner) scanExponent(ch rune) rune {
|
|||||||
|
|
||||||
// scanString scans a quoted string
|
// scanString scans a quoted string
|
||||||
func (s *Scanner) scanString() {
|
func (s *Scanner) scanString() {
|
||||||
|
braces := 0
|
||||||
for {
|
for {
|
||||||
// '"' opening already consumed
|
// '"' opening already consumed
|
||||||
// read character after quote
|
// read character after quote
|
||||||
@ -385,10 +386,21 @@ func (s *Scanner) scanString() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if ch == '"' {
|
if ch == '"' && braces == 0 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we're going into a ${} then we can ignore quotes for awhile
|
||||||
|
if braces == 0 && ch == '$' && s.peek() == '{' {
|
||||||
|
braces++
|
||||||
|
s.next()
|
||||||
|
} else if braces > 0 && ch == '{' {
|
||||||
|
braces++
|
||||||
|
}
|
||||||
|
if braces > 0 && ch == '}' {
|
||||||
|
braces--
|
||||||
|
}
|
||||||
|
|
||||||
if ch == '\\' {
|
if ch == '\\' {
|
||||||
s.scanEscape()
|
s.scanEscape()
|
||||||
}
|
}
|
||||||
|
@ -74,6 +74,7 @@ var tokenLists = map[string][]tokenPair{
|
|||||||
{token.STRING, `" "`},
|
{token.STRING, `" "`},
|
||||||
{token.STRING, `"a"`},
|
{token.STRING, `"a"`},
|
||||||
{token.STRING, `"本"`},
|
{token.STRING, `"本"`},
|
||||||
|
{token.STRING, `"${file("foo")}"`},
|
||||||
{token.STRING, `"\a"`},
|
{token.STRING, `"\a"`},
|
||||||
{token.STRING, `"\b"`},
|
{token.STRING, `"\b"`},
|
||||||
{token.STRING, `"\f"`},
|
{token.STRING, `"\f"`},
|
||||||
|
Loading…
Reference in New Issue
Block a user