@@ -421,19 +421,28 @@ fn text_edit_from_self_param(self_param: &ast::SelfParam, new_name: &str) -> Opt
421
421
None
422
422
}
423
423
424
- let impl_def = self_param. syntax ( ) . ancestors ( ) . find_map ( ast:: Impl :: cast) ?;
425
- let type_name = target_type_name ( & impl_def) ?;
426
-
427
- let mut replacement_text = String :: from ( new_name) ;
428
- replacement_text. push_str ( ": " ) ;
429
- match ( self_param. amp_token ( ) , self_param. mut_token ( ) ) {
430
- ( Some ( _) , None ) => replacement_text. push ( '&' ) ,
431
- ( Some ( _) , Some ( _) ) => replacement_text. push_str ( "&mut " ) ,
432
- ( _, _) => ( ) ,
433
- } ;
434
- replacement_text. push_str ( type_name. as_str ( ) ) ;
424
+ match self_param. syntax ( ) . ancestors ( ) . find_map ( ast:: Impl :: cast) {
425
+ Some ( impl_def) => {
426
+ let type_name = target_type_name ( & impl_def) ?;
427
+
428
+ let mut replacement_text = String :: from ( new_name) ;
429
+ replacement_text. push_str ( ": " ) ;
430
+ match ( self_param. amp_token ( ) , self_param. mut_token ( ) ) {
431
+ ( Some ( _) , None ) => replacement_text. push ( '&' ) ,
432
+ ( Some ( _) , Some ( _) ) => replacement_text. push_str ( "&mut " ) ,
433
+ ( _, _) => ( ) ,
434
+ } ;
435
+ replacement_text. push_str ( type_name. as_str ( ) ) ;
435
436
436
- Some ( TextEdit :: replace ( self_param. syntax ( ) . text_range ( ) , replacement_text) )
437
+ Some ( TextEdit :: replace ( self_param. syntax ( ) . text_range ( ) , replacement_text) )
438
+ }
439
+ None => {
440
+ cov_mark:: hit!( rename_self_outside_of_methods) ;
441
+ let mut replacement_text = String :: from ( new_name) ;
442
+ replacement_text. push_str ( ": _" ) ;
443
+ Some ( TextEdit :: replace ( self_param. syntax ( ) . text_range ( ) , replacement_text) )
444
+ }
445
+ }
437
446
}
438
447
439
448
#[ cfg( test) ]
@@ -1977,6 +1986,26 @@ impl Foo {
1977
1986
) ;
1978
1987
}
1979
1988
1989
+ #[ test]
1990
+ fn test_self_outside_of_methods ( ) {
1991
+ cov_mark:: check!( rename_self_outside_of_methods) ;
1992
+ check (
1993
+ "foo" ,
1994
+ r#"
1995
+ fn f($0self) -> i32 {
1996
+ use self as _;
1997
+ self.i
1998
+ }
1999
+ "# ,
2000
+ r#"
2001
+ fn f(foo: _) -> i32 {
2002
+ use self as _;
2003
+ foo.i
2004
+ }
2005
+ "# ,
2006
+ ) ;
2007
+ }
2008
+
1980
2009
#[ test]
1981
2010
fn test_self_in_path_to_parameter ( ) {
1982
2011
check (
0 commit comments