mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 12:19:15 +00:00
fix(linter): fix is_method_call with parentheses and chain expression (#7095)
I fixed `is_method_call` behavior in specific case below. For example, when we use `is_method_call(call_expr, None, Some(&["apply"]), Some(1), Some(1))` for [`(a?.b.apply)(args)`](https://playground.oxc.rs/#eNpFjkEKg0AMRe+SVQviAdx057alN4gaZWBMJJmxFfHunVG0q+Qnn//fCi1UcMNH2ZQ4TX6531AHu0MBAtUKGjkPWzjgF6qgkQrwjsO5WysTXWIZG/GnCopsvegIVY/eaCtgQjXSnIjey+dNISo/YzDXUR25DU5S3+5OZqVknumFSmxHasrI7XtG2q+K89BKRwNl5iRGx653/xcHFV+n3gwwkzZiCf1g27YfdH1fTA==), we cannot check correctly. This is because we don't consider `call_expr` has parentheses and chain expression.
This commit is contained in:
parent
25d7554ec4
commit
b73cfd992e
3 changed files with 19 additions and 2 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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), [])",
|
||||
|
|
|
|||
|
|
@ -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)}
|
||||
|
|
|
|||
Loading…
Reference in a new issue