@@ -90,16 +90,14 @@ pub(crate) enum ModuleResolutionErrorKind {
90
90
}
91
91
92
92
#[ derive( Clone ) ]
93
- enum SubModKind < ' a , ' ast > {
93
+ enum SubModKind < ' ast > {
94
94
/// `mod foo;`
95
95
External ( PathBuf , DirectoryOwnership , Module < ' ast > ) ,
96
96
/// `mod foo;` with multiple sources.
97
97
MultiExternal ( Vec < ( PathBuf , DirectoryOwnership , Module < ' ast > ) > ) ,
98
- /// `mod foo {}`
99
- Internal ( & ' a ast:: Item ) ,
100
98
}
101
99
102
- impl < ' ast , ' sess , ' c > ModResolver < ' ast , ' sess > {
100
+ impl < ' ast , ' sess > ModResolver < ' ast , ' sess > {
103
101
/// Creates a new `ModResolver`.
104
102
pub ( crate ) fn new (
105
103
parse_sess : & ' sess ParseSess ,
@@ -210,40 +208,33 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
210
208
211
209
fn visit_sub_mod (
212
210
& mut self ,
213
- item : & ' c ast:: Item ,
211
+ item : & ast:: Item ,
214
212
sub_mod : Module < ' ast > ,
215
213
) -> Result < ( ) , ModuleResolutionError > {
216
- let sub_mod_kind = self . peek_sub_mod ( item, & sub_mod) ?;
217
- if let Some ( sub_mod_kind) = sub_mod_kind {
218
- self . insert_sub_mod ( sub_mod_kind. clone ( ) ) ?;
219
- self . visit_sub_mod_inner ( sub_mod, sub_mod_kind) ?;
220
- }
221
- Ok ( ( ) )
222
- }
223
-
224
- /// Inspect the given sub-module which we are about to visit and returns its kind.
225
- fn peek_sub_mod (
226
- & self ,
227
- item : & ' c ast:: Item ,
228
- sub_mod : & Module < ' ast > ,
229
- ) -> Result < Option < SubModKind < ' c , ' ast > > , ModuleResolutionError > {
230
214
if contains_skip ( & item. attrs ) {
231
- return Ok ( None ) ;
215
+ return Ok ( ( ) ) ;
232
216
}
233
-
234
217
if is_mod_decl ( item) {
235
218
// mod foo;
236
219
// Look for an extern file.
237
- self . find_external_module ( item. ident , & item. attrs , sub_mod)
220
+ let Some ( kind) = self . find_external_module ( item. ident , & item. attrs , & sub_mod) ? else {
221
+ return Ok ( ( ) ) ;
222
+ } ;
223
+ self . insert_sub_mod ( kind. clone ( ) ) ?;
224
+ self . visit_sub_mod_inner ( kind) ?;
238
225
} else {
239
226
// An internal module (`mod foo { /* ... */ }`);
240
- Ok ( Some ( SubModKind :: Internal ( item) ) )
241
- }
227
+ let directory = self . inline_mod_directory ( item. ident , & item. attrs ) ;
228
+ self . with_directory ( directory, |this| {
229
+ this. visit_sub_mod_after_directory_update ( sub_mod)
230
+ } ) ?;
231
+ } ;
232
+ Ok ( ( ) )
242
233
}
243
234
244
235
fn insert_sub_mod (
245
236
& mut self ,
246
- sub_mod_kind : SubModKind < ' c , ' ast > ,
237
+ sub_mod_kind : SubModKind < ' ast > ,
247
238
) -> Result < ( ) , ModuleResolutionError > {
248
239
match sub_mod_kind {
249
240
SubModKind :: External ( mod_path, _, sub_mod) => {
@@ -258,15 +249,13 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
258
249
. or_insert ( sub_mod) ;
259
250
}
260
251
}
261
- _ => ( ) ,
262
252
}
263
253
Ok ( ( ) )
264
254
}
265
255
266
256
fn visit_sub_mod_inner (
267
257
& mut self ,
268
- sub_mod : Module < ' ast > ,
269
- sub_mod_kind : SubModKind < ' c , ' ast > ,
258
+ sub_mod_kind : SubModKind < ' ast > ,
270
259
) -> Result < ( ) , ModuleResolutionError > {
271
260
match sub_mod_kind {
272
261
SubModKind :: External ( mod_path, directory_ownership, sub_mod) => {
@@ -278,12 +267,6 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
278
267
this. visit_sub_mod_after_directory_update ( sub_mod)
279
268
} ) ?;
280
269
}
281
- SubModKind :: Internal ( item) => {
282
- let directory = self . inline_mod_directory ( item. ident , & item. attrs ) ;
283
- self . with_directory ( directory, |this| {
284
- this. visit_sub_mod_after_directory_update ( sub_mod)
285
- } ) ?;
286
- }
287
270
SubModKind :: MultiExternal ( mods) => {
288
271
for ( mod_path, directory_ownership, sub_mod) in mods {
289
272
let directory = Directory {
@@ -320,7 +303,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
320
303
mod_name : symbol:: Ident ,
321
304
attrs : & [ ast:: Attribute ] ,
322
305
sub_mod : & Module < ' ast > ,
323
- ) -> Result < Option < SubModKind < ' c , ' ast > > , ModuleResolutionError > {
306
+ ) -> Result < Option < SubModKind < ' ast > > , ModuleResolutionError > {
324
307
let relative = match self . directory . ownership {
325
308
DirectoryOwnership :: Owned { relative } => relative,
326
309
DirectoryOwnership :: UnownedViaBlock => None ,
0 commit comments