Control recursion depth explicitly during query analysis

This commit is contained in:
Max Brunsfeld 2020-08-24 15:53:05 -07:00
parent 315f87bbff
commit 4aba684d66
2 changed files with 138 additions and 18 deletions

View file

@ -268,6 +268,29 @@ fn test_query_errors_on_impossible_patterns() {
.join("\n")
))
);
assert_eq!(
Query::new(js_lang, "(identifier (identifier))",),
Err(QueryError::Structure(
1,
[
"(identifier (identifier))", //
" ^",
]
.join("\n")
))
);
assert_eq!(
Query::new(js_lang, "(true (true))",),
Err(QueryError::Structure(
1,
[
"(true (true))", //
" ^",
]
.join("\n")
))
);
});
}
@ -2561,6 +2584,32 @@ fn test_query_step_is_definite() {
"#,
results_by_substring: &[("\"(\"", false), ("(identifier)", false), ("\")\"", true)],
},
Row {
description: "long, but not too long to analyze",
language: get_language("javascript"),
pattern: r#"
(object "{" (pair) (pair) (pair) (pair) "}")
"#,
results_by_substring: &[
("\"{\"", false),
("(pair)", false),
("(pair) \"}\"", false),
("\"}\"", true),
],
},
Row {
description: "too long to analyze",
language: get_language("javascript"),
pattern: r#"
(object "{" (pair) (pair) (pair) (pair) (pair) (pair) (pair) (pair) (pair) (pair) (pair) (pair) "}")
"#,
results_by_substring: &[
("\"{\"", false),
("(pair)", false),
("(pair) \"}\"", false),
("\"}\"", false),
],
},
];
allocations::record(|| {