@@ -894,7 +894,7 @@ fn should_hide_param_name_hint(
894
894
// These are to be tested in the `parameter_hint_heuristics` test
895
895
// hide when:
896
896
// - the parameter name is a suffix of the function's name
897
- // - the argument is an enum whose name is equal to the parameter
897
+ // - the argument is a qualified constructing or call expression where the qualifier is an ADT
898
898
// - exact argument<->parameter match(ignoring leading underscore) or parameter is a prefix/suffix
899
899
// of argument with _ splitting it off
900
900
// - param starts with `ra_fixture`
@@ -915,10 +915,10 @@ fn should_hide_param_name_hint(
915
915
} ;
916
916
let fn_name = fn_name. as_deref ( ) ;
917
917
is_param_name_suffix_of_fn_name ( param_name, callable, fn_name)
918
- || is_enum_name_similar_to_param_name ( sema, argument, param_name)
919
918
|| is_argument_similar_to_param_name ( argument, param_name)
920
919
|| param_name. starts_with ( "ra_fixture" )
921
920
|| ( callable. n_params ( ) == 1 && is_obvious_param ( param_name) )
921
+ || is_adt_constructor_similar_to_param_name ( sema, argument, param_name)
922
922
}
923
923
924
924
fn is_argument_similar_to_param_name ( argument : & ast:: Expr , param_name : & str ) -> bool {
@@ -974,17 +974,43 @@ fn is_param_name_suffix_of_fn_name(
974
974
}
975
975
}
976
976
977
- fn is_enum_name_similar_to_param_name (
977
+ fn is_adt_constructor_similar_to_param_name (
978
978
sema : & Semantics < RootDatabase > ,
979
979
argument : & ast:: Expr ,
980
980
param_name : & str ,
981
981
) -> bool {
982
- match sema. type_of_expr ( argument) . and_then ( |t| t. original . as_adt ( ) ) {
983
- Some ( hir:: Adt :: Enum ( e) ) => {
984
- to_lower_snake_case ( & e. name ( sema. db ) . to_smol_str ( ) ) == param_name
982
+ let path = match argument {
983
+ ast:: Expr :: CallExpr ( c) => c. expr ( ) . and_then ( |e| match e {
984
+ ast:: Expr :: PathExpr ( p) => p. path ( ) ,
985
+ _ => None ,
986
+ } ) ,
987
+ ast:: Expr :: PathExpr ( p) => p. path ( ) ,
988
+ ast:: Expr :: RecordExpr ( r) => r. path ( ) ,
989
+ _ => return false ,
990
+ } ;
991
+ let path = match path {
992
+ Some ( it) => it,
993
+ None => return false ,
994
+ } ;
995
+ ( || match sema. resolve_path ( & path) ? {
996
+ hir:: PathResolution :: Def ( hir:: ModuleDef :: Adt ( _) ) => {
997
+ Some ( to_lower_snake_case ( & path. segment ( ) ?. name_ref ( ) ?. text ( ) ) == param_name)
985
998
}
986
- _ => false ,
987
- }
999
+ hir:: PathResolution :: Def ( hir:: ModuleDef :: Function ( _) | hir:: ModuleDef :: Variant ( _) ) => {
1000
+ if to_lower_snake_case ( & path. segment ( ) ?. name_ref ( ) ?. text ( ) ) == param_name {
1001
+ return Some ( true ) ;
1002
+ }
1003
+ let qual = path. qualifier ( ) ?;
1004
+ match sema. resolve_path ( & qual) ? {
1005
+ hir:: PathResolution :: Def ( hir:: ModuleDef :: Adt ( _) ) => {
1006
+ Some ( to_lower_snake_case ( & qual. segment ( ) ?. name_ref ( ) ?. text ( ) ) == param_name)
1007
+ }
1008
+ _ => None ,
1009
+ }
1010
+ }
1011
+ _ => None ,
1012
+ } ) ( )
1013
+ . unwrap_or ( false )
988
1014
}
989
1015
990
1016
fn get_string_representation ( expr : & ast:: Expr ) -> Option < String > {
@@ -1309,7 +1335,6 @@ fn main() {
1309
1335
//^^ self ^^^^ param
1310
1336
Test::from_syntax(
1311
1337
FileId {},
1312
- //^^^^^^^^^ file_id
1313
1338
"impl".into(),
1314
1339
//^^^^^^^^^^^^^ name
1315
1340
None,
0 commit comments