rust: Create readable messages for query syntax errors

This commit is contained in:
Max Brunsfeld 2019-09-26 15:58:41 -07:00
parent a45dc67390
commit 324c259cbb
2 changed files with 65 additions and 11 deletions

View file

@ -16,37 +16,73 @@ fn test_query_errors_on_invalid_syntax() {
// Mismatched parens
assert_eq!(
Query::new(language, "(if_statement"),
Err(QueryError::Syntax(13))
Err(QueryError::Syntax("Unexpected EOF".to_string()))
);
assert_eq!(
Query::new(language, "(if_statement))"),
Err(QueryError::Syntax(14))
Query::new(language, "; comment 1\n; comment 2\n (if_statement))"),
Err(QueryError::Syntax(
[
" (if_statement))", //
" ^",
]
.join("\n")
))
);
// Return an error at the *beginning* of a bare identifier not followed a colon.
// If there's a colon but no pattern, return an error at the end of the colon.
assert_eq!(
Query::new(language, "(if_statement identifier)"),
Err(QueryError::Syntax(14))
Err(QueryError::Syntax(
[
"(if_statement identifier)", //
" ^",
]
.join("\n")
))
);
assert_eq!(
Query::new(language, "(if_statement condition:)"),
Err(QueryError::Syntax(24))
Err(QueryError::Syntax(
[
"(if_statement condition:)", //
" ^",
]
.join("\n")
))
);
// Return an error at the beginning of an unterminated string.
assert_eq!(
Query::new(language, r#"(identifier) "h "#),
Err(QueryError::Syntax(13))
Err(QueryError::Syntax(
[
r#"(identifier) "h "#, //
r#" ^"#,
]
.join("\n")
))
);
assert_eq!(
Query::new(language, r#"((identifier) ()"#),
Err(QueryError::Syntax(16))
Err(QueryError::Syntax(
[
"((identifier) ()", //
" ^",
]
.join("\n")
))
);
assert_eq!(
Query::new(language, r#"((identifier) @x (eq? @x a"#),
Err(QueryError::Syntax(26))
Err(QueryError::Syntax(
[
r#"((identifier) @x (eq? @x a"#,
r#" ^"#,
]
.join("\n")
))
);
});
}