Skip to content

Commit

Permalink
Extract exclusion-inclusion to a helper function
Browse files Browse the repository at this point in the history
  • Loading branch information
dhruvmanila committed Jul 10, 2024
1 parent 83003dc commit 5ad936f
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 80 deletions.
28 changes: 4 additions & 24 deletions crates/ruff_server/src/fix.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ use ruff_linter::{
};
use ruff_notebook::SourceValue;
use ruff_source_file::LineIndex;
use ruff_workspace::resolver::{match_any_exclusion, match_any_inclusion};

use crate::{
edit::{Replacement, ToRangeExt},
resolve::is_document_excluded,
session::DocumentQuery,
PositionEncoding,
};
Expand All @@ -33,32 +33,12 @@ pub(crate) fn fix_all(

// If the document is excluded, return an empty list of fixes.
let package = if let Some(document_path) = document_path.as_ref() {
if let Some(exclusion) = match_any_exclusion(
if is_document_excluded(
document_path,
&file_resolver_settings.exclude,
&file_resolver_settings.extend_exclude,
Some(&linter_settings.exclude),
file_resolver_settings,
Some(linter_settings),
None,
) {
tracing::debug!(
"Ignored path via `{}`: {}",
exclusion,
document_path.display()
);
return Ok(Fixes::default());
}

if let Some(inclusion) = match_any_inclusion(
document_path,
&file_resolver_settings.include,
&file_resolver_settings.extend_include,
) {
tracing::debug!(
"Included path via `{}`: {}",
inclusion,
document_path.display()
);
} else {
return Ok(Fixes::default());
}

Expand Down
1 change: 1 addition & 0 deletions crates/ruff_server/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ mod edit;
mod fix;
mod format;
mod lint;
mod resolve;
mod server;
mod session;
mod trace;
Expand Down
28 changes: 4 additions & 24 deletions crates/ruff_server/src/lint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ use ruff_python_codegen::Stylist;
use ruff_python_index::Indexer;
use ruff_source_file::{LineIndex, Locator};
use ruff_text_size::{Ranged, TextRange};
use ruff_workspace::resolver::{match_any_exclusion, match_any_inclusion};

use crate::{
edit::{NotebookRange, ToRangeExt},
resolve::is_document_excluded,
session::DocumentQuery,
PositionEncoding, DIAGNOSTIC_NAME,
};
Expand Down Expand Up @@ -72,32 +72,12 @@ pub(crate) fn check(

// If the document is excluded, return an empty list of diagnostics.
let package = if let Some(document_path) = document_path.as_ref() {
if let Some(exclusion) = match_any_exclusion(
if is_document_excluded(
document_path,
&file_resolver_settings.exclude,
&file_resolver_settings.extend_exclude,
Some(&linter_settings.exclude),
file_resolver_settings,
Some(linter_settings),
None,
) {
tracing::debug!(
"Ignored path via `{}`: {}",
exclusion,
document_path.display()
);
return DiagnosticsMap::default();
}

if let Some(inclusion) = match_any_inclusion(
document_path,
&file_resolver_settings.include,
&file_resolver_settings.extend_include,
) {
tracing::debug!(
"Included path via `{}`: {}",
inclusion,
document_path.display()
);
} else {
return DiagnosticsMap::default();
}

Expand Down
45 changes: 45 additions & 0 deletions crates/ruff_server/src/resolve.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
use std::path::Path;

use ruff_linter::settings::LinterSettings;
use ruff_workspace::resolver::{match_any_exclusion, match_any_inclusion};
use ruff_workspace::{FileResolverSettings, FormatterSettings};

/// Return `true` if the document at the given [`Path`] should be excluded.
///
/// The tool-specific settings should be provided if the request for the document is specific to
/// that tool. For example, a diagnostics request should provide the linter settings while the
/// formatting request should provide the formatter settings.
///
/// The logic for the resolution considers both inclusion and exclusion and is as follows:
/// 1. Check for global `exclude` and `extend-exclude` options along with tool specific `exclude`
/// option (`lint.exclude`, `format.exclude`).
/// 2. Check for global `include` and `extend-include` options.
pub(crate) fn is_document_excluded(
path: &Path,
resolver_settings: &FileResolverSettings,
linter_settings: Option<&LinterSettings>,
formatter_settings: Option<&FormatterSettings>,
) -> bool {
if let Some(exclusion) = match_any_exclusion(
path,
&resolver_settings.exclude,
&resolver_settings.extend_exclude,
linter_settings.map(|s| &*s.exclude),
formatter_settings.map(|s| &*s.exclude),
) {
tracing::debug!("Ignored path via `{}`: {}", exclusion, path.display());
return true;
}

if let Some(inclusion) = match_any_inclusion(
path,
&resolver_settings.include,
&resolver_settings.extend_include,
) {
tracing::debug!("Included path via `{}`: {}", inclusion, path.display());
false
} else {
// Path is excluded by not being in the inclusion set.
true
}
}
20 changes: 4 additions & 16 deletions crates/ruff_server/src/server/api/requests/format.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ use lsp_types::{self as types, request as req};
use types::TextEdit;

use ruff_source_file::LineIndex;
use ruff_workspace::resolver::{match_any_exclusion, match_any_inclusion};

use crate::edit::{Replacement, ToRangeExt};
use crate::fix::Fixes;
use crate::resolve::is_document_excluded;
use crate::server::api::LSPResult;
use crate::server::{client::Notifier, Result};
use crate::session::{DocumentQuery, DocumentSnapshot};
Expand Down Expand Up @@ -85,24 +85,12 @@ fn format_text_document(

// If the document is excluded, return early.
if let Some(file_path) = query.file_path() {
if let Some(exclusion) = match_any_exclusion(
if is_document_excluded(
&file_path,
&file_resolver_settings.exclude,
&file_resolver_settings.extend_exclude,
file_resolver_settings,
None,
Some(&formatter_settings.exclude),
Some(formatter_settings),
) {
tracing::debug!("Ignored path via `{}`: {}", exclusion, file_path.display());
return Ok(None);
}

if let Some(inclusion) = match_any_inclusion(
&file_path,
&file_resolver_settings.include,
&file_resolver_settings.extend_include,
) {
tracing::debug!("Included path via `{}`: {}", inclusion, file_path.display());
} else {
return Ok(None);
}
}
Expand Down
20 changes: 4 additions & 16 deletions crates/ruff_server/src/server/api/requests/format_range.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use lsp_types::{self as types, request as req, Range};

use ruff_workspace::resolver::{match_any_exclusion, match_any_inclusion};

use crate::edit::{RangeExt, ToRangeExt};
use crate::resolve::is_document_excluded;
use crate::server::api::LSPResult;
use crate::server::{client::Notifier, Result};
use crate::session::{DocumentQuery, DocumentSnapshot};
Expand Down Expand Up @@ -50,24 +50,12 @@ fn format_text_document_range(

// If the document is excluded, return early.
if let Some(file_path) = query.file_path() {
if let Some(exclusion) = match_any_exclusion(
if is_document_excluded(
&file_path,
&file_resolver_settings.exclude,
&file_resolver_settings.extend_exclude,
file_resolver_settings,
None,
Some(&formatter_settings.exclude),
Some(formatter_settings),
) {
tracing::debug!("Ignored path via `{}`: {}", exclusion, file_path.display());
return Ok(None);
}

if let Some(inclusion) = match_any_inclusion(
&file_path,
&file_resolver_settings.include,
&file_resolver_settings.extend_include,
) {
tracing::debug!("Included path via `{}`: {}", inclusion, file_path.display());
} else {
return Ok(None);
}
}
Expand Down

0 comments on commit 5ad936f

Please sign in to comment.