git.delta.rocks / jrsonnet / refs/commits / 493027e31b8b

difftreelog

fix(parser) allow tabs in multiline strings

Лач2020-07-01parent: #c637373.patch.diff
in: master

3 files changed

modifiedbindings/jsonnet/src/lib.rsdiffbeforeafterboth
198 add: false,198 add: false,
199 visibility: Visibility::Normal,199 visibility: Visibility::Normal,
200 invoke: LazyBinding::Bound(LazyVal::new_resolved(val.clone())),200 invoke: LazyBinding::Bound(LazyVal::new_resolved(val.clone())),
201 location: None,
201 },202 },
202 );203 );
203 let new_obj = ObjValue::new(Some(old.clone()), Rc::new(new));204 let new_obj = ObjValue::new(Some(old.clone()), Rc::new(new));
modifiedcrates/jrsonnet-parser/src/expr.rsdiffbeforeafterboth
--- a/crates/jrsonnet-parser/src/expr.rs
+++ b/crates/jrsonnet-parser/src/expr.rs
@@ -1,10 +1,10 @@
+#[cfg(feature = "deserialize")]
+use serde::Deserialize;
+#[cfg(feature = "serialize")]
+use serde::Serialize;
 use std::{fmt::Debug, ops::Deref, path::PathBuf, rc::Rc};
 #[cfg(feature = "dump")]
 use structdump_derive::Codegen;
-#[cfg(feature = "serialize")]
-use serde::Serialize;
-#[cfg(feature = "deserialize")]
-use serde::Deserialize;
 
 #[cfg_attr(feature = "dump", derive(Codegen))]
 #[cfg_attr(feature = "serialize", derive(Serialize))]
modifiedcrates/jrsonnet-parser/src/lib.rsdiffbeforeafterboth
--- a/crates/jrsonnet-parser/src/lib.rs
+++ b/crates/jrsonnet-parser/src/lib.rs
@@ -9,6 +9,7 @@
 pub use expr::*;
 pub use peg;
 
+#[derive(Default)]
 pub struct ParserSettings {
 	pub loc_data: bool,
 	pub file_name: Rc<PathBuf>,
@@ -83,9 +84,9 @@
 			= str:$((!['\n'][_])* "\n") {str}
 		pub rule string_block() -> String
 			= "|||" (!['\n']single_whitespace())* "\n"
-			  prefix:[' ']+ first_line:whole_line()
-			  lines:([' ']*<{prefix.len()}> s:whole_line() {s})*
-			  [' ']*<, {prefix.len() - 1}> "|||"
+			  prefix:[' ' | '\t']+ first_line:whole_line()
+			  lines:([' ' | '\t']*<{prefix.len()}> s:whole_line() {s})*
+			  [' ' | '\t']*<, {prefix.len() - 1}> "|||"
 			  {let mut l = first_line.to_owned(); l.extend(lines); l}
 		pub rule string() -> String
 			= "\"" str:$(("\\\"" / "\\\\" / (!['"'][_]))*) "\"" {unescape::unescape(str).unwrap()}
@@ -359,7 +360,19 @@
 		assert_eq!(
 			parse!("|||\n    Hello world!\n     a\n|||"),
 			el!(Expr::Str("Hello world!\n a\n".into())),
-		)
+		);
+		assert_eq!(
+			parse!("|||\n  Hello world!\n   a\n|||"),
+			el!(Expr::Str("Hello world!\n a\n".into())),
+		);
+		assert_eq!(
+			parse!("|||\n\t\tHello world!\n\t\t\ta\n|||"),
+			el!(Expr::Str("Hello world!\n\ta\n".into())),
+		);
+		assert_eq!(
+			parse!("|||\n   Hello world!\n    a\n |||"),
+			el!(Expr::Str("Hello world!\n a\n".into())),
+		);
 	}
 
 	#[test]