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
--- a/crates/jrsonnet-evaluator/src/builtin/manifest.rs
+++ b/crates/jrsonnet-evaluator/src/builtin/manifest.rs
@@ -158,8 +158,16 @@
 }
 
 pub struct ManifestYamlOptions<'s> {
+	/// Padding before fields, i.e
+	/// a:
+	///   b:
+	/// ^^ this
 	pub padding: &'s str,
-	pub pad_arrays: bool,
+	/// Padding before array elements in objects
+	/// a:
+	///   - 1
+	/// ^^ this
+	pub arr_element_padding: &'s str,
 }
 
 pub fn manifest_yaml_ex(val: &Val, options: &ManifestYamlOptions<'_>) -> Result<String> {
@@ -252,9 +260,7 @@
 						if !a.is_empty() {
 							buf.push('\n');
 							buf.push_str(cur_padding);
-							if options.pad_arrays {
-								buf.push_str(options.padding);
-							}
+							buf.push_str(options.arr_element_padding);
 						} else {
 							buf.push(' ');
 						}
@@ -271,8 +277,8 @@
 					}
 					let prev_len = cur_padding.len();
 					if let Val::Arr(a) = &item {
-						if !a.is_empty() && options.pad_arrays {
-							cur_padding.push_str(options.padding);
+						if !a.is_empty() {
+							cur_padding.push_str(options.arr_element_padding);
 						}
 					} else if let Val::Obj(a) = &item {
 						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
553 }553 }
554554
555 pub fn to_yaml(&self, padding: usize) -> Result<IStr> {555 pub fn to_yaml(&self, padding: usize) -> Result<IStr> {
556 let padding = &" ".repeat(padding);
556 manifest_yaml_ex(557 manifest_yaml_ex(
557 self,558 self,
558 &ManifestYamlOptions {559 &ManifestYamlOptions {
559 padding: &" ".repeat(padding),560 padding,
560 pad_arrays: true,561 arr_element_padding: padding,
561 },562 },
562 )563 )
563 .map(|s| s.into())564 .map(|s| s.into())