mirror of
https://github.com/nushell/nushell.git
synced 2024-11-25 09:53:43 +01:00
# Description This is a minor breaking change to JSON output syntax/style of the `to json` command. This fixes #13326 by setting `braces_same_line` to true when creating a new `HjsonFormatter`. This then simply tells `HjsonFormatter` to keep the braces on the same line when outputting which is what I expected nu's `to json` command to do. There are almost no changes to nushell itself, all changes are contained within `nu-json` crate (minus any documentation updates). Oh, almost forgot to mention, to get the tests compiling, I added fancy_regex as a _dev_ dependency to nu-json. I could look into eliminating that if desirable. # User-Facing Changes **Breaking Change** nushell now outputs the desired result using the reproduction command from the issue: ``` echo '{"version": "v0.4.4","notes": "blablabla","pub_date": "2024-05-04T16:05:00Z","platforms":{"windows-x86_64":{"signature": "blablabla","url": "https://blablabla"}}}' | from json | to json ``` outputs: ``` { "version": "v0.4.4", "notes": "blablabla", "pub_date": "2024-05-04T16:05:00Z", "platforms": { "windows-x86_64": { "signature": "blablabla", "url": "https://blablabla" } } } ``` whereas previously it would push the opening braces onto a new line: ``` { "version": "v0.4.4", "notes": "blablabla", "pub_date": "2024-05-04T16:05:00Z", "platforms": { "windows-x86_64": { "signature": "blablabla", "url": "https://blablabla" } } } ``` # Tests + Formatting toolkit check pr mostly passes - there are regrettably some tests not passing on my windows machine _before making any changes_ (I may look into this as a separate issue) I have re-enabled the [hjson tests](https://github.com/nushell/nushell/blob/main/crates/nu-json/tests/main.rs). This is done in the second commit 🙂 They have a crucial difference to what they were previously asserting: * nu-json outputs in json syntax, not hjson syntax I think this is desirable, but I'm not aware of the history of these tests. # After Submitting I suspect there `to json` command examples will need updating to match, haven't checked yet!
This commit is contained in:
parent
ae40d56fc5
commit
cf4864a9cd
3
Cargo.lock
generated
3
Cargo.lock
generated
@ -3195,7 +3195,10 @@ dependencies = [
|
|||||||
name = "nu-json"
|
name = "nu-json"
|
||||||
version = "0.95.1"
|
version = "0.95.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"fancy-regex",
|
||||||
"linked-hash-map",
|
"linked-hash-map",
|
||||||
|
"nu-path",
|
||||||
|
"nu-test-support",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
[package]
|
[package]
|
||||||
authors = ["The Nushell Project Developers", "Christian Zangl <laktak@cdak.net>"]
|
authors = [
|
||||||
|
"The Nushell Project Developers",
|
||||||
|
"Christian Zangl <laktak@cdak.net>",
|
||||||
|
]
|
||||||
description = "Fork of serde-hjson"
|
description = "Fork of serde-hjson"
|
||||||
repository = "https://github.com/nushell/nushell/tree/main/crates/nu-json"
|
repository = "https://github.com/nushell/nushell/tree/main/crates/nu-json"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
@ -19,9 +22,11 @@ default = ["preserve_order"]
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
linked-hash-map = { version = "0.5", optional = true }
|
linked-hash-map = { version = "0.5", optional = true }
|
||||||
num-traits = { workspace = true }
|
num-traits = { workspace = true }
|
||||||
serde = { workspace = true }
|
serde = { workspace = true }
|
||||||
serde_json = { workspace = true }
|
serde_json = { workspace = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
# nu-path = { path="../nu-path", version = "0.95.1" }
|
nu-test-support = { path = "../nu-test-support", version = "0.95.1" }
|
||||||
# serde_json = "1.0"
|
nu-path = { path = "../nu-path", version = "0.95.1" }
|
||||||
|
serde_json = "1.0"
|
||||||
|
fancy-regex = "0.13.0"
|
||||||
|
@ -714,7 +714,7 @@ impl<'a> HjsonFormatter<'a> {
|
|||||||
stack: Vec::new(),
|
stack: Vec::new(),
|
||||||
at_colon: false,
|
at_colon: false,
|
||||||
indent,
|
indent,
|
||||||
braces_same_line: false,
|
braces_same_line: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
// FIXME: re-enable tests
|
|
||||||
/*
|
|
||||||
use nu_json::Value;
|
|
||||||
use fancy_regex::Regex;
|
use fancy_regex::Regex;
|
||||||
|
use nu_json::Value;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
@ -11,7 +9,7 @@ fn txt(text: &str) -> String {
|
|||||||
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
{
|
{
|
||||||
out.replace("\r\n", "").replace("\n", "")
|
out.replace("\r\n", "").replace('\n', "")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(windows))]
|
#[cfg(not(windows))]
|
||||||
@ -21,15 +19,7 @@ fn txt(text: &str) -> String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn hjson_expectations() -> PathBuf {
|
fn hjson_expectations() -> PathBuf {
|
||||||
let assets = nu_test_support::fs::assets().join("nu_json");
|
nu_test_support::fs::assets().join("nu_json")
|
||||||
|
|
||||||
nu_path::canonicalize(assets.clone()).unwrap_or_else(|e| {
|
|
||||||
panic!(
|
|
||||||
"Couldn't canonicalize hjson assets path {}: {:?}",
|
|
||||||
assets.display(),
|
|
||||||
e
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_test_content(name: &str) -> io::Result<String> {
|
fn get_test_content(name: &str) -> io::Result<String> {
|
||||||
@ -50,7 +40,7 @@ fn get_result_content(name: &str) -> io::Result<(String, String)> {
|
|||||||
let p1 = format!("{}/{}_result.json", expectations.display(), name);
|
let p1 = format!("{}/{}_result.json", expectations.display(), name);
|
||||||
let p2 = format!("{}/{}_result.hjson", expectations.display(), name);
|
let p2 = format!("{}/{}_result.hjson", expectations.display(), name);
|
||||||
|
|
||||||
Ok((fs::read_to_string(&p1)?, fs::read_to_string(&p2)?))
|
Ok((fs::read_to_string(p1)?, fs::read_to_string(p2)?))
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! run_test {
|
macro_rules! run_test {
|
||||||
@ -73,7 +63,8 @@ macro_rules! run_test {
|
|||||||
let actual_hjson = txt(&actual_hjson);
|
let actual_hjson = txt(&actual_hjson);
|
||||||
let actual_json = $fix(serde_json::to_string_pretty(&udata).unwrap());
|
let actual_json = $fix(serde_json::to_string_pretty(&udata).unwrap());
|
||||||
let actual_json = txt(&actual_json);
|
let actual_json = txt(&actual_json);
|
||||||
if rhjson != actual_hjson {
|
// nu_json::to_string now outputs json instead of hjson!
|
||||||
|
if rjson != actual_hjson {
|
||||||
println!(
|
println!(
|
||||||
"{:?}\n---hjson expected\n{}\n---hjson actual\n{}\n---\n",
|
"{:?}\n---hjson expected\n{}\n---hjson actual\n{}\n---\n",
|
||||||
name, rhjson, actual_hjson
|
name, rhjson, actual_hjson
|
||||||
@ -85,7 +76,7 @@ macro_rules! run_test {
|
|||||||
name, rjson, actual_json
|
name, rjson, actual_json
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
assert!(rhjson == actual_hjson && rjson == actual_json);
|
assert!(rjson == actual_hjson && rjson == actual_json);
|
||||||
}
|
}
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
@ -198,7 +189,7 @@ fn test_hjson() {
|
|||||||
|
|
||||||
let missing = all
|
let missing = all
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter(|x| done.iter().find(|y| &x == y) == None)
|
.filter(|x| !done.iter().any(|y| x == y))
|
||||||
.collect::<Vec<String>>();
|
.collect::<Vec<String>>();
|
||||||
|
|
||||||
if !missing.is_empty() {
|
if !missing.is_empty() {
|
||||||
@ -208,5 +199,3 @@ fn test_hjson() {
|
|||||||
panic!();
|
panic!();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*/
|
|
||||||
|
Loading…
Reference in New Issue
Block a user