fix(parser): report export imports in namespaces (#25086)

## Summary

- report TS(1147) for exported TypeScript import-equals declarations that reference external modules inside namespaces
- inspect the wrapped `TSImportEqualsDeclaration` within `ExportNamedDeclaration`
- update TypeScript parser coverage snapshots for all affected conformance cases
This commit is contained in:
camc314 committed 2026-07-29 15:44:48 +00:00
1 parent caeb0a61d1
commit a70035d743
2 files changed
+66

No files matched your search

+10
View File
@@ -451,6 +451,16 @@ impl<'a, C: Config> ParserImpl<'a, C> {
Statement::ExportNamedDeclaration(decl) if decl.source.is_some() => {
self.error(diagnostics::export_in_namespace(decl.span));
}
// `export import x = require("...")` is wrapped in an export declaration.
Statement::ExportNamedDeclaration(decl)
if matches!(
&decl.declaration,
Some(Declaration::TSImportEqualsDeclaration(import_decl))
if import_decl.module_reference.is_external()
) =>
{
self.error(diagnostics::import_in_namespace(decl.span));
}
Statement::ExportAllDeclaration(decl) => {
self.error(diagnostics::export_in_namespace(decl.span));
}
@@ -6772,6 +6772,14 @@ Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/types/wit
32 │ export import M5 = require("M5");
╰────
× TS(1147): Import declarations in a namespace cannot reference a module.
╭─[typescript/tests/cases/compiler/es5ModuleInternalNamedImports.ts:32:5]
31 │ import M4 from "M4";
32 │ export import M5 = require("M5");
· ─────────────────────────────────
33 │ }
╰────
× TS(1015): A parameter cannot have a question mark and an initializer.
╭─[typescript/tests/cases/compiler/es6ClassTest.ts:25:44]
24 │ constructor();
@@ -10947,6 +10955,22 @@ Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/types/wit
70 │ export var m1_im4_private_v1_public = m1_im4_private.c1;
╰────
× TS(1147): Import declarations in a namespace cannot reference a module.
╭─[typescript/tests/cases/compiler/privacyGloImportParseErrors.ts:81:5]
80 │ export import m1_im2_public = m1_M2_private;
81 │ export import m1_im3_public = require("m1_M3_public");
· ──────────────────────────────────────────────────────
82 │ export import m1_im4_public = require("m1_M4_private");
╰────
× TS(1147): Import declarations in a namespace cannot reference a module.
╭─[typescript/tests/cases/compiler/privacyGloImportParseErrors.ts:82:5]
81 │ export import m1_im3_public = require("m1_M3_public");
82 │ export import m1_im4_public = require("m1_M4_private");
· ───────────────────────────────────────────────────────
83 │ }
╰────
× TS(1147): Import declarations in a namespace cannot reference a module.
╭─[typescript/tests/cases/compiler/privacyGloImportParseErrors.ts:121:9]
120 │ namespace m2 {
@@ -11003,6 +11027,22 @@ Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/types/wit
70 │ export var m1_im4_private_v1_public = m1_im4_private.c1;
╰────
× TS(1147): Import declarations in a namespace cannot reference a module.
╭─[typescript/tests/cases/compiler/privacyImportParseErrors.ts:81:5]
80 │ export import m1_im2_public = m1_M2_private;
81 │ export import m1_im3_public = require("m1_M3_public");
· ──────────────────────────────────────────────────────
82 │ export import m1_im4_public = require("m1_M4_private");
╰────
× TS(1147): Import declarations in a namespace cannot reference a module.
╭─[typescript/tests/cases/compiler/privacyImportParseErrors.ts:82:5]
81 │ export import m1_im3_public = require("m1_M3_public");
82 │ export import m1_im4_public = require("m1_M4_private");
· ───────────────────────────────────────────────────────
83 │ }
╰────
× TS(1147): Import declarations in a namespace cannot reference a module.
╭─[typescript/tests/cases/compiler/privacyImportParseErrors.ts:143:5]
142 │
@@ -11019,6 +11059,22 @@ Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/types/wit
154 │ export var m1_im4_private_v1_public = m1_im4_private.c1;
╰────
× TS(1147): Import declarations in a namespace cannot reference a module.
╭─[typescript/tests/cases/compiler/privacyImportParseErrors.ts:166:5]
165 │ export import m1_im2_public = m2_M2_private;
166 │ export import m1_im3_public = require("m2_M3_public");
· ──────────────────────────────────────────────────────
167 │ export import m1_im4_public = require("m2_M4_private");
╰────
× TS(1147): Import declarations in a namespace cannot reference a module.
╭─[typescript/tests/cases/compiler/privacyImportParseErrors.ts:167:5]
166 │ export import m1_im3_public = require("m2_M3_public");
167 │ export import m1_im4_public = require("m2_M4_private");
· ───────────────────────────────────────────────────────
168 │ }
╰────
× TS(1147): Import declarations in a namespace cannot reference a module.
╭─[typescript/tests/cases/compiler/privacyImportParseErrors.ts:273:9]
272 │ namespace m2 {