diff --git a/src/parser.rs b/src/parser.rs index 6ad642f4d9..7757e7107e 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -1066,7 +1066,7 @@ impl<'run, 'src> Parser<'run, 'src> { let raw = &token.lexeme()[open..token.lexeme().len() - close]; - let unindented = if kind.indented() && matches!(token.kind, StringToken) { + let unindented = if kind.indented() && matches!(state, StringState::Normal) { unindent(raw) } else { raw.to_owned() diff --git a/tests/format_string.rs b/tests/format_string.rs index e02fd93630..7b8c93edf7 100644 --- a/tests/format_string.rs +++ b/tests/format_string.rs @@ -366,3 +366,10 @@ fn stray_identifier_in_interpolation_is_an_error() { ) .failure(); } + +#[test] +fn indented_format_strings_are_unindented_once() { + assert_eval("f'''\n\n foo\n'''", "\nfoo\n"); + assert_eval("'''\n\n foo\n'''", "\nfoo\n"); + assert_eval("f'''\n\n foo {{ 'bar' }}\n'''", "\nfoo bar\n"); +}