Skip to content

Commit 3e0f636

Browse files
fix: support escaped newlines within string literals (#293)
1 parent e84dec9 commit 3e0f636

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

crates/starpls_lexer/src/lib.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -810,7 +810,10 @@ impl Cursor<'_> {
810810
return (true, triple_quoted);
811811
}
812812
}
813-
'\\' if self.first() == '\\' || self.first() == closing_quote => {
813+
'\\' if self.first() == '\\'
814+
|| self.first() == closing_quote
815+
|| self.first() == '\n' =>
816+
{
814817
// Bump again to skip the escaped character.
815818
self.bump();
816819
}

crates/starpls_lexer/src/tests.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -797,3 +797,20 @@ foo(3 + \
797797
"#]],
798798
)
799799
}
800+
801+
#[test]
802+
fn test_escaped_newline_in_string() {
803+
check_lexing(
804+
r#"
805+
greeting = "Hello, \
806+
world!""#,
807+
expect![[r#"
808+
Token { kind: Newline, len: 1 }
809+
Token { kind: Ident, len: 8 }
810+
Token { kind: Whitespace, len: 1 }
811+
Token { kind: Eq, len: 1 }
812+
Token { kind: Whitespace, len: 1 }
813+
Token { kind: Literal { kind: Str { terminated: true, triple_quoted: false } }, len: 17 }
814+
"#]],
815+
);
816+
}

0 commit comments

Comments
 (0)