diff --git a/src/attr.rs b/src/attr.rs index 28e3e24ea09c..efbd4872aae5 100644 --- a/src/attr.rs +++ b/src/attr.rs @@ -247,6 +247,7 @@ impl Rewrite for ast::MetaItem { shape: item_shape, ends_with_newline: false, preserve_newline: false, + nested: false, config: context.config, }; let item_str = write_list(&item_vec, &fmt)?; diff --git a/src/closures.rs b/src/closures.rs index 3d0a52de0dca..257b8729f453 100644 --- a/src/closures.rs +++ b/src/closures.rs @@ -260,6 +260,7 @@ fn rewrite_closure_fn_decl( shape: arg_shape, ends_with_newline: false, preserve_newline: true, + nested: false, config: context.config, }; let list_str = write_list(&item_vec, &fmt)?; diff --git a/src/config/lists.rs b/src/config/lists.rs index a9846a1cc748..04406e8d5669 100644 --- a/src/config/lists.rs +++ b/src/config/lists.rs @@ -19,8 +19,6 @@ pub enum DefinitiveListTactic { Vertical, Horizontal, Mixed, - /// Tactic for nested import. - NestedImport, /// Special case tactic for `format!()`, `write!()` style macros. SpecialMacro(usize), } diff --git a/src/expr.rs b/src/expr.rs index 112383e7e4c2..0c2716a2dba7 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -1338,6 +1338,7 @@ pub fn rewrite_multiple_patterns( shape, ends_with_newline: false, preserve_newline: false, + nested: false, config: context.config, }; write_list(&items, &fmt) @@ -1902,6 +1903,7 @@ where shape, ends_with_newline: false, preserve_newline: false, + nested: false, config: context.config, }; let list_str = write_list(&item_vec, &fmt)?; diff --git a/src/imports.rs b/src/imports.rs index a1cf6a83f07f..7e45bb55f0d5 100644 --- a/src/imports.rs +++ b/src/imports.rs @@ -706,16 +706,12 @@ fn rewrite_nested_use_tree( shape.width.saturating_sub(2) }; - let tactic = if has_nested_list { - DefinitiveListTactic::NestedImport - } else { - definitive_tactic( - &list_items, - context.config.imports_layout(), - Separator::Comma, - remaining_width, - ) - }; + let tactic = definitive_tactic( + &list_items, + context.config.imports_layout(), + Separator::Comma, + remaining_width, + ); let ends_with_newline = context.config.imports_indent() == IndentStyle::Block && tactic != DefinitiveListTactic::Horizontal; @@ -731,6 +727,7 @@ fn rewrite_nested_use_tree( shape: nested_shape, ends_with_newline, preserve_newline: true, + nested: has_nested_list, config: context.config, }; diff --git a/src/items.rs b/src/items.rs index 38311abcba0c..843d5839de93 100644 --- a/src/items.rs +++ b/src/items.rs @@ -533,6 +533,7 @@ impl<'a> FmtVisitor<'a> { shape, ends_with_newline: true, preserve_newline: true, + nested: false, config: self.config, }; @@ -2307,6 +2308,7 @@ fn rewrite_args( shape: Shape::legacy(budget, indent), ends_with_newline: tactic.ends_with_newline(context.config.indent_style()), preserve_newline: true, + nested: false, config: context.config, }; @@ -2494,6 +2496,7 @@ fn rewrite_where_clause_rfc_style( shape: clause_shape, ends_with_newline: true, preserve_newline: true, + nested: false, config: context.config, }; let preds_str = write_list(&items.collect::>(), &fmt)?; @@ -2607,6 +2610,7 @@ fn rewrite_where_clause( shape: Shape::legacy(budget, offset), ends_with_newline: tactic.ends_with_newline(context.config.indent_style()), preserve_newline: true, + nested: false, config: context.config, }; let preds_str = write_list(&item_vec, &fmt)?; diff --git a/src/lists.rs b/src/lists.rs index 6e8679188641..97dd093b4f9d 100644 --- a/src/lists.rs +++ b/src/lists.rs @@ -34,6 +34,8 @@ pub struct ListFormatting<'a> { pub ends_with_newline: bool, // Remove newlines between list elements for expressions. pub preserve_newline: bool, + // Nested import lists get some special handling for the "Mixed" list type + pub nested: bool, pub config: &'a Config, } @@ -282,13 +284,13 @@ where result.push('\n'); result.push_str(indent_str); } - DefinitiveListTactic::Mixed | DefinitiveListTactic::NestedImport => { + DefinitiveListTactic::Mixed => { let total_width = total_item_width(item) + item_sep_len; // 1 is space between separator and item. if (line_len > 0 && line_len + 1 + total_width > formatting.shape.width) || prev_item_had_post_comment - || (tactic == DefinitiveListTactic::NestedImport + || (formatting.nested && (prev_item_is_nested_import || (!first && inner_item.contains("::")))) { result.push('\n'); @@ -825,6 +827,7 @@ pub fn struct_lit_formatting<'a>( shape, ends_with_newline, preserve_newline: true, + nested: false, config: context.config, } } diff --git a/src/macros.rs b/src/macros.rs index 9053aaebd90a..801e04baad0f 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -399,6 +399,7 @@ pub fn rewrite_macro_def( shape: arm_shape, ends_with_newline: true, preserve_newline: true, + nested: false, config: context.config, }; diff --git a/src/matches.rs b/src/matches.rs index 9551dc360026..c179efc3963e 100644 --- a/src/matches.rs +++ b/src/matches.rs @@ -224,6 +224,7 @@ fn rewrite_match_arms( shape: arm_shape, ends_with_newline: true, preserve_newline: true, + nested: false, config: context.config, }; diff --git a/src/overflow.rs b/src/overflow.rs index 62675b4002c4..f91ef38e2ee0 100644 --- a/src/overflow.rs +++ b/src/overflow.rs @@ -388,6 +388,7 @@ impl<'a, T: 'a + Rewrite + ToExpr + Spanned> Context<'a, T> { _ => false, }, preserve_newline: false, + nested: false, config: self.context.config, }; diff --git a/src/reorder.rs b/src/reorder.rs index 343bbb497bd6..ecad2c25652a 100644 --- a/src/reorder.rs +++ b/src/reorder.rs @@ -77,6 +77,7 @@ fn wrap_reorderable_items( shape, ends_with_newline: true, preserve_newline: false, + nested: false, config: context.config, }; diff --git a/src/types.rs b/src/types.rs index 46d48e727634..44fdbee6efdd 100644 --- a/src/types.rs +++ b/src/types.rs @@ -366,6 +366,7 @@ where shape: list_shape, ends_with_newline: tactic.ends_with_newline(context.config.indent_style()), preserve_newline: true, + nested: false, config: context.config, }; diff --git a/src/vertical.rs b/src/vertical.rs index 1595b22c5c4a..a8a8ee6cec3c 100644 --- a/src/vertical.rs +++ b/src/vertical.rs @@ -252,6 +252,7 @@ fn rewrite_aligned_items_inner( shape: item_shape, ends_with_newline: true, preserve_newline: true, + nested: false, config: context.config, }; write_list(&items, &fmt) diff --git a/tests/source/issue-2794.rs b/tests/source/issue-2794.rs new file mode 100644 index 000000000000..c3f9c0412a46 --- /dev/null +++ b/tests/source/issue-2794.rs @@ -0,0 +1,7 @@ +// rustfmt-indent_style: Block +// rustfmt-imports_indent: Block +// rustfmt-imports_layout: Vertical + +use std::{ + env, fs, io::{Read, Write}, +}; diff --git a/tests/target/issue-2794.rs b/tests/target/issue-2794.rs new file mode 100644 index 000000000000..951c0af206d8 --- /dev/null +++ b/tests/target/issue-2794.rs @@ -0,0 +1,12 @@ +// rustfmt-indent_style: Block +// rustfmt-imports_indent: Block +// rustfmt-imports_layout: Vertical + +use std::{ + env, + fs, + io::{ + Read, + Write, + }, +};