@@ -8,6 +8,7 @@ use rustc_ast::tokenstream::TokenStream;
8
8
use rustc_attr as attr;
9
9
use rustc_errors:: PResult ;
10
10
use rustc_expand:: base:: { self , * } ;
11
+ use rustc_macros:: SessionDiagnostic ;
11
12
use rustc_span:: Span ;
12
13
13
14
pub fn expand_cfg (
@@ -34,21 +35,27 @@ pub fn expand_cfg(
34
35
}
35
36
}
36
37
37
- fn parse_cfg < ' a > ( cx : & mut ExtCtxt < ' a > , sp : Span , tts : TokenStream ) -> PResult < ' a , ast:: MetaItem > {
38
+ #[ derive( SessionDiagnostic ) ]
39
+ #[ error( slug = "builtin-macros-requires-cfg-pattern" ) ]
40
+ struct RequiresCfgPattern {
41
+ #[ primary_span]
42
+ #[ label]
43
+ span : Span ,
44
+ }
45
+
46
+ fn parse_cfg < ' a > ( cx : & mut ExtCtxt < ' a > , span : Span , tts : TokenStream ) -> PResult < ' a , ast:: MetaItem > {
38
47
let mut p = cx. new_parser_from_tts ( tts) ;
39
48
40
49
if p. token == token:: Eof {
41
- let mut err = cx. struct_span_err ( sp, "macro requires a cfg-pattern as an argument" ) ;
42
- err. span_label ( sp, "cfg-pattern required" ) ;
43
- return Err ( err) ;
50
+ return Err ( cx. create_err ( RequiresCfgPattern { span } ) ) ;
44
51
}
45
52
46
53
let cfg = p. parse_meta_item ( ) ?;
47
54
48
55
let _ = p. eat ( & token:: Comma ) ;
49
56
50
57
if !p. eat ( & token:: Eof ) {
51
- return Err ( cx. struct_span_err ( sp , "expected 1 cfg-pattern" ) ) ;
58
+ return Err ( cx. struct_span_err ( span , "expected 1 cfg-pattern" ) ) ;
52
59
}
53
60
54
61
Ok ( cfg)
0 commit comments