diff --git a/src/comment.rs b/src/comment.rs index f5ba982ecc0..b08e46681a7 100644 --- a/src/comment.rs +++ b/src/comment.rs @@ -212,7 +212,10 @@ enum CodeCharKind { impl CharClasses where T: Iterator, T::Item: RichChar { fn new(base: T) -> CharClasses { - CharClasses { base: base.peekable(), status: CharClassesStatus::Normal } + CharClasses { + base: base.peekable(), + status: CharClassesStatus::Normal, + } } } diff --git a/src/config.rs b/src/config.rs index 4779d0e9b98..02076174482 100644 --- a/src/config.rs +++ b/src/config.rs @@ -218,8 +218,10 @@ create_config! { ideal_width: usize, "Ideal width of each line (only used for comments)", leeway: usize, "Leeway of line width (deprecated)", tab_spaces: usize, "Number of spaces per tab", - list_width: usize, "Maximum width in a struct literal or function \ - call before faling back to vertical formatting", + fn_call_width: usize, "Maximum width of the args of a function call\ + before faling back to vertical formatting", + struct_lit_width: usize, "Maximum width in the body of a struct lit\ + before faling back to vertical formatting", newline_style: NewlineStyle, "Unix or Windows line endings", fn_brace_style: BraceStyle, "Brace style for functions", fn_return_indent: ReturnIndent, "Location of return type in function declaration", @@ -258,7 +260,8 @@ impl Default for Config { ideal_width: 80, leeway: 5, tab_spaces: 4, - list_width: 50, + fn_call_width: 50, + struct_lit_width: 12, newline_style: NewlineStyle::Unix, fn_brace_style: BraceStyle::SameLineWhere, fn_return_indent: ReturnIndent::WithArgs, diff --git a/src/expr.rs b/src/expr.rs index 79e03e644e4..f2e6b1e0dfa 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -1226,11 +1226,15 @@ fn rewrite_struct_lit<'a>(context: &RewriteContext, span_after(span, "{", context.codemap), span.hi); - let tactic = match (context.config.struct_lit_style, fields.len()) { + let mut tactic = match (context.config.struct_lit_style, fields.len()) { (StructLitStyle::Visual, 1) => ListTactic::HorizontalVertical, _ => context.config.struct_lit_multiline_style.to_list_tactic(), }; + if tactic == ListTactic::HorizontalVertical && fields.len() > 1 { + tactic = ListTactic::LimitedHorizontalVertical(context.config.struct_lit_width); + } + let fmt = ListFormatting { tactic: tactic, separator: ",", diff --git a/src/issues.rs b/src/issues.rs index 90123cf63e1..2a5eaae287a 100644 --- a/src/issues.rs +++ b/src/issues.rs @@ -101,7 +101,10 @@ pub struct BadIssueSeeker { impl BadIssueSeeker { pub fn new(report_todo: ReportTactic, report_fixme: ReportTactic) -> BadIssueSeeker { BadIssueSeeker { - state: Seeking::Issue { todo_idx: 0, fixme_idx: 0 }, + state: Seeking::Issue { + todo_idx: 0, + fixme_idx: 0, + }, report_todo: report_todo, report_fixme: report_fixme, } @@ -121,7 +124,10 @@ impl BadIssueSeeker { return None; } - self.state = Seeking::Issue { todo_idx: 0, fixme_idx: 0 }; + self.state = Seeking::Issue { + todo_idx: 0, + fixme_idx: 0, + }; if let IssueClassification::Bad(issue) = result { return Some(issue); @@ -173,7 +179,10 @@ impl BadIssueSeeker { fixme_idx = 0; } - Seeking::Issue { todo_idx: todo_idx, fixme_idx: fixme_idx } + Seeking::Issue { + todo_idx: todo_idx, + fixme_idx: fixme_idx, + } } fn inspect_number(&mut self, @@ -214,7 +223,10 @@ impl BadIssueSeeker { NumberPart::CloseParen => {} } - self.state = Seeking::Number { part: part, issue: issue }; + self.state = Seeking::Number { + part: part, + issue: issue, + }; IssueClassification::None } @@ -274,7 +286,10 @@ fn find_issue() { #[test] fn issue_type() { let mut seeker = BadIssueSeeker::new(ReportTactic::Always, ReportTactic::Never); - let expected = Some(Issue { issue_type: IssueType::Todo, missing_number: false }); + let expected = Some(Issue { + issue_type: IssueType::Todo, + missing_number: false, + }); assert_eq!(expected, "TODO(#100): more awesomeness" @@ -284,7 +299,10 @@ fn issue_type() { .unwrap()); let mut seeker = BadIssueSeeker::new(ReportTactic::Never, ReportTactic::Unnumbered); - let expected = Some(Issue { issue_type: IssueType::Fixme, missing_number: true }); + let expected = Some(Issue { + issue_type: IssueType::Fixme, + missing_number: true, + }); assert_eq!(expected, "Test. FIXME: bad, bad, not good" diff --git a/src/lib.rs b/src/lib.rs index 73184a0bdc1..19398208a77 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -92,7 +92,10 @@ pub struct Indent { impl Indent { pub fn new(block_indent: usize, alignment: usize) -> Indent { - Indent { block_indent: block_indent, alignment: alignment } + Indent { + block_indent: block_indent, + alignment: alignment, + } } pub fn empty() -> Indent { @@ -304,7 +307,10 @@ pub fn fmt_lines(file_map: &mut FileMap, config: &Config) -> FormatReport { // Add warnings for bad todos/ fixmes if let Some(issue) = issue_seeker.inspect(c) { - errors.push(FormattingError { line: cur_line, kind: ErrorKind::BadIssue(issue) }); + errors.push(FormattingError { + line: cur_line, + kind: ErrorKind::BadIssue(issue), + }); } if c == '\n' { @@ -315,7 +321,10 @@ pub fn fmt_lines(file_map: &mut FileMap, config: &Config) -> FormatReport { } // Check for any line width errors we couldn't correct. if line_len > config.max_width { - errors.push(FormattingError { line: cur_line, kind: ErrorKind::LineOverflow }); + errors.push(FormattingError { + line: cur_line, + kind: ErrorKind::LineOverflow, + }); } line_len = 0; cur_line += 1; @@ -340,7 +349,10 @@ pub fn fmt_lines(file_map: &mut FileMap, config: &Config) -> FormatReport { } for &(l, _, _) in &trims { - errors.push(FormattingError { line: l, kind: ErrorKind::TrailingWhitespace }); + errors.push(FormattingError { + line: l, + kind: ErrorKind::TrailingWhitespace, + }); } report.file_error_map.insert(f.to_owned(), errors); @@ -395,7 +407,10 @@ pub fn format(args: Vec, config: &Config) -> FileMap { { let config = Rc::new(config.clone()); - let mut call_ctxt = RustFmtCalls { config: config, result: result.clone() }; + let mut call_ctxt = RustFmtCalls { + config: config, + result: result.clone(), + }; rustc_driver::run_compiler(&args, &mut call_ctxt); } diff --git a/src/lists.rs b/src/lists.rs index ef3372bf0b6..12eebb7b691 100644 --- a/src/lists.rs +++ b/src/lists.rs @@ -62,7 +62,7 @@ pub struct ListFormatting<'a> { impl<'a> ListFormatting<'a> { pub fn for_fn(width: usize, offset: Indent, config: &'a Config) -> ListFormatting<'a> { ListFormatting { - tactic: ListTactic::LimitedHorizontalVertical(config.list_width), + tactic: ListTactic::LimitedHorizontalVertical(config.fn_call_width), separator: ",", trailing_separator: SeparatorTactic::Never, indent: offset, @@ -107,7 +107,12 @@ impl ListItem { } pub fn from_str>(s: S) -> ListItem { - ListItem { pre_comment: None, item: s.into(), post_comment: None, new_lines: false } + ListItem { + pre_comment: None, + item: s.into(), + post_comment: None, + new_lines: false, + } } } diff --git a/src/rustfmt_diff.rs b/src/rustfmt_diff.rs index 375cfd661fa..8c20b8f5a0f 100644 --- a/src/rustfmt_diff.rs +++ b/src/rustfmt_diff.rs @@ -15,7 +15,10 @@ pub struct Mismatch { impl Mismatch { fn new(line_number: u32) -> Mismatch { - Mismatch { line_number: line_number, lines: Vec::new() } + Mismatch { + line_number: line_number, + lines: Vec::new(), + } } } diff --git a/src/visitor.rs b/src/visitor.rs index 5faff9e6d11..883d46a22d4 100644 --- a/src/visitor.rs +++ b/src/visitor.rs @@ -275,7 +275,10 @@ impl<'a> FmtVisitor<'a> { codemap: codemap, buffer: StringBuffer::new(), last_pos: BytePos(0), - block_indent: Indent { block_indent: 0, alignment: 0 }, + block_indent: Indent { + block_indent: 0, + alignment: 0, + }, config: config, } } diff --git a/tests/source/struct_lits.rs b/tests/source/struct_lits.rs index 69f90879164..aecbc285fc6 100644 --- a/tests/source/struct_lits.rs +++ b/tests/source/struct_lits.rs @@ -8,9 +8,9 @@ fn main() { Foo { a: foo() /* comment*/, /* comment*/ b: bar(), ..something }; - Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { a: foo(), b: bar(), }; + Fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { a: f(), b: b(), }; - Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { a: foo(), b: bar(), }; + Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { a: f(), b: b(), }; Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { // Comment @@ -20,7 +20,7 @@ fn main() { }; Foo { a:Bar, - b:foo() }; + b:f() }; Quux { x: if cond { bar(); }, y: baz() }; @@ -91,3 +91,11 @@ fn struct_exprs() { LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongStruct { ..base }; IntrinsicISizesContribution { content_intrinsic_sizes: IntrinsicISizes { minimum_inline_size: 0, }, }; } + +fn issue123() { + Foo { a: b, c: d, e: f }; + + Foo { a: bb, c: dd, e: ff }; + + Foo { a: ddddddddddddddddddddd, b: cccccccccccccccccccccccccccccccccccccc }; +} diff --git a/tests/source/struct_lits_visual.rs b/tests/source/struct_lits_visual.rs index 180a1229faa..6b78df7e0f3 100644 --- a/tests/source/struct_lits_visual.rs +++ b/tests/source/struct_lits_visual.rs @@ -10,7 +10,7 @@ fn main() { Foo { a: foo() /* comment*/, /* comment*/ b: bar(), ..something }; - Fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { a: foo(), b: bar(), }; + Fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { a: f(), b: b(), }; Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { // Comment @@ -20,7 +20,7 @@ fn main() { }; Foo { a:Bar, - b:foo() }; + b:f() }; Quux { x: if cond { bar(); }, y: baz() }; diff --git a/tests/target/struct_lits.rs b/tests/target/struct_lits.rs index ac7b8aaaeab..66fb4925042 100644 --- a/tests/target/struct_lits.rs +++ b/tests/target/struct_lits.rs @@ -13,11 +13,11 @@ fn main() { ..something }; - Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { a: foo(), b: bar() }; + Fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { a: f(), b: b() }; - Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { - a: foo(), - b: bar(), + Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { + a: f(), + b: b(), }; Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { @@ -27,7 +27,7 @@ fn main() { b: bar(), /* Comment */ }; - Foo { a: Bar, b: foo() }; + Foo { a: Bar, b: f() }; Quux { x: if cond { @@ -65,7 +65,10 @@ fn main() { fn matcher() { TagTerminatedByteMatcher { - matcher: ByteMatcher { pattern: b"