Rollup merge of #111460 - clubby789:lowercase-box-self, r=compiler-errors
Improve suggestion for `self: Box<self>` Fixes #110642
This commit is contained in:
commit
6641b49cdd
9 changed files with 63 additions and 25 deletions
|
@ -948,6 +948,9 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
ResolutionError::InvalidAsmSym => {
|
||||
self.tcx.sess.create_err(errs::InvalidAsmSym { span })
|
||||
}
|
||||
ResolutionError::LowercaseSelf => {
|
||||
self.tcx.sess.create_err(errs::LowercaseSelf { span })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -442,6 +442,14 @@ pub(crate) struct InvalidAsmSym {
|
|||
pub(crate) span: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(resolve_lowercase_self)]
|
||||
pub(crate) struct LowercaseSelf {
|
||||
#[primary_span]
|
||||
#[suggestion(code = "Self", applicability = "maybe-incorrect", style = "short")]
|
||||
pub(crate) span: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(resolve_trait_impl_duplicate, code = "E0201")]
|
||||
pub(crate) struct TraitImplDuplicate {
|
||||
|
|
|
@ -15,8 +15,7 @@ use std::ptr;
|
|||
|
||||
use crate::errors::{ParamKindInEnumDiscriminant, ParamKindInNonTrivialAnonConst};
|
||||
use crate::late::{
|
||||
ConstantHasGenerics, ConstantItemKind, HasGenericParams, NoConstantGenericsReason, PathSource,
|
||||
Rib, RibKind,
|
||||
ConstantHasGenerics, HasGenericParams, NoConstantGenericsReason, PathSource, Rib, RibKind,
|
||||
};
|
||||
use crate::macros::{sub_namespace_match, MacroRulesScope};
|
||||
use crate::{errors, AmbiguityError, AmbiguityErrorMisc, AmbiguityKind, Determinacy, Finalize};
|
||||
|
@ -1127,28 +1126,25 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
RibKind::ConstantItem(_, item) => {
|
||||
// Still doesn't deal with upvars
|
||||
if let Some(span) = finalize {
|
||||
let (span, resolution_error) =
|
||||
if let Some((ident, constant_item_kind)) = item {
|
||||
let kind_str = match constant_item_kind {
|
||||
ConstantItemKind::Const => "const",
|
||||
ConstantItemKind::Static => "static",
|
||||
};
|
||||
(
|
||||
span,
|
||||
AttemptToUseNonConstantValueInConstant(
|
||||
ident, "let", kind_str,
|
||||
),
|
||||
)
|
||||
} else {
|
||||
(
|
||||
rib_ident.span,
|
||||
AttemptToUseNonConstantValueInConstant(
|
||||
original_rib_ident_def,
|
||||
"const",
|
||||
"let",
|
||||
),
|
||||
)
|
||||
};
|
||||
let (span, resolution_error) = match item {
|
||||
None if rib_ident.as_str() == "self" => (span, LowercaseSelf),
|
||||
None => (
|
||||
rib_ident.span,
|
||||
AttemptToUseNonConstantValueInConstant(
|
||||
original_rib_ident_def,
|
||||
"const",
|
||||
"let",
|
||||
),
|
||||
),
|
||||
Some((ident, kind)) => (
|
||||
span,
|
||||
AttemptToUseNonConstantValueInConstant(
|
||||
ident,
|
||||
"let",
|
||||
kind.as_str(),
|
||||
),
|
||||
),
|
||||
};
|
||||
self.report_error(span, resolution_error);
|
||||
}
|
||||
return Res::Err;
|
||||
|
|
|
@ -150,6 +150,15 @@ pub(crate) enum ConstantItemKind {
|
|||
Static,
|
||||
}
|
||||
|
||||
impl ConstantItemKind {
|
||||
pub(crate) fn as_str(&self) -> &'static str {
|
||||
match self {
|
||||
Self::Const => "const",
|
||||
Self::Static => "static",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||
enum RecordPartialRes {
|
||||
Yes,
|
||||
|
|
|
@ -251,6 +251,8 @@ enum ResolutionError<'a> {
|
|||
TraitImplDuplicate { name: Symbol, trait_item_span: Span, old_span: Span },
|
||||
/// Inline asm `sym` operand must refer to a `fn` or `static`.
|
||||
InvalidAsmSym,
|
||||
/// `self` used instead of `Self` in a generic parameter
|
||||
LowercaseSelf,
|
||||
}
|
||||
|
||||
enum VisResolutionError<'a> {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue