diff --git a/crates/ruff_server/src/session/index/ruff_settings.rs b/crates/ruff_server/src/session/index/ruff_settings.rs index e54b16020bc3f2..628b6eddce9b9b 100644 --- a/crates/ruff_server/src/session/index/ruff_settings.rs +++ b/crates/ruff_server/src/session/index/ruff_settings.rs @@ -82,6 +82,32 @@ impl RuffSettingsIndex { pub(super) fn new(root: &Path, editor_settings: &ResolvedEditorSettings) -> Self { let mut index = BTreeMap::default(); + // Add any settings from above the workspace root. + for directory in root.ancestors() { + if let Some(pyproject) = settings_toml(directory).ok().flatten() { + if index.contains_key(&pyproject) { + continue; + } + + let Ok(settings) = ruff_workspace::resolver::resolve_root_settings( + &pyproject, + Relativity::Parent, + &EditorConfigurationTransformer(editor_settings, root), + ) else { + continue; + }; + index.insert( + directory.to_path_buf(), + Arc::new(RuffSettings { + linter: settings.linter, + formatter: settings.formatter, + }), + ); + break; + } + } + + // Add any settings within the workspace itself. for directory in WalkDir::new(root) .into_iter() .filter_map(Result::ok) @@ -89,6 +115,10 @@ impl RuffSettingsIndex { .map(DirEntry::into_path) { if let Some(pyproject) = settings_toml(&directory).ok().flatten() { + if index.contains_key(&pyproject) { + continue; + } + let Ok(settings) = ruff_workspace::resolver::resolve_root_settings( &pyproject, Relativity::Parent,