Skip to content

Commit 98c9938

Browse files
committed
Introduce from_ast boolean
1 parent 2a6bd85 commit 98c9938

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

src/modules.rs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
176176
Cow::Owned(ThinVec::new()),
177177
&[],
178178
),
179+
false,
179180
)?;
180181
}
181182
}
@@ -202,6 +203,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
202203
Cow::Owned(ThinVec::new()),
203204
&[],
204205
),
206+
true,
205207
)?;
206208
}
207209
}
@@ -212,12 +214,13 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
212214
&mut self,
213215
item: &'c ast::Item,
214216
sub_mod: Module<'ast>,
217+
from_ast: bool,
215218
) -> Result<(), ModuleResolutionError> {
216219
let old_directory = self.directory.clone();
217220
let sub_mod_kind = self.peek_sub_mod(item, &sub_mod)?;
218221
if let Some(sub_mod_kind) = sub_mod_kind {
219222
self.insert_sub_mod(sub_mod_kind.clone())?;
220-
self.visit_sub_mod_inner(sub_mod, sub_mod_kind)?;
223+
self.visit_sub_mod_inner(sub_mod, sub_mod_kind, from_ast)?;
221224
}
222225
self.directory = old_directory;
223226
Ok(())
@@ -269,26 +272,27 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
269272
&mut self,
270273
sub_mod: Module<'ast>,
271274
sub_mod_kind: SubModKind<'c, 'ast>,
275+
from_ast: bool,
272276
) -> Result<(), ModuleResolutionError> {
273277
match sub_mod_kind {
274278
SubModKind::External(mod_path, directory_ownership, sub_mod) => {
275279
let directory = Directory {
276280
path: mod_path.parent().unwrap().to_path_buf(),
277281
ownership: directory_ownership,
278282
};
279-
self.visit_sub_mod_after_directory_update(sub_mod, Some(directory))
283+
self.visit_sub_mod_after_directory_update(sub_mod, Some(directory), false)
280284
}
281285
SubModKind::Internal(item) => {
282286
self.push_inline_mod_directory(item.ident, &item.attrs);
283-
self.visit_sub_mod_after_directory_update(sub_mod, None)
287+
self.visit_sub_mod_after_directory_update(sub_mod, None, from_ast)
284288
}
285289
SubModKind::MultiExternal(mods) => {
286290
for (mod_path, directory_ownership, sub_mod) in mods {
287291
let directory = Directory {
288292
path: mod_path.parent().unwrap().to_path_buf(),
289293
ownership: directory_ownership,
290294
};
291-
self.visit_sub_mod_after_directory_update(sub_mod, Some(directory))?;
295+
self.visit_sub_mod_after_directory_update(sub_mod, Some(directory), false)?;
292296
}
293297
Ok(())
294298
}
@@ -299,19 +303,23 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
299303
&mut self,
300304
sub_mod: Module<'ast>,
301305
directory: Option<Directory>,
306+
from_ast: bool,
302307
) -> Result<(), ModuleResolutionError> {
303308
if let Some(directory) = directory {
304309
self.directory = directory;
305310
}
306-
match (sub_mod.ast_mod_kind, sub_mod.items) {
307-
(Some(Cow::Borrowed(ast::ModKind::Loaded(items, _, _))), _) => {
308-
self.visit_mod_from_ast(items)
311+
if from_ast {
312+
if let Some(Cow::Borrowed(ast::ModKind::Loaded(items, _, _))) = &sub_mod.ast_mod_kind {
313+
self.visit_mod_from_ast(items)?;
309314
}
310-
(Some(Cow::Owned(ast::ModKind::Loaded(items, _, _))), _) | (_, Cow::Owned(items)) => {
311-
self.visit_mod_outside_ast(&items)
315+
} else {
316+
if let Some(Cow::Owned(ast::ModKind::Loaded(items, _, _))) = &sub_mod.ast_mod_kind {
317+
self.visit_mod_outside_ast(items)?;
318+
} else if let Cow::Owned(items) = &sub_mod.items {
319+
self.visit_mod_outside_ast(items)?;
312320
}
313-
(_, _) => Ok(()),
314321
}
322+
Ok(())
315323
}
316324

317325
/// Find a file path in the filesystem which corresponds to the given module.

0 commit comments

Comments
 (0)