1
1
use crate :: ImplTraitPosition ;
2
2
3
+ use super :: errors:: { GenericTypeWithParentheses , UseAngleBrackets } ;
3
4
use super :: ResolverAstLoweringExt ;
4
5
use super :: { GenericArgsCtor , LifetimeRes , ParenthesizedGenericArgs } ;
5
6
use super :: { ImplTraitContext , LoweringContext , ParamMode } ;
6
7
7
8
use rustc_ast:: { self as ast, * } ;
8
- use rustc_errors:: { struct_span_err, Applicability } ;
9
9
use rustc_hir as hir;
10
10
use rustc_hir:: def:: { DefKind , PartialRes , Res } ;
11
11
use rustc_hir:: GenericArg ;
@@ -185,18 +185,15 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
185
185
) -> hir:: PathSegment < ' hir > {
186
186
debug ! ( "path_span: {:?}, lower_path_segment(segment: {:?})" , path_span, segment, ) ;
187
187
let ( mut generic_args, infer_args) = if let Some ( ref generic_args) = segment. args {
188
- let msg = "parenthesized type parameters may only be used with a `Fn` trait" ;
189
188
match * * generic_args {
190
189
GenericArgs :: AngleBracketed ( ref data) => {
191
190
self . lower_angle_bracketed_parameter_data ( data, param_mode, itctx)
192
191
}
193
192
GenericArgs :: Parenthesized ( ref data) => match parenthesized_generic_args {
194
193
ParenthesizedGenericArgs :: Ok => self . lower_parenthesized_parameter_data ( data) ,
195
194
ParenthesizedGenericArgs :: Err => {
196
- let mut err = struct_span_err ! ( self . tcx. sess, data. span, E0214 , "{}" , msg) ;
197
- err. span_label ( data. span , "only `Fn` traits may use parentheses" ) ;
198
195
// Suggest replacing parentheses with angle brackets `Trait(params...)` to `Trait<params...>`
199
- if !data. inputs . is_empty ( ) {
196
+ let sub = if !data. inputs . is_empty ( ) {
200
197
// Start of the span to the 1st character of 1st argument
201
198
let open_param = data. inputs_span . shrink_to_lo ( ) . to ( data
202
199
. inputs
@@ -212,16 +209,12 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
212
209
. span
213
210
. shrink_to_hi ( )
214
211
. to ( data. inputs_span . shrink_to_hi ( ) ) ;
215
- err. multipart_suggestion (
216
- & format ! ( "use angle brackets instead" , ) ,
217
- vec ! [
218
- ( open_param, String :: from( "<" ) ) ,
219
- ( close_param, String :: from( ">" ) ) ,
220
- ] ,
221
- Applicability :: MaybeIncorrect ,
222
- ) ;
223
- }
224
- err. emit ( ) ;
212
+
213
+ Some ( UseAngleBrackets { open_param, close_param } )
214
+ } else {
215
+ None
216
+ } ;
217
+ self . tcx . sess . emit_err ( GenericTypeWithParentheses { span : data. span , sub } ) ;
225
218
(
226
219
self . lower_angle_bracketed_parameter_data (
227
220
& data. as_angle_bracketed_args ( ) ,
0 commit comments