git.delta.rocks / jrsonnet / refs/commits / e072f7a8df54

difftreelog

feat(parser) better descriptions for strings/ops

Yaroslav Bolyukin2020-11-17parent: #b7f71f5.patch.diff
in: master

1 file changed

modifiedcrates/jrsonnet-parser/src/lib.rsdiffbeforeafterboth
37 rule reserved() = ("assert" / "else" / "error" / "false" / "for" / "function" / "if" / "import" / "importstr" / "in" / "local" / "null" / "tailstrict" / "then" / "self" / "super" / "true") end_of_ident()37 rule reserved() = ("assert" / "else" / "error" / "false" / "for" / "function" / "if" / "import" / "importstr" / "in" / "local" / "null" / "tailstrict" / "then" / "self" / "super" / "true") end_of_ident()
38 rule id() = quiet!{ !reserved() alpha() (alpha() / digit())*} / expected!("<identifier>")38 rule id() = quiet!{ !reserved() alpha() (alpha() / digit())*} / expected!("<identifier>")
3939
40 rule keyword(id: &'static str)40 rule keyword(id: &'static str) -> ()
41 = ##parse_string_literal(id) end_of_ident()41 = ##parse_string_literal(id) end_of_ident()
42 // Adds location data information to existing expression42 // Adds location data information to existing expression
43 rule l(s: &ParserSettings, x: rule<Expr>) -> LocExpr43 rule l(s: &ParserSettings, x: rule<Expr>) -> LocExpr
85 [' ' | '\t']*<, {prefix.len() - 1}> "|||"85 [' ' | '\t']*<, {prefix.len() - 1}> "|||"
86 {let mut l = empty_lines.to_owned(); l.push_str(first_line); l.extend(lines); l}86 {let mut l = empty_lines.to_owned(); l.push_str(first_line); l.extend(lines); l}
87 pub rule string() -> String87 pub rule string() -> String
88 = "\"" str:$(("\\\"" / "\\\\" / (!['"'][_]))*) "\"" {unescape::unescape(str).unwrap()}88 = quiet!{ "\"" str:$(("\\\"" / "\\\\" / (!['"'][_]))*) "\"" {unescape::unescape(str).unwrap()}
89 / "'" str:$(("\\'" / "\\\\" / (!['\''][_]))*) "'" {unescape::unescape(str).unwrap()}89 / "'" str:$(("\\'" / "\\\\" / (!['\''][_]))*) "'" {unescape::unescape(str).unwrap()}
90 / "@'" str:$(("''" / (!['\''][_]))*) "'" {str.replace("''", "'")}90 / "@'" str:$(("''" / (!['\''][_]))*) "'" {str.replace("''", "'")}
91 / "@\"" str:$(("\"\"" / (!['"'][_]))*) "\"" {str.replace("\"\"", "\"")}91 / "@\"" str:$(("\"\"" / (!['"'][_]))*) "\"" {str.replace("\"\"", "\"")}
92 / string_block()92 / string_block() } / expected!("<string>")
9393
94 pub rule field_name(s: &ParserSettings) -> expr::FieldName94 pub rule field_name(s: &ParserSettings) -> expr::FieldName
95 = name:$(id()) {expr::FieldName::Fixed(name.into())}95 = name:$(id()) {expr::FieldName::Fixed(name.into())}
208 SliceDesc { start, end, step }208 SliceDesc { start, end, step }
209 }209 }
210
211 rule binop(x: rule<()>) -> ()
212 = quiet!{ x() } / expected!("<binary op>")
213 rule unaryop(x: rule<()>) -> ()
214 = quiet!{ x() } / expected!("<unary op>")
210215
211 rule expr(s: &ParserSettings) -> LocExpr216 rule expr(s: &ParserSettings) -> LocExpr
212 = start:position!() a:precedence! {217 = start:position!() a:precedence! {
213 a:(@) _ "||" _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Or, b))}218 a:(@) _ binop(<"||">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Or, b))}
214 --219 --
215 a:(@) _ "&&" _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::And, b))}220 a:(@) _ binop(<"&&">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::And, b))}
216 --221 --
217 a:(@) _ "|" _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::BitOr, b))}222 a:(@) _ binop(<"|">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::BitOr, b))}
218 --223 --
219 a:@ _ "^" _ b:(@) {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::BitXor, b))}224 a:@ _ binop(<"^">) _ b:(@) {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::BitXor, b))}
220 --225 --
221 a:(@) _ "&" _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::BitAnd, b))}226 a:(@) _ binop(<"&">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::BitAnd, b))}
222 --227 --
223 a:(@) _ "==" _ b:@ {loc_expr_todo!(Expr::Apply(228 a:(@) _ binop(<"==">) _ b:@ {loc_expr_todo!(Expr::Apply(
224 el!(Expr::Intrinsic("equals".into())),229 el!(Expr::Intrinsic("equals".into())),
225 ArgsDesc(vec![Arg(None, a), Arg(None, b)]),230 ArgsDesc(vec![Arg(None, a), Arg(None, b)]),
226 true231 true
227 ))}232 ))}
228 a:(@) _ "!=" _ b:@ {loc_expr_todo!(Expr::UnaryOp(UnaryOpType::Not, el!(Expr::Apply(233 a:(@) _ binop(<"!=">) _ b:@ {loc_expr_todo!(Expr::UnaryOp(UnaryOpType::Not, el!(Expr::Apply(
229 el!(Expr::Intrinsic("equals".into())),234 el!(Expr::Intrinsic("equals".into())),
230 ArgsDesc(vec![Arg(None, a), Arg(None, b)]),235 ArgsDesc(vec![Arg(None, a), Arg(None, b)]),
231 true236 true
232 ))))}237 ))))}
233 --238 --
234 a:(@) _ "<" _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Lt, b))}239 a:(@) _ binop(<"<">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Lt, b))}
235 a:(@) _ ">" _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Gt, b))}240 a:(@) _ binop(<">">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Gt, b))}
236 a:(@) _ "<=" _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Lte, b))}241 a:(@) _ binop(<"<=">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Lte, b))}
237 a:(@) _ ">=" _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Gte, b))}242 a:(@) _ binop(<">=">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Gte, b))}
238 a:(@) _ keyword("in") _ b:@ {loc_expr_todo!(Expr::Apply(243 a:(@) _ binop(<keyword("in")>) _ b:@ {loc_expr_todo!(Expr::Apply(
239 el!(Expr::Intrinsic("objectHasEx".into())), ArgsDesc(vec![Arg(None, b), Arg(None, a), Arg(None, el!(Expr::Literal(LiteralType::True)))]),244 el!(Expr::Intrinsic("objectHasEx".into())), ArgsDesc(vec![Arg(None, b), Arg(None, a), Arg(None, el!(Expr::Literal(LiteralType::True)))]),
240 true245 true
241 ))}246 ))}
242 --247 --
243 a:(@) _ "<<" _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Lhs, b))}248 a:(@) _ binop(<"<<">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Lhs, b))}
244 a:(@) _ ">>" _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Rhs, b))}249 a:(@) _ binop(<">>">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Rhs, b))}
245 --250 --
246 a:(@) _ "+" _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Add, b))}251 a:(@) _ binop(<"+">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Add, b))}
247 a:(@) _ "-" _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Sub, b))}252 a:(@) _ binop(<"-">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Sub, b))}
248 --253 --
249 a:(@) _ "*" _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Mul, b))}254 a:(@) _ binop(<"*">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Mul, b))}
250 a:(@) _ "/" _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Div, b))}255 a:(@) _ binop(<"/">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Div, b))}
251 a:(@) _ "%" _ b:@ {loc_expr_todo!(Expr::Apply(256 a:(@) _ binop(<"%">) _ b:@ {loc_expr_todo!(Expr::Apply(
252 el!(Expr::Intrinsic("mod".into())), ArgsDesc(vec![Arg(None, a), Arg(None, b)]),257 el!(Expr::Intrinsic("mod".into())), ArgsDesc(vec![Arg(None, a), Arg(None, b)]),
253 false258 false
254 ))}259 ))}
255 --260 --
256 "-" _ b:@ {loc_expr_todo!(Expr::UnaryOp(UnaryOpType::Minus, b))}261 unaryop(<"-">) _ b:@ {loc_expr_todo!(Expr::UnaryOp(UnaryOpType::Minus, b))}
257 "!" _ b:@ {loc_expr_todo!(Expr::UnaryOp(UnaryOpType::Not, b))}262 unaryop(<"!">) _ b:@ {loc_expr_todo!(Expr::UnaryOp(UnaryOpType::Not, b))}
258 "~" _ b:@ { loc_expr_todo!(Expr::UnaryOp(UnaryOpType::BitNot, b)) }263 unaryop(<"~">) _ b:@ { loc_expr_todo!(Expr::UnaryOp(UnaryOpType::BitNot, b)) }
259 --264 --
260 a:(@) _ "[" _ s:slice_desc(s) _ "]" {loc_expr_todo!(Expr::Apply(265 a:(@) _ "[" _ s:slice_desc(s) _ "]" {loc_expr_todo!(Expr::Apply(
261 el!(Expr::Intrinsic("slice".into())),266 el!(Expr::Intrinsic("slice".into())),