git.delta.rocks / jrsonnet / refs/commits / 2ec9a620e466

difftreelog

feat configurable array element padding

Yaroslav Bolyukin2021-10-25parent: #ebba949.patch.diff
in: master

3 files changed

modifiedcrates/jrsonnet-evaluator/src/builtin/manifest.rsdiffbeforeafterboth
158}158}
159159
160pub struct ManifestYamlOptions<'s> {160pub struct ManifestYamlOptions<'s> {
161 /// Padding before fields, i.e
162 /// a:
163 /// b:
164 /// ^^ this
161 pub padding: &'s str,165 pub padding: &'s str,
166 /// Padding before array elements in objects
167 /// a:
168 /// - 1
169 /// ^^ this
162 pub pad_arrays: bool,170 pub arr_element_padding: &'s str,
163}171}
164172
165pub fn manifest_yaml_ex(val: &Val, options: &ManifestYamlOptions<'_>) -> Result<String> {173pub fn manifest_yaml_ex(val: &Val, options: &ManifestYamlOptions<'_>) -> Result<String> {
252 if !a.is_empty() {260 if !a.is_empty() {
253 buf.push('\n');261 buf.push('\n');
254 buf.push_str(cur_padding);262 buf.push_str(cur_padding);
255 if options.pad_arrays {
256 buf.push_str(options.padding);263 buf.push_str(options.arr_element_padding);
257 }
258 } else {264 } else {
259 buf.push(' ');265 buf.push(' ');
260 }266 }
271 }277 }
272 let prev_len = cur_padding.len();278 let prev_len = cur_padding.len();
273 if let Val::Arr(a) = &item {279 if let Val::Arr(a) = &item {
274 if !a.is_empty() && options.pad_arrays {280 if !a.is_empty() {
275 cur_padding.push_str(options.padding);281 cur_padding.push_str(options.arr_element_padding);
276 }282 }
277 } else if let Val::Obj(a) = &item {283 } else if let Val::Obj(a) = &item {
278 if !a.is_empty() {284 if !a.is_empty() {
modifiedcrates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth
--- a/crates/jrsonnet-evaluator/src/builtin/mod.rs
+++ b/crates/jrsonnet-evaluator/src/builtin/mod.rs
@@ -781,7 +781,7 @@
 	], {
 		Ok(Val::Str(manifest_yaml_ex(&value, &ManifestYamlOptions {
 			padding: "  ",
-			pad_arrays: indent_array_in_object,
+			arr_element_padding: if indent_array_in_object { "  " } else { "" },
 		})?.into()))
 	})
 }
modifiedcrates/jrsonnet-evaluator/src/val.rsdiffbeforeafterboth
--- a/crates/jrsonnet-evaluator/src/val.rs
+++ b/crates/jrsonnet-evaluator/src/val.rs
@@ -553,11 +553,12 @@
 	}
 
 	pub fn to_yaml(&self, padding: usize) -> Result<IStr> {
+		let padding = &" ".repeat(padding);
 		manifest_yaml_ex(
 			self,
 			&ManifestYamlOptions {
-				padding: &" ".repeat(padding),
-				pad_arrays: true,
+				padding,
+				arr_element_padding: padding,
 			},
 		)
 		.map(|s| s.into())