@@ -8,15 +8,15 @@ use rustc_ast::{
8
8
self as ast, AttrArgs , AttrArgsEq , Attribute , DelimArgs , MetaItem , MetaItemKind ,
9
9
NestedMetaItem , Safety ,
10
10
} ;
11
- use rustc_errors:: { Applicability , FatalError , PResult } ;
11
+ use rustc_errors:: { Applicability , FatalError } ;
12
12
use rustc_feature:: {
13
13
AttributeSafety , AttributeTemplate , BuiltinAttribute , Features , BUILTIN_ATTRIBUTE_MAP ,
14
14
} ;
15
15
use rustc_session:: errors:: report_lit_error;
16
16
use rustc_session:: lint:: builtin:: { ILL_FORMED_ATTRIBUTE_INPUT , UNSAFE_ATTR_OUTSIDE_UNSAFE } ;
17
17
use rustc_session:: lint:: BuiltinLintDiag ;
18
18
use rustc_session:: parse:: ParseSess ;
19
- use rustc_span:: { sym, BytePos , Span , Symbol } ;
19
+ use rustc_span:: { sym, BytePos , ErrorGuaranteed , Span , Symbol } ;
20
20
21
21
pub fn check_attr ( features : & Features , psess : & ParseSess , attr : & Attribute ) {
22
22
if attr. is_doc_comment ( ) {
@@ -81,25 +81,21 @@ pub fn check_attr(features: &Features, psess: &ParseSess, attr: &Attribute) {
81
81
Some ( BuiltinAttribute { name, template, .. } ) if * name != sym:: rustc_dummy => {
82
82
match parse_meta ( psess, attr) {
83
83
Ok ( meta) => check_builtin_meta_item ( psess, & meta, attr. style , * name, * template) ,
84
- Err ( err) => {
85
- err. emit ( ) ;
86
- }
84
+ Err ( _guar) => { }
87
85
}
88
86
}
89
87
_ if let AttrArgs :: Eq ( ..) = attr_item. args => {
90
88
// All key-value attributes are restricted to meta-item syntax.
91
89
match parse_meta ( psess, attr) {
92
90
Ok ( _) => { }
93
- Err ( err) => {
94
- err. emit ( ) ;
95
- }
91
+ Err ( _guar) => { }
96
92
}
97
93
}
98
94
_ => { }
99
95
}
100
96
}
101
97
102
- pub fn parse_meta < ' a > ( psess : & ' a ParseSess , attr : & Attribute ) -> PResult < ' a , MetaItem > {
98
+ pub fn parse_meta ( psess : & ParseSess , attr : & Attribute ) -> Result < MetaItem , ErrorGuaranteed > {
103
99
let item = attr. get_normal_item ( ) ;
104
100
Ok ( MetaItem {
105
101
unsafety : item. unsafety ,
@@ -109,8 +105,8 @@ pub fn parse_meta<'a>(psess: &'a ParseSess, attr: &Attribute) -> PResult<'a, Met
109
105
AttrArgs :: Empty => MetaItemKind :: Word ,
110
106
AttrArgs :: Delimited ( DelimArgs { dspan, delim, tokens } ) => {
111
107
check_meta_bad_delim ( psess, * dspan, * delim) ;
112
- let nmis =
113
- parse_in ( psess , tokens . clone ( ) , "meta list" , |p| p . parse_meta_seq_top ( ) ) ?;
108
+ let nmis = parse_in ( psess , tokens . clone ( ) , "meta list" , |p| p . parse_meta_seq_top ( ) )
109
+ . map_err ( |d| d . emit ( ) ) ?;
114
110
MetaItemKind :: List ( nmis)
115
111
}
116
112
AttrArgs :: Eq ( _, AttrArgsEq :: Ast ( expr) ) => {
@@ -127,7 +123,7 @@ pub fn parse_meta<'a>(psess: &'a ParseSess, attr: &Attribute) -> PResult<'a, Met
127
123
"instead of using a suffixed literal (`1u8`, `1.0f32`, etc.), \
128
124
use an unsuffixed version (`1`, `1.0`, etc.)",
129
125
) ;
130
- return Err ( err) ;
126
+ return Err ( err. emit ( ) ) ;
131
127
} else {
132
128
MetaItemKind :: NameValue ( lit)
133
129
}
@@ -156,7 +152,7 @@ pub fn parse_meta<'a>(psess: &'a ParseSess, attr: &Attribute) -> PResult<'a, Met
156
152
if let ast:: ExprKind :: Err ( _) = expr. kind {
157
153
err. downgrade_to_delayed_bug ( ) ;
158
154
}
159
- return Err ( err) ;
155
+ return Err ( err. emit ( ) ) ;
160
156
}
161
157
}
162
158
AttrArgs :: Eq ( _, AttrArgsEq :: Hir ( lit) ) => MetaItemKind :: NameValue ( lit. clone ( ) ) ,
0 commit comments