Skip to content

Commit 183dac9

Browse files
committed
Fix a bug where struct lits nested in fn calls were over-indented
1 parent ce4d5aa commit 183dac9

File tree

4 files changed

+28
-12
lines changed

4 files changed

+28
-12
lines changed

src/expr.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ fn rewrite_closure(capture: ast::CaptureClause,
203203

204204
let fmt = ListFormatting::for_fn(argument_budget, argument_offset);
205205
let prefix = format!("{}|{}|", mover, write_list(&arg_items.collect::<Vec<_>>(), &fmt));
206-
let block_indent = closure_block_indent(context, offset);
206+
let closure_indent = closure_indent(context, offset);
207207

208208
// Try to format closure body as a single line expression without braces.
209209
if body.stmts.is_empty() {
@@ -232,11 +232,11 @@ fn rewrite_closure(capture: ast::CaptureClause,
232232

233233
// We couldn't format the closure body as a single line expression; fall
234234
// back to block formatting.
235-
let inner_context = &RewriteContext { block_indent: block_indent, ..*context };
235+
let inner_context = context.overflow_context(closure_indent - context.block_indent);
236236
let body_rewrite = if let ast::Expr_::ExprBlock(ref inner) = body.expr.as_ref().unwrap().node {
237-
inner.rewrite(inner_context, 0, 0)
237+
inner.rewrite(&inner_context, 0, 0)
238238
} else {
239-
body.rewrite(inner_context, 0, 0)
239+
body.rewrite(&inner_context, 0, 0)
240240
};
241241

242242
Some(format!("{} {}", prefix, try_opt!(body_rewrite)))
@@ -868,8 +868,8 @@ fn rewrite_call(context: &RewriteContext,
868868
// 2 is for parens.
869869
let remaining_width = try_opt!(width.checked_sub(extra_offset + 2));
870870
let offset = offset + extra_offset + 1;
871-
let block_indent = expr_block_indent(context, offset);
872-
let inner_context = &RewriteContext { block_indent: block_indent, ..*context };
871+
let inner_indent = expr_indent(context, offset);
872+
let inner_context = context.overflow_context(inner_indent - context.block_indent);
873873

874874
let items = itemize_list(context.codemap,
875875
args.iter(),
@@ -878,7 +878,7 @@ fn rewrite_call(context: &RewriteContext,
878878
|item| item.span.hi,
879879
// Take old span when rewrite fails.
880880
|item| {
881-
item.rewrite(inner_context, remaining_width, offset)
881+
item.rewrite(&inner_context, remaining_width, offset)
882882
.unwrap_or(context.snippet(item.span))
883883
},
884884
callee.span.hi + BytePos(1),
@@ -901,8 +901,8 @@ macro_rules! block_indent_helper {
901901
);
902902
}
903903

904-
block_indent_helper!(expr_block_indent, expr_indent_style);
905-
block_indent_helper!(closure_block_indent, closure_indent_style);
904+
block_indent_helper!(expr_indent, expr_indent_style);
905+
block_indent_helper!(closure_indent, closure_indent_style);
906906

907907
fn rewrite_paren(context: &RewriteContext,
908908
subexpr: &ast::Expr,
@@ -1192,7 +1192,9 @@ pub fn rewrite_assign_rhs<S: Into<String>>(context: &RewriteContext,
11921192
result.push_str(&format!("\n{}", make_indent(new_offset)));
11931193

11941194
let max_width = try_opt!(context.config.max_width.checked_sub(new_offset + 1));
1195-
let rhs = try_opt!(ex.rewrite(&context.overflow_context(), max_width, new_offset));
1195+
let rhs = try_opt!(ex.rewrite(&context.overflow_context(context.config.tab_spaces),
1196+
max_width,
1197+
new_offset));
11961198

11971199
result.push_str(&rhs);
11981200
}

src/rewrite.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ impl<'a> RewriteContext<'a> {
4848
}
4949
}
5050

51-
pub fn overflow_context(&self) -> RewriteContext<'a> {
51+
pub fn overflow_context(&self, overflow: usize) -> RewriteContext<'a> {
5252
RewriteContext {
5353
codemap: self.codemap,
5454
config: self.config,
5555
block_indent: self.block_indent,
56-
overflow_indent: self.overflow_indent + self.config.tab_spaces,
56+
overflow_indent: overflow,
5757
}
5858
}
5959

tests/source/struct_lits.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ fn main() {
3232
second: Item
3333
};
3434

35+
Some(Data::MethodCallData(MethodCallData {
36+
span: sub_span.unwrap(),
37+
scope: self.enclosing_scope(id),
38+
ref_id: def_id,
39+
decl_id: Some(decl_id),
40+
}));
41+
3542
Diagram { /* o This graph demonstrates how
3643
* / \ significant whitespace is
3744
* o o preserved.

tests/target/struct_lits.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ fn main() {
4646
second: Item,
4747
};
4848

49+
Some(Data::MethodCallData(MethodCallData {
50+
span: sub_span.unwrap(),
51+
scope: self.enclosing_scope(id),
52+
ref_id: def_id,
53+
decl_id: Some(decl_id),
54+
}));
55+
4956
Diagram {
5057
// o This graph demonstrates how
5158
// / \ significant whitespace is

0 commit comments

Comments
 (0)