From 8e80f593fd34c745c0e4e9b8d22fd047b80bc15c Mon Sep 17 00:00:00 2001 From: michaelm Date: Fri, 16 Aug 2024 09:43:44 -0400 Subject: [PATCH] fix(isolated_declarations): Class properties should still be lifted from private constructors (#4934) Before, this ```ts export class Bux { private constructor( public readonly prop: number = 0, private readonly prop2: number = 1, readonly prop3: number = 1, ) {} } ``` would be emitted as ```ts export declare class Bux { private constructor(); } ``` Now it will be emitted as ```ts export declare class Bux { readonly prop: number; private readonly prop2; readonly prop3: number; private constructor(); } ``` Co-authored-by: MichaelMitchell-at <=> --- crates/oxc_isolated_declarations/src/class.rs | 9 +++++---- crates/oxc_isolated_declarations/tests/fixtures/class.ts | 8 ++++++++ .../oxc_isolated_declarations/tests/snapshots/class.snap | 6 ++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/crates/oxc_isolated_declarations/src/class.rs b/crates/oxc_isolated_declarations/src/class.rs index 90a90cfa7..ba52d2823 100644 --- a/crates/oxc_isolated_declarations/src/class.rs +++ b/crates/oxc_isolated_declarations/src/class.rs @@ -375,10 +375,6 @@ impl<'a> IsolatedDeclarations<'a> { if self.report_property_key(&method.key, method.computed) { continue; } - if method.accessibility.is_some_and(TSAccessibility::is_private) { - elements.push(self.transform_private_modifier_method(method)); - continue; - } let inferred_accessor_types = self.collect_inferred_accessor_types(decl); let function = &method.value; @@ -407,6 +403,11 @@ impl<'a> IsolatedDeclarations<'a> { ); } + if method.accessibility.is_some_and(TSAccessibility::is_private) { + elements.push(self.transform_private_modifier_method(method)); + continue; + } + let return_type = match method.kind { MethodDefinitionKind::Method => { let rt = self.infer_function_return_type(function); diff --git a/crates/oxc_isolated_declarations/tests/fixtures/class.ts b/crates/oxc_isolated_declarations/tests/fixtures/class.ts index 4a3d7c2a0..8d57b0508 100644 --- a/crates/oxc_isolated_declarations/tests/fixtures/class.ts +++ b/crates/oxc_isolated_declarations/tests/fixtures/class.ts @@ -35,3 +35,11 @@ export class Boo { readonly prop3: number = 1, ) {} } + +export class Bux { + private constructor( + public readonly prop: number = 0, + private readonly prop2: number = 1, + readonly prop3: number = 1, + ) {} +} diff --git a/crates/oxc_isolated_declarations/tests/snapshots/class.snap b/crates/oxc_isolated_declarations/tests/snapshots/class.snap index 11ccf7a23..a6b5b4505 100644 --- a/crates/oxc_isolated_declarations/tests/snapshots/class.snap +++ b/crates/oxc_isolated_declarations/tests/snapshots/class.snap @@ -33,3 +33,9 @@ export declare class Boo { readonly prop3: number; constructor(prop?: number, prop2?: number, prop3?: number); } +export declare class Bux { + readonly prop: number; + private readonly prop2; + readonly prop3: number; + private constructor(); +}