Skip to content

Commit 0dfd0c2

Browse files
Restore import defer = parsing (#61837)
1 parent 34d1ea6 commit 0dfd0c2

18 files changed

+185
-1
lines changed

src/compiler/parser.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8392,7 +8392,10 @@ namespace Parser {
83928392
phaseModifier = SyntaxKind.TypeKeyword;
83938393
identifier = isIdentifier() ? parseIdentifier() : undefined;
83948394
}
8395-
else if (identifier?.escapedText === "defer" && token() !== SyntaxKind.FromKeyword) {
8395+
else if (
8396+
identifier?.escapedText === "defer" &&
8397+
(token() === SyntaxKind.FromKeyword ? !lookAhead(nextTokenIsStringLiteral) : token() !== SyntaxKind.CommaToken && token() !== SyntaxKind.EqualsToken)
8398+
) {
83968399
phaseModifier = SyntaxKind.DeferKeyword;
83978400
identifier = isIdentifier() ? parseIdentifier() : undefined;
83988401
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//// [tests/cases/conformance/importDefer/importBindingDefer.ts] ////
2+
3+
//// [a.ts]
4+
export default 2;
5+
6+
//// [b.ts]
7+
import defer from "./a.js";
8+
9+
10+
//// [a.js]
11+
export default 2;
12+
//// [b.js]
13+
export {};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//// [tests/cases/conformance/importDefer/importBindingDefer.ts] ////
2+
3+
=== a.ts ===
4+
5+
export default 2;
6+
7+
=== b.ts ===
8+
import defer from "./a.js";
9+
>defer : Symbol(defer, Decl(b.ts, 0, 6))
10+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [tests/cases/conformance/importDefer/importBindingDefer.ts] ////
2+
3+
=== a.ts ===
4+
5+
export default 2;
6+
7+
=== b.ts ===
8+
import defer from "./a.js";
9+
>defer : 2
10+
> : ^
11+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//// [tests/cases/conformance/importDefer/importBindingDefer2.ts] ////
2+
3+
//// [a.ts]
4+
export default 2;
5+
6+
//// [b.ts]
7+
import defer, {} from "./a.js";
8+
9+
10+
//// [a.js]
11+
export default 2;
12+
//// [b.js]
13+
export {};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//// [tests/cases/conformance/importDefer/importBindingDefer2.ts] ////
2+
3+
=== a.ts ===
4+
5+
export default 2;
6+
7+
=== b.ts ===
8+
import defer, {} from "./a.js";
9+
>defer : Symbol(defer, Decl(b.ts, 0, 6))
10+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [tests/cases/conformance/importDefer/importBindingDefer2.ts] ////
2+
3+
=== a.ts ===
4+
5+
export default 2;
6+
7+
=== b.ts ===
8+
import defer, {} from "./a.js";
9+
>defer : 2
10+
> : ^
11+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
b.ts(1,8): error TS18058: Default imports are not allowed in a deferred import.
2+
3+
4+
==== a.ts (0 errors) ====
5+
export default 2;
6+
7+
==== b.ts (1 errors) ====
8+
import defer from from "./a.js";
9+
~~~~~~~~~~
10+
!!! error TS18058: Default imports are not allowed in a deferred import.
11+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//// [tests/cases/conformance/importDefer/importDeferFromInvalid.ts] ////
2+
3+
//// [a.ts]
4+
export default 2;
5+
6+
//// [b.ts]
7+
import defer from from "./a.js";
8+
9+
10+
//// [a.js]
11+
export default 2;
12+
//// [b.js]
13+
export {};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//// [tests/cases/conformance/importDefer/importDeferFromInvalid.ts] ////
2+
3+
=== a.ts ===
4+
5+
export default 2;
6+
7+
=== b.ts ===
8+
import defer from from "./a.js";
9+
>from : Symbol(from, Decl(b.ts, 0, 6))
10+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [tests/cases/conformance/importDefer/importDeferFromInvalid.ts] ////
2+
3+
=== a.ts ===
4+
5+
export default 2;
6+
7+
=== b.ts ===
8+
import defer from from "./a.js";
9+
>from : 2
10+
> : ^
11+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
//// [tests/cases/conformance/importDefer/importEqualsBindingDefer.ts] ////
2+
3+
//// [a.ts]
4+
export = 2;
5+
6+
//// [b.ts]
7+
import defer = require("./a");
8+
9+
10+
//// [a.js]
11+
"use strict";
12+
module.exports = 2;
13+
//// [b.js]
14+
"use strict";
15+
Object.defineProperty(exports, "__esModule", { value: true });
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//// [tests/cases/conformance/importDefer/importEqualsBindingDefer.ts] ////
2+
3+
=== b.ts ===
4+
import defer = require("./a");
5+
>defer : Symbol(defer, Decl(b.ts, 0, 0))
6+
7+
=== a.ts ===
8+
9+
export = 2;
10+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [tests/cases/conformance/importDefer/importEqualsBindingDefer.ts] ////
2+
3+
=== b.ts ===
4+
import defer = require("./a");
5+
>defer : 2
6+
> : ^
7+
8+
=== a.ts ===
9+
10+
export = 2;
11+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// @module: esnext
2+
// @target: es2020
3+
4+
// @filename: a.ts
5+
export default 2;
6+
7+
// @filename: b.ts
8+
import defer from "./a.js";
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// @module: esnext
2+
// @target: es2020
3+
4+
// @filename: a.ts
5+
export default 2;
6+
7+
// @filename: b.ts
8+
import defer, {} from "./a.js";
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// @module: esnext
2+
// @target: es2020
3+
4+
// @filename: a.ts
5+
export default 2;
6+
7+
// @filename: b.ts
8+
import defer from from "./a.js";
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// @module: commonjs
2+
// @target: es2020
3+
4+
// @filename: a.ts
5+
export = 2;
6+
7+
// @filename: b.ts
8+
import defer = require("./a");

0 commit comments

Comments
 (0)