Unnamed repository; edit this file 'description' to name the repository.
Deprecate `preserve` import granularity option
It didn't do anything (behaved like `item`), as with `enforceGranularity = false` (which is the default), the style of the current file is always preferred, regardless of the setting. We could make it fail when the setting is `preserve` and the current file's style could not be detected, but that makes little sense. It is a bit weird that the default is `crate` but `preserve` falls back to `item`, however that was the previous behavior.
Chayim Refael Friedman 7 months ago
parent 378ea41 · commit 10db7ac
-rw-r--r--crates/ide-db/src/imports/insert_use.rs5
-rw-r--r--crates/ide-diagnostics/src/lib.rs2
-rw-r--r--crates/rust-analyzer/src/config.rs29
-rw-r--r--editors/code/package.json37
4 files changed, 46 insertions, 27 deletions
diff --git a/crates/ide-db/src/imports/insert_use.rs b/crates/ide-db/src/imports/insert_use.rs
index b174adfd7e..caba1cdd70 100644
--- a/crates/ide-db/src/imports/insert_use.rs
+++ b/crates/ide-db/src/imports/insert_use.rs
@@ -27,9 +27,6 @@ pub use hir::PrefixKind;
/// How imports should be grouped into use statements.
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum ImportGranularity {
- /// Do not change the granularity of any imports and preserve the original structure written
- /// by the developer.
- Preserve,
/// Merge imports from the same crate into a single use statement.
Crate,
/// Merge imports from the same module into a single use statement.
@@ -174,7 +171,7 @@ fn insert_use_with_alias_option(
ImportGranularity::Crate => Some(MergeBehavior::Crate),
ImportGranularity::Module => Some(MergeBehavior::Module),
ImportGranularity::One => Some(MergeBehavior::One),
- ImportGranularity::Item | ImportGranularity::Preserve => None,
+ ImportGranularity::Item => None,
};
if !cfg.enforce_granularity {
let file_granularity = guess_granularity_from_scope(scope);
diff --git a/crates/ide-diagnostics/src/lib.rs b/crates/ide-diagnostics/src/lib.rs
index a1db92641f..1530e64652 100644
--- a/crates/ide-diagnostics/src/lib.rs
+++ b/crates/ide-diagnostics/src/lib.rs
@@ -253,7 +253,7 @@ impl DiagnosticsConfig {
style_lints: true,
snippet_cap: SnippetCap::new(true),
insert_use: InsertUseConfig {
- granularity: ImportGranularity::Preserve,
+ granularity: ImportGranularity::Item,
enforce_granularity: false,
prefix_kind: PrefixKind::Plain,
group: false,
diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs
index a88d228fcb..d4805dc1bd 100644
--- a/crates/rust-analyzer/src/config.rs
+++ b/crates/rust-analyzer/src/config.rs
@@ -1944,8 +1944,9 @@ impl Config {
fn insert_use_config(&self, source_root: Option<SourceRootId>) -> InsertUseConfig {
InsertUseConfig {
granularity: match self.imports_granularity_group(source_root) {
- ImportGranularityDef::Preserve => ImportGranularity::Preserve,
- ImportGranularityDef::Item => ImportGranularity::Item,
+ ImportGranularityDef::Item | ImportGranularityDef::Preserve => {
+ ImportGranularity::Item
+ }
ImportGranularityDef::Crate => ImportGranularity::Crate,
ImportGranularityDef::Module => ImportGranularity::Module,
ImportGranularityDef::One => ImportGranularity::One,
@@ -3504,13 +3505,23 @@ fn field_props(field: &str, ty: &str, doc: &[&str], default: &str) -> serde_json
},
"ImportGranularityDef" => set! {
"type": "string",
- "enum": ["preserve", "crate", "module", "item", "one"],
- "enumDescriptions": [
- "Do not change the granularity of any imports and preserve the original structure written by the developer.",
- "Merge imports from the same crate into a single use statement. Conversely, imports from different crates are split into separate statements.",
- "Merge imports from the same module into a single use statement. Conversely, imports from different modules are split into separate statements.",
- "Flatten imports so that each has its own use statement.",
- "Merge all imports into a single use statement as long as they have the same visibility and attributes."
+ "anyOf": [
+ {
+ "enum": ["crate", "module", "item", "one"],
+ "enumDescriptions": [
+ "Merge imports from the same crate into a single use statement. Conversely, imports from different crates are split into separate statements.",
+ "Merge imports from the same module into a single use statement. Conversely, imports from different modules are split into separate statements.",
+ "Flatten imports so that each has its own use statement.",
+ "Merge all imports into a single use statement as long as they have the same visibility and attributes."
+ ],
+ },
+ {
+ "enum": ["preserve"],
+ "enumDescriptions": [
+ "Deprecated - unless `enforceGranularity` is `true`, the style of the current file is preferred over this setting. Behaves like `item`.",
+ ],
+ "deprecated": true,
+ }
],
},
"ImportPrefixDef" => set! {
diff --git a/editors/code/package.json b/editors/code/package.json
index 745e0da4ef..5c75a45ee9 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -2009,19 +2009,30 @@
"markdownDescription": "How imports should be grouped into use statements.",
"default": "crate",
"type": "string",
- "enum": [
- "preserve",
- "crate",
- "module",
- "item",
- "one"
- ],
- "enumDescriptions": [
- "Do not change the granularity of any imports and preserve the original structure written by the developer.",
- "Merge imports from the same crate into a single use statement. Conversely, imports from different crates are split into separate statements.",
- "Merge imports from the same module into a single use statement. Conversely, imports from different modules are split into separate statements.",
- "Flatten imports so that each has its own use statement.",
- "Merge all imports into a single use statement as long as they have the same visibility and attributes."
+ "anyOf": [
+ {
+ "enum": [
+ "crate",
+ "module",
+ "item",
+ "one"
+ ],
+ "enumDescriptions": [
+ "Merge imports from the same crate into a single use statement. Conversely, imports from different crates are split into separate statements.",
+ "Merge imports from the same module into a single use statement. Conversely, imports from different modules are split into separate statements.",
+ "Flatten imports so that each has its own use statement.",
+ "Merge all imports into a single use statement as long as they have the same visibility and attributes."
+ ]
+ },
+ {
+ "enum": [
+ "preserve"
+ ],
+ "enumDescriptions": [
+ "Deprecated - unless `enforceGranularity` is `true`, the style of the current file is preferred over this setting. Behaves like `item`."
+ ],
+ "deprecated": true
+ }
]
}
}