From adee7280d74a05e5443630ee52ee7b42017489b4 Mon Sep 17 00:00:00 2001 From: michaelm Date: Sat, 6 Jul 2024 10:58:07 -0400 Subject: [PATCH] fix(isolated_declarations): Don't report an error for parameters if they are ObjectPattern or ArrayPattern with an explicit type (#4065) The logic in https://github.com/oxc-project/oxc/pull/3810 was slightly off as demonstrated by the snapshot test. Co-authored-by: MichaelMitchell-at <=> --- .../oxc_isolated_declarations/src/function.rs | 10 ++++++--- .../tests/snapshots/function-parameters.snap | 22 ++----------------- 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/crates/oxc_isolated_declarations/src/function.rs b/crates/oxc_isolated_declarations/src/function.rs index bb581f3e3..e2fe1489e 100644 --- a/crates/oxc_isolated_declarations/src/function.rs +++ b/crates/oxc_isolated_declarations/src/function.rs @@ -48,9 +48,13 @@ impl<'a> IsolatedDeclarations<'a> { is_remaining_params_have_required: bool, ) -> Option> { let pattern = ¶m.pattern; - if pattern.type_annotation.is_none() && pattern.kind.is_destructuring_pattern() { - self.error(parameter_must_have_explicit_type(param.span)); - return None; + if let BindingPatternKind::AssignmentPattern(pattern) = &pattern.kind { + if pattern.left.kind.is_destructuring_pattern() + && pattern.left.type_annotation.is_none() + { + self.error(parameter_must_have_explicit_type(param.span)); + return None; + } } let is_assignment_pattern = pattern.kind.is_assignment_pattern(); diff --git a/crates/oxc_isolated_declarations/tests/snapshots/function-parameters.snap b/crates/oxc_isolated_declarations/tests/snapshots/function-parameters.snap index 1efd93ab3..32ff3a31c 100644 --- a/crates/oxc_isolated_declarations/tests/snapshots/function-parameters.snap +++ b/crates/oxc_isolated_declarations/tests/snapshots/function-parameters.snap @@ -6,8 +6,8 @@ input_file: crates/oxc_isolated_declarations/tests/fixtures/function-parameters. export declare function fnDeclGood(p?: T, rParam?: string): void; export declare function fnDeclGood2(p?: T, rParam?: number): void; -export declare function fooGood(): number; -export declare const fooGood2: () => number; +export declare function fooGood([a, b]?: any[]): number; +export declare const fooGood2: ({ a, b }?: object) => number; export declare function fnDeclBad(p: T, rParam: T, r2: T): void; export declare function fnDeclBad2(p: T, r2: T): void; export declare function fnDeclBad3(p: T, rParam?: T, r2: T): void; @@ -17,24 +17,6 @@ export declare const fooBad2: () => number; ==================== Errors ==================== - x TS9011: Parameter must have an explicit type annotation with - | --isolatedDeclarations. - ,-[5:25] - 4 | - 5 | export function fooGood([a, b]: any[] = [1, 2]): number { - : ^^^^^^^^^^^^^^^^^^^^^^ - 6 | return 2; - `---- - - x TS9011: Parameter must have an explicit type annotation with - | --isolatedDeclarations. - ,-[9:26] - 8 | - 9 | export const fooGood2 = ({a, b}: object = { a: 1, b: 2 }): number => { - : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 10 | return 2; - `---- - x TS9025: Declaration emit for this parameter requires implicitly adding | undefined to it's type. This is not supported with --isolatedDeclarations. ,-[14:30]