diff options
| author | nidnogg <henriquevt98@gmail.com> | 2022-08-17 11:18:19 -0300 |
|---|---|---|
| committer | nidnogg <henriquevt98@gmail.com> | 2022-08-17 11:18:19 -0300 |
| commit | c6f9a9c410e063f59bc2f6958674099b3fe5f184 (patch) | |
| tree | 5952411a6f83af897bde1581f89307aed87e29e7 | |
| parent | 72ce216def236055f5bee03d06085d0ec9c270a9 (diff) | |
| download | rust-c6f9a9c410e063f59bc2f6958674099b3fe5f184.tar.gz rust-c6f9a9c410e063f59bc2f6958674099b3fe5f184.zip | |
Moved structs to rustc_expand::errors, added several more migrations, fixed slug name
| -rw-r--r-- | compiler/rustc_error_messages/locales/en-US/expand.ftl | 12 | ||||
| -rw-r--r-- | compiler/rustc_errors/src/diagnostic.rs | 3 | ||||
| -rw-r--r-- | compiler/rustc_expand/src/errors.rs | 50 | ||||
| -rw-r--r-- | compiler/rustc_expand/src/lib.rs | 1 | ||||
| -rw-r--r-- | compiler/rustc_expand/src/mbe/transcribe.rs | 40 |
5 files changed, 70 insertions, 36 deletions
diff --git a/compiler/rustc_error_messages/locales/en-US/expand.ftl b/compiler/rustc_error_messages/locales/en-US/expand.ftl index b25aaaa0e51..ee76a4f4500 100644 --- a/compiler/rustc_error_messages/locales/en-US/expand.ftl +++ b/compiler/rustc_error_messages/locales/en-US/expand.ftl @@ -10,5 +10,13 @@ expand_expr_repeat_no_syntax_vars = expand_must_repeat_once = this must repeat at least once -count_repetition_misplaced = - `count` can not be placed inside the inner-most repetition \ No newline at end of file +expand_count_repetition_misplaced = + `count` can not be placed inside the inner-most repetition + +expand_meta_var_expr_unrecognized_var = + variable `{$key}` is not recognized in meta-variable expression + +expand_var_still_repeating = + variable '{$ident}' is still repeating at this depth + +expand_meta_var_dif_seq_matchers = {$msg} \ No newline at end of file diff --git a/compiler/rustc_errors/src/diagnostic.rs b/compiler/rustc_errors/src/diagnostic.rs index 17e6c9e9575..356f9dfdb3b 100644 --- a/compiler/rustc_errors/src/diagnostic.rs +++ b/compiler/rustc_errors/src/diagnostic.rs @@ -8,7 +8,7 @@ use rustc_error_messages::FluentValue; use rustc_hir as hir; use rustc_lint_defs::{Applicability, LintExpectationId}; use rustc_span::edition::LATEST_STABLE_EDITION; -use rustc_span::symbol::{Ident, Symbol}; +use rustc_span::symbol::{Ident, MacroRulesNormalizedIdent, Symbol}; use rustc_span::{edition::Edition, Span, DUMMY_SP}; use std::borrow::Cow; use std::fmt; @@ -87,6 +87,7 @@ into_diagnostic_arg_using_display!( hir::Target, Edition, Ident, + MacroRulesNormalizedIdent, ); impl IntoDiagnosticArg for bool { diff --git a/compiler/rustc_expand/src/errors.rs b/compiler/rustc_expand/src/errors.rs new file mode 100644 index 00000000000..f8b8750a789 --- /dev/null +++ b/compiler/rustc_expand/src/errors.rs @@ -0,0 +1,50 @@ +use rustc_macros::SessionDiagnostic; +use rustc_span::Span; +use rustc_span::symbol::{MacroRulesNormalizedIdent}; + +#[derive(SessionDiagnostic)] +#[error(expand::expr_repeat_no_syntax_vars)] +pub(crate) struct NoSyntaxVarsExprRepeat { + #[primary_span] + pub span: Span, +} + +#[derive(SessionDiagnostic)] +#[error(expand::must_repeat_once)] +pub(crate) struct MustRepeatOnce { + #[primary_span] + pub span: Span, +} + +#[derive(SessionDiagnostic)] +#[error(expand::count_repetition_misplaced)] +pub(crate) struct CountRepetitionMisplaced { + #[primary_span] + pub span: Span, +} + +#[derive(SessionDiagnostic)] +#[error(expand::meta_var_expr_unrecognized_var)] +pub(crate) struct MetaVarExprUnrecognizedVar { + #[primary_span] + pub span: Span, + pub key: MacroRulesNormalizedIdent, +} + +#[derive(SessionDiagnostic)] +#[error(expand::var_still_repeating)] +pub(crate) struct VarStillRepeating { + #[primary_span] + pub span: Span, + pub ident: MacroRulesNormalizedIdent, +} + +#[derive(SessionDiagnostic)] +#[error(expand::var_still_repeating)] +pub(crate) struct MetaVarsDifSeqMatchers { + #[primary_span] + pub span: Span, + pub msg: String, +} + + diff --git a/compiler/rustc_expand/src/lib.rs b/compiler/rustc_expand/src/lib.rs index 91a18342784..e1dde1672c1 100644 --- a/compiler/rustc_expand/src/lib.rs +++ b/compiler/rustc_expand/src/lib.rs @@ -25,6 +25,7 @@ pub mod base; pub mod build; #[macro_use] pub mod config; +pub mod errors; pub mod expand; pub mod module; pub mod proc_macro; diff --git a/compiler/rustc_expand/src/mbe/transcribe.rs b/compiler/rustc_expand/src/mbe/transcribe.rs index af548976192..bec6d1a2df7 100644 --- a/compiler/rustc_expand/src/mbe/transcribe.rs +++ b/compiler/rustc_expand/src/mbe/transcribe.rs @@ -1,4 +1,8 @@ use crate::base::ExtCtxt; +use crate::errors::{ + CountRepetitionMisplaced, MetaVarExprUnrecognizedVar, MetaVarsDifSeqMatchers, MustRepeatOnce, + NoSyntaxVarsExprRepeat, VarStillRepeating, +}; use crate::mbe::macro_parser::{MatchedNonterminal, MatchedSeq, MatchedTokenTree, NamedMatch}; use crate::mbe::{self, MetaVarExpr}; use rustc_ast::mut_visit::{self, MutVisitor}; @@ -7,7 +11,6 @@ use rustc_ast::tokenstream::{DelimSpan, Spacing, TokenStream, TokenTree}; use rustc_data_structures::fx::FxHashMap; use rustc_errors::{pluralize, PResult}; use rustc_errors::{DiagnosticBuilder, ErrorGuaranteed}; -use rustc_macros::SessionDiagnostic; use rustc_span::hygiene::{LocalExpnId, Transparency}; use rustc_span::symbol::{sym, Ident, MacroRulesNormalizedIdent}; use rustc_span::Span; @@ -54,20 +57,6 @@ impl<'a> Iterator for Frame<'a> { } } -#[derive(SessionDiagnostic)] -#[error(expand::expr_repeat_no_syntax_vars)] -struct NoSyntaxVarsExprRepeat { - #[primary_span] - span: Span, -} - -#[derive(SessionDiagnostic)] -#[error(expand::must_repeat_once)] -struct MustRepeatOnce { - #[primary_span] - span: Span, -} - /// This can do Macro-By-Example transcription. /// - `interp` is a map of meta-variables to the tokens (non-terminals) they matched in the /// invocation. We are assuming we already know there is a match. @@ -188,7 +177,7 @@ pub(super) fn transcribe<'a>( // happens when two meta-variables are used in the same repetition in a // sequence, but they come from different sequence matchers and repeat // different amounts. - return Err(cx.struct_span_err(seq.span(), &msg)); + return Err(cx.create_err(MetaVarsDifSeqMatchers { span: seq.span(), msg })); } LockstepIterSize::Constraint(len, _) => { @@ -247,10 +236,7 @@ pub(super) fn transcribe<'a>( } MatchedSeq(..) => { // We were unable to descend far enough. This is an error. - return Err(cx.struct_span_err( - sp, /* blame the macro writer */ - &format!("variable '{}' is still repeating at this depth", ident), - )); + return Err(cx.create_err(VarStillRepeating { span: sp, ident })); } } } else { @@ -428,13 +414,6 @@ fn lockstep_iter_size( } } -#[derive(SessionDiagnostic)] -#[error(expand::count_repetition_misplaced)] -struct CountRepetitionMisplaced { - #[primary_span] - span: Span, -} - /// Used solely by the `count` meta-variable expression, counts the outer-most repetitions at a /// given optional nested depth. /// @@ -511,12 +490,7 @@ where { let span = ident.span; let key = MacroRulesNormalizedIdent::new(ident); - interp.get(&key).ok_or_else(|| { - cx.struct_span_err( - span, - &format!("variable `{}` is not recognized in meta-variable expression", key), - ) - }) + interp.get(&key).ok_or_else(|| cx.create_err(MetaVarExprUnrecognizedVar { span, key })) } /// Used by meta-variable expressions when an user input is out of the actual declared bounds. For |
