mirror of
https://github.com/nushell/nushell.git
synced 2025-08-10 03:17:58 +02:00
Use 'table' on scripts and -c commands (#4377)
* Use 'table' on scripts and -c commands * Fix tests * Oops, missed a spot
This commit is contained in:
@ -112,16 +112,7 @@ pub(crate) fn evaluate(
|
||||
|
||||
match eval_block(engine_state, &mut stack, &block, input) {
|
||||
Ok(pipeline_data) => {
|
||||
for item in pipeline_data {
|
||||
if let Value::Error { error } = item {
|
||||
let working_set = StateWorkingSet::new(engine_state);
|
||||
|
||||
report_error(&working_set, &error);
|
||||
|
||||
std::process::exit(1);
|
||||
}
|
||||
println!("{}", item.into_string("\n", &config));
|
||||
}
|
||||
crate::eval_file::print_table_or_error(engine_state, &mut stack, pipeline_data, &config)
|
||||
}
|
||||
Err(err) => {
|
||||
let working_set = StateWorkingSet::new(engine_state);
|
||||
|
@ -3,10 +3,11 @@ use miette::{IntoDiagnostic, Result};
|
||||
use nu_engine::{convert_env_values, eval_block};
|
||||
use nu_parser::parse;
|
||||
use nu_protocol::{
|
||||
engine::{EngineState, StateDelta, StateWorkingSet},
|
||||
ast::Call,
|
||||
engine::{EngineState, Stack, StateDelta, StateWorkingSet},
|
||||
Config, PipelineData, Span, Value, CONFIG_VARIABLE_ID,
|
||||
};
|
||||
use std::path::PathBuf;
|
||||
use std::{io::Write, path::PathBuf};
|
||||
|
||||
use crate::utils::{gather_parent_env_vars, report_error};
|
||||
|
||||
@ -89,16 +90,7 @@ pub(crate) fn evaluate(
|
||||
// We don't have a main, so evaluate the whole file
|
||||
match eval_block(engine_state, &mut stack, &block, input) {
|
||||
Ok(pipeline_data) => {
|
||||
for item in pipeline_data {
|
||||
if let Value::Error { error } = item {
|
||||
let working_set = StateWorkingSet::new(engine_state);
|
||||
|
||||
report_error(&working_set, &error);
|
||||
|
||||
std::process::exit(1);
|
||||
}
|
||||
println!("{}", item.into_string("\n", &config));
|
||||
}
|
||||
print_table_or_error(engine_state, &mut stack, pipeline_data, &config)
|
||||
}
|
||||
Err(err) => {
|
||||
let working_set = StateWorkingSet::new(engine_state);
|
||||
@ -131,16 +123,7 @@ pub(crate) fn evaluate(
|
||||
|
||||
match eval_block(engine_state, &mut stack, &block, input) {
|
||||
Ok(pipeline_data) => {
|
||||
for item in pipeline_data {
|
||||
if let Value::Error { error } = item {
|
||||
let working_set = StateWorkingSet::new(engine_state);
|
||||
|
||||
report_error(&working_set, &error);
|
||||
|
||||
std::process::exit(1);
|
||||
}
|
||||
println!("{}", item.into_string("\n", &config));
|
||||
}
|
||||
print_table_or_error(engine_state, &mut stack, pipeline_data, &config)
|
||||
}
|
||||
Err(err) => {
|
||||
let working_set = StateWorkingSet::new(engine_state);
|
||||
@ -154,3 +137,73 @@ pub(crate) fn evaluate(
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn print_table_or_error(
|
||||
engine_state: &EngineState,
|
||||
stack: &mut Stack,
|
||||
pipeline_data: PipelineData,
|
||||
config: &Config,
|
||||
) {
|
||||
match engine_state.find_decl("table".as_bytes()) {
|
||||
Some(decl_id) => {
|
||||
let table = engine_state.get_decl(decl_id).run(
|
||||
engine_state,
|
||||
stack,
|
||||
&Call::new(Span::new(0, 0)),
|
||||
pipeline_data,
|
||||
);
|
||||
|
||||
match table {
|
||||
Ok(table) => {
|
||||
for item in table {
|
||||
let stdout = std::io::stdout();
|
||||
|
||||
if let Value::Error { error } = item {
|
||||
let working_set = StateWorkingSet::new(engine_state);
|
||||
|
||||
report_error(&working_set, &error);
|
||||
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
let mut out = item.into_string("\n", config);
|
||||
out.push('\n');
|
||||
|
||||
match stdout.lock().write_all(out.as_bytes()) {
|
||||
Ok(_) => (),
|
||||
Err(err) => eprintln!("{}", err),
|
||||
};
|
||||
}
|
||||
}
|
||||
Err(error) => {
|
||||
let working_set = StateWorkingSet::new(engine_state);
|
||||
|
||||
report_error(&working_set, &error);
|
||||
|
||||
std::process::exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
None => {
|
||||
for item in pipeline_data {
|
||||
let stdout = std::io::stdout();
|
||||
|
||||
if let Value::Error { error } = item {
|
||||
let working_set = StateWorkingSet::new(engine_state);
|
||||
|
||||
report_error(&working_set, &error);
|
||||
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
let mut out = item.into_string("\n", config);
|
||||
out.push('\n');
|
||||
|
||||
match stdout.lock().write_all(out.as_bytes()) {
|
||||
Ok(_) => (),
|
||||
Err(err) => eprintln!("{}", err),
|
||||
};
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -22,7 +22,10 @@ fn cell_path_var2() -> TestResult {
|
||||
|
||||
#[test]
|
||||
fn flatten_simple_list() -> TestResult {
|
||||
run_test("[[N, u, s, h, e, l, l]] | flatten", "N\nu\ns\nh\ne\nl\nl")
|
||||
run_test(
|
||||
"[[N, u, s, h, e, l, l]] | flatten | str collect (char nl)",
|
||||
"N\nu\ns\nh\ne\nl\nl",
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -33,7 +36,7 @@ fn flatten_get_simple_list() -> TestResult {
|
||||
#[test]
|
||||
fn flatten_table_get() -> TestResult {
|
||||
run_test(
|
||||
"[[origin, people]; [Ecuador, ([[name, meal]; ['Andres', 'arepa']])]] | flatten | get meal",
|
||||
"[[origin, people]; [Ecuador, ([[name, meal]; ['Andres', 'arepa']])]] | flatten | get meal.0",
|
||||
"arepa",
|
||||
)
|
||||
}
|
||||
@ -41,7 +44,7 @@ fn flatten_table_get() -> TestResult {
|
||||
#[test]
|
||||
fn flatten_table_column_get_last() -> TestResult {
|
||||
run_test(
|
||||
"[[origin, crate, versions]; [World, ([[name]; ['nu-cli']]), ['0.21', '0.22']]] | flatten versions | last | get versions",
|
||||
"[[origin, crate, versions]; [World, ([[name]; ['nu-cli']]), ['0.21', '0.22']]] | flatten versions | last | get versions.0",
|
||||
"0.22",
|
||||
)
|
||||
}
|
||||
@ -56,7 +59,7 @@ fn get_table_columns_1() -> TestResult {
|
||||
|
||||
#[test]
|
||||
fn get_table_columns_2() -> TestResult {
|
||||
run_test("[[name, age, grade]; [paul,21,a]] | columns | nth 1", "age")
|
||||
run_test("[[name, age, grade]; [paul,21,a]] | columns | get 1", "age")
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
Reference in New Issue
Block a user