diff --git a/compiler/src/dotty/tools/dotc/parsing/Scanners.scala b/compiler/src/dotty/tools/dotc/parsing/Scanners.scala index c2c13e899ef4..1fee0f52f770 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Scanners.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Scanners.scala @@ -1168,7 +1168,9 @@ object Scanners { finishNamedToken(IDENTIFIER, target = next) } else - error("invalid string interpolation: `$$`, `$\"`, `$`ident or `$`BlockExpr expected") + error("invalid string interpolation: `$$`, `$\"`, `$`ident or `$`BlockExpr expected", off = charOffset - 2) + putChar('$') + getStringPart(multiLine) } else { val isUnclosedLiteral = !isUnicodeEscape && (ch == SU || (!multiLine && (ch == CR || ch == LF))) diff --git a/tests/neg/interpolator-dollar.check b/tests/neg/interpolator-dollar.check new file mode 100644 index 000000000000..2de0c843725e --- /dev/null +++ b/tests/neg/interpolator-dollar.check @@ -0,0 +1,4 @@ +-- Error: tests/neg/interpolator-dollar.scala:5:20 --------------------------------------------------------------------- +5 | def oops = f"$s%s $