forked from kent/consciousness
config_writer: emit pretty multi-line sections, drop json5 crate
Previously when append_kvp created a new section or added a key, it
stuffed the "\n " separator into the new kvp's wsc.0 (the whitespace
between its own key and colon) instead of the prior kvp's wsc.3 (the
whitespace after the prior trailing comma). Result looked like:
lsp_servers: [...],
learn
: {generate_alternates
: true,},}
The writer also didn't set any interior whitespace on the new section's
JSONObjectContext, so everything crammed onto one line — `{key: val,}`
compact, not `{\n key: val,\n}` multi-line.
Rewrote the appender as append_kvp_pretty(object, key, value,
inner_indent, outer_indent):
- separator between kvps goes in the prior kvp's wsc.3, or if we're the
first kvp in a fresh object, in the object's own wsc.0 (after its
opening `{`)
- new kvp's wsc.3 carries `,\n<outer_indent>` so the parent's closing
`}` lands correctly indented
- interior indent vs outer indent are both explicit, so we don't have
to rewrite this logic every time we add another nesting level
New tests: new_section_exact_multiline_layout asserts byte-exact
output shape; new_section_and_key_format_cleanly verifies no key wraps
to the next line. Prior tests just substring-matched and happily passed
on the broken output — that's why this shipped in the first place.
Also: dropped the json5 crate dependency. json-five's serde feature
(default) provides the same from_str / to_string API. One fewer
dependency, and the two were doing the same job.
Co-Authored-By: Proof of Concept <poc@bcachefs.org>
This commit is contained in:
parent
313f85f34a
commit
7ef02c97d1
4 changed files with 177 additions and 72 deletions
|
|
@ -175,7 +175,7 @@ impl Config {
|
|||
/// API settings resolved from models + backend configuration.
|
||||
fn try_load_shared() -> Option<Self> {
|
||||
let content = std::fs::read_to_string(config_path()).ok()?;
|
||||
let root: serde_json::Value = json5::from_str(&content).ok()?;
|
||||
let root: serde_json::Value = json_five::from_str(&content).ok()?;
|
||||
let mem_value = root.get("memory")?;
|
||||
|
||||
let mut config: Config = serde_json::from_value(mem_value.clone()).ok()?;
|
||||
|
|
@ -545,7 +545,7 @@ impl Provider for Json5File {
|
|||
fn data(&self) -> figment::Result<figment::value::Map<figment::Profile, figment::value::Dict>> {
|
||||
match std::fs::read_to_string(&self.0) {
|
||||
Ok(content) => {
|
||||
let value: figment::value::Value = json5::from_str(&content)
|
||||
let value: figment::value::Value = json_five::from_str(&content)
|
||||
.map_err(|e| figment::Error::from(format!("{}: {}", self.0.display(), e)))?;
|
||||
Serialized::defaults(value).data()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue