Move LitKind logic to session_diagnostics module

This commit is contained in:
Hampus Lidin 2022-08-21 22:11:41 +02:00
parent 944a3e22ef
commit afd34765f6
2 changed files with 22 additions and 18 deletions

View File

@ -854,6 +854,7 @@ fn find_deprecation_generic<'a, I>(sess: &Session, attrs_iter: I) -> Option<(Dep
sess.emit_err(session_diagnostics::DeprecatedItemSuggestion {
span: mi.span,
is_nightly: sess.is_nightly_build().then_some(()),
details: (),
});
}
@ -1021,23 +1022,11 @@ pub fn parse_repr_attr(sess: &Session, attr: &Attribute) -> Vec<ReprAttr> {
sess.emit_err(session_diagnostics::IncorrectReprFormatGeneric {
span: item.span(),
repr_arg: &name,
cause: match value.kind {
ast::LitKind::Int(int, ast::LitIntType::Unsuffixed) => {
Some(IncorrectReprFormatGenericCause::Int {
span: item.span(),
name: &name,
int,
})
}
ast::LitKind::Str(symbol, _) => {
Some(IncorrectReprFormatGenericCause::Symbol {
span: item.span(),
name: &name,
symbol,
})
}
_ => None,
},
cause: IncorrectReprFormatGenericCause::from_lit_kind(
item.span(),
&value.kind,
&name,
),
});
} else {
if matches!(

View File

@ -1,5 +1,6 @@
use std::num::IntErrorKind;
use rustc_ast as ast;
use rustc_errors::{error_code, fluent, Applicability, DiagnosticBuilder, ErrorGuaranteed};
use rustc_macros::SessionDiagnostic;
use rustc_session::{parse::ParseSess, SessionDiagnostic};
@ -303,6 +304,18 @@ pub(crate) enum IncorrectReprFormatGenericCause<'a> {
},
}
impl<'a> IncorrectReprFormatGenericCause<'a> {
pub fn from_lit_kind(span: Span, kind: &ast::LitKind, name: &'a str) -> Option<Self> {
match kind {
ast::LitKind::Int(int, ast::LitIntType::Unsuffixed) => {
Some(Self::Int { span, name, int: *int })
}
ast::LitKind::Str(symbol, _) => Some(Self::Symbol { span, name, symbol: *symbol }),
_ => None,
}
}
}
#[derive(SessionDiagnostic)]
#[diag(attr::rustc_promotable_pairing, code = "E0717")]
pub(crate) struct RustcPromotablePairing {
@ -326,13 +339,15 @@ pub(crate) struct CfgPredicateIdentifier {
#[derive(SessionDiagnostic)]
#[diag(attr::deprecated_item_suggestion)]
#[note]
pub(crate) struct DeprecatedItemSuggestion {
#[primary_span]
pub span: Span,
#[help]
pub is_nightly: Option<()>,
#[note]
pub details: (),
}
#[derive(SessionDiagnostic)]