diff --git a/vlib/v/scanner/scanner.v b/vlib/v/scanner/scanner.v index 59dc376c8f..4881e78d60 100644 --- a/vlib/v/scanner/scanner.v +++ b/vlib/v/scanner/scanner.v @@ -745,13 +745,15 @@ fn (mut s Scanner) text_scan() token.Token { } // Handle `'$fn()'` if c == `)` && s.is_inter_start { - s.is_inter_end = true - s.is_inter_start = false next_char := s.look_ahead(1) - if next_char == s.quote { - s.is_inside_string = false + if next_char != `.` { + s.is_inter_end = true + s.is_inter_start = false + if next_char == s.quote { + s.is_inside_string = false + } + return s.new_token(.rpar, '', 1) } - return s.new_token(.rpar, '', 1) } // all other tokens match c { diff --git a/vlib/v/tests/string_interpolation_test.v b/vlib/v/tests/string_interpolation_test.v index 7e9d1ca7be..8b75dbeef3 100644 --- a/vlib/v/tests/string_interpolation_test.v +++ b/vlib/v/tests/string_interpolation_test.v @@ -160,3 +160,25 @@ fn test_string_interpolation_with_negative_format_width_should_compile_and_run_w eprintln('---------------------------------------------------------------------------------------------') assert true } + +struct Aa { + a int +} + +struct Bb { + b Aa +} + +fn (x Bb) f() Aa { + return x.b +} + +fn test_method_interpolation() { + y := Bb{ + b: Aa{ + a: 2 + } + } + assert '>${y.f().a}<' == '>2<' + assert '>$y.f().a<' == '>2<' +}