From 51b5c51fa098ee78e387dc804a349f3339f9216d Mon Sep 17 00:00:00 2001 From: Jane Lewis Date: Sun, 21 Apr 2024 18:33:42 -0700 Subject: [PATCH] Implement workspace prioritization setting --- crates/ruff_server/src/session/settings.rs | 27 ++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/crates/ruff_server/src/session/settings.rs b/crates/ruff_server/src/session/settings.rs index b72e7c4664c97e..73b26742124c59 100644 --- a/crates/ruff_server/src/session/settings.rs +++ b/crates/ruff_server/src/session/settings.rs @@ -46,6 +46,7 @@ pub(crate) struct ResolvedEditorSettings { ignore: Option>, exclude: Option>, line_length: Option, + prioritize_file_configuration: bool, } /// This is a direct representation of the settings schema sent by the client. @@ -60,6 +61,7 @@ pub(crate) struct ClientSettings { code_action: Option, exclude: Option>, line_length: Option, + prioritize_file_configuration: Option, } /// This is a direct representation of the workspace settings schema, @@ -259,6 +261,11 @@ impl ResolvedClientSettings { Some(settings.exclude.as_ref()?.clone()) }), line_length: Self::resolve_optional(all_settings, |settings| settings.line_length), + prioritize_file_configuration: Self::resolve_or( + all_settings, + |settings| settings.prioritize_file_configuration, + false, + ), }, } } @@ -324,6 +331,7 @@ impl ResolvedEditorSettings { ignore, exclude, line_length, + prioritize_file_configuration: prioritize_workspace_settings, } = self.clone(); let editor_configuration = Configuration { @@ -354,7 +362,11 @@ impl ResolvedEditorSettings { ..Default::default() }; - let configuration = editor_configuration.combine(project_configuration); + let configuration = if prioritize_workspace_settings { + project_configuration.combine(editor_configuration) + } else { + editor_configuration.combine(project_configuration) + }; configuration.into_settings(project_root) } @@ -441,6 +453,7 @@ mod tests { ), exclude: None, line_length: None, + prioritize_file_configuration: None, }, workspace_settings: [ WorkspaceSettings { @@ -487,6 +500,7 @@ mod tests { ), exclude: None, line_length: None, + prioritize_file_configuration: None, }, workspace: Url { scheme: "file", @@ -546,6 +560,7 @@ mod tests { ), exclude: None, line_length: None, + prioritize_file_configuration: None, }, workspace: Url { scheme: "file", @@ -596,7 +611,8 @@ mod tests { extend_select: None, ignore: None, exclude: None, - line_length: None + line_length: None, + prioritize_file_configuration: false, } } ); @@ -624,7 +640,8 @@ mod tests { extend_select: None, ignore: None, exclude: None, - line_length: None + line_length: None, + prioritize_file_configuration: false, } } ); @@ -678,6 +695,7 @@ mod tests { 80, ), ), + prioritize_file_configuration: None, }, ), } @@ -706,7 +724,8 @@ mod tests { extend_select: None, ignore: Some(vec![RuleSelector::from_str("RUF001").unwrap()]), exclude: Some(vec!["third_party".into()]), - line_length: Some(LineLength::try_from(80).unwrap()) + line_length: Some(LineLength::try_from(80).unwrap()), + prioritize_file_configuration: false, } } );