mirror of https://github.com/rust-lang/rust.git
Migrate `builtin-macros-requires-cfg-pattern` to `SessionDiagnostic`
This commit is contained in:
parent
d6072e53cd
commit
6264ffbfef
|
@ -3669,6 +3669,7 @@ dependencies = [
|
||||||
"rustc_feature",
|
"rustc_feature",
|
||||||
"rustc_lexer",
|
"rustc_lexer",
|
||||||
"rustc_lint_defs",
|
"rustc_lint_defs",
|
||||||
|
"rustc_macros",
|
||||||
"rustc_parse",
|
"rustc_parse",
|
||||||
"rustc_parse_format",
|
"rustc_parse_format",
|
||||||
"rustc_session",
|
"rustc_session",
|
||||||
|
|
|
@ -16,6 +16,7 @@ rustc_errors = { path = "../rustc_errors" }
|
||||||
rustc_feature = { path = "../rustc_feature" }
|
rustc_feature = { path = "../rustc_feature" }
|
||||||
rustc_lexer = { path = "../rustc_lexer" }
|
rustc_lexer = { path = "../rustc_lexer" }
|
||||||
rustc_lint_defs = { path = "../rustc_lint_defs" }
|
rustc_lint_defs = { path = "../rustc_lint_defs" }
|
||||||
|
rustc_macros = { path = "../rustc_macros" }
|
||||||
rustc_parse = { path = "../rustc_parse" }
|
rustc_parse = { path = "../rustc_parse" }
|
||||||
rustc_target = { path = "../rustc_target" }
|
rustc_target = { path = "../rustc_target" }
|
||||||
rustc_session = { path = "../rustc_session" }
|
rustc_session = { path = "../rustc_session" }
|
||||||
|
|
|
@ -8,6 +8,7 @@ use rustc_ast::tokenstream::TokenStream;
|
||||||
use rustc_attr as attr;
|
use rustc_attr as attr;
|
||||||
use rustc_errors::PResult;
|
use rustc_errors::PResult;
|
||||||
use rustc_expand::base::{self, *};
|
use rustc_expand::base::{self, *};
|
||||||
|
use rustc_macros::SessionDiagnostic;
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
|
|
||||||
pub fn expand_cfg(
|
pub fn expand_cfg(
|
||||||
|
@ -34,13 +35,19 @@ pub fn expand_cfg(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_cfg<'a>(cx: &mut ExtCtxt<'a>, sp: Span, tts: TokenStream) -> PResult<'a, ast::MetaItem> {
|
#[derive(SessionDiagnostic)]
|
||||||
|
#[error(slug = "builtin-macros-requires-cfg-pattern")]
|
||||||
|
struct RequiresCfgPattern {
|
||||||
|
#[primary_span]
|
||||||
|
#[label]
|
||||||
|
span: Span,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_cfg<'a>(cx: &mut ExtCtxt<'a>, span: Span, tts: TokenStream) -> PResult<'a, ast::MetaItem> {
|
||||||
let mut p = cx.new_parser_from_tts(tts);
|
let mut p = cx.new_parser_from_tts(tts);
|
||||||
|
|
||||||
if p.token == token::Eof {
|
if p.token == token::Eof {
|
||||||
let mut err = cx.struct_span_err(sp, "macro requires a cfg-pattern as an argument");
|
return Err(cx.create_err(RequiresCfgPattern { span }));
|
||||||
err.span_label(sp, "cfg-pattern required");
|
|
||||||
return Err(err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let cfg = p.parse_meta_item()?;
|
let cfg = p.parse_meta_item()?;
|
||||||
|
@ -48,7 +55,7 @@ fn parse_cfg<'a>(cx: &mut ExtCtxt<'a>, sp: Span, tts: TokenStream) -> PResult<'a
|
||||||
let _ = p.eat(&token::Comma);
|
let _ = p.eat(&token::Comma);
|
||||||
|
|
||||||
if !p.eat(&token::Eof) {
|
if !p.eat(&token::Eof) {
|
||||||
return Err(cx.struct_span_err(sp, "expected 1 cfg-pattern"));
|
return Err(cx.struct_span_err(span, "expected 1 cfg-pattern"));
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(cfg)
|
Ok(cfg)
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
builtin-macros-requires-cfg-pattern =
|
||||||
|
macro requires a cfg-pattern as an argument
|
||||||
|
.label = cfg-pattern required
|
|
@ -33,6 +33,7 @@ pub use unic_langid::{langid, LanguageIdentifier};
|
||||||
fluent_messages! {
|
fluent_messages! {
|
||||||
parser => "../locales/en-US/parser.ftl",
|
parser => "../locales/en-US/parser.ftl",
|
||||||
typeck => "../locales/en-US/typeck.ftl",
|
typeck => "../locales/en-US/typeck.ftl",
|
||||||
|
builtin_macros => "../locales/en-US/builtin_macros.ftl",
|
||||||
}
|
}
|
||||||
|
|
||||||
pub use fluent_generated::{self as fluent, DEFAULT_LOCALE_RESOURCES};
|
pub use fluent_generated::{self as fluent, DEFAULT_LOCALE_RESOURCES};
|
||||||
|
|
Loading…
Reference in New Issue