difftreelog
fix(parser) allow tabs in multiline strings
in: master
3 files changed
bindings/jsonnet/src/lib.rsdiffbeforeafterboth--- a/bindings/jsonnet/src/lib.rs
+++ b/bindings/jsonnet/src/lib.rs
@@ -198,6 +198,7 @@
add: false,
visibility: Visibility::Normal,
invoke: LazyBinding::Bound(LazyVal::new_resolved(val.clone())),
+ location: None,
},
);
let new_obj = ObjValue::new(Some(old.clone()), Rc::new(new));
crates/jrsonnet-parser/src/expr.rsdiffbeforeafterboth1#[cfg(feature = "deserialize")]2use serde::Deserialize;3#[cfg(feature = "serialize")]4use serde::Serialize;1use std::{fmt::Debug, ops::Deref, path::PathBuf, rc::Rc};5use std::{fmt::Debug, ops::Deref, path::PathBuf, rc::Rc};2#[cfg(feature = "dump")]6#[cfg(feature = "dump")]3use structdump_derive::Codegen;7use structdump_derive::Codegen;4#[cfg(feature = "serialize")]5use serde::Serialize;6#[cfg(feature = "deserialize")]7use serde::Deserialize;889#[cfg_attr(feature = "dump", derive(Codegen))]9#[cfg_attr(feature = "dump", derive(Codegen))]10#[cfg_attr(feature = "serialize", derive(Serialize))]10#[cfg_attr(feature = "serialize", derive(Serialize))]crates/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]