From 5fd9f6c7b9944638e4781e3d9384638942f84456 Mon Sep 17 00:00:00 2001 From: Lukas Tobias Wirth Date: Tue, 18 May 2021 20:21:47 +0200 Subject: Add ImportGranularity::Guess --- crates/ide_db/src/helpers/insert_use.rs | 16 ++++------------ crates/rust-analyzer/src/config.rs | 6 ++++-- editors/code/package.json | 4 +++- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/crates/ide_db/src/helpers/insert_use.rs b/crates/ide_db/src/helpers/insert_use.rs index 4852121a1..1fdd110cc 100644 --- a/crates/ide_db/src/helpers/insert_use.rs +++ b/crates/ide_db/src/helpers/insert_use.rs @@ -18,6 +18,8 @@ pub use hir::PrefixKind; /// How imports should be grouped into use statements. #[derive(Copy, Clone, Debug, PartialEq, Eq)] pub enum ImportGranularity { + /// Try to guess the granularity of imports on a per module basis by observing the existing imports. + Guess, /// 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. @@ -28,16 +30,6 @@ pub enum ImportGranularity { Item, } -impl ImportGranularity { - pub fn merge_behavior(self) -> Option { - match self { - ImportGranularity::Crate => Some(MergeBehavior::Crate), - ImportGranularity::Module => Some(MergeBehavior::Module), - ImportGranularity::Preserve | ImportGranularity::Item => None, - } - } -} - #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct InsertUseConfig { pub granularity: ImportGranularity, @@ -118,10 +110,10 @@ impl ImportScope { pub fn insert_use<'a>(scope: &ImportScope, path: ast::Path, cfg: InsertUseConfig) { let _p = profile::span("insert_use"); let mb = match cfg.granularity { - ImportGranularity::Preserve => scope.guess_merge_behavior_from_scope(), + ImportGranularity::Guess => scope.guess_merge_behavior_from_scope(), ImportGranularity::Crate => Some(MergeBehavior::Crate), ImportGranularity::Module => Some(MergeBehavior::Module), - ImportGranularity::Item => None, + ImportGranularity::Item | ImportGranularity::Preserve => None, }; let use_item = diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index e72387257..a34ca97ac 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs @@ -36,7 +36,7 @@ config_data! { /// The strategy to use when inserting new imports or merging imports. assist_importGranularity | assist_importMergeBehavior | - assist_importMergeBehaviour: ImportGranularityDef = "\"preserve\"", + assist_importMergeBehaviour: ImportGranularityDef = "\"guess\"", /// 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. @@ -610,6 +610,7 @@ impl Config { fn insert_use_config(&self) -> InsertUseConfig { InsertUseConfig { granularity: match self.data.assist_importGranularity { + ImportGranularityDef::Guess => ImportGranularity::Guess, ImportGranularityDef::Preserve => ImportGranularity::Preserve, ImportGranularityDef::Item => ImportGranularity::Item, ImportGranularityDef::Crate => ImportGranularity::Crate, @@ -719,9 +720,10 @@ enum ManifestOrProjectJson { #[derive(Deserialize, Debug, Clone)] #[serde(rename_all = "snake_case")] enum ImportGranularityDef { + Preserve, + Guess, #[serde(alias = "none")] Item, - Preserve, #[serde(alias = "full")] Crate, #[serde(alias = "last")] diff --git a/editors/code/package.json b/editors/code/package.json index 81179ff9b..06ce86987 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -387,15 +387,17 @@ "$generated-start": false, "rust-analyzer.assist.importGranularity": { "markdownDescription": "How imports should be grouped into use statements.", - "default": "preserve", + "default": "guess", "type": "string", "enum": [ + "guess", "preserve", "crate", "module", "item" ], "enumDescriptions": [ + "Try to guess the granularity of imports on a per module basis by observing the existing imports.", "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.", -- cgit v1.2.3