Skip to content

Commit

Permalink
Additional test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
davidBar-On authored and calebcartwright committed Dec 19, 2020
1 parent 155f6ee commit d2d3712
Show file tree
Hide file tree
Showing 3 changed files with 272 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/formatting/lists.rs
Original file line number Diff line number Diff line change
Expand Up @@ -461,8 +461,8 @@ where

let mut formatted_comment = rewrite_post_comment(&mut item_max_width)?;

// Mmultiline comments are not included in a previous "indentation group".
// Each multiline comment is a considered as a separage group.
// Multiline comments are not included in a previous "indentation group".
// Each multiline comment is considered as a separate group.
if formatted_comment.contains('\n') {
item_max_width = None;
formatted_comment = rewrite_post_comment(&mut item_max_width)?;
Expand Down
134 changes: 134 additions & 0 deletions tests/source/issue-4546.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// Basic tests (using vectors) - list multiline post-comment is indented on its own
fn main() {
let v = [
"A", /* item A comment */
Expand Down Expand Up @@ -27,3 +28,136 @@ fn main() {
"FFF", /* item F comment */
];
}

// Tests for Struct
pub(crate) struct ListFormatting<'a> {
tactic: DefinitiveListTactic,
separator: &'a str, /* Comment */
trailing_separator: SeparatorTactic, /* Comment */
separator_place: SeparatorPlace, // Comment 1
// Comment 2
shape: Shape, /* Non-expressions, e.g., items, will have a new line at the end of the list.
* Important for comment styles. */
ends_with_newline: bool, // Remove newlines between list elements for expressions.
preserve_newline: bool, // Nested import lists get some special handling for the "Mixed" list type
nested: bool,
// Whether comments should be visually aligned.
align_comments: bool, /* comment */
config: &'a Config,
}

fn main() {
l = ListItem {
pre_comment, /* Comment */
pre_comment_style, /* Multiline comment
* Line 2 */
/* New line comment */
item: if self.inner.peek().is_none() && self.leave_last { /* Comment */
None
} else {
(self.get_item_string)(&item)
},
post_comment, /* Comment */
new_lines, /* Comment */
}
}

// Test for Function parameters
pub(crate) fn new(shape: Shape, config: &'a Config) -> Self {
ListFormatting {
tactic: DefinitiveListTactic::Vertical, /* Comment */
separator: ",", /* comment */
trailing_separator: SeparatorTactic::Never, /* Multiline comment
* second comment line */
separator_place: SeparatorPlace::Back, // A longggggggggggggggggggggggggggggggggggggggggggggggggggg comment
shape,
/* New line comment */
ends_with_newline: true, /* Comment */
preserve_newline: false, /* Comment */
nested: false, /* Comment */
align_comments: true, /* Another Multiline comment
* second comment line */
config, /* Last comment */
}
}

// Test for `where`
impl<'a, T, I, F1, F2, F3> Iterator for ListItems<'a, I, F1, F2, F3>
where
I: Iterator<Item = T>, /* Comment */
F111111111: Fn(&T) -> BytePos, /* Comment */
F2222222: Fn(&T) -> BytePos, /* Multiline comment
* Line 2 */
F3: Fn(&T) -> Option<String>, /* Comment */
{}

// Test for some types of lists
pub(crate) fn itemize_list<'a, T, I, F1, F2, F3>(
snippet_provider: &'a SnippetProvider, /* Comment */
inner: I, /* Comment */
terminator: &'a str, /* Multiline comment
* Line 2 */
separator: &'a str, /* Comment */
get_lo: F1, /* Comment */
get_hi: F2,
get_item_string: F3, /* Comment */
prev_span_end: BytePos, /* Multiline comment
* Line 2 */
next_span_start: BytePos, /* Comment */
leave_last: bool,
) -> ListItems<'a, I, F1, F2, F3>
where
I: Iterator<Item = T>, /* Comment */
F111111111: Fn(&T) -> BytePos, /* Multiline comment
* Line 2 */
F2222222: Fn(&T) -> BytePos,
F3: Fn(&T) -> Option<String>, /* Comment */
{
ListItems {/* Comment to ListItems */
snippet_provider, /* Multiline comment
* Line 2 */
inner: inner.peekable(), /* Another multiline comment
* another Line 2 */
get_lo, /* Comment */
get_hi,
get_item_string,
prev_span_end, /* Comment */
next_span_start,/* Comment */
terminator,
separator, /* Yet another multiline comment
* yet another Line 2 */
leave_last,/* Comment */
}
}


// Tests when comment in the same line of the item will exceed line width
fn main() {
let v = [
"A-Longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg", /* item A comment */
"BBB", /* item B Longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg comment */
"CCCCCC", /* item C comment line 1
* item C comment line 2 */
"D-Longggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg", /* item D comment line 1
* item D comment line 2 */
"EEEEE", /* item E comment */
];
}

