Skip to content

Commit

Permalink
Collect errors while building up the settings index
Browse files Browse the repository at this point in the history
  • Loading branch information
dhruvmanila committed Aug 12, 2024
1 parent 2abfab0 commit b3bc35d
Showing 1 changed file with 80 additions and 39 deletions.
119 changes: 80 additions & 39 deletions crates/ruff_server/src/session/index/ruff_settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,32 +99,49 @@ impl RuffSettings {

impl RuffSettingsIndex {
pub(super) fn new(root: &Path, editor_settings: &ResolvedEditorSettings) -> Self {
let mut error = false;
let mut index = BTreeMap::default();
let mut respect_gitignore = None;

// Add any settings from above the workspace root.
for directory in root.ancestors() {
if let Some(pyproject) = settings_toml(directory).ok().flatten() {
let Ok(settings) = ruff_workspace::resolver::resolve_root_settings(
&pyproject,
Relativity::Parent,
&EditorConfigurationTransformer(editor_settings, root),
) else {
// Add any settings from above the workspace root, excluding the workspace root itself.
for directory in root.ancestors().skip(1) {
match settings_toml(directory) {
Ok(Some(pyproject)) => {
match ruff_workspace::resolver::resolve_root_settings(
&pyproject,
Relativity::Parent,
&EditorConfigurationTransformer(editor_settings, root),
) {
Ok(settings) => {
respect_gitignore = Some(settings.file_resolver.respect_gitignore);

index.insert(
directory.to_path_buf(),
Arc::new(RuffSettings {
path: Some(pyproject),
file_resolver: settings.file_resolver,
linter: settings.linter,
formatter: settings.formatter,
}),
);
break;
}
Err(err) => {
tracing::error!(
"Error while resolving settings from {}: {err}",
pyproject.display()
);
error = true;
continue;
}
}
}
Ok(None) => continue,
Err(err) => {
tracing::error!("{err}");
error = true;
continue;
};

respect_gitignore = Some(settings.file_resolver.respect_gitignore);

index.insert(
directory.to_path_buf(),
Arc::new(RuffSettings {
path: Some(pyproject),
file_resolver: settings.file_resolver,
linter: settings.linter,
formatter: settings.formatter,
}),
);
break;
}
}
}

Expand All @@ -144,6 +161,8 @@ impl RuffSettingsIndex {
let walker = builder.build_parallel();

let index = std::sync::RwLock::new(index);
let error: std::sync::Mutex<bool> = std::sync::Mutex::new(error);

walker.run(|| {
Box::new(|result| {
let Ok(entry) = result else {
Expand Down Expand Up @@ -186,29 +205,51 @@ impl RuffSettingsIndex {
}
}

if let Some(pyproject) = settings_toml(&directory).ok().flatten() {
let Ok(settings) = ruff_workspace::resolver::resolve_root_settings(
&pyproject,
Relativity::Parent,
&EditorConfigurationTransformer(editor_settings, root),
) else {
return WalkState::Continue;
};
index.write().unwrap().insert(
directory,
Arc::new(RuffSettings {
path: Some(pyproject),
file_resolver: settings.file_resolver,
linter: settings.linter,
formatter: settings.formatter,
}),
);
match settings_toml(&directory) {
Ok(Some(pyproject)) => {
match ruff_workspace::resolver::resolve_root_settings(
&pyproject,
Relativity::Parent,
&EditorConfigurationTransformer(editor_settings, root),
) {
Ok(settings) => {
index.write().unwrap().insert(
directory,
Arc::new(RuffSettings {
path: Some(pyproject),
file_resolver: settings.file_resolver,
linter: settings.linter,
formatter: settings.formatter,
}),
);
}
Err(err) => {
tracing::error!(
"Error while resolving settings from {}: {err}",
pyproject.display()
);
*error.lock().unwrap() = true;
}
}
}
Ok(None) => {}
Err(err) => {
tracing::error!("{err}");
*error.lock().unwrap() = true;
}
}

WalkState::Continue
})
});

if *error.lock().unwrap() {
let root = root.display();
show_err_msg!(
"Error while resolving settings from workspace {root}. Please refer to the logs for more details.",
);
}

Self {
index: index.into_inner().unwrap(),
fallback,
Expand Down

0 comments on commit b3bc35d

Please sign in to comment.