Skip to content

Commit 727179e

Browse files
committed
Update using RewriteError
1 parent d312aab commit 727179e

File tree

1 file changed

+33
-22
lines changed

1 file changed

+33
-22
lines changed

src/imports.rs

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use crate::config::{Edition, IndentStyle, StyleEdition};
1919
use crate::lists::{
2020
definitive_tactic, itemize_list, write_list, ListFormatting, ListItem, Separator,
2121
};
22-
use crate::rewrite::{Rewrite, RewriteContext, RewriteErrorExt, RewriteResult};
22+
use crate::rewrite::{Rewrite, RewriteContext, RewriteError, RewriteErrorExt, RewriteResult};
2323
use crate::shape::Shape;
2424
use crate::source_map::SpanUtils;
2525
use crate::spanned::Spanned;
@@ -1127,12 +1127,13 @@ impl Rewrite for UseTree {
11271127
fn rewrite_result(&self, context: &RewriteContext<'_>, mut shape: Shape) -> RewriteResult {
11281128
fn proceed(
11291129
context: &RewriteContext<'_>,
1130+
span: &Span,
11301131
shape: &Shape,
11311132
curr_segment: &UseSegment,
11321133
curr_segment_is_allow_overflow: bool,
11331134
next_segment: Option<&&UseSegment>,
1134-
) -> Option<(String, Shape)> {
1135-
let mut rewritten_segment = curr_segment.rewrite(context, shape.clone())?;
1135+
) -> Result<(String, Shape), RewriteError> {
1136+
let mut rewritten_segment = curr_segment.rewrite_result(context, shape.clone())?;
11361137
if next_segment.is_some() {
11371138
rewritten_segment.push_str("::");
11381139
}
@@ -1157,45 +1158,55 @@ impl Rewrite for UseTree {
11571158
s.clone()
11581159
}
11591160
} else {
1160-
let ret = shape.offset_left(rewritten_segment.len())?;
1161-
// Check that there is a room for the next "{". If not, return null for retry with
1162-
// newline.
1163-
ret.offset_left(reserved_room_for_brace)?;
1161+
let Some(ret) = shape.offset_left(rewritten_segment.len()) else {
1162+
return Err(RewriteError::ExceedsMaxWidth {
1163+
configured_width: shape.width,
1164+
span: span.clone(),
1165+
});
1166+
};
1167+
// Check that there is a room for the next "{". If not, return an error for retry
1168+
// with newline.
1169+
if ret.offset_left(reserved_room_for_brace).is_none() {
1170+
return Err(RewriteError::ExceedsMaxWidth {
1171+
configured_width: shape.width,
1172+
span: span.clone(),
1173+
});
1174+
}
11641175
ret
11651176
};
1166-
Some((rewritten_segment, next_shape))
1177+
Ok((rewritten_segment, next_shape))
11671178
}
11681179

11691180
let shape_top_level = shape.clone();
11701181
let mut result = String::with_capacity(256);
11711182
let mut is_first = true;
11721183
let mut iter = self.path.iter().peekable();
1184+
let span = self.span();
11731185
while let Some(segment) = iter.next() {
11741186
let allow_overflow = is_first;
11751187
is_first = false;
1176-
match proceed(context, &shape, segment, allow_overflow, iter.peek()) {
1177-
Some((rewritten_segment, next_shape)) => {
1188+
match proceed(context, &span, &shape, segment, allow_overflow, iter.peek()) {
1189+
Ok((rewritten_segment, next_shape)) => {
11781190
result.push_str(&rewritten_segment);
11791191
shape = next_shape;
11801192
continue;
11811193
}
1182-
None => (),
1194+
Err(RewriteError::ExceedsMaxWidth { .. }) => {
1195+
// If the first `proceed()` failed with no room, retry with newline.
1196+
}
1197+
Err(e) => {
1198+
// Abort otherwise.
1199+
return Err(e);
1200+
}
11831201
}
1184-
// If the first `proceed()` failed, retry with newline.
11851202
result.push_str("\n");
11861203
result.push_str(&" ".repeat(shape.indent.block_indent + 4));
11871204
shape = shape_top_level.clone();
11881205
let allow_overflow = true;
1189-
match proceed(context, &shape, segment, allow_overflow, iter.peek()) {
1190-
Some((rewritten_segment, next_shape)) => {
1191-
result.push_str(&rewritten_segment);
1192-
shape = next_shape;
1193-
}
1194-
// Give up to format.
1195-
None => {
1196-
return Err(crate::rewrite::RewriteError::Unknown);
1197-
}
1198-
}
1206+
let (rewritten_segment, next_shape) =
1207+
proceed(context, &span, &shape, segment, allow_overflow, iter.peek())?;
1208+
result.push_str(&rewritten_segment);
1209+
shape = next_shape;
11991210
}
12001211
Ok(result)
12011212
}

0 commit comments

Comments
 (0)