@@ -72,8 +72,11 @@ impl Rule for PreferArrayFind {
7272
7373 if let AstKind :: CallExpression ( call_expr) = node. kind ( ) {
7474 if is_method_call ( call_expr, None , Some ( & [ "shift" ] ) , Some ( 0 ) , Some ( 0 ) ) {
75- if let Expression :: CallExpression ( filter_call_expr) =
76- call_expr. callee . as_member_expression ( ) . unwrap ( ) . object ( ) . get_inner_expression ( )
75+ if let Some ( Expression :: CallExpression ( filter_call_expr) ) = call_expr
76+ . callee
77+ . get_inner_expression ( )
78+ . as_member_expression ( )
79+ . map ( |expression| expression. object ( ) . get_inner_expression ( ) )
7780 {
7881 if is_filter_call ( filter_call_expr) {
7982 ctx. diagnostic ( prefer_array_find_diagnostic (
@@ -197,12 +200,11 @@ impl Rule for PreferArrayFind {
197200 } )
198201 } )
199202 {
200- if let Expression :: CallExpression ( filter_call_expr) = at_call_expr
203+ if let Some ( Expression :: CallExpression ( filter_call_expr) ) = at_call_expr
201204 . callee
202- . as_member_expression ( )
203- . unwrap ( )
204- . object ( )
205205 . get_inner_expression ( )
206+ . as_member_expression ( )
207+ . map ( |expression| expression. object ( ) . get_inner_expression ( ) )
206208 {
207209 if is_filter_call ( filter_call_expr) {
208210 ctx. diagnostic ( prefer_array_find_diagnostic (
@@ -216,12 +218,11 @@ impl Rule for PreferArrayFind {
216218 // `array.filter().pop()`
217219 if let AstKind :: CallExpression ( pop_call_expr) = node. kind ( ) {
218220 if is_method_call ( pop_call_expr, None , Some ( & [ "pop" ] ) , Some ( 0 ) , Some ( 0 ) ) {
219- if let Expression :: CallExpression ( filter_call_expr) = pop_call_expr
221+ if let Some ( Expression :: CallExpression ( filter_call_expr) ) = pop_call_expr
220222 . callee
221- . as_member_expression ( )
222- . unwrap ( )
223- . object ( )
224223 . get_inner_expression ( )
224+ . as_member_expression ( )
225+ . map ( |expression| expression. object ( ) . get_inner_expression ( ) )
225226 {
226227 if is_filter_call ( filter_call_expr) {
227228 ctx. diagnostic ( prefer_array_find_diagnostic (
@@ -427,6 +428,8 @@ fn test() {
427428 "array.filter().at(0)" ,
428429 "array.filter(foo, thisArgument, extraArgument).at(0)" ,
429430 "array.filter(...foo).at(0)" ,
431+ // oxc-project/oxc#12399
432+ "{a.pop!()}" ,
430433 ] ;
431434
432435 let fail = vec ! [
@@ -609,6 +612,9 @@ fn test() {
609612 )
610613 // comment 6
611614 ;" ,
615+ // oxc-project/oxc#12399
616+ "array.filter(foo).pop!()" ,
617+ "array.filter(foo)?.pop()" ,
612618 ] ;
613619
614620 let _fix: Vec < ( & ' static str , & ' static str , Option < serde_json:: Value > ) > = vec ! [
0 commit comments