mirror of
https://github.com/nushell/nushell.git
synced 2024-11-24 17:34:00 +01: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
@ -21,6 +21,11 @@ impl Command for ToText {
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("to text")
|
||||
.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)
|
||||
}
|
||||
|
||||
@ -36,6 +41,7 @@ impl Command for ToText {
|
||||
input: PipelineData,
|
||||
) -> Result<PipelineData, ShellError> {
|
||||
let span = call.head;
|
||||
let no_newline = call.has_flag(engine_state, stack, "no-newline")?;
|
||||
let input = input.try_expand_range()?;
|
||||
let config = stack.get_config(engine_state);
|
||||
|
||||
@ -43,7 +49,12 @@ impl Command for ToText {
|
||||
PipelineData::Empty => Ok(Value::string(String::new(), span)
|
||||
.into_pipeline_data_with_metadata(update_metadata(None))),
|
||||
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(
|
||||
Value::string(str, span)
|
||||
.into_pipeline_data_with_metadata(update_metadata(None)),
|
||||
@ -53,7 +64,9 @@ impl Command for ToText {
|
||||
let span = stream.span();
|
||||
let iter = stream.into_inner().map(move |value| {
|
||||
let mut str = local_into_string(value, LINE_ENDING, &config);
|
||||
if !no_newline {
|
||||
str.push_str(LINE_ENDING);
|
||||
}
|
||||
str
|
||||
});
|
||||
Ok(PipelineData::ByteStream(
|
||||
@ -75,8 +88,13 @@ impl Command for ToText {
|
||||
fn examples(&self) -> Vec<Example> {
|
||||
vec![
|
||||
Example {
|
||||
description: "Outputs data as simple text",
|
||||
example: "1 | to text",
|
||||
description: "Outputs data as simple text with a newline",
|
||||
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")),
|
||||
},
|
||||
Example {
|
||||
|
@ -415,7 +415,7 @@ fn save_with_custom_converter() {
|
||||
|
||||
nu!(cwd: dirs.test(), pipeline(
|
||||
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
|
||||
"#
|
||||
));
|
||||
|
Loading…
Reference in New Issue
Block a user