summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilfred Hughes <me@wilfred.me.uk>2023-03-03 00:23:25 -0800
committerWilfred Hughes <me@wilfred.me.uk>2023-03-03 00:25:41 -0800
commit2d1a2c906e03720c9f74999a80af0ca84b707b29 (patch)
tree7cb93d2c6625c1b5b58426803ad63306b18b4c37
parent045d6a2c5813cf08d30a86c827246b2cb63bea07 (diff)
Count errors on the root node too0.45.0
Fixes #377
-rw-r--r--CHANGELOG.md3
-rw-r--r--sample_files/cli_tests/bad_yaml_after.yml5
-rw-r--r--sample_files/cli_tests/bad_yaml_before.yml3
-rw-r--r--src/parse/tree_sitter_parser.rs6
-rw-r--r--tests/cli.rs13
5 files changed, 29 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 434f4f5c6..d3a01e275 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,9 @@ parenthesis heuristics.
### Parsing
+Fixed an issue where parse errors were undercounted, particularly in
+YAML files.
+
Improved parsing for Makefiles.
## 0.44 (released 2nd March 2023)
diff --git a/sample_files/cli_tests/bad_yaml_after.yml b/sample_files/cli_tests/bad_yaml_after.yml
new file mode 100644
index 000000000..ccdff00da
--- /dev/null
+++ b/sample_files/cli_tests/bad_yaml_after.yml
@@ -0,0 +1,5 @@
+key1:
+- key2:
+ {{ helm-expression }}
+
+new_key: yes
diff --git a/sample_files/cli_tests/bad_yaml_before.yml b/sample_files/cli_tests/bad_yaml_before.yml
new file mode 100644
index 000000000..5dd72fa5a
--- /dev/null
+++ b/sample_files/cli_tests/bad_yaml_before.yml
@@ -0,0 +1,3 @@
+key1:
+- key2:
+ {{ helm-expression }}
diff --git a/src/parse/tree_sitter_parser.rs b/src/parse/tree_sitter_parser.rs
index 66bfe6128..5affb533c 100644
--- a/src/parse/tree_sitter_parser.rs
+++ b/src/parse/tree_sitter_parser.rs
@@ -1240,11 +1240,15 @@ pub fn to_syntax<'a>(
let nl_pos = NewlinePositions::from(src);
let mut cursor = tree.walk();
+ let mut error_count: usize = 0;
+ if cursor.node().is_error() {
+ error_count += 1;
+ }
+
// The tree always has a single root, whereas we want nodes for
// each top level syntax item.
cursor.goto_first_child();
- let mut error_count: usize = 0;
let nodes = all_syntaxes_from_cursor(
arena,
src,
diff --git a/tests/cli.rs b/tests/cli.rs
index 460c2c1d6..97dbe82e6 100644
--- a/tests/cli.rs
+++ b/tests/cli.rs
@@ -68,3 +68,16 @@ fn makefile_text_as_atom() {
let predicate_fn = predicate::str::contains("CCFLAGS");
cmd.assert().stdout(predicate_fn);
}
+
+#[test]
+fn yaml_parse_errors() {
+ use predicates::prelude::*;
+
+ let mut cmd = Command::cargo_bin("difft").unwrap();
+
+ cmd.arg("sample_files/cli_tests/bad_yaml_before.yml")
+ .arg("sample_files/cli_tests/bad_yaml_after.yml");
+
+ let predicate_fn = predicate::str::contains("exceeded DFT_PARSE_ERROR_LIMIT");
+ cmd.assert().stdout(predicate_fn);
+}