// Test for nested items
fn main() {
let v1 = [
"GG", /* item G comment line 1
* item G comment line 2 */
"AAAAA", /* item A comment */
[
"BBB", /* item B comment */
"CCCCCC", /* item C comment line 1
* item C comment line 2 */
"D", /* item D comment line 1
* item D comment line 2 */
"E", /* item E comment */
],
"FFF", /* item F comment */
];
}
136 changes: 136 additions & 0 deletions tests/target/issue-4546.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// Basic tests (using vectors) - list multiline post-comment is indented on its own
fn main() {
let v = [
"A", /* item A comment */
Expand Down Expand Up @@ -27,3 +28,138 @@ fn main() {
"FFF", /* item F comment */
];
}

// Tests for Struct
pub(crate) struct ListFormatting<'a> {
tactic: DefinitiveListTactic,
separator: &'a str, /* Comment */
trailing_separator: SeparatorTactic, /* Comment */
separator_place: SeparatorPlace, // Comment 1
// Comment 2
shape: Shape, /* Non-expressions, e.g., items, will have a new line at the end of the list.
* Important for comment styles. */
ends_with_newline: bool, // Remove newlines between list elements for expressions.
preserve_newline: bool, // Nested import lists get some special handling for the "Mixed" list type
nested: bool,
// Whether comments should be visually aligned.
align_comments: bool, /* comment */
config: &'a Config,
}

fn main() {
l = ListItem {
pre_comment, /* Comment */
pre_comment_style, /* Multiline comment
* Line 2 */
/* New line comment */
item: if self.inner.peek().is_none() && self.leave_last {
/* Comment */
None
} else {
(self.get_item_string)(&item)
},
post_comment, /* Comment */
new_lines, /* Comment */
}
}

// Test for Function parameters
pub(crate) fn new(shape: Shape, config: &'a Config) -> Self {
ListFormatting {
tactic: DefinitiveListTactic::Vertical, /* Comment */
separator: ",", /* comment */
trailing_separator: SeparatorTactic::Never, /* Multiline comment
* second comment line */
separator_place: SeparatorPlace::Back, // A longggggggggggggggggggggggggggggggggggggggggggggggggggg comment
shape,
/* New line comment */
ends_with_newline: true, /* Comment */
preserve_newline: false, /* Comment */
nested: false, /* Comment */
align_comments: true, /* Another Multiline comment
* second comment line */
config, /* Last comment */
}
}

// Test for `where`
impl<'a, T, I, F1, F2, F3> Iterator for ListItems<'a, I, F1, F2, F3>
where
I: Iterator<Item = T>, /* Comment */
F111111111: Fn(&T) -> BytePos, /* Comment */
F2222222: Fn(&T) -> BytePos, /* Multiline comment
* Line 2 */
F3: Fn(&T) -> Option<String>, /* Comment */
{
}

// Test for some types of lists
pub(crate) fn itemize_list<'a, T, I, F1, F2, F3>(
snippet_provider: &'a SnippetProvider, /* Comment */
inner: I, /* Comment */
terminator: &'a str, /* Multiline comment
* Line 2 */
separator: &'a str, /* Comment */
get_lo: F1, /* Comment */
get_hi: F2,
get_item_string: F3, /* Comment */
prev_span_end: BytePos, /* Multiline comment
* Line 2 */
next_span_start: BytePos, /* Comment */
leave_last: bool,
) -> ListItems<'a, I, F1, F2, F3>
where
I: Iterator<Item = T>, /* Comment */
F111111111: Fn(&T) -> BytePos, /* Multiline comment
* Line 2 */
F2222222: Fn(&T) -> BytePos,
F3: Fn(&T) -> Option<String>, /* Comment */
{
ListItems {
/* Comment to ListItems */
snippet_provider, /* Multiline comment
* Line 2 */
inner: inner.peekable(), /* Another multiline comment
* another Line 2 */
get_lo, /* Comment */
get_hi,
get_item_string,
prev_span_end, /* Comment */
next_span_start, /* Comment */
terminator,
separator, /* Yet another multiline comment
* yet another Line 2 */
leave_last, /* Comment */
}
}

// Tests when comment in the same line of the item will exceed line width
fn main() {
let v = [
"A-Longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg", /* item A comment */
"BBB", /* item B Longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg comment */
"CCCCCC", /* item C comment line 1
* item C comment line 2 */
"D-Longggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg", /* item D comment line 1
* item D comment line 2 */
"EEEEE", /* item E comment */
];
}

// Test for nested items
fn main() {
let v1 = [
"GG", /* item G comment line 1
* item G comment line 2 */
"AAAAA", /* item A comment */
[
"BBB", /* item B comment */
"CCCCCC", /* item C comment line 1
* item C comment line 2 */
"D", /* item D comment line 1
* item D comment line 2 */
"E", /* item E comment */
],
"FFF", /* item F comment */
];
}

0 comments on commit d2d3712

Please sign in to comment.