diff --git a/crates/ruff_server/src/session/settings.rs b/crates/ruff_server/src/session/settings.rs index fdb6f4d22bf804..4ee8d8524f783b 100644 --- a/crates/ruff_server/src/session/settings.rs +++ b/crates/ruff_server/src/session/settings.rs @@ -38,22 +38,23 @@ pub(crate) struct ResolvedEditorSettings { pub(super) ignore: Option>, pub(super) exclude: Option>, pub(super) line_length: Option, - pub(super) configuration_resolution_strategy: ConfigResolutionStrategy, + pub(super) configuration_preference: ConfigurationPreference, } /// Determines how multiple conflicting configurations should be resolved - in this /// case, the configuration from the client settings and configuration from local /// `.toml` files (aka 'workspace' configuration). -#[derive(Clone, Copy, Debug, Deserialize)] +#[derive(Clone, Copy, Debug, Deserialize, Default)] #[cfg_attr(test, derive(PartialEq, Eq))] #[serde(rename_all = "camelCase")] -pub(crate) enum ConfigResolutionStrategy { - /// The default strategy - configuration set in the editor takes priority over - /// workspace configuration set in `.toml` files. - Default, - /// An alternative strategy - configuration set in `.toml` files takes priority - /// over configuration set in the editor. - PrioritizeWorkspace, +pub(crate) enum ConfigurationPreference { + /// Configuration set in the editor takes priority over workspace configuration set in `.toml` files. + #[default] + EditorFirst, + /// Configuration set in `.toml` files takes priority over configuration set in the editor. + FilesystemFirst, + /// `.toml` files are ignored completely, and only the editor configuration is used. + EditorOnly, } /// This is a direct representation of the settings schema sent by the client. @@ -68,7 +69,7 @@ pub(crate) struct ClientSettings { code_action: Option, exclude: Option>, line_length: Option, - configuration_resolution_strategy: Option, + configuration_preference: Option, } /// This is a direct representation of the workspace settings schema, @@ -268,10 +269,10 @@ impl ResolvedClientSettings { Some(settings.exclude.as_ref()?.clone()) }), line_length: Self::resolve_optional(all_settings, |settings| settings.line_length), - configuration_resolution_strategy: Self::resolve_or( + configuration_preference: Self::resolve_or( all_settings, - |settings| settings.configuration_resolution_strategy, - ConfigResolutionStrategy::Default, + |settings| settings.configuration_preference, + ConfigurationPreference::EditorFirst, ), }, } @@ -405,7 +406,7 @@ mod tests { ), exclude: None, line_length: None, - configuration_resolution_strategy: None, + configuration_preference: None, }, workspace_settings: [ WorkspaceSettings { @@ -452,7 +453,7 @@ mod tests { ), exclude: None, line_length: None, - configuration_resolution_strategy: None, + configuration_preference: None, }, workspace: Url { scheme: "file", @@ -512,7 +513,7 @@ mod tests { ), exclude: None, line_length: None, - configuration_resolution_strategy: None, + configuration_preference: None, }, workspace: Url { scheme: "file", @@ -564,7 +565,7 @@ mod tests { ignore: None, exclude: None, line_length: None, - configuration_resolution_strategy: ConfigResolutionStrategy::Default, + configuration_preference: ConfigurationPreference::EditorFirst, } } ); @@ -593,7 +594,7 @@ mod tests { ignore: None, exclude: None, line_length: None, - configuration_resolution_strategy: ConfigResolutionStrategy::Default, + configuration_preference: ConfigurationPreference::EditorFirst, } } ); @@ -647,7 +648,7 @@ mod tests { 80, ), ), - configuration_resolution_strategy: None, + configuration_preference: None, }, ), } @@ -677,7 +678,7 @@ mod tests { ignore: Some(vec![RuleSelector::from_str("RUF001").unwrap()]), exclude: Some(vec!["third_party".into()]), line_length: Some(LineLength::try_from(80).unwrap()), - configuration_resolution_strategy: ConfigResolutionStrategy::Default, + configuration_preference: ConfigurationPreference::EditorFirst, } } ); diff --git a/crates/ruff_server/src/session/workspace/ruff_settings.rs b/crates/ruff_server/src/session/workspace/ruff_settings.rs index 70b5a02cb711b1..c8da8f3de4d6ae 100644 --- a/crates/ruff_server/src/session/workspace/ruff_settings.rs +++ b/crates/ruff_server/src/session/workspace/ruff_settings.rs @@ -14,7 +14,7 @@ use std::{ }; use walkdir::{DirEntry, WalkDir}; -use crate::session::settings::{ConfigResolutionStrategy, ResolvedEditorSettings}; +use crate::session::settings::{ConfigurationPreference, ResolvedEditorSettings}; #[derive(Default)] pub(crate) struct RuffSettings { @@ -107,7 +107,7 @@ struct EditorConfigurationTransformer<'a>(&'a ResolvedEditorSettings, &'a Path); impl<'a> ConfigurationTransformer for EditorConfigurationTransformer<'a> { fn transform( &self, - project_configuration: ruff_workspace::configuration::Configuration, + filesystem_configuration: ruff_workspace::configuration::Configuration, ) -> ruff_workspace::configuration::Configuration { let ResolvedEditorSettings { format_preview, @@ -117,7 +117,7 @@ impl<'a> ConfigurationTransformer for EditorConfigurationTransformer<'a> { ignore, exclude, line_length, - configuration_resolution_strategy, + configuration_preference, } = self.0.clone(); let project_root = self.1; @@ -150,13 +150,14 @@ impl<'a> ConfigurationTransformer for EditorConfigurationTransformer<'a> { ..Default::default() }; - match configuration_resolution_strategy { - ConfigResolutionStrategy::Default => { - editor_configuration.combine(project_configuration) + match configuration_preference { + ConfigurationPreference::EditorFirst => { + editor_configuration.combine(filesystem_configuration) } - ConfigResolutionStrategy::PrioritizeWorkspace => { - project_configuration.combine(editor_configuration) + ConfigurationPreference::FilesystemFirst => { + filesystem_configuration.combine(editor_configuration) } + ConfigurationPreference::EditorOnly => editor_configuration, } } }