Skip to content

Commit d6826bb

Browse files
committed
Introduce from_ast boolean
1 parent 70966b0 commit d6826bb

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

src/modules.rs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
161161
Cow::Owned(ThinVec::new()),
162162
&[],
163163
),
164+
false,
164165
)?;
165166
}
166167
}
@@ -188,6 +189,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
188189
Cow::Owned(ThinVec::new()),
189190
&[],
190191
),
192+
false,
191193
)?;
192194
}
193195
}
@@ -214,6 +216,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
214216
Cow::Owned(ThinVec::new()),
215217
&[],
216218
),
219+
true,
217220
)?;
218221
}
219222
}
@@ -224,12 +227,13 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
224227
&mut self,
225228
item: &'c ast::Item,
226229
sub_mod: Module<'ast>,
230+
from_ast: bool,
227231
) -> Result<(), ModuleResolutionError> {
228232
let old_directory = self.directory.clone();
229233
let sub_mod_kind = self.peek_sub_mod(item, &sub_mod)?;
230234
if let Some(sub_mod_kind) = sub_mod_kind {
231235
self.insert_sub_mod(sub_mod_kind.clone())?;
232-
self.visit_sub_mod_inner(sub_mod, sub_mod_kind)?;
236+
self.visit_sub_mod_inner(sub_mod, sub_mod_kind, from_ast)?;
233237
}
234238
self.directory = old_directory;
235239
Ok(())
@@ -281,26 +285,27 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
281285
&mut self,
282286
sub_mod: Module<'ast>,
283287
sub_mod_kind: SubModKind<'c, 'ast>,
288+
from_ast: bool,
284289
) -> Result<(), ModuleResolutionError> {
285290
match sub_mod_kind {
286291
SubModKind::External(mod_path, directory_ownership, sub_mod) => {
287292
let directory = Directory {
288293
path: mod_path.parent().unwrap().to_path_buf(),
289294
ownership: directory_ownership,
290295
};
291-
self.visit_sub_mod_after_directory_update(sub_mod, Some(directory))
296+
self.visit_sub_mod_after_directory_update(sub_mod, Some(directory), false)
292297
}
293298
SubModKind::Internal(item) => {
294299
self.push_inline_mod_directory(item.ident, &item.attrs);
295-
self.visit_sub_mod_after_directory_update(sub_mod, None)
300+
self.visit_sub_mod_after_directory_update(sub_mod, None, from_ast)
296301
}
297302
SubModKind::MultiExternal(mods) => {
298303
for (mod_path, directory_ownership, sub_mod) in mods {
299304
let directory = Directory {
300305
path: mod_path.parent().unwrap().to_path_buf(),
301306
ownership: directory_ownership,
302307
};
303-
self.visit_sub_mod_after_directory_update(sub_mod, Some(directory))?;
308+
self.visit_sub_mod_after_directory_update(sub_mod, Some(directory), false)?;
304309
}
305310
Ok(())
306311
}
@@ -311,19 +316,23 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
311316
&mut self,
312317
sub_mod: Module<'ast>,
313318
directory: Option<Directory>,
319+
from_ast: bool,
314320
) -> Result<(), ModuleResolutionError> {
315321
if let Some(directory) = directory {
316322
self.directory = directory;
317323
}
318-
match (sub_mod.ast_mod_kind, sub_mod.items) {
319-
(Some(Cow::Borrowed(ast::ModKind::Loaded(items, _, _))), _) => {
320-
self.visit_mod_from_ast(items)
324+
if from_ast {
325+
if let Some(Cow::Borrowed(ast::ModKind::Loaded(items, _, _))) = &sub_mod.ast_mod_kind {
326+
self.visit_mod_from_ast(items)?;
321327
}
322-
(Some(Cow::Owned(ast::ModKind::Loaded(items, _, _))), _) | (_, Cow::Owned(items)) => {
323-
self.visit_mod_outside_ast(&items)
328+
} 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)?;
324333
}
325-
(_, _) => Ok(()),
326334
}
335+
Ok(())
327336
}
328337

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

0 commit comments

Comments
 (0)