@@ -61,6 +61,7 @@ pub(crate) struct ModResolver<'ast, 'sess> {
6161 directory : Directory ,
6262 file_map : FileModMap < ' ast > ,
6363 recursive : bool ,
64+ ignore_missing_submod : bool ,
6465}
6566
6667/// Represents errors while trying to resolve modules.
@@ -104,6 +105,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
104105 parse_sess : & ' sess ParseSess ,
105106 directory_ownership : DirectoryOwnership ,
106107 recursive : bool ,
108+ ignore_missing_submod : bool ,
107109 ) -> Self {
108110 ModResolver {
109111 directory : Directory {
@@ -113,6 +115,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
113115 file_map : BTreeMap :: new ( ) ,
114116 parse_sess,
115117 recursive,
118+ ignore_missing_submod,
116119 }
117120 }
118121
@@ -248,6 +251,14 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
248251 // mod foo;
249252 // Look for an extern file.
250253 self . find_external_module ( item. ident , & item. attrs , sub_mod)
254+ . or_else ( |err| match err. kind {
255+ ModuleResolutionErrorKind :: NotFound { file : _ }
256+ if self . ignore_missing_submod =>
257+ {
258+ Ok ( None )
259+ }
260+ _ => Err ( err) ,
261+ } )
251262 } else {
252263 // An internal module (`mod foo { /* ... */ }`);
253264 Ok ( Some ( SubModKind :: Internal ( item) ) )
0 commit comments