@@ -13,7 +13,7 @@ use crate::lists::{
1313use crate :: macros:: { rewrite_macro, MacroPosition } ;
1414use crate :: overflow;
1515use crate :: pairs:: { rewrite_pair, PairParts } ;
16- use crate :: rewrite:: { Rewrite , RewriteContext , RewriteErrorExt , RewriteResult } ;
16+ use crate :: rewrite:: { Rewrite , RewriteContext , RewriteError , RewriteErrorExt , RewriteResult } ;
1717use crate :: shape:: Shape ;
1818use crate :: source_map:: SpanUtils ;
1919use crate :: spanned:: Spanned ;
@@ -81,12 +81,16 @@ impl<'a> Rewrite for RangeOperand<'a> {
8181
8282impl Rewrite for Pat {
8383 fn rewrite ( & self , context : & RewriteContext < ' _ > , shape : Shape ) -> Option < String > {
84+ self . rewrite_result ( context, shape) . ok ( )
85+ }
86+
87+ fn rewrite_result ( & self , context : & RewriteContext < ' _ > , shape : Shape ) -> RewriteResult {
8488 match self . kind {
8589 PatKind :: Or ( ref pats) => {
8690 let pat_strs = pats
8791 . iter ( )
88- . map ( |p| p. rewrite ( context, shape) )
89- . collect :: < Option < Vec < _ > > > ( ) ?;
92+ . map ( |p| p. rewrite_result ( context, shape) )
93+ . collect :: < Result < Vec < _ > , RewriteError > > ( ) ?;
9094
9195 let use_mixed_layout = pats
9296 . iter ( )
@@ -108,7 +112,7 @@ impl Rewrite for Pat {
108112 . separator ( " |" )
109113 . separator_place ( context. config . binop_separator ( ) )
110114 . ends_with_newline ( false ) ;
111- write_list ( & items, & fmt) . ok ( )
115+ write_list ( & items, & fmt)
112116 }
113117 PatKind :: Box ( ref pat) => rewrite_unary_prefix ( context, "box " , & * * pat, shape) ,
114118 PatKind :: Ident ( BindingMode ( by_ref, mutability) , ident, ref sub_pat) => {
@@ -122,19 +126,25 @@ impl Rewrite for Pat {
122126 let sub_pat = match * sub_pat {
123127 Some ( ref p) => {
124128 // 2 - `@ `.
125- let width = shape. width . checked_sub (
126- mut_prefix. len ( ) + ref_kw. len ( ) + mut_infix. len ( ) + id_str. len ( ) + 2 ,
127- ) ?;
129+ let width = shape
130+ . width
131+ . checked_sub (
132+ mut_prefix. len ( )
133+ + ref_kw. len ( )
134+ + mut_infix. len ( )
135+ + id_str. len ( )
136+ + 2 ,
137+ )
138+ . max_width_error ( shape. width , p. span ( ) ) ?;
128139 let lo = context. snippet_provider . span_after ( self . span , "@" ) ;
129140 combine_strs_with_missing_comments (
130141 context,
131142 "@" ,
132- & p. rewrite ( context, Shape :: legacy ( width, shape. indent ) ) ?,
143+ & p. rewrite_result ( context, Shape :: legacy ( width, shape. indent ) ) ?,
133144 mk_sp ( lo, p. span . lo ( ) ) ,
134145 shape,
135146 true ,
136- )
137- . ok ( ) ?
147+ ) ?
138148 }
139149 None => "" . to_owned ( ) ,
140150 } ;
@@ -153,8 +163,7 @@ impl Rewrite for Pat {
153163 mk_sp ( lo, hi) ,
154164 shape,
155165 true ,
156- )
157- . ok ( ) ?,
166+ ) ?,
158167 )
159168 }
160169 ( false , true ) => (
@@ -183,8 +192,7 @@ impl Rewrite for Pat {
183192 mk_sp ( lo, hi) ,
184193 shape,
185194 true ,
186- )
187- . ok ( ) ?,
195+ ) ?,
188196 )
189197 }
190198 ( false , true ) => ( first_lo, first) ,
@@ -201,8 +209,7 @@ impl Rewrite for Pat {
201209 mk_sp ( ident. span . hi ( ) , hi) ,
202210 shape,
203211 true ,
204- )
205- . ok ( ) ?
212+ ) ?
206213 } else {
207214 id_str. to_owned ( )
208215 } ;
@@ -215,23 +222,28 @@ impl Rewrite for Pat {
215222 shape,
216223 true ,
217224 )
218- . ok ( )
219225 }
220226 PatKind :: Wild => {
221227 if 1 <= shape. width {
222- Some ( "_" . to_owned ( ) )
228+ Ok ( "_" . to_owned ( ) )
223229 } else {
224- None
230+ Err ( RewriteError :: ExceedsMaxWidth {
231+ configured_width : 1 ,
232+ span : self . span ,
233+ } )
225234 }
226235 }
227236 PatKind :: Rest => {
228237 if 1 <= shape. width {
229- Some ( ".." . to_owned ( ) )
238+ Ok ( ".." . to_owned ( ) )
230239 } else {
231- None
240+ Err ( RewriteError :: ExceedsMaxWidth {
241+ configured_width : 1 ,
242+ span : self . span ,
243+ } )
232244 }
233245 }
234- PatKind :: Never => None ,
246+ PatKind :: Never => Err ( RewriteError :: Unknown ) ,
235247 PatKind :: Range ( ref lhs, ref rhs, ref end_kind) => {
236248 let infix = match end_kind. node {
237249 RangeEnd :: Included ( RangeSyntax :: DotDotDot ) => "..." ,
@@ -267,38 +279,34 @@ impl Rewrite for Pat {
267279 shape,
268280 SeparatorPlace :: Front ,
269281 )
270- . ok ( )
271282 }
272283 PatKind :: Ref ( ref pat, mutability) => {
273284 let prefix = format ! ( "&{}" , format_mutability( mutability) ) ;
274285 rewrite_unary_prefix ( context, & prefix, & * * pat, shape)
275286 }
276- PatKind :: Tuple ( ref items) => {
277- rewrite_tuple_pat ( items, None , self . span , context, shape) . ok ( )
278- }
287+ PatKind :: Tuple ( ref items) => rewrite_tuple_pat ( items, None , self . span , context, shape) ,
279288 PatKind :: Path ( ref q_self, ref path) => {
280- rewrite_path ( context, PathContext :: Expr , q_self, path, shape) . ok ( )
289+ rewrite_path ( context, PathContext :: Expr , q_self, path, shape)
281290 }
282291 PatKind :: TupleStruct ( ref q_self, ref path, ref pat_vec) => {
283- let path_str =
284- rewrite_path ( context, PathContext :: Expr , q_self, path, shape) . ok ( ) ?;
285- rewrite_tuple_pat ( pat_vec, Some ( path_str) , self . span , context, shape) . ok ( )
292+ let path_str = rewrite_path ( context, PathContext :: Expr , q_self, path, shape) ?;
293+ rewrite_tuple_pat ( pat_vec, Some ( path_str) , self . span , context, shape)
286294 }
287- PatKind :: Lit ( ref expr) => expr. rewrite ( context, shape) ,
295+ PatKind :: Lit ( ref expr) => expr. rewrite_result ( context, shape) ,
288296 PatKind :: Slice ( ref slice_pat)
289297 if context. config . style_edition ( ) <= StyleEdition :: Edition2021 =>
290298 {
291299 let rw: Vec < String > = slice_pat
292300 . iter ( )
293301 . map ( |p| {
294- if let Some ( rw) = p. rewrite ( context, shape) {
302+ if let Ok ( rw) = p. rewrite_result ( context, shape) {
295303 rw
296304 } else {
297305 context. snippet ( p. span ) . to_string ( )
298306 }
299307 } )
300308 . collect ( ) ;
301- Some ( format ! ( "[{}]" , rw. join( ", " ) ) )
309+ Ok ( format ! ( "[{}]" , rw. join( ", " ) ) )
302310 }
303311 PatKind :: Slice ( ref slice_pat) => overflow:: rewrite_with_square_brackets (
304312 context,
@@ -308,8 +316,7 @@ impl Rewrite for Pat {
308316 self . span ,
309317 None ,
310318 None ,
311- )
312- . ok ( ) ,
319+ ) ,
313320 PatKind :: Struct ( ref qself, ref path, ref fields, rest) => rewrite_struct_pat (
314321 qself,
315322 path,
@@ -318,16 +325,21 @@ impl Rewrite for Pat {
318325 self . span ,
319326 context,
320327 shape,
321- )
322- . ok ( ) ,
328+ ) ,
323329 PatKind :: MacCall ( ref mac) => {
324- rewrite_macro ( mac, None , context, shape, MacroPosition :: Pat )
330+ rewrite_macro ( mac, None , context, shape, MacroPosition :: Pat ) . unknown_error ( )
325331 }
326332 PatKind :: Paren ( ref pat) => pat
327- . rewrite ( context, shape. offset_left ( 1 ) ?. sub_width ( 1 ) ?)
333+ . rewrite_result (
334+ context,
335+ shape
336+ . offset_left ( 1 )
337+ . and_then ( |s| s. sub_width ( 1 ) )
338+ . max_width_error ( shape. width , self . span ) ?,
339+ )
328340 . map ( |inner_pat| format ! ( "({})" , inner_pat) ) ,
329- PatKind :: Err ( _) => None ,
330- PatKind :: Deref ( _) => None ,
341+ PatKind :: Err ( _) => Err ( RewriteError :: Unknown ) ,
342+ PatKind :: Deref ( _) => Err ( RewriteError :: Unknown ) ,
331343 }
332344 }
333345}
@@ -473,9 +485,13 @@ pub(crate) enum TuplePatField<'a> {
473485
474486impl < ' a > Rewrite for TuplePatField < ' a > {
475487 fn rewrite ( & self , context : & RewriteContext < ' _ > , shape : Shape ) -> Option < String > {
488+ self . rewrite_result ( context, shape) . ok ( )
489+ }
490+
491+ fn rewrite_result ( & self , context : & RewriteContext < ' _ > , shape : Shape ) -> RewriteResult {
476492 match * self {
477- TuplePatField :: Pat ( p) => p. rewrite ( context, shape) ,
478- TuplePatField :: Dotdot ( _) => Some ( ".." . to_string ( ) ) ,
493+ TuplePatField :: Pat ( p) => p. rewrite_result ( context, shape) ,
494+ TuplePatField :: Dotdot ( _) => Ok ( ".." . to_string ( ) ) ,
479495 }
480496 }
481497}
0 commit comments