mirror of https://github.com/astral-sh/ruff
[ty] Improve debug messages when imports fail (#21555)
This commit is contained in:
parent
1af318534a
commit
54dba15088
|
|
@ -40,6 +40,8 @@ error[unresolved-import]: Cannot resolve imported module `....foo`
|
||||||
2 |
|
2 |
|
||||||
3 | stat = add(10, 15)
|
3 | stat = add(10, 15)
|
||||||
|
|
|
|
||||||
|
help: The module can be resolved if the number of leading dots is reduced
|
||||||
|
help: Did you mean `...foo`?
|
||||||
info: Searched in the following paths during module resolution:
|
info: Searched in the following paths during module resolution:
|
||||||
info: 1. /src (first-party code)
|
info: 1. /src (first-party code)
|
||||||
info: 2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
|
info: 2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
|
||||||
|
|
|
||||||
|
|
@ -5799,9 +5799,8 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
let mut diagnostic = builder.into_diagnostic(format_args!(
|
let mut diagnostic = builder.into_diagnostic(format_args!(
|
||||||
"Cannot resolve imported module `{}{}`",
|
"Cannot resolve imported module `{}`",
|
||||||
".".repeat(level as usize),
|
format_import_from_module(level, module)
|
||||||
module.unwrap_or_default()
|
|
||||||
));
|
));
|
||||||
|
|
||||||
if level == 0 {
|
if level == 0 {
|
||||||
|
|
@ -5832,6 +5831,30 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if let Some(better_level) = (0..level).rev().find(|reduced_level| {
|
||||||
|
let Ok(module_name) = ModuleName::from_identifier_parts(
|
||||||
|
self.db(),
|
||||||
|
self.file(),
|
||||||
|
module,
|
||||||
|
*reduced_level,
|
||||||
|
) else {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
resolve_module(self.db(), &module_name).is_some()
|
||||||
|
}) {
|
||||||
|
diagnostic
|
||||||
|
.help("The module can be resolved if the number of leading dots is reduced");
|
||||||
|
diagnostic.help(format_args!(
|
||||||
|
"Did you mean `{}`?",
|
||||||
|
format_import_from_module(better_level, module)
|
||||||
|
));
|
||||||
|
diagnostic.set_concise_message(format_args!(
|
||||||
|
"Cannot resolve imported module `{}` - did you mean `{}`?",
|
||||||
|
format_import_from_module(level, module),
|
||||||
|
format_import_from_module(better_level, module)
|
||||||
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add search paths information to the diagnostic
|
// Add search paths information to the diagnostic
|
||||||
|
|
@ -6039,7 +6062,8 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
|
||||||
}
|
}
|
||||||
Err(ModuleNameResolutionError::UnknownCurrentModule) => {
|
Err(ModuleNameResolutionError::UnknownCurrentModule) => {
|
||||||
tracing::debug!(
|
tracing::debug!(
|
||||||
"Relative module resolution `{}` failed; could not resolve file `{}` to a module",
|
"Relative module resolution `{}` failed: could not resolve file `{}` to a module \
|
||||||
|
(try adjusting configured search paths?)",
|
||||||
format_import_from_module(*level, module),
|
format_import_from_module(*level, module),
|
||||||
self.file().path(self.db())
|
self.file().path(self.db())
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue