summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2024-11-04 17:57:29 +0000
committerGitHub <noreply@github.com>2024-11-04 17:57:29 +0000
commit9a39a98b57de4183e054ab170592c85c97fac183 (patch)
treeec13c5963d56f506d4111e9447d804d0214f2331
parentfe9f0ee5934871175758857899fe64e56c397fd5 (diff)
fix(fmt): ignore file directive for YAML files (#26717)
Closes https://github.com/denoland/deno/issues/26712 Support `# deno-fmt-ignore-file` directive for YAML files. Also added tests for single line ignores.
-rw-r--r--cli/tools/fmt.rs15
-rw-r--r--tests/specs/fmt/yaml/__test__.jsonc24
-rw-r--r--tests/specs/fmt/yaml/ignore_file.yaml2
-rw-r--r--tests/specs/fmt/yaml/ignore_file2.yaml2
-rw-r--r--tests/specs/fmt/yaml/ignore_file3.yaml5
-rw-r--r--tests/specs/fmt/yaml/ignore_file4.yaml2
-rw-r--r--tests/specs/fmt/yaml/ignore_line.yml2
-rw-r--r--tests/specs/fmt/yaml/wrong_file_ignore.out7
-rw-r--r--tests/specs/fmt/yaml/wrong_file_ignore.yaml5
9 files changed, 64 insertions, 0 deletions
diff --git a/cli/tools/fmt.rs b/cli/tools/fmt.rs
index 81af25c34..837883561 100644
--- a/cli/tools/fmt.rs
+++ b/cli/tools/fmt.rs
@@ -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)?;
diff --git a/tests/specs/fmt/yaml/__test__.jsonc b/tests/specs/fmt/yaml/__test__.jsonc
index 499b4144b..71a2e0682 100644
--- a/tests/specs/fmt/yaml/__test__.jsonc
+++ b/tests/specs/fmt/yaml/__test__.jsonc
@@ -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"
}
}
}
diff --git a/tests/specs/fmt/yaml/ignore_file.yaml b/tests/specs/fmt/yaml/ignore_file.yaml
new file mode 100644
index 000000000..c724c7bde
--- /dev/null
+++ b/tests/specs/fmt/yaml/ignore_file.yaml
@@ -0,0 +1,2 @@
+# deno-fmt-ignore-file
+{{something crazy \ No newline at end of file
diff --git a/tests/specs/fmt/yaml/ignore_file2.yaml b/tests/specs/fmt/yaml/ignore_file2.yaml
new file mode 100644
index 000000000..a2053533e
--- /dev/null
+++ b/tests/specs/fmt/yaml/ignore_file2.yaml
@@ -0,0 +1,2 @@
+#deno-fmt-ignore-file
+{{something crazy \ No newline at end of file
diff --git a/tests/specs/fmt/yaml/ignore_file3.yaml b/tests/specs/fmt/yaml/ignore_file3.yaml
new file mode 100644
index 000000000..a3927a7b1
--- /dev/null
+++ b/tests/specs/fmt/yaml/ignore_file3.yaml
@@ -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 \ No newline at end of file
diff --git a/tests/specs/fmt/yaml/ignore_file4.yaml b/tests/specs/fmt/yaml/ignore_file4.yaml
new file mode 100644
index 000000000..c32fe9f2b
--- /dev/null
+++ b/tests/specs/fmt/yaml/ignore_file4.yaml
@@ -0,0 +1,2 @@
+# deno-fmt-ignore-file Because this is templated yaml file
+{{something crazy \ No newline at end of file
diff --git a/tests/specs/fmt/yaml/ignore_line.yml b/tests/specs/fmt/yaml/ignore_line.yml
new file mode 100644
index 000000000..490adcb5f
--- /dev/null
+++ b/tests/specs/fmt/yaml/ignore_line.yml
@@ -0,0 +1,2 @@
+# deno-fmt-ignore
+- Test
diff --git a/tests/specs/fmt/yaml/wrong_file_ignore.out b/tests/specs/fmt/yaml/wrong_file_ignore.out
new file mode 100644
index 000000000..065dc98db
--- /dev/null
+++ b/tests/specs/fmt/yaml/wrong_file_ignore.out
@@ -0,0 +1,7 @@
+Error formatting: [WILDCARD]wrong_file_ignore.yaml
+ parse error at line 5, column 1
+ |
+5 | {{something crazy
+ | ^
+
+Checked 1 file
diff --git a/tests/specs/fmt/yaml/wrong_file_ignore.yaml b/tests/specs/fmt/yaml/wrong_file_ignore.yaml
new file mode 100644
index 000000000..8019d989d
--- /dev/null
+++ b/tests/specs/fmt/yaml/wrong_file_ignore.yaml
@@ -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 \ No newline at end of file