mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 04:08:41 +00:00
fix(isolated-declarations): bindings referenced in TSModuleDeclaration are removed incorrectly (#5680)
close: #5667
This commit is contained in:
parent
afc4548ef4
commit
6e8409a020
4 changed files with 34 additions and 16 deletions
|
|
@ -146,7 +146,10 @@ impl<'a> IsolatedDeclarations<'a> {
|
|||
variable_transformed_indexes.push_back(FxHashSet::default());
|
||||
}
|
||||
Declaration::TSModuleDeclaration(decl) => {
|
||||
if decl.kind.is_global() {
|
||||
// declare global { ... } or declare module "foo" { ... }
|
||||
// We need to emit it anyway
|
||||
if decl.kind.is_global() || decl.id.is_string_literal() {
|
||||
// We need to visit the module declaration to collect all references
|
||||
self.scope.visit_ts_module_declaration(decl);
|
||||
transformed_indexes.insert(new_stmts.len());
|
||||
}
|
||||
|
|
@ -293,11 +296,6 @@ impl<'a> IsolatedDeclarations<'a> {
|
|||
new_ast_stmts.push(Statement::ImportDeclaration(decl));
|
||||
}
|
||||
}
|
||||
Statement::TSModuleDeclaration(decl) => {
|
||||
if decl.kind.is_global() || decl.id.is_string_literal() {
|
||||
new_ast_stmts.push(Statement::TSModuleDeclaration(decl));
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ impl<'a> Scope<'a> {
|
|||
}
|
||||
|
||||
/// Linear tree of declaration scopes.
|
||||
#[derive(Debug)]
|
||||
pub struct ScopeTree<'a> {
|
||||
levels: Vec<'a, Scope<'a>>,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,21 +1,31 @@
|
|||
import 'foo';
|
||||
declare module 'foo' {
|
||||
interface Foo {}
|
||||
const foo = 42;
|
||||
import "foo";
|
||||
declare module "foo" {
|
||||
interface Foo {}
|
||||
const foo = 42;
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface Bar {}
|
||||
const bar = 42 ;
|
||||
interface Bar {}
|
||||
const bar = 42;
|
||||
}
|
||||
|
||||
import { type X } from "./x";
|
||||
type Y = 1;
|
||||
|
||||
declare module "foo" {
|
||||
interface Foo {
|
||||
x: X;
|
||||
y: Y;
|
||||
}
|
||||
}
|
||||
|
||||
// should not be emitted
|
||||
module baz {
|
||||
interface Baz {}
|
||||
const baz = 42;
|
||||
interface Baz {}
|
||||
const baz = 42;
|
||||
}
|
||||
|
||||
declare module x {
|
||||
interface Qux {}
|
||||
const qux = 42;
|
||||
interface Qux {}
|
||||
const qux = 42;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,3 +13,12 @@ declare global {
|
|||
interface Bar {}
|
||||
const bar = 42;
|
||||
}
|
||||
import { type X } from "./x";
|
||||
type Y = 1;
|
||||
declare module "foo" {
|
||||
interface Foo {
|
||||
x: X;
|
||||
y: Y;
|
||||
}
|
||||
}
|
||||
export {};
|
||||
|
|
|
|||
Loading…
Reference in a new issue