mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-23 12:23:22 +00:00
Fix a bug where struct lits nested in fn calls were over-indented
This commit is contained in:
parent
ce4d5aa39c
commit
183dac91a3
22
src/expr.rs
22
src/expr.rs
@ -203,7 +203,7 @@ fn rewrite_closure(capture: ast::CaptureClause,
|
|||||||
|
|
||||||
let fmt = ListFormatting::for_fn(argument_budget, argument_offset);
|
let fmt = ListFormatting::for_fn(argument_budget, argument_offset);
|
||||||
let prefix = format!("{}|{}|", mover, write_list(&arg_items.collect::<Vec<_>>(), &fmt));
|
let prefix = format!("{}|{}|", mover, write_list(&arg_items.collect::<Vec<_>>(), &fmt));
|
||||||
let block_indent = closure_block_indent(context, offset);
|
let closure_indent = closure_indent(context, offset);
|
||||||
|
|
||||||
// Try to format closure body as a single line expression without braces.
|
// Try to format closure body as a single line expression without braces.
|
||||||
if body.stmts.is_empty() {
|
if body.stmts.is_empty() {
|
||||||
@ -232,11 +232,11 @@ fn rewrite_closure(capture: ast::CaptureClause,
|
|||||||
|
|
||||||
// We couldn't format the closure body as a single line expression; fall
|
// We couldn't format the closure body as a single line expression; fall
|
||||||
// back to block formatting.
|
// back to block formatting.
|
||||||
let inner_context = &RewriteContext { block_indent: block_indent, ..*context };
|
let inner_context = context.overflow_context(closure_indent - context.block_indent);
|
||||||
let body_rewrite = if let ast::Expr_::ExprBlock(ref inner) = body.expr.as_ref().unwrap().node {
|
let body_rewrite = if let ast::Expr_::ExprBlock(ref inner) = body.expr.as_ref().unwrap().node {
|
||||||
inner.rewrite(inner_context, 0, 0)
|
inner.rewrite(&inner_context, 0, 0)
|
||||||
} else {
|
} else {
|
||||||
body.rewrite(inner_context, 0, 0)
|
body.rewrite(&inner_context, 0, 0)
|
||||||
};
|
};
|
||||||
|
|
||||||
Some(format!("{} {}", prefix, try_opt!(body_rewrite)))
|
Some(format!("{} {}", prefix, try_opt!(body_rewrite)))
|
||||||
@ -868,8 +868,8 @@ fn rewrite_call(context: &RewriteContext,
|
|||||||
// 2 is for parens.
|
// 2 is for parens.
|
||||||
let remaining_width = try_opt!(width.checked_sub(extra_offset + 2));
|
let remaining_width = try_opt!(width.checked_sub(extra_offset + 2));
|
||||||
let offset = offset + extra_offset + 1;
|
let offset = offset + extra_offset + 1;
|
||||||
let block_indent = expr_block_indent(context, offset);
|
let inner_indent = expr_indent(context, offset);
|
||||||
let inner_context = &RewriteContext { block_indent: block_indent, ..*context };
|
let inner_context = context.overflow_context(inner_indent - context.block_indent);
|
||||||
|
|
||||||
let items = itemize_list(context.codemap,
|
let items = itemize_list(context.codemap,
|
||||||
args.iter(),
|
args.iter(),
|
||||||
@ -878,7 +878,7 @@ fn rewrite_call(context: &RewriteContext,
|
|||||||
|item| item.span.hi,
|
|item| item.span.hi,
|
||||||
// Take old span when rewrite fails.
|
// Take old span when rewrite fails.
|
||||||
|item| {
|
|item| {
|
||||||
item.rewrite(inner_context, remaining_width, offset)
|
item.rewrite(&inner_context, remaining_width, offset)
|
||||||
.unwrap_or(context.snippet(item.span))
|
.unwrap_or(context.snippet(item.span))
|
||||||
},
|
},
|
||||||
callee.span.hi + BytePos(1),
|
callee.span.hi + BytePos(1),
|
||||||
@ -901,8 +901,8 @@ macro_rules! block_indent_helper {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
block_indent_helper!(expr_block_indent, expr_indent_style);
|
block_indent_helper!(expr_indent, expr_indent_style);
|
||||||
block_indent_helper!(closure_block_indent, closure_indent_style);
|
block_indent_helper!(closure_indent, closure_indent_style);
|
||||||
|
|
||||||
fn rewrite_paren(context: &RewriteContext,
|
fn rewrite_paren(context: &RewriteContext,
|
||||||
subexpr: &ast::Expr,
|
subexpr: &ast::Expr,
|
||||||
@ -1192,7 +1192,9 @@ pub fn rewrite_assign_rhs<S: Into<String>>(context: &RewriteContext,
|
|||||||
result.push_str(&format!("\n{}", make_indent(new_offset)));
|
result.push_str(&format!("\n{}", make_indent(new_offset)));
|
||||||
|
|
||||||
let max_width = try_opt!(context.config.max_width.checked_sub(new_offset + 1));
|
let max_width = try_opt!(context.config.max_width.checked_sub(new_offset + 1));
|
||||||
let rhs = try_opt!(ex.rewrite(&context.overflow_context(), max_width, new_offset));
|
let rhs = try_opt!(ex.rewrite(&context.overflow_context(context.config.tab_spaces),
|
||||||
|
max_width,
|
||||||
|
new_offset));
|
||||||
|
|
||||||
result.push_str(&rhs);
|
result.push_str(&rhs);
|
||||||
}
|
}
|
||||||
|
@ -48,12 +48,12 @@ impl<'a> RewriteContext<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn overflow_context(&self) -> RewriteContext<'a> {
|
pub fn overflow_context(&self, overflow: usize) -> RewriteContext<'a> {
|
||||||
RewriteContext {
|
RewriteContext {
|
||||||
codemap: self.codemap,
|
codemap: self.codemap,
|
||||||
config: self.config,
|
config: self.config,
|
||||||
block_indent: self.block_indent,
|
block_indent: self.block_indent,
|
||||||
overflow_indent: self.overflow_indent + self.config.tab_spaces,
|
overflow_indent: overflow,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,13 @@ fn main() {
|
|||||||
second: Item
|
second: Item
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Some(Data::MethodCallData(MethodCallData {
|
||||||
|
span: sub_span.unwrap(),
|
||||||
|
scope: self.enclosing_scope(id),
|
||||||
|
ref_id: def_id,
|
||||||
|
decl_id: Some(decl_id),
|
||||||
|
}));
|
||||||
|
|
||||||
Diagram { /* o This graph demonstrates how
|
Diagram { /* o This graph demonstrates how
|
||||||
* / \ significant whitespace is
|
* / \ significant whitespace is
|
||||||
* o o preserved.
|
* o o preserved.
|
||||||
|
@ -46,6 +46,13 @@ fn main() {
|
|||||||
second: Item,
|
second: Item,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Some(Data::MethodCallData(MethodCallData {
|
||||||
|
span: sub_span.unwrap(),
|
||||||
|
scope: self.enclosing_scope(id),
|
||||||
|
ref_id: def_id,
|
||||||
|
decl_id: Some(decl_id),
|
||||||
|
}));
|
||||||
|
|
||||||
Diagram {
|
Diagram {
|
||||||
// o This graph demonstrates how
|
// o This graph demonstrates how
|
||||||
// / \ significant whitespace is
|
// / \ significant whitespace is
|
||||||
|
Loading…
Reference in New Issue
Block a user