diff options
author | Wilfred Hughes <me@wilfred.me.uk> | 2023-03-03 00:23:25 -0800 |
---|---|---|
committer | Wilfred Hughes <me@wilfred.me.uk> | 2023-03-03 00:25:41 -0800 |
commit | 2d1a2c906e03720c9f74999a80af0ca84b707b29 (patch) | |
tree | 7cb93d2c6625c1b5b58426803ad63306b18b4c37 | |
parent | 045d6a2c5813cf08d30a86c827246b2cb63bea07 (diff) |
Count errors on the root node too0.45.0
Fixes #377
-rw-r--r-- | CHANGELOG.md | 3 | ||||
-rw-r--r-- | sample_files/cli_tests/bad_yaml_after.yml | 5 | ||||
-rw-r--r-- | sample_files/cli_tests/bad_yaml_before.yml | 3 | ||||
-rw-r--r-- | src/parse/tree_sitter_parser.rs | 6 | ||||
-rw-r--r-- | tests/cli.rs | 13 |
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); +} |