Restore import defer = parsing (#61837)

This commit is contained in:
Nicolò Ribaudo 2025-06-09 23:31:15 +02:00 committed by GitHub
parent 34d1ea68f6
commit 0dfd0c2143
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 185 additions and 1 deletions

View File

@ -8392,7 +8392,10 @@ namespace Parser {
phaseModifier = SyntaxKind.TypeKeyword;
identifier = isIdentifier() ? parseIdentifier() : undefined;
}
else if (identifier?.escapedText === "defer" && token() !== SyntaxKind.FromKeyword) {
else if (
identifier?.escapedText === "defer" &&
(token() === SyntaxKind.FromKeyword ? !lookAhead(nextTokenIsStringLiteral) : token() !== SyntaxKind.CommaToken && token() !== SyntaxKind.EqualsToken)
) {
phaseModifier = SyntaxKind.DeferKeyword;
identifier = isIdentifier() ? parseIdentifier() : undefined;
}

View File

@ -0,0 +1,13 @@
//// [tests/cases/conformance/importDefer/importBindingDefer.ts] ////
//// [a.ts]
export default 2;
//// [b.ts]
import defer from "./a.js";
//// [a.js]
export default 2;
//// [b.js]
export {};

View File

@ -0,0 +1,10 @@
//// [tests/cases/conformance/importDefer/importBindingDefer.ts] ////
=== a.ts ===
export default 2;
=== b.ts ===
import defer from "./a.js";
>defer : Symbol(defer, Decl(b.ts, 0, 6))

View File

@ -0,0 +1,11 @@
//// [tests/cases/conformance/importDefer/importBindingDefer.ts] ////
=== a.ts ===
export default 2;
=== b.ts ===
import defer from "./a.js";
>defer : 2
> : ^

View File

@ -0,0 +1,13 @@
//// [tests/cases/conformance/importDefer/importBindingDefer2.ts] ////
//// [a.ts]
export default 2;
//// [b.ts]
import defer, {} from "./a.js";
//// [a.js]
export default 2;
//// [b.js]
export {};

View File

@ -0,0 +1,10 @@
//// [tests/cases/conformance/importDefer/importBindingDefer2.ts] ////
=== a.ts ===
export default 2;
=== b.ts ===
import defer, {} from "./a.js";
>defer : Symbol(defer, Decl(b.ts, 0, 6))

View File

@ -0,0 +1,11 @@
//// [tests/cases/conformance/importDefer/importBindingDefer2.ts] ////
=== a.ts ===
export default 2;
=== b.ts ===
import defer, {} from "./a.js";
>defer : 2
> : ^

View File

@ -0,0 +1,11 @@
b.ts(1,8): error TS18058: Default imports are not allowed in a deferred import.
==== a.ts (0 errors) ====
export default 2;
==== b.ts (1 errors) ====
import defer from from "./a.js";
~~~~~~~~~~
!!! error TS18058: Default imports are not allowed in a deferred import.

View File

@ -0,0 +1,13 @@
//// [tests/cases/conformance/importDefer/importDeferFromInvalid.ts] ////
//// [a.ts]
export default 2;
//// [b.ts]
import defer from from "./a.js";
//// [a.js]
export default 2;
//// [b.js]
export {};

View File

@ -0,0 +1,10 @@
//// [tests/cases/conformance/importDefer/importDeferFromInvalid.ts] ////
=== a.ts ===
export default 2;
=== b.ts ===
import defer from from "./a.js";
>from : Symbol(from, Decl(b.ts, 0, 6))

View File

@ -0,0 +1,11 @@
//// [tests/cases/conformance/importDefer/importDeferFromInvalid.ts] ////
=== a.ts ===
export default 2;
=== b.ts ===
import defer from from "./a.js";
>from : 2
> : ^

View File

@ -0,0 +1,15 @@
//// [tests/cases/conformance/importDefer/importEqualsBindingDefer.ts] ////
//// [a.ts]
export = 2;
//// [b.ts]
import defer = require("./a");
//// [a.js]
"use strict";
module.exports = 2;
//// [b.js]
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

View File

@ -0,0 +1,10 @@
//// [tests/cases/conformance/importDefer/importEqualsBindingDefer.ts] ////
=== b.ts ===
import defer = require("./a");
>defer : Symbol(defer, Decl(b.ts, 0, 0))
=== a.ts ===
export = 2;

View File

@ -0,0 +1,11 @@
//// [tests/cases/conformance/importDefer/importEqualsBindingDefer.ts] ////
=== b.ts ===
import defer = require("./a");
>defer : 2
> : ^
=== a.ts ===
export = 2;

View File

@ -0,0 +1,8 @@
// @module: esnext
// @target: es2020
// @filename: a.ts
export default 2;
// @filename: b.ts
import defer from "./a.js";

View File

@ -0,0 +1,8 @@
// @module: esnext
// @target: es2020
// @filename: a.ts
export default 2;
// @filename: b.ts
import defer, {} from "./a.js";

View File

@ -0,0 +1,8 @@
// @module: esnext
// @target: es2020
// @filename: a.ts
export default 2;
// @filename: b.ts
import defer from from "./a.js";

View File

@ -0,0 +1,8 @@
// @module: commonjs
// @target: es2020
// @filename: a.ts
export = 2;
// @filename: b.ts
import defer = require("./a");