@@ -297,7 +297,7 @@ impl Rule for JsxHandlerNames {
297297 }
298298 JSXExpression :: StaticMemberExpression ( member_expr) => {
299299 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, ctx, 0 ) ;
301301 ( Some ( name) , span, is_props_handler)
302302 }
303303 _ => {
@@ -378,19 +378,24 @@ fn is_member_expression_callee(arrow_function: &ArrowFunctionExpression<'_>) ->
378378fn get_event_handler_name_from_static_member_expression (
379379 member_expr : & StaticMemberExpression ,
380380 ctx : & LintContext ,
381+ depth : usize ,
381382) -> ( CompactStr , Span , bool ) {
382383 let name = member_expr. property . name . as_str ( ) ;
383384 let span = member_expr. property . span ;
384385 match & member_expr. object {
385- Expression :: ThisExpression ( _) => ( name. into ( ) , span, false ) ,
386+ Expression :: ThisExpression ( _) => {
387+ let is_props_property = depth == 1 && name == "props" ; // this.props.*
388+ ( name. into ( ) , span, is_props_property)
389+ }
386390 Expression :: Identifier ( ident) => {
387391 let obj_name = ident. name . as_str ( ) ;
388- ( name. into ( ) , span, obj_name == "props" )
392+ let is_props_property = depth == 0 && obj_name == "props" ; // props.*
393+ ( name. into ( ) , span, is_props_property)
389394 }
390395 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" )
396+ let ( _ , _ , is_props_property ) =
397+ get_event_handler_name_from_static_member_expression ( expr, ctx, depth + 1 ) ;
398+ ( name. into ( ) , span, is_props_property )
394399 }
395400 _ => ( ctx. source_range ( member_expr. span ) . into ( ) , member_expr. span , false ) ,
396401 }
@@ -471,7 +476,7 @@ fn get_event_handler_name_from_arrow_function<'a>(
471476 match & call_expr. callee {
472477 Expression :: Identifier ( ident) => Some ( ( ident. name . as_str ( ) . into ( ) , ident. span , false ) ) ,
473478 Expression :: StaticMemberExpression ( member_expr) => {
474- Some ( get_event_handler_name_from_static_member_expression ( member_expr, ctx) )
479+ Some ( get_event_handler_name_from_static_member_expression ( member_expr, ctx, 0 ) )
475480 }
476481 _ => None ,
477482 }
@@ -622,6 +627,8 @@ fn test() {
622627 ( "<TestComponent onChange={this.handl3Change} />" , None ) ,
623628 ( "<TestComponent onChange={this.handle4change} />" , None ) ,
624629 ( "<TestComponent onChange={this.props.doSomethingOnChange} />" , None ) ,
630+ ( "<TestComponent onChange={this.props.obj.onChange} />" , None ) ,
631+ ( "<TestComponent onChange={props.obj.onChange} />" , None ) ,
625632 (
626633 "<TestComponent onChange={takeCareOfChange} />" ,
627634 Some ( serde_json:: json!( [ { "checkLocalVariables" : true } ] ) ) ,
0 commit comments