Skip to content

Commit

Permalink
fix(project): correctly ignore folders (#2147)
Browse files Browse the repository at this point in the history
  • Loading branch information
ematipico authored Mar 21, 2024
1 parent 4a34e6f commit cd0bae1
Show file tree
Hide file tree
Showing 17 changed files with 247 additions and 33 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ our [guidelines for writing a good changelog entry](https://github.com/biomejs/b

### CLI

#### Bug fixes

- Fixes [#2131](https://github.com/biomejs/biome/issues/2131), where folders were incorrectly ignored when running the command `check`. Now folders are correctly ignored based on their command. Contributed by @ematipico

### Configuration

#### Bug fixes
Expand Down
14 changes: 10 additions & 4 deletions crates/biome_cli/src/execute/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use crate::execute::traverse::traverse;
use crate::{CliDiagnostic, CliSession};
use biome_diagnostics::{category, Category};
use biome_fs::BiomePath;
use biome_service::workspace::{FeatureName, FixFileMode};
use biome_service::workspace::{FeatureName, FeaturesBuilder, FixFileMode};
use std::ffi::OsString;
use std::fmt::{Display, Formatter};
use std::path::{Path, PathBuf};
Expand All @@ -28,10 +28,16 @@ pub(crate) struct Execution {
}

impl Execution {
pub(crate) fn as_feature_name(&self) -> FeatureName {
pub(crate) fn to_features(&self) -> Vec<FeatureName> {
match self.traversal_mode {
TraversalMode::Format { .. } => FeatureName::Format,
_ => FeatureName::Lint,
TraversalMode::Format { .. } => FeaturesBuilder::new().with_formatter().build(),
TraversalMode::Lint { .. } => FeaturesBuilder::new().with_linter().build(),
TraversalMode::Check { .. } | TraversalMode::CI { .. } => FeaturesBuilder::new()
.with_organize_imports()
.with_formatter()
.with_linter()
.build(),
TraversalMode::Migrate { .. } => vec![],
}
}
}
Expand Down
8 changes: 2 additions & 6 deletions crates/biome_cli/src/execute/process_file.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use crate::execute::traverse::TraversalOptions;
use crate::execute::TraversalMode;
use biome_diagnostics::{category, DiagnosticExt, DiagnosticTags, Error};
use biome_fs::BiomePath;
use biome_service::workspace::{FeatureName, FeaturesBuilder, SupportKind, SupportsFeatureParams};
use biome_service::workspace::{FeatureName, SupportKind, SupportsFeatureParams};
use std::marker::PhantomData;
use std::ops::Deref;
use std::path::Path;
Expand Down Expand Up @@ -132,11 +132,7 @@ pub(crate) fn process_file(ctx: &TraversalOptions, path: &Path) -> FileResult {
.workspace
.file_features(SupportsFeatureParams {
path: biome_path,
feature: FeaturesBuilder::new()
.with_formatter()
.with_linter()
.with_organize_imports()
.build(),
features: ctx.execution.to_features(),
})
.with_file_path_and_code_and_tags(
path.display().to_string(),
Expand Down
4 changes: 2 additions & 2 deletions crates/biome_cli/src/execute/std_in.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ pub(crate) fn run<'a>(
if mode.is_format() {
let file_features = workspace.file_features(SupportsFeatureParams {
path: biome_path.clone(),
feature: FeaturesBuilder::new().with_formatter().build(),
features: FeaturesBuilder::new().with_formatter().build(),
})?;
if file_features.is_protected() {
let protected_diagnostic =
Expand Down Expand Up @@ -76,7 +76,7 @@ pub(crate) fn run<'a>(
// apply fix file of the linter
let file_features = workspace.file_features(SupportsFeatureParams {
path: biome_path.clone(),
feature: FeaturesBuilder::new()
features: FeaturesBuilder::new()
.with_linter()
.with_organize_imports()
.with_formatter()
Expand Down
10 changes: 3 additions & 7 deletions crates/biome_cli/src/execute/traverse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use biome_diagnostics::PrintGitHubDiagnostic;
use biome_diagnostics::{category, DiagnosticExt, Error, PrintDiagnostic, Resource, Severity};
use biome_fs::{BiomePath, FileSystem, PathInterner};
use biome_fs::{TraversalContext, TraversalScope};
use biome_service::workspace::{FeaturesBuilder, IsPathIgnoredParams};
use biome_service::workspace::IsPathIgnoredParams;
use biome_service::{extension_error, workspace::SupportsFeatureParams, Workspace, WorkspaceError};
use crossbeam::channel::{unbounded, Receiver, Sender};
use rustc_hash::FxHashSet;
Expand Down Expand Up @@ -702,7 +702,7 @@ impl<'ctx, 'app> TraversalContext for TraversalOptions<'ctx, 'app> {
.workspace
.is_path_ignored(IsPathIgnoredParams {
biome_path: biome_path.clone(),
feature: self.execution.as_feature_name(),
features: self.execution.to_features(),
})
.unwrap_or_else(|err| {
self.push_diagnostic(err.into());
Expand All @@ -713,11 +713,7 @@ impl<'ctx, 'app> TraversalContext for TraversalOptions<'ctx, 'app> {

let file_features = self.workspace.file_features(SupportsFeatureParams {
path: biome_path.clone(),
feature: FeaturesBuilder::new()
.with_linter()
.with_formatter()
.with_organize_imports()
.build(),
features: self.execution.to_features(),
});

let file_features = match file_features {
Expand Down
49 changes: 49 additions & 0 deletions crates/biome_cli/tests/commands/check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2797,3 +2797,52 @@ fn use_literal_keys_should_emit_correct_ast_issue_266() {
result,
));
}

#[test]
fn should_show_formatter_diagnostics_for_files_ignored_by_linter() {
let mut fs = MemoryFileSystem::default();
let mut console = BufferConsole::default();

let file_path = Path::new("build/file.js");
fs.insert(
file_path.into(),
r#"
value['optimizelyService'] = optimizelyService;
"#,
);

let biome_json = Path::new("biome.json");
fs.insert(
biome_json.into(),
r#"{
"$schema": "https://biomejs.dev/schemas/1.6.1/schema.json",
"organizeImports": {
"enabled": true
},
"linter": {
"ignore": ["build/**"],
"enabled": true,
"rules": {
"recommended": true
}
}
}
"#,
);

let result = run_cli(
DynRef::Borrowed(&mut fs),
&mut console,
Args::from([("check"), file_path.as_os_str().to_str().unwrap()].as_slice()),
);

assert!(result.is_err(), "run_cli returned {result:?}");

assert_cli_snapshot(SnapshotPayload::new(
module_path!(),
"should_show_formatter_diagnostics_for_files_ignored_by_linter",
fs,
console,
result,
));
}
56 changes: 56 additions & 0 deletions crates/biome_cli/tests/commands/format.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3461,3 +3461,59 @@ fn format_empty_svelte_ts_files_write() {
result,
));
}

#[test]
fn should_format_files_in_folders_ignored_by_linter() {
let mut fs = MemoryFileSystem::default();
let mut console = BufferConsole::default();

let file_path = Path::new("build/file.js");
fs.insert(
file_path.into(),
r#"
value['optimizelyService'] = optimizelyService;
"#,
);

let biome_json = Path::new("biome.json");
fs.insert(
biome_json.into(),
r#"{
"$schema": "https://biomejs.dev/schemas/1.6.1/schema.json",
"organizeImports": {
"enabled": true
},
"linter": {
"ignore": ["**/build"],
"enabled": true,
"rules": {
"recommended": true
}
}
}
"#,
);

let result = run_cli(
DynRef::Borrowed(&mut fs),
&mut console,
Args::from(
[
("format"),
"--write",
file_path.as_os_str().to_str().unwrap(),
]
.as_slice(),
),
);

assert!(result.is_ok(), "run_cli returned {result:?}");

assert_cli_snapshot(SnapshotPayload::new(
module_path!(),
"should_format_files_in_folders_ignored_by_linter",
fs,
console,
result,
));
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
source: crates/biome_cli/tests/snap_test.rs
expression: content
---
## `biome.json`

```json
{
"$schema": "https://biomejs.dev/schemas/1.6.1/schema.json",
"organizeImports": {
"enabled": true
},
"linter": {
"ignore": ["build/**"],
"enabled": true,
"rules": {
"recommended": true
}
}
}
```

## `build/file.js`

```js

value['optimizelyService'] = optimizelyService;

```

# Termination Message

```block
check ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Some errors were emitted while running checks.
```

# Emitted Messages

```block
build/file.js format ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
i Formatter would have printed the following content:
1 │ -
2 │ - → value['optimizelyService']·=·optimizelyService;
3 │ - → →
1 │ + value["optimizelyService"]·=·optimizelyService;
2 │ +
```

```block
Checked 1 file in <TIME>. No fixes needed.
Found 2 errors.
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
source: crates/biome_cli/tests/snap_test.rs
expression: content
---
## `biome.json`

```json
{
"$schema": "https://biomejs.dev/schemas/1.6.1/schema.json",
"organizeImports": {
"enabled": true
},
"linter": {
"ignore": ["**/build"],
"enabled": true,
"rules": {
"recommended": true
}
}
}
```

## `build/file.js`

```js
value["optimizelyService"] = optimizelyService;

```

# Emitted Messages

```block
Formatted 1 file in <TIME>. Fixed 1 file.
```
2 changes: 1 addition & 1 deletion crates/biome_formatter_test/src/spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ impl<'a> SpecTestFile<'a> {
.workspace
.file_features(SupportsFeatureParams {
path: input_file.clone(),
feature: FeaturesBuilder::new().with_formatter().build(),
features: FeaturesBuilder::new().with_formatter().build(),
})
.unwrap();

Expand Down
4 changes: 2 additions & 2 deletions crates/biome_lsp/src/handlers/analysis.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ pub(crate) fn code_actions(

let file_features = &session.workspace.file_features(SupportsFeatureParams {
path: biome_path,
feature: FeaturesBuilder::new()
features: FeaturesBuilder::new()
.with_linter()
.with_organize_imports()
.build(),
Expand Down Expand Up @@ -208,7 +208,7 @@ fn fix_all(
.workspace
.file_features(SupportsFeatureParams {
path: biome_path.clone(),
feature: vec![FeatureName::Format],
features: vec![FeatureName::Format],
})?
.supports_format();
let fixed = session.workspace.fix_file(FixFileParams {
Expand Down
6 changes: 3 additions & 3 deletions crates/biome_lsp/src/handlers/formatting.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ pub(crate) fn format(

let file_features = session.workspace.file_features(SupportsFeatureParams {
path: biome_path.clone(),
feature: FeaturesBuilder::new().with_formatter().build(),
features: FeaturesBuilder::new().with_formatter().build(),
})?;

if file_features.supports_format() {
Expand Down Expand Up @@ -85,7 +85,7 @@ pub(crate) fn format_range(

let file_features = session.workspace.file_features(SupportsFeatureParams {
path: biome_path.clone(),
feature: FeaturesBuilder::new().with_formatter().build(),
features: FeaturesBuilder::new().with_formatter().build(),
})?;

if file_features.supports_format() {
Expand Down Expand Up @@ -141,7 +141,7 @@ pub(crate) fn format_on_type(

let file_features = session.workspace.file_features(SupportsFeatureParams {
path: biome_path.clone(),
feature: FeaturesBuilder::new().with_formatter().build(),
features: FeaturesBuilder::new().with_formatter().build(),
})?;

if file_features.supports_format() {
Expand Down
2 changes: 1 addition & 1 deletion crates/biome_lsp/src/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ impl Session {
let biome_path = self.file_path(&url)?;
let doc = self.document(&url)?;
let file_features = self.workspace.file_features(SupportsFeatureParams {
feature: FeaturesBuilder::new()
features: FeaturesBuilder::new()
.with_linter()
.with_organize_imports()
.build(),
Expand Down
Loading

0 comments on commit cd0bae1

Please sign in to comment.