#[test]
fn insert_existing() {
- check_full("std::fs", "use std::fs;", "use std::fs;")
+ check_crate("std::fs", "use std::fs;", "use std::fs;")
}
#[test]
#[test]
fn insert_no_imports() {
- check_full(
+ check_crate(
"foo::bar",
"fn main() {}",
r"use foo::bar;
cov_mark::check!(insert_group_empty_file);
// empty files will get two trailing newlines
// this is due to the test case insert_no_imports above
- check_full(
+ check_crate(
"foo::bar",
"",
r"use foo::bar;
#[test]
fn insert_after_inner_attr() {
cov_mark::check!(insert_group_empty_inner_attr);
- check_full(
+ check_crate(
"foo::bar",
r"#![allow(unused_imports)]",
r"#![allow(unused_imports)]
#[test]
fn insert_after_inner_attr2() {
- check_full(
+ check_crate(
"foo::bar",
r"#![allow(unused_imports)]
#[test]
fn merge_groups() {
- check_last("std::io", r"use std::fmt;", r"use std::{fmt, io};")
+ check_module("std::io", r"use std::fmt;", r"use std::{fmt, io};")
}
#[test]
fn merge_groups_last() {
- check_last(
+ check_module(
"std::io",
r"use std::fmt::{Result, Display};",
r"use std::fmt::{Result, Display};
#[test]
fn merge_last_into_self() {
- check_last("foo::bar::baz", r"use foo::bar;", r"use foo::bar::{self, baz};");
+ check_module("foo::bar::baz", r"use foo::bar;", r"use foo::bar::{self, baz};");
}
#[test]
fn merge_groups_full() {
- check_full(
+ check_crate(
"std::io",
r"use std::fmt::{Result, Display};",
r"use std::{fmt::{Result, Display}, io};",
#[test]
fn merge_groups_long_full() {
- check_full("std::foo::bar::Baz", r"use std::foo::bar::Qux;", r"use std::foo::bar::{Baz, Qux};")
+ check_crate("std::foo::bar::Baz", r"use std::foo::bar::Qux;", r"use std::foo::bar::{Baz, Qux};")
}
#[test]
fn merge_groups_long_last() {
- check_last("std::foo::bar::Baz", r"use std::foo::bar::Qux;", r"use std::foo::bar::{Baz, Qux};")
+ check_module(
+ "std::foo::bar::Baz",
+ r"use std::foo::bar::Qux;",
+ r"use std::foo::bar::{Baz, Qux};",
+ )
}
#[test]
fn merge_groups_long_full_list() {
- check_full(
+ check_crate(
"std::foo::bar::Baz",
r"use std::foo::bar::{Qux, Quux};",
r"use std::foo::bar::{Baz, Quux, Qux};",
#[test]
fn merge_groups_long_last_list() {
- check_last(
+ check_module(
"std::foo::bar::Baz",
r"use std::foo::bar::{Qux, Quux};",
r"use std::foo::bar::{Baz, Quux, Qux};",
#[test]
fn merge_groups_long_full_nested() {
- check_full(
+ check_crate(
"std::foo::bar::Baz",
r"use std::foo::bar::{Qux, quux::{Fez, Fizz}};",
r"use std::foo::bar::{Baz, Qux, quux::{Fez, Fizz}};",
#[test]
fn merge_groups_long_last_nested() {
- check_last(
+ check_module(
"std::foo::bar::Baz",
r"use std::foo::bar::{Qux, quux::{Fez, Fizz}};",
r"use std::foo::bar::Baz;
#[test]
fn merge_groups_full_nested_deep() {
- check_full(
+ check_crate(
"std::foo::bar::quux::Baz",
r"use std::foo::bar::{Qux, quux::{Fez, Fizz}};",
r"use std::foo::bar::{Qux, quux::{Baz, Fez, Fizz}};",
#[test]
fn merge_groups_full_nested_long() {
- check_full(
+ check_crate(
"std::foo::bar::Baz",
r"use std::{foo::bar::Qux};",
r"use std::{foo::bar::{Baz, Qux}};",
#[test]
fn merge_groups_last_nested_long() {
- check_full(
+ check_crate(
"std::foo::bar::Baz",
r"use std::{foo::bar::Qux};",
r"use std::{foo::bar::{Baz, Qux}};",
#[test]
fn merge_groups_skip_pub() {
- check_full(
+ check_crate(
"std::io",
r"pub use std::fmt::{Result, Display};",
r"pub use std::fmt::{Result, Display};
#[test]
fn merge_groups_skip_pub_crate() {
- check_full(
+ check_crate(
"std::io",
r"pub(crate) use std::fmt::{Result, Display};",
r"pub(crate) use std::fmt::{Result, Display};
#[test]
fn merge_groups_skip_attributed() {
- check_full(
+ check_crate(
"std::io",
r#"
#[cfg(feature = "gated")] use std::fmt::{Result, Display};
#[test]
#[ignore] // FIXME: Support this
fn split_out_merge() {
- check_last(
+ check_module(
"std::fmt::Result",
r"use std::{fmt, io};",
r"use std::fmt::{self, Result};
#[test]
fn merge_into_module_import() {
- check_full("std::fmt::Result", r"use std::{fmt, io};", r"use std::{fmt::{self, Result}, io};")
+ check_crate("std::fmt::Result", r"use std::{fmt, io};", r"use std::{fmt::{self, Result}, io};")
}
#[test]
fn merge_groups_self() {
- check_full("std::fmt::Debug", r"use std::fmt;", r"use std::fmt::{self, Debug};")
+ check_crate("std::fmt::Debug", r"use std::fmt;", r"use std::fmt::{self, Debug};")
}
#[test]
fn merge_mod_into_glob() {
- check_full("token::TokenKind", r"use token::TokenKind::*;", r"use token::TokenKind::{*, self};")
+ check_crate(
+ "token::TokenKind",
+ r"use token::TokenKind::*;",
+ r"use token::TokenKind::{*, self};",
+ )
// FIXME: have it emit `use token::TokenKind::{self, *}`?
}
#[test]
fn merge_self_glob() {
- check_full("self", r"use self::*;", r"use self::{*, self};")
+ check_crate("self", r"use self::*;", r"use self::{*, self};")
// FIXME: have it emit `use {self, *}`?
}
#[test]
fn merge_glob_nested() {
- check_full(
+ check_crate(
"foo::bar::quux::Fez",
r"use foo::bar::{Baz, quux::*};",
r"use foo::bar::{Baz, quux::{self::*, Fez}};",
#[test]
fn merge_nested_considers_first_segments() {
- check_full(
+ check_crate(
"hir_ty::display::write_bounds_like_dyn_trait",
r"use hir_ty::{autoderef, display::{HirDisplayError, HirFormatter}, method_resolution};",
r"use hir_ty::{autoderef, display::{HirDisplayError, HirFormatter, write_bounds_like_dyn_trait}, method_resolution};",
#[test]
fn skip_merge_last_too_long() {
- check_last(
+ check_module(
"foo::bar",
r"use foo::bar::baz::Qux;",
r"use foo::bar;
#[test]
fn skip_merge_last_too_long2() {
- check_last(
+ check_module(
"foo::bar::baz::Qux",
r"use foo::bar;",
r"use foo::bar;
check_merge_only_fail(
r"use foo::bar::{baz::{Qux, Fez}};",
r"use foo::bar::{baaz::{Quux, Feez}};",
- MergeBehavior::Last,
+ MergeBehavior::Module,
);
}
check_merge_only_fail(
r"use foo::bar::{baz::{Qux, Fez}};",
r"use foo::bar::baaz::{Quux, Feez};",
- MergeBehavior::Last,
+ MergeBehavior::Module,
);
}
check_merge_only_fail(
r"use foo::bar::baz::{Qux, Fez};",
r"use foo::bar::{baaz::{Quux, Feez}};",
- MergeBehavior::Last,
+ MergeBehavior::Module,
);
}
check_merge_only_fail(
r"use foo::bar::baz::{Qux, Fez};",
r"use foo::bar::baaz::{Quux, Feez};",
- MergeBehavior::Last,
+ MergeBehavior::Module,
);
}
assert_eq_text!(ra_fixture_after, &result);
}
-fn check_full(path: &str, ra_fixture_before: &str, ra_fixture_after: &str) {
- check(path, ra_fixture_before, ra_fixture_after, Some(MergeBehavior::Full), false, true)
+fn check_crate(path: &str, ra_fixture_before: &str, ra_fixture_after: &str) {
+ check(path, ra_fixture_before, ra_fixture_after, Some(MergeBehavior::Crate), false, true)
}
-fn check_last(path: &str, ra_fixture_before: &str, ra_fixture_after: &str) {
- check(path, ra_fixture_before, ra_fixture_after, Some(MergeBehavior::Last), false, true)
+fn check_module(path: &str, ra_fixture_before: &str, ra_fixture_after: &str) {
+ check(path, ra_fixture_before, ra_fixture_after, Some(MergeBehavior::Module), false, true)
}
fn check_none(path: &str, ra_fixture_before: &str, ra_fixture_after: &str) {
struct ConfigData {
/// The strategy to use when inserting new imports or merging imports.
assist_importMergeBehavior |
- assist_importMergeBehaviour: MergeBehaviorDef = "\"full\"",
+ assist_importMergeBehaviour: MergeBehaviorDef = "\"crate\"",
/// The path structure for newly inserted paths to use.
assist_importPrefix: ImportPrefixDef = "\"plain\"",
/// Group inserted imports by the [following order](https://rust-analyzer.github.io/manual.html#auto-import). Groups are separated by newlines.
InsertUseConfig {
merge: match self.data.assist_importMergeBehavior {
MergeBehaviorDef::None => None,
- MergeBehaviorDef::Full => Some(MergeBehavior::Full),
- MergeBehaviorDef::Last => Some(MergeBehavior::Last),
+ MergeBehaviorDef::Crate => Some(MergeBehavior::Crate),
+ MergeBehaviorDef::Module => Some(MergeBehavior::Module),
},
prefix_kind: match self.data.assist_importPrefix {
ImportPrefixDef::Plain => PrefixKind::Plain,
#[serde(rename_all = "snake_case")]
enum MergeBehaviorDef {
None,
- Full,
- Last,
+ #[serde(alias = "Full")]
+ Crate,
+ #[serde(alias = "Last")]
+ Module,
}
#[derive(Deserialize, Debug, Clone)]
},
"MergeBehaviorDef" => set! {
"type": "string",
- "enum": ["none", "full", "last"],
+ "enum": ["none", "crate", "module"],
"enumDescriptions": [
- "No merging",
- "Merge all layers of the import trees",
- "Only merge the last layer of the import trees"
+ "Do not merge imports at all.",
+ "Merge imports from the same crate into a single `use` statement.",
+ "Merge imports from the same module into a single `use` statement."
],
},
"ImportPrefixDef" => set! {