Suggest appropriate path when calling associated item on bare types
When looking at the documentation for `std::f32` or `std::str`, for example, it is easy to get confused and assume `std::f32` and `f32` are the same thing. Because of this, it is not uncommon to attempt writing `f32::consts::PI` instead of the correct `std::f32::consts::PI`. When encountering the former, which results in an access error due to it being an inexistent path, try to access the same path under `std`. If this succeeds, this information is stored for later tweaking of the final E0599 to provide an appropriate suggestion. This suggestion applies to both E0233 and E0599 and is only checked when the first ident of a path corresponds to a primitive type.
This commit is contained in:
parent
e928e94411
commit
6aa4c992bc
7 changed files with 134 additions and 40 deletions
|
|
@ -165,6 +165,10 @@ pub struct Session {
|
|||
|
||||
/// `Span`s of trait methods that weren't found to avoid emitting object safety errors
|
||||
pub trait_methods_not_found: Lock<FxHashSet<Span>>,
|
||||
|
||||
/// Mapping from ident span to path span for paths that don't exist as written, but that
|
||||
/// exist under `std`. For example, wrote `str::from_utf8` instead of `std::str::from_utf8`.
|
||||
pub confused_type_with_std_module: Lock<FxHashMap<Span, Span>>,
|
||||
}
|
||||
|
||||
pub struct PerfStats {
|
||||
|
|
@ -1248,6 +1252,7 @@ fn build_session_(
|
|||
has_panic_handler: Once::new(),
|
||||
driver_lint_caps,
|
||||
trait_methods_not_found: Lock::new(Default::default()),
|
||||
confused_type_with_std_module: Lock::new(Default::default()),
|
||||
};
|
||||
|
||||
validate_commandline_args_with_session_available(&sess);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue