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
781 ], {781 ], {
782 Ok(Val::Str(manifest_yaml_ex(&value, &ManifestYamlOptions {782 Ok(Val::Str(manifest_yaml_ex(&value, &ManifestYamlOptions {
783 padding: " ",783 padding: " ",
784 pad_arrays: indent_array_in_object,784 arr_element_padding: if indent_array_in_object { " " } else { "" },
785 })?.into()))785 })?.into()))
786 })786 })
787}787}
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())