Skip to content

Commit 0b9f3e7

Browse files
authored
Include jsDiagnostics in parser state mark/rewind (#1750)
1 parent c0ef09c commit 0b9f3e7

File tree

4 files changed

+60
-0
lines changed

4 files changed

+60
-0
lines changed

internal/parser/parser.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@ type ParserState struct {
261261
scannerState scanner.ScannerState
262262
contextFlags ast.NodeFlags
263263
diagnosticsLen int
264+
jsDiagnosticsLen int
264265
statementHasAwaitIdentifier bool
265266
hasParseError bool
266267
}
@@ -270,6 +271,7 @@ func (p *Parser) mark() ParserState {
270271
scannerState: p.scanner.Mark(),
271272
contextFlags: p.contextFlags,
272273
diagnosticsLen: len(p.diagnostics),
274+
jsDiagnosticsLen: len(p.jsDiagnostics),
273275
statementHasAwaitIdentifier: p.statementHasAwaitIdentifier,
274276
hasParseError: p.hasParseError,
275277
}
@@ -280,6 +282,7 @@ func (p *Parser) rewind(state ParserState) {
280282
p.token = p.scanner.Token()
281283
p.contextFlags = state.contextFlags
282284
p.diagnostics = p.diagnostics[0:state.diagnosticsLen]
285+
p.jsDiagnostics = p.jsDiagnostics[0:state.jsDiagnosticsLen]
283286
p.statementHasAwaitIdentifier = state.statementHasAwaitIdentifier
284287
p.hasParseError = state.hasParseError
285288
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//// [tests/cases/compiler/jsSpeculativeParsingError.ts] ////
2+
3+
=== t.js ===
4+
const is_morning = new Date().getHours() < 12;
5+
>is_morning : Symbol(is_morning, Decl(t.js, 0, 5))
6+
>new Date().getHours : Symbol(Date.getHours, Decl(lib.es5.d.ts, --, --))
7+
>Date : Symbol(Date, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.scripthost.d.ts, --, --))
8+
>getHours : Symbol(Date.getHours, Decl(lib.es5.d.ts, --, --))
9+
10+
// prettier-ignore
11+
const greeting = ([
12+
>greeting : Symbol(greeting, Decl(t.js, 3, 5))
13+
14+
is_morning ? 'good morning' : 'good evening'
15+
>is_morning : Symbol(is_morning, Decl(t.js, 0, 5))
16+
17+
]);
18+
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//// [tests/cases/compiler/jsSpeculativeParsingError.ts] ////
2+
3+
=== t.js ===
4+
const is_morning = new Date().getHours() < 12;
5+
>is_morning : boolean
6+
>new Date().getHours() < 12 : boolean
7+
>new Date().getHours() : number
8+
>new Date().getHours : () => number
9+
>new Date() : Date
10+
>Date : DateConstructor
11+
>getHours : () => number
12+
>12 : 12
13+
14+
// prettier-ignore
15+
const greeting = ([
16+
>greeting : string[]
17+
>([ is_morning ? 'good morning' : 'good evening']) : string[]
18+
>[ is_morning ? 'good morning' : 'good evening'] : string[]
19+
20+
is_morning ? 'good morning' : 'good evening'
21+
>is_morning ? 'good morning' : 'good evening' : "good evening" | "good morning"
22+
>is_morning : boolean
23+
>'good morning' : "good morning"
24+
>'good evening' : "good evening"
25+
26+
]);
27+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// @strict: true
2+
// @allowJs: true
3+
// @checkJs: true
4+
// @noEmit: true
5+
// @filename: t.js
6+
7+
const is_morning = new Date().getHours() < 12;
8+
9+
// prettier-ignore
10+
const greeting = ([
11+
is_morning ? 'good morning' : 'good evening'
12+
]);

0 commit comments

Comments
 (0)