@@ -24,23 +24,24 @@ pub(crate) fn rename(
2424 position : FilePosition ,
2525 new_name : & str ,
2626) -> Option < RangeInfo < SourceChange > > {
27+ let sema = Semantics :: new ( db) ;
28+
2729 match lex_single_valid_syntax_kind ( new_name) ? {
2830 SyntaxKind :: IDENT | SyntaxKind :: UNDERSCORE => ( ) ,
29- SyntaxKind :: SELF_KW => return rename_to_self ( db , position) ,
31+ SyntaxKind :: SELF_KW => return rename_to_self ( & sema , position) ,
3032 _ => return None ,
3133 }
3234
33- let sema = Semantics :: new ( db) ;
3435 let source_file = sema. parse ( position. file_id ) ;
3536 let syntax = source_file. syntax ( ) ;
3637 if let Some ( module) = find_module_at_offset ( & sema, position, syntax) {
37- rename_mod ( db , position, module, new_name)
38+ rename_mod ( & sema , position, module, new_name)
3839 } else if let Some ( self_token) =
3940 syntax. token_at_offset ( position. offset ) . find ( |t| t. kind ( ) == SyntaxKind :: SELF_KW )
4041 {
41- rename_self_to_param ( db , position, self_token, new_name)
42+ rename_self_to_param ( & sema , position, self_token, new_name)
4243 } else {
43- rename_reference ( sema. db , position, new_name)
44+ rename_reference ( & sema, position, new_name)
4445 }
4546}
4647
@@ -97,20 +98,20 @@ fn source_edit_from_reference(reference: Reference, new_name: &str) -> SourceFil
9798}
9899
99100fn rename_mod (
100- db : & RootDatabase ,
101+ sema : & Semantics < RootDatabase > ,
101102 position : FilePosition ,
102103 module : Module ,
103104 new_name : & str ,
104105) -> Option < RangeInfo < SourceChange > > {
105106 let mut source_file_edits = Vec :: new ( ) ;
106107 let mut file_system_edits = Vec :: new ( ) ;
107108
108- let src = module. definition_source ( db) ;
109- let file_id = src. file_id . original_file ( db) ;
109+ let src = module. definition_source ( sema . db ) ;
110+ let file_id = src. file_id . original_file ( sema . db ) ;
110111 match src. value {
111112 ModuleSource :: SourceFile ( ..) => {
112113 // mod is defined in path/to/dir/mod.rs
113- let dst = if module. is_mod_rs ( db) {
114+ let dst = if module. is_mod_rs ( sema . db ) {
114115 format ! ( "../{}/mod.rs" , new_name)
115116 } else {
116117 format ! ( "{}.rs" , new_name)
@@ -122,17 +123,17 @@ fn rename_mod(
122123 ModuleSource :: Module ( ..) => { }
123124 }
124125
125- if let Some ( src) = module. declaration_source ( db) {
126- let file_id = src. file_id . original_file ( db) ;
126+ if let Some ( src) = module. declaration_source ( sema . db ) {
127+ let file_id = src. file_id . original_file ( sema . db ) ;
127128 let name = src. value . name ( ) ?;
128129 let edit = SourceFileEdit {
129- file_id : file_id ,
130+ file_id,
130131 edit : TextEdit :: replace ( name. syntax ( ) . text_range ( ) , new_name. into ( ) ) ,
131132 } ;
132133 source_file_edits. push ( edit) ;
133134 }
134135
135- let RangeInfo { range, info : refs } = find_all_refs ( db , position, None ) ?;
136+ let RangeInfo { range, info : refs } = find_all_refs ( sema , position, None ) ?;
136137 let ref_edits = refs
137138 . references
138139 . into_iter ( )
@@ -142,8 +143,10 @@ fn rename_mod(
142143 Some ( RangeInfo :: new ( range, SourceChange :: from_edits ( source_file_edits, file_system_edits) ) )
143144}
144145
145- fn rename_to_self ( db : & RootDatabase , position : FilePosition ) -> Option < RangeInfo < SourceChange > > {
146- let sema = Semantics :: new ( db) ;
146+ fn rename_to_self (
147+ sema : & Semantics < RootDatabase > ,
148+ position : FilePosition ,
149+ ) -> Option < RangeInfo < SourceChange > > {
147150 let source_file = sema. parse ( position. file_id ) ;
148151 let syn = source_file. syntax ( ) ;
149152
@@ -158,7 +161,7 @@ fn rename_to_self(db: &RootDatabase, position: FilePosition) -> Option<RangeInfo
158161 _ => return None , // not renaming other types
159162 } ;
160163
161- let RangeInfo { range, info : refs } = find_all_refs ( db , position, None ) ?;
164+ let RangeInfo { range, info : refs } = find_all_refs ( sema , position, None ) ?;
162165
163166 let param_range = first_param. syntax ( ) . text_range ( ) ;
164167 let ( param_ref, usages) : ( Vec < Reference > , Vec < Reference > ) = refs
@@ -210,16 +213,15 @@ fn text_edit_from_self_param(
210213}
211214
212215fn rename_self_to_param (
213- db : & RootDatabase ,
216+ sema : & Semantics < RootDatabase > ,
214217 position : FilePosition ,
215218 self_token : SyntaxToken ,
216219 new_name : & str ,
217220) -> Option < RangeInfo < SourceChange > > {
218- let sema = Semantics :: new ( db) ;
219221 let source_file = sema. parse ( position. file_id ) ;
220222 let syn = source_file. syntax ( ) ;
221223
222- let text = db. file_text ( position. file_id ) ;
224+ let text = sema . db . file_text ( position. file_id ) ;
223225 let fn_def = find_node_at_offset :: < ast:: FnDef > ( syn, position. offset ) ?;
224226 let search_range = fn_def. syntax ( ) . text_range ( ) ;
225227
@@ -249,11 +251,11 @@ fn rename_self_to_param(
249251}
250252
251253fn rename_reference (
252- db : & RootDatabase ,
254+ sema : & Semantics < RootDatabase > ,
253255 position : FilePosition ,
254256 new_name : & str ,
255257) -> Option < RangeInfo < SourceChange > > {
256- let RangeInfo { range, info : refs } = find_all_refs ( db , position, None ) ?;
258+ let RangeInfo { range, info : refs } = find_all_refs ( sema , position, None ) ?;
257259
258260 let edit = refs
259261 . into_iter ( )
0 commit comments