git.delta.rocks / jrsonnet / refs/commits / ec8bd188aadf

difftreelog

feat dprint support

Yaroslav Bolyukin2021-09-18parent: #f965cc1.patch.diff
in: trunk

2 files changed

modifiedcrates/nixlike/src/lib.rsdiffbeforeafterboth
--- a/crates/nixlike/src/lib.rs
+++ b/crates/nixlike/src/lib.rs
@@ -101,13 +101,13 @@
 	D::deserialize(value)
 }
 
-pub fn serialize_value_pretty(value: Value) -> Result<String, Error> {
+pub fn serialize_value_pretty(value: Value) -> String {
 	to_string::write_nix(&value)
 }
 
 pub fn serialize<S: Serialize>(value: S) -> Result<String, Error> {
 	let value: Value = value.serialize(MySerialize)?;
-	serialize_value_pretty(value)
+	Ok(serialize_value_pretty(value))
 }
 
 #[test]
modifiedcrates/nixlike/src/to_string.rsdiffbeforeafterboth
before · crates/nixlike/src/to_string.rs
1use crate::{Error, Value};23fn write_nix_obj_key_buf(4	k: &str,5	v: &Value,6	out: &mut String,7	indent: &mut String,8) -> Result<(), Error> {9	use std::fmt::Write;10	write!(out, "{}", k)?;11	match v {12		Value::Object(o) if o.len() == 1 => {13			let (k, v) = o.iter().next().unwrap();14			write!(out, ".")?;15			write_nix_obj_key_buf(k, v, out, indent)?;16		}17		v => {18			write!(out, " = ")?;19			write_nix_buf(v, out, indent)?;20			writeln!(out, ";")?;21		}22	}23	Ok(())24}2526fn write_nix_buf(value: &Value, out: &mut String, indent: &mut String) -> Result<(), Error> {27	use std::fmt::Write;28	match value {29		Value::Null => write!(out, "null")?,30		Value::Boolean(v) => write!(out, "{:?}", v)?,31		Value::Number(n) => write!(out, "{}", n)?,32		Value::String(s) => write!(out, "{:?}", s)?,33		Value::Array(a) => {34			if a.is_empty() {35				write!(out, "[ ]")?;36			} else {37				writeln!(out, "[")?;38				let old_len = indent.len();39				indent.push_str("  ");40				for item in a {41					write!(out, "{}", indent)?;42					write_nix_buf(item, out, indent)?;43					writeln!(out)?;44				}45				indent.truncate(old_len);46				write!(out, "{}]", indent)?;47			}48		}49		Value::Object(obj) => {50			if obj.is_empty() {51				write!(out, "{{ }}")?;52			} else {53				writeln!(out, "{{")?;54				let old_len = indent.len();55				indent.push_str("  ");56				for (k, v) in obj {57					write!(out, "{}", indent)?;58					write_nix_obj_key_buf(k, v, out, indent)?;59				}60				indent.truncate(old_len);61				write!(out, "{}}}", indent)?;62			}63		}64	};65	Ok(())66}6768pub fn write_nix(value: &Value) -> Result<String, Error> {69	let mut out = String::new();70	let mut indent = String::new();7172	write_nix_buf(value, &mut out, &mut indent)?;73	Ok(out)74}
after · crates/nixlike/src/to_string.rs
1use crate::Value;2use dprint_core::formatting::{3	condition_resolvers, conditions, format, ConditionResolverContext, Info, PrintItems,4	PrintOptions, Signal,5};67fn write_nix_obj_key_buf(k: &str, v: &Value, out: &mut PrintItems) {8	out.push_str(k);9	match v {10		Value::Object(o) if o.len() == 1 => {11			let (k, v) = o.iter().next().unwrap();1213			out.push_str(".");14			write_nix_obj_key_buf(k, v, out);15		}16		v => {17			out.push_str(" = ");18			write_nix_buf(v, out);19			out.push_str(";");20		}21	}22}2324fn write_nix_buf(value: &Value, out: &mut PrintItems) {25	match value {26		Value::Null => out.push_str("null"),27		Value::Boolean(v) => out.push_str(if *v { "true" } else { "false" }),28		Value::Number(n) => out.push_str(&format!("{}", n)),29		Value::String(s) => out.push_str(&format!("{:?}", s)),30		Value::Array(a) => {31			if a.is_empty() {32				out.push_str("[ ]");33			} else {34				let start_info = Info::new("start");35				let end_info = Info::new("end");36				let is_multiple_lines = move |ctx: &mut ConditionResolverContext| {37					condition_resolvers::is_multiple_lines(ctx, &start_info, &end_info)38				};39				out.push_str("[");40				out.push_info(start_info);41				out.push_signal(Signal::StartIndent);42				out.push_condition(conditions::if_true_or(43					"array start",44					is_multiple_lines.clone(),45					Signal::NewLine.into(),46					Signal::SpaceOrNewLine.into(),47				));48				for item in a {49					write_nix_buf(item, out);50					out.push_condition(conditions::if_true_or(51						"element separator",52						is_multiple_lines.clone(),53						Signal::NewLine.into(),54						Signal::SpaceOrNewLine.into(),55					));56				}57				out.push_signal(Signal::FinishIndent);58				out.push_info(end_info);59				out.push_str("]");60			}61		}62		Value::Object(obj) => {63			if obj.is_empty() {64				out.push_str("{ }")65			} else {66				let start_info = Info::new("start");67				let end_info = Info::new("end");68				let is_multiple_lines = move |ctx: &mut ConditionResolverContext| {69					condition_resolvers::is_multiple_lines(ctx, &start_info, &end_info)70				};71				out.push_str("{");72				out.push_info(start_info);73				out.push_signal(Signal::StartIndent);74				out.push_condition(conditions::if_true_or(75					"object start",76					is_multiple_lines.clone(),77					Signal::NewLine.into(),78					Signal::SpaceOrNewLine.into(),79				));80				for (k, v) in obj {81					write_nix_obj_key_buf(k, v, out);82					out.push_condition(conditions::if_true_or(83						"element separator",84						is_multiple_lines.clone(),85						Signal::NewLine.into(),86						Signal::SpaceOrNewLine.into(),87					));88				}89				out.push_signal(Signal::FinishIndent);90				out.push_info(end_info);91				out.push_str("}");92			}93		}94	};95}9697pub fn write_nix(value: &Value) -> String {98	format(99		|| {100			let mut items = PrintItems::new();101			write_nix_buf(value, &mut items);102			items103		},104		PrintOptions {105			max_width: 120,106			use_tabs: false,107			indent_width: 2,108			new_line_text: "\n",109		},110	)111}