diff --git a/crates/oxc_linter/src/ast_util.rs b/crates/oxc_linter/src/ast_util.rs index 86355df6ae96c..c9333d9b8045e 100644 --- a/crates/oxc_linter/src/ast_util.rs +++ b/crates/oxc_linter/src/ast_util.rs @@ -332,8 +332,14 @@ pub fn is_method_call<'a>( } } - let Some(member_expr) = call_expr.callee.without_parentheses().as_member_expression() else { - return false; + let callee_without_parentheses = call_expr.callee.without_parentheses(); + let member_expr = match callee_without_parentheses { + match_member_expression!(Expression) => callee_without_parentheses.to_member_expression(), + Expression::ChainExpression(chain) => match chain.expression { + match_member_expression!(ChainElement) => chain.expression.to_member_expression(), + ChainElement::CallExpression(_) => return false, + }, + _ => return false, }; if let Some(objects) = objects { diff --git a/crates/oxc_linter/src/rules/unicorn/prefer_array_flat.rs b/crates/oxc_linter/src/rules/unicorn/prefer_array_flat.rs index a6a1c4a9b7bb1..c2d97c461cfd0 100644 --- a/crates/oxc_linter/src/rules/unicorn/prefer_array_flat.rs +++ b/crates/oxc_linter/src/rules/unicorn/prefer_array_flat.rs @@ -302,6 +302,7 @@ fn test() { r"array.flatMap(() => x)", r"array.flatMap((x, y) => x)", r"array.flatMap(x => y)", + r"(array?.flatMap)?.(x => y)", r"new array.reduce((a, b) => a.concat(b), [])", r"array.reduce", r"reduce((a, b) => a.concat(b), [])", @@ -388,6 +389,7 @@ fn test() { let fail = vec![ r"array.flatMap(x => x)", + r"(array?.flatMap)?.(x => x)", r"function foo(){return[].flatMap(x => x)}", r"foo.flatMap(x => x) instanceof Array", r"array.reduce((a, b) => a.concat(b), [])", diff --git a/crates/oxc_linter/src/snapshots/prefer_array_flat.snap b/crates/oxc_linter/src/snapshots/prefer_array_flat.snap index 4f154b9bb652c..6166f049e0b39 100644 --- a/crates/oxc_linter/src/snapshots/prefer_array_flat.snap +++ b/crates/oxc_linter/src/snapshots/prefer_array_flat.snap @@ -1,5 +1,7 @@ --- source: crates/oxc_linter/src/tester.rs +assertion_line: 353 +snapshot_kind: text --- ⚠ eslint-plugin-unicorn(prefer-array-flat): Prefer Array#flat() over legacy techniques to flatten arrays. ╭─[prefer_array_flat.tsx:1:1] @@ -8,6 +10,13 @@ source: crates/oxc_linter/src/tester.rs ╰──── help: Call `.flat()` on the array instead. + ⚠ eslint-plugin-unicorn(prefer-array-flat): Prefer Array#flat() over legacy techniques to flatten arrays. + ╭─[prefer_array_flat.tsx:1:1] + 1 │ (array?.flatMap)?.(x => x) + · ────────────────────────── + ╰──── + help: Call `.flat()` on the array instead. + ⚠ eslint-plugin-unicorn(prefer-array-flat): Prefer Array#flat() over legacy techniques to flatten arrays. ╭─[prefer_array_flat.tsx:1:22] 1 │ function foo(){return[].flatMap(x => x)}