diff --git a/src/imports.rs b/src/imports.rs index 8054fbdd4517..9bd1ccb86c25 100644 --- a/src/imports.rs +++ b/src/imports.rs @@ -497,7 +497,8 @@ fn rewrite_nested_use_tree( let list_str = write_list(&list_items, &fmt)?; - let result = if list_str.contains('\n') && context.config.imports_indent() == IndentStyle::Block + let result = if (list_str.contains('\n') || list_str.len() > remaining_width) + && context.config.imports_indent() == IndentStyle::Block { format!( "{{\n{}{}\n{}}}", diff --git a/src/lists.rs b/src/lists.rs index 43ba7f9d673d..c4bd21869fb3 100644 --- a/src/lists.rs +++ b/src/lists.rs @@ -172,11 +172,10 @@ where let limit = match tactic { _ if pre_line_comments => return DefinitiveListTactic::Vertical, - ListTactic::Mixed => return DefinitiveListTactic::Mixed, ListTactic::Horizontal => return DefinitiveListTactic::Horizontal, ListTactic::Vertical => return DefinitiveListTactic::Vertical, ListTactic::LimitedHorizontalVertical(limit) => ::std::cmp::min(width, limit), - ListTactic::HorizontalVertical => width, + ListTactic::Mixed | ListTactic::HorizontalVertical => width, }; let (sep_count, total_width) = calculate_width(items.clone()); @@ -188,7 +187,10 @@ where { DefinitiveListTactic::Horizontal } else { - DefinitiveListTactic::Vertical + match tactic { + ListTactic::Mixed => DefinitiveListTactic::Mixed, + _ => DefinitiveListTactic::Vertical, + } } } @@ -278,8 +280,7 @@ where if last && formatting.ends_with_newline { match formatting.trailing_separator { - SeparatorTactic::Always => separate = true, - SeparatorTactic::Vertical if result.contains('\n') => separate = true, + SeparatorTactic::Always | SeparatorTactic::Vertical => separate = true, _ => (), } } diff --git a/tests/source/imports_block_indent.rs b/tests/source/imports_block_indent.rs new file mode 100644 index 000000000000..9333beb34a2d --- /dev/null +++ b/tests/source/imports_block_indent.rs @@ -0,0 +1,4 @@ +// rustfmt-imports_indent: Block + +// #2569 +use apns2::request::notification::{Notificatio, NotificationBuilder, Priority, SilentNotificationBuilder}; diff --git a/tests/target/imports_block_indent.rs b/tests/target/imports_block_indent.rs new file mode 100644 index 000000000000..2c424a69c000 --- /dev/null +++ b/tests/target/imports_block_indent.rs @@ -0,0 +1,6 @@ +// rustfmt-imports_indent: Block + +// #2569 +use apns2::request::notification::{ + Notificatio, NotificationBuilder, Priority, SilentNotificationBuilder, +};