mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-12 20:16:49 +00:00
Merge pull request #368 from nrc/struct-wide
Use a width heuristic for struct lits
This commit is contained in:
commit
dad4626517
@ -212,7 +212,10 @@ enum CodeCharKind {
|
||||
|
||||
impl<T> CharClasses<T> where T: Iterator, T::Item: RichChar {
|
||||
fn new(base: T) -> CharClasses<T> {
|
||||
CharClasses { base: base.peekable(), status: CharClassesStatus::Normal }
|
||||
CharClasses {
|
||||
base: base.peekable(),
|
||||
status: CharClassesStatus::Normal,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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: ",",
|
||||
|
@ -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"
|
||||
|
25
src/lib.rs
25
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<String>, 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);
|
||||
}
|
||||
|
||||
|
@ -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: Into<String>>(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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
@ -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 };
|
||||
}
|
||||
|
@ -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() };
|
||||
|
||||
|
@ -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"<HTML", mask: b"\xFF\xDF\xDF\xDF\xDF\xFF" },
|
||||
matcher: ByteMatcher {
|
||||
pattern: b"<HTML",
|
||||
mask: b"\xFF\xDF\xDF\xDF\xDF\xFF",
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@ -101,7 +104,11 @@ fn issue278() {
|
||||
|
||||
fn struct_exprs() {
|
||||
Foo { a: 1, b: f(2) };
|
||||
Foo { a: 1, b: f(2), ..g(3) };
|
||||
Foo {
|
||||
a: 1,
|
||||
b: f(2),
|
||||
..g(3)
|
||||
};
|
||||
LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongStruct {
|
||||
..base
|
||||
};
|
||||
@ -109,3 +116,18 @@ fn struct_exprs() {
|
||||
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,
|
||||
};
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ fn main() {
|
||||
b: bar(),
|
||||
..something };
|
||||
|
||||
Fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { a: foo(), b: bar() };
|
||||
Fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { a: f(), b: b() };
|
||||
|
||||
Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { // Commen
|
||||
// t
|
||||
@ -34,7 +34,7 @@ fn main() {
|
||||
* n
|
||||
* t */ };
|
||||
|
||||
Foo { a: Bar, b: foo() };
|
||||
Foo { a: Bar, b: f() };
|
||||
|
||||
Quux { x: if cond {
|
||||
bar();
|
||||
|
Loading…
Reference in New Issue
Block a user