1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

scanner: fix and resotre string interpolation tests (#16242)

This commit is contained in:
yuyi 2022-10-28 23:39:32 +08:00 committed by GitHub
parent 5daa38fdb1
commit daa2f90023
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 37 additions and 17 deletions

View File

@ -4,31 +4,52 @@ vlib/v/checker/tests/str_interpol_invalid_err.vv:8:13: error: illegal format spe
8 | _ = '${[1]:x}'
| ^
9 | _ = '${[1]!:x}'
10 | //_ = '${Foo{}:x}'
10 | _ = '${Foo{}:x}'
vlib/v/checker/tests/str_interpol_invalid_err.vv:9:14: error: illegal format specifier `x` for type `[1]int`
7 | fn main() {
8 | _ = '${[1]:x}'
9 | _ = '${[1]!:x}'
| ^
10 | //_ = '${Foo{}:x}'
10 | _ = '${Foo{}:x}'
11 | _ = '${[1]:f}'
vlib/v/checker/tests/str_interpol_invalid_err.vv:10:15: error: illegal format specifier `x` for type `Foo`
8 | _ = '${[1]:x}'
9 | _ = '${[1]!:x}'
10 | _ = '${Foo{}:x}'
| ^
11 | _ = '${[1]:f}'
12 | _ := '${none:F}'
vlib/v/checker/tests/str_interpol_invalid_err.vv:11:13: error: illegal format specifier `f` for type `[]int`
9 | _ = '${[1]!:x}'
10 | //_ = '${Foo{}:x}'
10 | _ = '${Foo{}:x}'
11 | _ = '${[1]:f}'
| ^
12 | _ := '${none:F}'
13 | //_ = '${{"a": "b"}:x}'
13 | _ = '${{"a": "b"}:x}'
vlib/v/checker/tests/str_interpol_invalid_err.vv:12:15: error: illegal format specifier `F` for type `none`
10 | //_ = '${Foo{}:x}'
10 | _ = '${Foo{}:x}'
11 | _ = '${[1]:f}'
12 | _ := '${none:F}'
| ^
13 | //_ = '${{"a": "b"}:x}'
14 | //_ = '${Alias(Foo{}):x}'
13 | _ = '${{"a": "b"}:x}'
14 | _ = '${Alias(Foo{}):x}'
vlib/v/checker/tests/str_interpol_invalid_err.vv:13:20: error: illegal format specifier `x` for type `map[string]string`
11 | _ = '${[1]:f}'
12 | _ := '${none:F}'
13 | _ = '${{"a": "b"}:x}'
| ^
14 | _ = '${Alias(Foo{}):x}'
15 | _ = '${SumType(int(5)):o}'
vlib/v/checker/tests/str_interpol_invalid_err.vv:14:22: error: illegal format specifier `x` for type `Alias`
12 | _ := '${none:F}'
13 | _ = '${{"a": "b"}:x}'
14 | _ = '${Alias(Foo{}):x}'
| ^
15 | _ = '${SumType(int(5)):o}'
16 | }
vlib/v/checker/tests/str_interpol_invalid_err.vv:15:25: error: illegal format specifier `o` for type `SumType`
13 | //_ = '${{"a": "b"}:x}'
14 | //_ = '${Alias(Foo{}):x}'
13 | _ = '${{"a": "b"}:x}'
14 | _ = '${Alias(Foo{}):x}'
15 | _ = '${SumType(int(5)):o}'
| ^
16 | }

View File

@ -7,10 +7,10 @@ type SumType = Alias | int
fn main() {
_ = '${[1]:x}'
_ = '${[1]!:x}'
//_ = '${Foo{}:x}'
_ = '${Foo{}:x}'
_ = '${[1]:f}'
_ := '${none:F}'
//_ = '${{"a": "b"}:x}'
//_ = '${Alias(Foo{}):x}'
_ = '${{"a": "b"}:x}'
_ = '${Alias(Foo{}):x}'
_ = '${SumType(int(5)):o}'
}

View File

@ -803,11 +803,13 @@ fn (mut s Scanner) text_scan() token.Token {
}
`{` {
if s.is_inside_string {
prev_char := s.text[s.pos - 1]
next_char := s.text[s.pos + 1]
// Handle new `hello {name}` string interpolation
if !s.text[s.pos + 1].is_space() && s.text[s.pos - 1] != `$` {
if !next_char.is_space() && next_char != `}` && prev_char !in [`$`, `{`] {
return s.new_token(.str_dollar, '', 1)
}
if s.text[s.pos - 1] == `$` {
if prev_char == `$` {
// Skip { in `${` in strings
continue
} else {

View File

@ -9,12 +9,9 @@ fn test_string_interpolation_inner_cbr() {
println(s1)
assert s1 == '22'
/*
XTODO
s2 := '${St{}}'
println(s2)
assert s2 == 'St{}'
*/
s3 := '${{
'a': 1