@@ -54,6 +54,18 @@ impl<'a> Module<'a> {
54
54
pub ( crate ) fn attrs ( & self ) -> & [ ast:: Attribute ] {
55
55
& self . inner_attr
56
56
}
57
+
58
+ pub ( crate ) fn to_owned ( & self ) -> Module < ' static > {
59
+ Module {
60
+ ast_mod_kind : self
61
+ . ast_mod_kind
62
+ . as_ref ( )
63
+ . map ( |i| Cow :: Owned ( ( * * i) . clone ( ) ) ) ,
64
+ items : Cow :: Owned ( ( & * self . items ) . clone ( ) ) ,
65
+ inner_attr : self . inner_attr . clone ( ) ,
66
+ span : self . span ,
67
+ }
68
+ }
57
69
}
58
70
59
71
/// Maps each module to the corresponding file.
@@ -172,7 +184,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
172
184
& item,
173
185
Module :: new (
174
186
span,
175
- Some ( Cow :: Owned ( sub_mod_kind. clone ( ) ) ) ,
187
+ Some ( Cow :: Borrowed ( sub_mod_kind) ) ,
176
188
Cow :: Owned ( ThinVec :: new ( ) ) ,
177
189
& [ ] ,
178
190
) ,
@@ -185,7 +197,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
185
197
/// Visit modules from AST.
186
198
fn visit_mod_from_ast (
187
199
& mut self ,
188
- items : & ' ast [ rustc_ast:: ptr:: P < ast:: Item > ] ,
200
+ items : & [ rustc_ast:: ptr:: P < ast:: Item > ] ,
189
201
) -> Result < ( ) , ModuleResolutionError > {
190
202
for item in items {
191
203
if is_cfg_if ( item) {
@@ -211,7 +223,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
211
223
fn visit_sub_mod (
212
224
& mut self ,
213
225
item : & ' c ast:: Item ,
214
- sub_mod : Module < ' ast > ,
226
+ sub_mod : Module < ' _ > ,
215
227
) -> Result < ( ) , ModuleResolutionError > {
216
228
let old_directory = self . directory . clone ( ) ;
217
229
let sub_mod_kind = self . peek_sub_mod ( item, & sub_mod) ?;
@@ -227,7 +239,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
227
239
fn peek_sub_mod (
228
240
& self ,
229
241
item : & ' c ast:: Item ,
230
- sub_mod : & Module < ' ast > ,
242
+ sub_mod : & Module < ' _ > ,
231
243
) -> Result < Option < SubModKind < ' c , ' ast > > , ModuleResolutionError > {
232
244
if contains_skip ( & item. attrs ) {
233
245
return Ok ( None ) ;
@@ -267,7 +279,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
267
279
268
280
fn visit_sub_mod_inner (
269
281
& mut self ,
270
- sub_mod : Module < ' ast > ,
282
+ sub_mod : Module < ' _ > ,
271
283
sub_mod_kind : SubModKind < ' c , ' ast > ,
272
284
) -> Result < ( ) , ModuleResolutionError > {
273
285
match sub_mod_kind {
@@ -297,7 +309,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
297
309
298
310
fn visit_sub_mod_after_directory_update (
299
311
& mut self ,
300
- sub_mod : Module < ' ast > ,
312
+ sub_mod : Module < ' _ > ,
301
313
directory : Option < Directory > ,
302
314
) -> Result < ( ) , ModuleResolutionError > {
303
315
if let Some ( directory) = directory {
@@ -319,7 +331,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
319
331
& self ,
320
332
mod_name : symbol:: Ident ,
321
333
attrs : & [ ast:: Attribute ] ,
322
- sub_mod : & Module < ' ast > ,
334
+ sub_mod : & Module < ' _ > ,
323
335
) -> Result < Option < SubModKind < ' c , ' ast > > , ModuleResolutionError > {
324
336
let relative = match self . directory . ownership {
325
337
DirectoryOwnership :: Owned { relative } => relative,
@@ -373,7 +385,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
373
385
return Ok ( None ) ;
374
386
} else {
375
387
if should_insert {
376
- mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. clone ( ) ) ) ;
388
+ mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. to_owned ( ) ) ) ;
377
389
}
378
390
return Ok ( Some ( SubModKind :: MultiExternal ( mods_outside_ast) ) ) ;
379
391
}
@@ -404,7 +416,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
404
416
) ,
405
417
) ) ;
406
418
if should_insert {
407
- mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. clone ( ) ) ) ;
419
+ mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. to_owned ( ) ) ) ;
408
420
}
409
421
Ok ( Some ( SubModKind :: MultiExternal ( mods_outside_ast) ) )
410
422
}
@@ -418,7 +430,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
418
430
} ) ,
419
431
Err ( ..) => {
420
432
if should_insert {
421
- mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. clone ( ) ) ) ;
433
+ mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. to_owned ( ) ) ) ;
422
434
}
423
435
Ok ( Some ( SubModKind :: MultiExternal ( mods_outside_ast) ) )
424
436
}
@@ -489,7 +501,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
489
501
fn find_mods_outside_of_ast (
490
502
& self ,
491
503
attrs : & [ ast:: Attribute ] ,
492
- sub_mod : & Module < ' ast > ,
504
+ sub_mod : & Module < ' _ > ,
493
505
) -> Vec < ( PathBuf , DirectoryOwnership , Module < ' ast > ) > {
494
506
// Filter nested path, like `#[cfg_attr(feature = "foo", path = "bar.rs")]`.
495
507
let mut path_visitor = visitor:: PathVisitor :: default ( ) ;
@@ -510,7 +522,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
510
522
result. push ( (
511
523
actual_path,
512
524
DirectoryOwnership :: Owned { relative : None } ,
513
- sub_mod. clone ( ) ,
525
+ sub_mod. to_owned ( ) ,
514
526
) ) ;
515
527
continue ;
516
528
}
0 commit comments