From 6ff35c94225b3cba5a5ead8d7a602f474631bc6f Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Fri, 2 Sep 2022 15:02:10 +0800 Subject: [PATCH] fix(rome_js_analyze): false positive useShorthandArrayTypes (#3119) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 🎸 finsish * fix: 🐛 cr issues --- .../analyzers/ts/use_shorthand_array_type.rs | 12 +++++- .../tests/specs/ts/useShorthandArrayType.ts | 13 ++++++ .../specs/ts/useShorthandArrayType.ts.snap | 42 ++++++++++++++++++- 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/crates/rome_js_analyze/src/analyzers/ts/use_shorthand_array_type.rs b/crates/rome_js_analyze/src/analyzers/ts/use_shorthand_array_type.rs index e4c11d962198..afd403fc4baa 100644 --- a/crates/rome_js_analyze/src/analyzers/ts/use_shorthand_array_type.rs +++ b/crates/rome_js_analyze/src/analyzers/ts/use_shorthand_array_type.rs @@ -112,8 +112,16 @@ fn convert_to_array_type(type_arguments: TsTypeArguments) -> Option { .filter_map(|param| { let param = param.ok()?; let element_type = match ¶m { - TsType::TsUnionType(_) => None, - TsType::TsTypeOperatorType(_) => None, + // Intersection or higher types + TsType::TsUnionType(_) + | TsType::TsIntersectionType(_) + | TsType::TsFunctionType(_) + | TsType::TsConstructorType(_) + | TsType::TsConditionalType(_) + | TsType::TsTypeOperatorType(_) + | TsType::TsInferType(_) + | TsType::TsMappedType(_) => None, + TsType::TsReferenceType(ty) if is_array_reference(ty).unwrap_or(false) => { if let Some(type_arguments) = ty.type_arguments() { convert_to_array_type(type_arguments) diff --git a/crates/rome_js_analyze/tests/specs/ts/useShorthandArrayType.ts b/crates/rome_js_analyze/tests/specs/ts/useShorthandArrayType.ts index 2b35077afea5..99d675dd77e2 100644 --- a/crates/rome_js_analyze/tests/specs/ts/useShorthandArrayType.ts +++ b/crates/rome_js_analyze/tests/specs/ts/useShorthandArrayType.ts @@ -9,3 +9,16 @@ let invalid2: Promise>; let invalid3: Array>; let invalid4: Array<[number, number]>; +// valid +let valid5: Array; +let valid6: Array<() => string>; +type valid7 = Array +type valid8 = Array string> +// valid end + +//parenthesized type +let valid8: Array<(string & number)>; +// infer type +type valid9 = T extends Array ? R : any; +// mapped type +type valid10 = { [K in keyof T]: T[K] }; diff --git a/crates/rome_js_analyze/tests/specs/ts/useShorthandArrayType.ts.snap b/crates/rome_js_analyze/tests/specs/ts/useShorthandArrayType.ts.snap index a1638baabaf1..edead9f02d3a 100644 --- a/crates/rome_js_analyze/tests/specs/ts/useShorthandArrayType.ts.snap +++ b/crates/rome_js_analyze/tests/specs/ts/useShorthandArrayType.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_analyze/tests/spec_tests.rs +assertion_line: 97 expression: useShorthandArrayType.ts --- # Input @@ -15,6 +16,19 @@ let invalid2: Promise>; let invalid3: Array>; let invalid4: Array<[number, number]>; +// valid +let valid5: Array; +let valid6: Array<() => string>; +type valid7 = Array +type valid8 = Array string> +// valid end + +//parenthesized type +let valid8: Array<(string & number)>; +// infer type +type valid9 = T extends Array ? R : any; +// mapped type +type valid10 = { [K in keyof T]: T[K] }; ``` @@ -111,7 +125,7 @@ warning[ts/useShorthandArrayType]: Use shorthand T[] syntax instead of Array │ --------------- Suggested fix: Use shorthand T[] syntax to replace - | @@ -6,6 +6,6 @@ + | @@ -6,7 +6,7 @@ 5 5 | let valid: Array; 6 6 | let invalid1: Array>; 7 7 | let invalid2: Promise>; @@ -119,6 +133,7 @@ Suggested fix: Use shorthand T[] syntax to replace 8 | + let invalid3: Foo[]; 9 9 | let invalid4: Array<[number, number]>; 10 10 | +11 11 | // valid ``` @@ -131,13 +146,36 @@ warning[ts/useShorthandArrayType]: Use shorthand T[] syntax instead of Array │ ----------------------- Suggested fix: Use shorthand T[] syntax to replace - | @@ -7,5 +7,5 @@ + | @@ -7,7 +7,7 @@ 6 6 | let invalid1: Array>; 7 7 | let invalid2: Promise>; 8 8 | let invalid3: Array>; 9 | - let invalid4: Array<[number, number]>; 9 | + let invalid4: [number, number][]; 10 10 | +11 11 | // valid +12 12 | let valid5: Array; + + +``` + +``` +warning[ts/useShorthandArrayType]: Use shorthand T[] syntax instead of Array syntax. + ┌─ useShorthandArrayType.ts:20:13 + │ +20 │ let valid8: Array<(string & number)>; + │ ------------------------ + +Suggested fix: Use shorthand T[] syntax to replace + | @@ -17,7 +17,7 @@ +16 16 | // valid end +17 17 | +18 18 | //parenthesized type +19 | - let valid8: Array<(string & number)>; + 19 | + let valid8: (string & number)[]; +20 20 | // infer type +21 21 | type valid9 = T extends Array ? R : any; +22 22 | // mapped type ```