mirror of
https://github.com/nushell/nushell
synced 2024-12-26 13:03:07 +00:00
make adding newlines with to text
more consistent and opt-out-able (#14158)
# Description This PR tries to make `to text` more consistent with how it adds newlines and also gives you an opt-out --no-newline option. ![image](https://github.com/user-attachments/assets/e4976ce6-c685-47a4-8470-4947970daf47) I wasn't sure how to change the `PipelineData::ByteStream` match arm. I figure something needs to be done there but I'm not sure how to do it. # User-Facing Changes newlines are more consistent. # Tests + Formatting <!-- Don't forget to add tests that cover your changes. Make sure you've run and fixed any issues with these commands: - `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used` to check that you're using the standard code style - `cargo test --workspace` to check that all tests pass (on Windows make sure to [enable developer mode](https://learn.microsoft.com/en-us/windows/apps/get-started/developer-mode-features-and-debugging)) - `cargo run -- -c "use toolkit.nu; toolkit test stdlib"` to run the tests for the standard library > **Note** > from `nushell` you can also use the `toolkit` as follows > ```bash > use toolkit.nu # or use an `env_change` hook to activate it automatically > toolkit check pr > ``` --> # After Submitting <!-- If your PR had any user-facing changes, update [the documentation](https://github.com/nushell/nushell.github.io) after the PR is merged, if necessary. This will help us keep the docs up to date. -->
This commit is contained in:
parent
3ec1c40320
commit
abb6fca5e3
2 changed files with 23 additions and 5 deletions
|
@ -21,6 +21,11 @@ impl Command for ToText {
|
||||||
fn signature(&self) -> Signature {
|
fn signature(&self) -> Signature {
|
||||||
Signature::build("to text")
|
Signature::build("to text")
|
||||||
.input_output_types(vec![(Type::Any, Type::String)])
|
.input_output_types(vec![(Type::Any, Type::String)])
|
||||||
|
.switch(
|
||||||
|
"no-newline",
|
||||||
|
"Do not append a newline to the end of the text",
|
||||||
|
Some('n'),
|
||||||
|
)
|
||||||
.category(Category::Formats)
|
.category(Category::Formats)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +41,7 @@ impl Command for ToText {
|
||||||
input: PipelineData,
|
input: PipelineData,
|
||||||
) -> Result<PipelineData, ShellError> {
|
) -> Result<PipelineData, ShellError> {
|
||||||
let span = call.head;
|
let span = call.head;
|
||||||
|
let no_newline = call.has_flag(engine_state, stack, "no-newline")?;
|
||||||
let input = input.try_expand_range()?;
|
let input = input.try_expand_range()?;
|
||||||
let config = stack.get_config(engine_state);
|
let config = stack.get_config(engine_state);
|
||||||
|
|
||||||
|
@ -43,7 +49,12 @@ impl Command for ToText {
|
||||||
PipelineData::Empty => Ok(Value::string(String::new(), span)
|
PipelineData::Empty => Ok(Value::string(String::new(), span)
|
||||||
.into_pipeline_data_with_metadata(update_metadata(None))),
|
.into_pipeline_data_with_metadata(update_metadata(None))),
|
||||||
PipelineData::Value(value, ..) => {
|
PipelineData::Value(value, ..) => {
|
||||||
let str = local_into_string(value, LINE_ENDING, &config);
|
let is_compound_type = matches!(value, Value::List { .. } | Value::Record { .. });
|
||||||
|
let mut str = local_into_string(value, LINE_ENDING, &config);
|
||||||
|
if is_compound_type && !no_newline {
|
||||||
|
str.push_str(LINE_ENDING);
|
||||||
|
}
|
||||||
|
|
||||||
Ok(
|
Ok(
|
||||||
Value::string(str, span)
|
Value::string(str, span)
|
||||||
.into_pipeline_data_with_metadata(update_metadata(None)),
|
.into_pipeline_data_with_metadata(update_metadata(None)),
|
||||||
|
@ -53,7 +64,9 @@ impl Command for ToText {
|
||||||
let span = stream.span();
|
let span = stream.span();
|
||||||
let iter = stream.into_inner().map(move |value| {
|
let iter = stream.into_inner().map(move |value| {
|
||||||
let mut str = local_into_string(value, LINE_ENDING, &config);
|
let mut str = local_into_string(value, LINE_ENDING, &config);
|
||||||
|
if !no_newline {
|
||||||
str.push_str(LINE_ENDING);
|
str.push_str(LINE_ENDING);
|
||||||
|
}
|
||||||
str
|
str
|
||||||
});
|
});
|
||||||
Ok(PipelineData::ByteStream(
|
Ok(PipelineData::ByteStream(
|
||||||
|
@ -75,8 +88,13 @@ impl Command for ToText {
|
||||||
fn examples(&self) -> Vec<Example> {
|
fn examples(&self) -> Vec<Example> {
|
||||||
vec![
|
vec![
|
||||||
Example {
|
Example {
|
||||||
description: "Outputs data as simple text",
|
description: "Outputs data as simple text with a newline",
|
||||||
example: "1 | to text",
|
example: "[1] | to text",
|
||||||
|
result: Some(Value::test_string("1".to_string() + LINE_ENDING)),
|
||||||
|
},
|
||||||
|
Example {
|
||||||
|
description: "Outputs data as simple text without a newline",
|
||||||
|
example: "[1] | to text --no-newline",
|
||||||
result: Some(Value::test_string("1")),
|
result: Some(Value::test_string("1")),
|
||||||
},
|
},
|
||||||
Example {
|
Example {
|
||||||
|
|
|
@ -415,7 +415,7 @@ fn save_with_custom_converter() {
|
||||||
|
|
||||||
nu!(cwd: dirs.test(), pipeline(
|
nu!(cwd: dirs.test(), pipeline(
|
||||||
r#"
|
r#"
|
||||||
def "to ndjson" []: any -> string { each { to json --raw } | to text } ;
|
def "to ndjson" []: any -> string { each { to json --raw } | to text --no-newline } ;
|
||||||
{a: 1, b: 2} | save test.ndjson
|
{a: 1, b: 2} | save test.ndjson
|
||||||
"#
|
"#
|
||||||
));
|
));
|
||||||
|
|
Loading…
Reference in a new issue