Skip to content

Commit 6117d2f

Browse files
authored
fix(parser): fix line/column where string literal contains U+2028 or U+2029 (#477)
* Add test * One more test * Fix * Typo
1 parent b79282b commit 6117d2f

File tree

3 files changed

+140
-0
lines changed

3 files changed

+140
-0
lines changed

src/lexer/string.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ export function scanString(parser: Parser, context: Context, quote: number): Tok
4949

5050
if (parser.index >= parser.end) report(parser, Errors.UnterminatedString);
5151

52+
if (char === Chars.LineSeparator || char === Chars.ParagraphSeparator) {
53+
parser.line++;
54+
parser.column = 0;
55+
}
56+
5257
char = advanceChar(parser);
5358
}
5459

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2+
3+
exports[`StringLiteral > ("
"); 1`] = `
4+
{
5+
"body": [
6+
{
7+
"end": 6,
8+
"expression": {
9+
"end": 4,
10+
"loc": {
11+
"end": {
12+
"column": 2,
13+
"line": 2,
14+
},
15+
"start": {
16+
"column": 1,
17+
"line": 1,
18+
},
19+
},
20+
"range": [
21+
1,
22+
4,
23+
],
24+
"start": 1,
25+
"type": "Literal",
26+
"value": "",
27+
},
28+
"loc": {
29+
"end": {
30+
"column": 4,
31+
"line": 2,
32+
},
33+
"start": {
34+
"column": 0,
35+
"line": 1,
36+
},
37+
},
38+
"range": [
39+
0,
40+
6,
41+
],
42+
"start": 0,
43+
"type": "ExpressionStatement",
44+
},
45+
],
46+
"end": 6,
47+
"loc": {
48+
"end": {
49+
"column": 4,
50+
"line": 2,
51+
},
52+
"start": {
53+
"column": 0,
54+
"line": 1,
55+
},
56+
},
57+
"range": [
58+
0,
59+
6,
60+
],
61+
"sourceType": "script",
62+
"start": 0,
63+
"type": "Program",
64+
}
65+
`;
66+
67+
exports[`StringLiteral > ("
"); 1`] = `
68+
{
69+
"body": [
70+
{
71+
"end": 6,
72+
"expression": {
73+
"end": 4,
74+
"loc": {
75+
"end": {
76+
"column": 2,
77+
"line": 2,
78+
},
79+
"start": {
80+
"column": 1,
81+
"line": 1,
82+
},
83+
},
84+
"range": [
85+
1,
86+
4,
87+
],
88+
"start": 1,
89+
"type": "Literal",
90+
"value": "",
91+
},
92+
"loc": {
93+
"end": {
94+
"column": 4,
95+
"line": 2,
96+
},
97+
"start": {
98+
"column": 0,
99+
"line": 1,
100+
},
101+
},
102+
"range": [
103+
0,
104+
6,
105+
],
106+
"start": 0,
107+
"type": "ExpressionStatement",
108+
},
109+
],
110+
"end": 6,
111+
"loc": {
112+
"end": {
113+
"column": 4,
114+
"line": 2,
115+
},
116+
"start": {
117+
"column": 0,
118+
"line": 1,
119+
},
120+
},
121+
"range": [
122+
0,
123+
6,
124+
],
125+
"sourceType": "script",
126+
"start": 0,
127+
"type": "Program",
128+
}
129+
`;

test/parser/expressions/string.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { pass } from '../../test-utils';
2+
3+
pass('StringLiteral', [
4+
{ code: '("\u2028");', options: { loc: true, ranges: true } },
5+
{ code: '("\u2029");', options: { loc: true, ranges: true } },
6+
]);

0 commit comments

Comments
 (0)