@@ -282,7 +282,7 @@ impl Rule for JsxHandlerNames {
282
282
return ;
283
283
}
284
284
if let Some ( ( name, span, is_props_handler) ) =
285
- get_event_handler_name_from_arrow_function ( arrow_function, ctx )
285
+ get_event_handler_name_from_arrow_function ( arrow_function)
286
286
{
287
287
( Some ( name) , span, is_props_handler)
288
288
} else {
@@ -297,7 +297,7 @@ impl Rule for JsxHandlerNames {
297
297
}
298
298
JSXExpression :: StaticMemberExpression ( member_expr) => {
299
299
let ( name, span, is_props_handler) =
300
- get_event_handler_name_from_static_member_expression ( member_expr, ctx ) ;
300
+ get_event_handler_name_from_static_member_expression ( member_expr) ;
301
301
( Some ( name) , span, is_props_handler)
302
302
}
303
303
_ => {
@@ -377,22 +377,23 @@ fn is_member_expression_callee(arrow_function: &ArrowFunctionExpression<'_>) ->
377
377
378
378
fn get_event_handler_name_from_static_member_expression (
379
379
member_expr : & StaticMemberExpression ,
380
- ctx : & LintContext ,
381
380
) -> ( CompactStr , Span , bool ) {
382
381
let name = member_expr. property . name . as_str ( ) ;
383
382
let span = member_expr. property . span ;
384
383
match & member_expr. object {
385
- Expression :: ThisExpression ( _) => ( name. into ( ) , span, false ) ,
386
384
Expression :: Identifier ( ident) => {
387
385
let obj_name = ident. name . as_str ( ) ;
388
- ( name. into ( ) , span, obj_name == "props" )
386
+ ( name. into ( ) , span, obj_name == "props" ) // props.handleChange or obj.handleChange
389
387
}
390
388
Expression :: StaticMemberExpression ( expr) => {
391
- let ( obj_name, _obj_span, is_props) =
392
- get_event_handler_name_from_static_member_expression ( expr, ctx) ;
393
- ( name. into ( ) , span, !is_props && obj_name == "props" )
389
+ if let Expression :: ThisExpression ( _) = & expr. object {
390
+ let obj_name = expr. property . name . as_str ( ) ;
391
+ ( name. into ( ) , span, obj_name == "props" ) // this.props.handleChange or this.obj.handleChange
392
+ } else {
393
+ ( name. into ( ) , span, false ) // foo.props.handleChange, props.foo.handleChange, foo.bar.handleChange, etc.
394
+ }
394
395
}
395
- _ => ( ctx . source_range ( member_expr . span ) . into ( ) , member_expr . span , false ) ,
396
+ _ => ( name . into ( ) , span, false ) , // this.handleChange
396
397
}
397
398
}
398
399
@@ -453,7 +454,6 @@ fn test_normalize_handler_name() {
453
454
454
455
fn get_event_handler_name_from_arrow_function < ' a > (
455
456
arrow_function : & ' a ArrowFunctionExpression < ' a > ,
456
- ctx : & LintContext < ' a > ,
457
457
) -> Option < ( CompactStr , Span , bool ) > {
458
458
if !arrow_function. expression {
459
459
// Ignore arrow functions with block bodies like `() => { this.handleChange() }`.
@@ -471,7 +471,7 @@ fn get_event_handler_name_from_arrow_function<'a>(
471
471
match & call_expr. callee {
472
472
Expression :: Identifier ( ident) => Some ( ( ident. name . as_str ( ) . into ( ) , ident. span , false ) ) ,
473
473
Expression :: StaticMemberExpression ( member_expr) => {
474
- Some ( get_event_handler_name_from_static_member_expression ( member_expr, ctx ) )
474
+ Some ( get_event_handler_name_from_static_member_expression ( member_expr) )
475
475
}
476
476
_ => None ,
477
477
}
@@ -622,6 +622,8 @@ fn test() {
622
622
( "<TestComponent onChange={this.handl3Change} />" , None ) ,
623
623
( "<TestComponent onChange={this.handle4change} />" , None ) ,
624
624
( "<TestComponent onChange={this.props.doSomethingOnChange} />" , None ) ,
625
+ ( "<TestComponent onChange={this.props.obj.onChange} />" , None ) ,
626
+ ( "<TestComponent onChange={props.obj.onChange} />" , None ) ,
625
627
(
626
628
"<TestComponent onChange={takeCareOfChange} />" ,
627
629
Some ( serde_json:: json!( [ { "checkLocalVariables" : true } ] ) ) ,
0 commit comments