Skip to content

Commit

Permalink
fix(fmt): ignore file directive for YAML files (#26717)
Browse files Browse the repository at this point in the history
Closes #26712

Support `# deno-fmt-ignore-file` directive for YAML files.

Also added tests for single line ignores.
  • Loading branch information
bartlomieju committed Nov 5, 2024
1 parent 1bdecc8 commit a119ead
Show file tree
Hide file tree
Showing 9 changed files with 64 additions and 0 deletions.
15 changes: 15 additions & 0 deletions cli/tools/fmt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,21 @@ fn format_yaml(
file_text: &str,
fmt_options: &FmtOptionsConfig,
) -> Result<Option<String>, AnyError> {
let ignore_file = file_text
.lines()
.take_while(|line| line.starts_with('#'))
.any(|line| {
line
.strip_prefix('#')
.unwrap()
.trim()
.starts_with("deno-fmt-ignore-file")
});

if ignore_file {
return Ok(None);
}

let formatted_str =
pretty_yaml::format_text(file_text, &get_resolved_yaml_config(fmt_options))
.map_err(AnyError::from)?;
Expand Down
24 changes: 24 additions & 0 deletions tests/specs/fmt/yaml/__test__.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,30 @@
"well_formatted": {
"args": "fmt --check well_formatted.yml",
"output": "Checked 1 file\n"
},
"ignore_line": {
"args": "fmt --check ignore_line.yml",
"output": "Checked 1 file\n"
},
"ignore_file": {
"args": "fmt ignore_file.yaml",
"output": "Checked 1 file\n"
},
"ignore_file2": {
"args": "fmt ignore_file2.yaml",
"output": "Checked 1 file\n"
},
"ignore_file3": {
"args": "fmt ignore_file3.yaml",
"output": "Checked 1 file\n"
},
"ignore_file4": {
"args": "fmt ignore_file4.yaml",
"output": "Checked 1 file\n"
},
"wrong_file_ignore": {
"args": "fmt wrong_file_ignore.yaml",
"output": "wrong_file_ignore.out"
}
}
}
2 changes: 2 additions & 0 deletions tests/specs/fmt/yaml/ignore_file.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# deno-fmt-ignore-file
{{something crazy
2 changes: 2 additions & 0 deletions tests/specs/fmt/yaml/ignore_file2.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#deno-fmt-ignore-file
{{something crazy
5 changes: 5 additions & 0 deletions tests/specs/fmt/yaml/ignore_file3.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
# incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
# quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
# deno-fmt-ignore-file
{{something crazy
2 changes: 2 additions & 0 deletions tests/specs/fmt/yaml/ignore_file4.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# deno-fmt-ignore-file Because this is templated yaml file
{{something crazy
2 changes: 2 additions & 0 deletions tests/specs/fmt/yaml/ignore_line.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# deno-fmt-ignore
- Test
7 changes: 7 additions & 0 deletions tests/specs/fmt/yaml/wrong_file_ignore.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Error formatting: [WILDCARD]wrong_file_ignore.yaml
parse error at line 5, column 1
|
5 | {{something crazy
| ^

Checked 1 file
5 changes: 5 additions & 0 deletions tests/specs/fmt/yaml/wrong_file_ignore.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# File ignore directive only works if it's in the first cluster
# of comment, ie. there are no empty lines after the first n-leading lines.

# deno-fmt-ignore-file
{{something crazy

0 comments on commit a119ead

Please sign in to comment.