git.delta.rocks / jrsonnet / refs/commits / 30ce98effbb6

difftreelog

feat(parser) use PathBuf for file names

Лач2020-06-06parent: #e53de5d.patch.diff
in: master

2 files changed

modifiedcrates/jsonnet-parser/src/expr.rsdiffbeforeafterboth
--- a/crates/jsonnet-parser/src/expr.rs
+++ b/crates/jsonnet-parser/src/expr.rs
@@ -1,5 +1,5 @@
 use serde::{Deserialize, Serialize};
-use std::{fmt::Debug, rc::Rc};
+use std::{fmt::Debug, path::PathBuf, rc::Rc};
 
 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
 pub enum FieldName {
@@ -50,8 +50,7 @@
 pub enum BinaryOpType {
 	Mul,
 	Div,
-	// Mod is desugared to std.mod
-	// Mod,
+
 	Add,
 	Sub,
 
@@ -64,10 +63,6 @@
 	Gte,
 
 	In,
-
-	// Eq/Ne is desugared to std.equals
-	// Eq,
-	// Ne,
 
 	BitAnd,
 	BitOr,
@@ -120,7 +115,6 @@
 		key: LocExpr,
 		value: LocExpr,
 		post_locals: Vec<BindSpec>,
-		first: ForSpecData,
 		rest: Vec<CompSpec>,
 	},
 }
@@ -225,10 +219,10 @@
 
 /// file, begin offset, end offset
 #[derive(Clone, PartialEq, Serialize, Deserialize)]
-pub struct ExprLocation(pub String, pub usize, pub usize);
+pub struct ExprLocation(pub PathBuf, pub usize, pub usize);
 impl Debug for ExprLocation {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-		write!(f, "{}:{:?}-{:?}", self.0, self.1, self.2)
+		write!(f, "{:?}:{:?}-{:?}", self.0, self.1, self.2)
 	}
 }
 
modifiedcrates/jsonnet-parser/src/lib.rsdiffbeforeafterboth
4extern crate test;4extern crate test;
55
6use peg::parser;6use peg::parser;
7use std::rc::Rc;7use std::{path::PathBuf, rc::Rc};
8mod expr;8mod expr;
9pub use expr::*;9pub use expr::*;
1010
1919
20pub struct ParserSettings {20pub struct ParserSettings {
21 pub loc_data: bool,21 pub loc_data: bool,
22 pub file_name: String,22 pub file_name: PathBuf,
23}23}
2424
25parser! {25parser! {
118 / assertion:assertion(s) {expr::Member::AssertStmt(assertion)}118 / assertion:assertion(s) {expr::Member::AssertStmt(assertion)}
119 / field:field(s) {expr::Member::Field(field)}119 / field:field(s) {expr::Member::Field(field)}
120 pub rule objinside(s: &ParserSettings) -> expr::ObjBody120 pub rule objinside(s: &ParserSettings) -> expr::ObjBody
121 = pre_locals:(b: obj_local(s) comma() {b})* "[" _ key:expr(s) _ "]" _ ":" _ value:expr(s) post_locals:(comma() b:obj_local(s) {b})* _ first:forspec(s) rest:(_ rest:compspec(s) {rest})? {121 = pre_locals:(b: obj_local(s) comma() {b})* "[" _ key:expr(s) _ "]" _ ":" _ value:expr(s) post_locals:(comma() b:obj_local(s) {b})* _ forspec:forspec(s) others:(_ rest:compspec(s) {rest})? {
122 expr::ObjBody::ObjComp {122 expr::ObjBody::ObjComp {
123 pre_locals,123 pre_locals,
124 key,124 key,
125 value,125 value,
126 post_locals,126 post_locals,
127 first,
128 rest: rest.unwrap_or_default(),127 rest: [vec![CompSpec::ForSpec(forspec)], others.unwrap_or_default()].concat(),
129 }128 }
130 }129 }
131 / members:(member(s) ** comma()) comma()? {expr::ObjBody::MemberList(members)}130 / members:(member(s) ** comma()) comma()? {expr::ObjBody::MemberList(members)}
301pub mod tests {300pub mod tests {
302 use super::{expr::*, parse};301 use super::{expr::*, parse};
303 use crate::ParserSettings;302 use crate::ParserSettings;
303 use std::path::PathBuf;
304304
305 macro_rules! parse {305 macro_rules! parse {
306 ($s:expr) => {306 ($s:expr) => {
307 parse(307 parse(
308 $s,308 $s,
309 &ParserSettings {309 &ParserSettings {
310 loc_data: false,310 loc_data: false,
311 file_name: "test.jsonnet".to_owned(),311 file_name: PathBuf::from("/test.jsonnet"),
312 },312 },
313 )313 )
314 .unwrap()314 .unwrap()