[ty] Improve debug messages when imports fail (#21555)
This commit is contained in:
@@ -5799,9 +5799,8 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
|
||||
return;
|
||||
};
|
||||
let mut diagnostic = builder.into_diagnostic(format_args!(
|
||||
"Cannot resolve imported module `{}{}`",
|
||||
".".repeat(level as usize),
|
||||
module.unwrap_or_default()
|
||||
"Cannot resolve imported module `{}`",
|
||||
format_import_from_module(level, module)
|
||||
));
|
||||
|
||||
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
|
||||
@@ -6039,7 +6062,8 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
|
||||
}
|
||||
Err(ModuleNameResolutionError::UnknownCurrentModule) => {
|
||||
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),
|
||||
self.file().path(self.db())
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user