Merge pull request #2769 from topecongiro/issue-2765

Put each nested import on its own line
This commit is contained in:
Nick Cameron 2018-06-06 14:37:25 +12:00 committed by GitHub
commit 576e9af0ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 36 additions and 11 deletions

View File

@ -19,6 +19,8 @@ pub enum DefinitiveListTactic {
Vertical,
Horizontal,
Mixed,
/// Tactic for nested import.
NestedImport,
/// Special case tactic for `format!()`, `write!()` style macros.
SpecialMacro(usize),
}

View File

@ -706,12 +706,16 @@ fn rewrite_nested_use_tree(
shape.width.saturating_sub(2)
};
let tactic = definitive_tactic(
&list_items,
context.config.imports_layout(),
Separator::Comma,
remaining_width,
);
let tactic = if has_nested_list {
DefinitiveListTactic::NestedImport
} else {
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;

View File

@ -229,6 +229,7 @@ where
let sep_place =
SeparatorPlace::from_tactic(formatting.separator_place, tactic, formatting.separator);
let mut prev_item_had_post_comment = false;
let mut prev_item_is_nested_import = false;
let mut line_len = 0;
let indent_str = &formatting.shape.indent.to_string(formatting.config);
@ -281,12 +282,14 @@ where
result.push('\n');
result.push_str(indent_str);
}
DefinitiveListTactic::Mixed => {
DefinitiveListTactic::Mixed | DefinitiveListTactic::NestedImport => {
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
&& (prev_item_is_nested_import || (!first && inner_item.contains("::"))))
{
result.push('\n');
result.push_str(indent_str);
@ -452,6 +455,7 @@ where
}
prev_item_had_post_comment = item.post_comment.is_some();
prev_item_is_nested_import = inner_item.contains("::");
}
Some(result)

View File

@ -83,6 +83,8 @@ use foo::{a, bar::{baz, qux, xxxxxxxxxxx, yyyyyyyyyyyyy, zzzzzzzzzzzzzzzz, foo::
use fooo::{baar::{foobar::{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz}}, z, bar, bar::*, x, y};
use exonum::{api::{Api, ApiError}, blockchain::{self, BlockProof, Blockchain, Transaction, TransactionSet}, crypto::{Hash, PublicKey}, helpers::Height, node::TransactionSend, storage::{ListProof, MapProof}};
// nested imports with a single sub-tree.
use a::{b::{c::*}};
use a::{b::{c::{}}};

View File

@ -3,5 +3,6 @@
// rustfmt-imports_layout: Mixed
use std::{
fmt, io, str::{self, FromStr},
fmt, io,
str::{self, FromStr},
};

View File

@ -82,8 +82,9 @@ use self::unix::{};
use foo::{
a, b,
bar::{
baz, foo::{a, b, cxxxxxxxxxxxxx, yyyyyyyyyyyyyy, zzzzzzzzzzzzzzzz}, qux, xxxxxxxxxxx,
yyyyyyyyyyyyy, zzzzzzzzzzzzzzzz,
baz,
foo::{a, b, cxxxxxxxxxxxxx, yyyyyyyyyyyyyy, zzzzzzzzzzzzzzzz},
qux, xxxxxxxxxxx, yyyyyyyyyyyyy, zzzzzzzzzzzzzzzz,
},
boo, c,
};
@ -93,7 +94,18 @@ use fooo::{
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz,
},
bar, bar::*, x, y, z,
bar,
bar::*,
x, y, z,
};
use exonum::{
api::{Api, ApiError},
blockchain::{self, BlockProof, Blockchain, Transaction, TransactionSet},
crypto::{Hash, PublicKey},
helpers::Height,
node::TransactionSend,
storage::{ListProof, MapProof},
};
// nested imports with a single sub-tree.