Avoid walking past root when resolving imports (#6126)

## Summary

Noticed in #5954: we walk _past_ the root rather than stopping _at_ the
root when attempting to traverse along the parent path. It's effectively
an off-by-one bug.
This commit is contained in:
Charlie Marsh 2023-07-27 09:38:51 -04:00 committed by GitHub
parent 6e85e0010f
commit 0c2abf8316
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 21 additions and 30 deletions

View File

@ -715,37 +715,28 @@ pub(crate) fn resolve_import<Host: host::Host>(
// importing file's directory, then the parent directory, and so on, until the // importing file's directory, then the parent directory, and so on, until the
// import root is reached. // import root is reached.
let root = execution_environment.root.as_path(); let root = execution_environment.root.as_path();
if source_file.starts_with(root) { let mut current = source_file;
let mut current = source_file; while let Some(parent) = current.parent() {
while let Some(parent) = current.parent() { if !parent.starts_with(root) {
if parent == root { break;
break;
}
debug!("Resolving absolute import in parent: {}", parent.display());
let mut result = resolve_absolute_import(
parent,
module_descriptor,
false,
false,
false,
true,
false,
);
if result.is_import_found {
if let Some(implicit_imports) = result
.implicit_imports
.filter(&module_descriptor.imported_symbols)
{
result.implicit_imports = implicit_imports;
}
return result;
}
current = parent;
} }
debug!("Resolving absolute import in parent: {}", parent.display());
let mut result =
resolve_absolute_import(parent, module_descriptor, false, false, false, true, false);
if result.is_import_found {
if let Some(implicit_imports) = result
.implicit_imports
.filter(&module_descriptor.imported_symbols)
{
result.implicit_imports = implicit_imports;
}
return result;
}
current = parent;
} }
ImportResult::not_found() ImportResult::not_found()