@@ -441,15 +441,25 @@ fn is_argument_similar_to_param_name(argument: &ast::Expr, param_name: &str) ->
441
441
None => return false ,
442
442
} ;
443
443
444
+ // std is honestly too panic happy...
445
+ let str_split_at = |str : & str , at| str. is_char_boundary ( at) . then ( || argument. split_at ( at) ) ;
446
+
444
447
let param_name = param_name. trim_start_matches ( '_' ) ;
445
448
let argument = argument. trim_start_matches ( '_' ) ;
446
- if argument. strip_prefix ( param_name) . map_or ( false , |s| s. starts_with ( '_' ) ) {
447
- return true ;
449
+
450
+ match str_split_at ( argument, param_name. len ( ) ) {
451
+ Some ( ( prefix, rest) ) if prefix. eq_ignore_ascii_case ( param_name) => {
452
+ return rest. is_empty ( ) || rest. starts_with ( '_' ) ;
453
+ }
454
+ _ => ( ) ,
448
455
}
449
- if argument. strip_suffix ( param_name) . map_or ( false , |s| s. ends_with ( '_' ) ) {
450
- return true ;
456
+ match argument. len ( ) . checked_sub ( param_name. len ( ) ) . and_then ( |at| str_split_at ( argument, at) ) {
457
+ Some ( ( rest, suffix) ) if param_name. eq_ignore_ascii_case ( suffix) => {
458
+ return rest. is_empty ( ) || rest. ends_with ( '_' ) ;
459
+ }
460
+ _ => ( ) ,
451
461
}
452
- argument == param_name
462
+ false
453
463
}
454
464
455
465
/// Hide the parameter name of a unary function if it is a `_` - prefixed suffix of the function's name, or equal.
@@ -464,9 +474,13 @@ fn is_param_name_suffix_of_fn_name(
464
474
match ( callable. n_params ( ) , fn_name) {
465
475
( 1 , Some ( function) ) => {
466
476
function == param_name
467
- || ( function. len ( ) > param_name. len ( )
468
- && function. ends_with ( param_name)
469
- && function[ ..function. len ( ) - param_name. len ( ) ] . ends_with ( '_' ) )
477
+ || function
478
+ . len ( )
479
+ . checked_sub ( param_name. len ( ) )
480
+ . and_then ( |at| function. is_char_boundary ( at) . then ( || function. split_at ( at) ) )
481
+ . map_or ( false , |( prefix, suffix) | {
482
+ suffix. eq_ignore_ascii_case ( param_name) && prefix. ends_with ( '_' )
483
+ } )
470
484
}
471
485
_ => false ,
472
486
}
@@ -852,6 +866,9 @@ enum CompletionKind {
852
866
fn non_ident_pat((a, b): (u32, u32)) {}
853
867
854
868
fn main() {
869
+ const PARAM: u32 = 0;
870
+ foo(PARAM);
871
+
855
872
check("");
856
873
857
874
map(0);
0 commit comments