@@ -25,7 +25,6 @@ type FileModMap<'ast> = BTreeMap<FileName, Module<'ast>>;
25
25
/// Represents module with its inner attributes.
26
26
#[ derive( Debug , Clone ) ]
27
27
pub ( crate ) struct Module < ' a > {
28
- ast_mod_kind : Option < Cow < ' a , ast:: ModKind > > ,
29
28
pub ( crate ) items : Cow < ' a , ThinVec < rustc_ast:: ptr:: P < ast:: Item > > > ,
30
29
inner_attr : ast:: AttrVec ,
31
30
pub ( crate ) span : Span ,
@@ -34,7 +33,6 @@ pub(crate) struct Module<'a> {
34
33
impl < ' a > Module < ' a > {
35
34
pub ( crate ) fn new (
36
35
mod_span : Span ,
37
- ast_mod_kind : Option < Cow < ' a , ast:: ModKind > > ,
38
36
mod_items : Cow < ' a , ThinVec < rustc_ast:: ptr:: P < ast:: Item > > > ,
39
37
mod_attrs : & [ ast:: Attribute ] ,
40
38
) -> Self {
@@ -47,7 +45,6 @@ impl<'a> Module<'a> {
47
45
items : mod_items,
48
46
inner_attr,
49
47
span : mod_span,
50
- ast_mod_kind,
51
48
}
52
49
}
53
50
@@ -139,7 +136,6 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
139
136
root_filename,
140
137
Module :: new (
141
138
mk_sp ( snippet_provider. start_pos ( ) , snippet_provider. end_pos ( ) ) ,
142
- None ,
143
139
Cow :: Borrowed ( & krate. items ) ,
144
140
& krate. attrs ,
145
141
) ,
@@ -153,14 +149,13 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
153
149
visitor. visit_item ( item) ;
154
150
for module_item in visitor. mods ( ) {
155
151
if let ast:: ItemKind :: Mod ( _, ref sub_mod_kind) = module_item. item . kind {
152
+ let items = match sub_mod_kind {
153
+ ast:: ModKind :: Loaded ( items, ..) => Cow :: Owned ( items. clone ( ) ) ,
154
+ _ => Cow :: Owned ( ThinVec :: new ( ) ) ,
155
+ } ;
156
156
self . visit_sub_mod (
157
157
& module_item. item ,
158
- Module :: new (
159
- module_item. item . span ,
160
- Some ( Cow :: Owned ( sub_mod_kind. clone ( ) ) ) ,
161
- Cow :: Owned ( ThinVec :: new ( ) ) ,
162
- & [ ] ,
163
- ) ,
158
+ Module :: new ( module_item. item . span , items, & [ ] ) ,
164
159
false ,
165
160
) ?;
166
161
}
@@ -180,17 +175,11 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
180
175
}
181
176
182
177
if let ast:: ItemKind :: Mod ( _, ref sub_mod_kind) = item. kind {
183
- let span = item. span ;
184
- self . visit_sub_mod (
185
- & item,
186
- Module :: new (
187
- span,
188
- Some ( Cow :: Owned ( sub_mod_kind. clone ( ) ) ) ,
189
- Cow :: Owned ( ThinVec :: new ( ) ) ,
190
- & [ ] ,
191
- ) ,
192
- false ,
193
- ) ?;
178
+ let items = match sub_mod_kind {
179
+ ast:: ModKind :: Loaded ( items, ..) => Cow :: Owned ( items. clone ( ) ) ,
180
+ _ => Cow :: Owned ( ThinVec :: new ( ) ) ,
181
+ } ;
182
+ self . visit_sub_mod ( & item, Module :: new ( item. span , items, & [ ] ) , false ) ?;
194
183
}
195
184
}
196
185
Ok ( ( ) )
@@ -207,17 +196,11 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
207
196
}
208
197
209
198
if let ast:: ItemKind :: Mod ( _, ref sub_mod_kind) = item. kind {
210
- let span = item. span ;
211
- self . visit_sub_mod (
212
- item,
213
- Module :: new (
214
- span,
215
- Some ( Cow :: Borrowed ( sub_mod_kind) ) ,
216
- Cow :: Owned ( ThinVec :: new ( ) ) ,
217
- & [ ] ,
218
- ) ,
219
- true ,
220
- ) ?;
199
+ let items = match sub_mod_kind {
200
+ ast:: ModKind :: Loaded ( items, ..) => Cow :: Borrowed ( items) ,
201
+ _ => Cow :: Owned ( ThinVec :: new ( ) ) ,
202
+ } ;
203
+ self . visit_sub_mod ( item, Module :: new ( item. span , items, & [ ] ) , true ) ?;
221
204
}
222
205
}
223
206
Ok ( ( ) )
@@ -322,15 +305,11 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
322
305
self . directory = directory;
323
306
}
324
307
if from_ast {
325
- if let Some ( Cow :: Borrowed ( ast :: ModKind :: Loaded ( items, _ , _ ) ) ) = & sub_mod. ast_mod_kind {
308
+ if let Cow :: Borrowed ( items) = sub_mod. items {
326
309
self . visit_mod_from_ast ( items) ?;
327
310
}
328
311
} else {
329
- if let Some ( Cow :: Owned ( ast:: ModKind :: Loaded ( items, _, _) ) ) = & sub_mod. ast_mod_kind {
330
- self . visit_mod_outside_ast ( items) ?;
331
- } else if let Cow :: Owned ( items) = & sub_mod. items {
332
- self . visit_mod_outside_ast ( items) ?;
333
- }
312
+ self . visit_mod_outside_ast ( & sub_mod. items ) ?;
334
313
}
335
314
Ok ( ( ) )
336
315
}
@@ -355,12 +334,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
355
334
Ok ( ( attrs, items, span) ) => Ok ( Some ( SubModKind :: External (
356
335
path,
357
336
DirectoryOwnership :: Owned { relative : None } ,
358
- Module :: new (
359
- span,
360
- Some ( Cow :: Owned ( ast:: ModKind :: Unloaded ) ) ,
361
- Cow :: Owned ( items) ,
362
- & attrs,
363
- ) ,
337
+ Module :: new ( span, Cow :: Owned ( items) , & attrs) ,
364
338
) ) ) ,
365
339
Err ( ParserError :: ParseError ) => Err ( ModuleResolutionError {
366
340
module : mod_name. to_string ( ) ,
@@ -405,24 +379,14 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
405
379
Ok ( Some ( SubModKind :: External (
406
380
file_path,
407
381
dir_ownership,
408
- Module :: new (
409
- span,
410
- Some ( Cow :: Owned ( ast:: ModKind :: Unloaded ) ) ,
411
- Cow :: Owned ( items) ,
412
- & attrs,
413
- ) ,
382
+ Module :: new ( span, Cow :: Owned ( items) , & attrs) ,
414
383
) ) )
415
384
}
416
385
Ok ( ( attrs, items, span) ) => {
417
386
mods_outside_ast. push ( (
418
387
file_path. clone ( ) ,
419
388
dir_ownership,
420
- Module :: new (
421
- span,
422
- Some ( Cow :: Owned ( ast:: ModKind :: Unloaded ) ) ,
423
- Cow :: Owned ( items) ,
424
- & attrs,
425
- ) ,
389
+ Module :: new ( span, Cow :: Owned ( items) , & attrs) ,
426
390
) ) ;
427
391
if should_insert {
428
392
mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. clone ( ) ) ) ;
@@ -545,12 +509,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
545
509
result. push ( (
546
510
actual_path,
547
511
DirectoryOwnership :: Owned { relative : None } ,
548
- Module :: new (
549
- span,
550
- Some ( Cow :: Owned ( ast:: ModKind :: Unloaded ) ) ,
551
- Cow :: Owned ( items) ,
552
- & attrs,
553
- ) ,
512
+ Module :: new ( span, Cow :: Owned ( items) , & attrs) ,
554
513
) )
555
514
}
556
515
result
0 commit comments