leo_grammar/errors/
syntax.rs1use crate::ast::Rule;
18
19use pest::error::Error;
20
21#[derive(Debug, Error)]
22pub enum SyntaxError {
23 #[error("aborting due to syntax error")]
24 Error(Error<Rule>),
25}
26
27impl From<Error<Rule>> for SyntaxError {
28 fn from(mut error: Error<Rule>) -> Self {
29 error = error.renamed_rules(|rule| match *rule {
30 Rule::LINE_END => "`;`".to_owned(),
31 Rule::type_integer => "`u32`".to_owned(),
32 Rule::type_field => "`field`".to_owned(),
33 Rule::type_group => "`group`".to_owned(),
34 Rule::address => "an aleo address: `aleo1...`".to_owned(),
35 Rule::file => "an import, circuit, or function".to_owned(),
36 Rule::identifier => "a variable name".to_owned(),
37 Rule::type_ => "a type".to_owned(),
38 Rule::access => "`.`, `::`, `()`".to_owned(),
39
40 Rule::operation_and => "`&&`".to_owned(),
41 Rule::operation_or => "`||`".to_owned(),
42 Rule::operation_eq => "`==`".to_owned(),
43 Rule::operation_ne => "`!=`".to_owned(),
44 Rule::operation_ge => "`>=`".to_owned(),
45 Rule::operation_gt => "`>`".to_owned(),
46 Rule::operation_le => "`<=`".to_owned(),
47 Rule::operation_lt => "`<`".to_owned(),
48 Rule::operation_add => "`+`".to_owned(),
49 Rule::operation_sub => "`-`".to_owned(),
50 Rule::operation_mul => "`*`".to_owned(),
51 Rule::operation_div => "`/`".to_owned(),
52 Rule::operation_pow => "`**`".to_owned(),
53
54 Rule::package => "package. Check package and import names for errors.".to_owned(),
55 Rule::package_name => {
56 "package name. Please use lowercase letters, numbers, and dashes `-` only.".to_owned()
57 }
58
59 rule => format!("{:?}", rule),
60 });
61
62 SyntaxError::Error(error)
63 }
64}