Skip to content

Commit b4b9b7d

Browse files
committed
Factor out SubModKind::Internal
This variant can be factored out fairly easily. It makes things simpler overall and opens the door for later refactors.
1 parent aca8f9c commit b4b9b7d

File tree

1 file changed

+18
-35
lines changed

1 file changed

+18
-35
lines changed

src/modules.rs

Lines changed: 18 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,14 @@ pub(crate) enum ModuleResolutionErrorKind {
9090
}
9191

9292
#[derive(Clone)]
93-
enum SubModKind<'a, 'ast> {
93+
enum SubModKind<'ast> {
9494
/// `mod foo;`
9595
External(PathBuf, DirectoryOwnership, Module<'ast>),
9696
/// `mod foo;` with multiple sources.
9797
MultiExternal(Vec<(PathBuf, DirectoryOwnership, Module<'ast>)>),
98-
/// `mod foo {}`
99-
Internal(&'a ast::Item),
10098
}
10199

102-
impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
100+
impl<'ast, 'sess> ModResolver<'ast, 'sess> {
103101
/// Creates a new `ModResolver`.
104102
pub(crate) fn new(
105103
parse_sess: &'sess ParseSess,
@@ -210,40 +208,33 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
210208

211209
fn visit_sub_mod(
212210
&mut self,
213-
item: &'c ast::Item,
211+
item: &ast::Item,
214212
sub_mod: Module<'ast>,
215213
) -> 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> {
230214
if contains_skip(&item.attrs) {
231-
return Ok(None);
215+
return Ok(());
232216
}
233-
234217
if is_mod_decl(item) {
235218
// mod foo;
236219
// 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)?;
238225
} else {
239226
// 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(())
242233
}
243234

244235
fn insert_sub_mod(
245236
&mut self,
246-
sub_mod_kind: SubModKind<'c, 'ast>,
237+
sub_mod_kind: SubModKind<'ast>,
247238
) -> Result<(), ModuleResolutionError> {
248239
match sub_mod_kind {
249240
SubModKind::External(mod_path, _, sub_mod) => {
@@ -258,15 +249,13 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
258249
.or_insert(sub_mod);
259250
}
260251
}
261-
_ => (),
262252
}
263253
Ok(())
264254
}
265255

266256
fn visit_sub_mod_inner(
267257
&mut self,
268-
sub_mod: Module<'ast>,
269-
sub_mod_kind: SubModKind<'c, 'ast>,
258+
sub_mod_kind: SubModKind<'ast>,
270259
) -> Result<(), ModuleResolutionError> {
271260
match sub_mod_kind {
272261
SubModKind::External(mod_path, directory_ownership, sub_mod) => {
@@ -278,12 +267,6 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
278267
this.visit_sub_mod_after_directory_update(sub_mod)
279268
})?;
280269
}
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-
}
287270
SubModKind::MultiExternal(mods) => {
288271
for (mod_path, directory_ownership, sub_mod) in mods {
289272
let directory = Directory {
@@ -320,7 +303,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
320303
mod_name: symbol::Ident,
321304
attrs: &[ast::Attribute],
322305
sub_mod: &Module<'ast>,
323-
) -> Result<Option<SubModKind<'c, 'ast>>, ModuleResolutionError> {
306+
) -> Result<Option<SubModKind<'ast>>, ModuleResolutionError> {
324307
let relative = match self.directory.ownership {
325308
DirectoryOwnership::Owned { relative } => relative,
326309
DirectoryOwnership::UnownedViaBlock => None,

0 commit comments

Comments
 (0)