Fix print_table_or_error when table is overridden (#6130)

Related #6113

Signed-off-by: nibon7 <nibon7@163.com>
This commit is contained in:
nibon7 2022-07-26 09:11:46 +08:00 committed by GitHub
parent 72c27bd095
commit 86a0e77065
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 14 deletions

View file

@ -77,23 +77,28 @@ pub fn print_table_or_error(
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,
);
let command = engine_state.get_decl(decl_id);
if command.get_block_id().is_some() {
print_or_exit(pipeline_data, engine_state, config);
} else {
let table = command.run(
engine_state,
stack,
&Call::new(Span::new(0, 0)),
pipeline_data,
);
match table {
Ok(table) => {
print_or_exit(table, engine_state, config);
}
Err(error) => {
let working_set = StateWorkingSet::new(engine_state);
match table {
Ok(table) => {
print_or_exit(table, engine_state, config);
}
Err(error) => {
let working_set = StateWorkingSet::new(engine_state);
report_error(&working_set, &error);
report_error(&working_set, &error);
std::process::exit(1);
std::process::exit(1);
}
}
}
}

View file

@ -1,4 +1,5 @@
use crate::tests::{fail_test, run_test, run_test_contains, TestResult};
use nu_test_support::nu;
#[test]
fn no_scope_leak1() -> TestResult {
@ -135,3 +136,9 @@ fn help_not_present_in_extern() -> TestResult {
fn override_table() -> TestResult {
run_test(r#"def table [] { "hi" }; table"#, "hi")
}
#[test]
fn override_table_eval_file() {
let actual = nu!(cwd: ".", r#"def table [] { "hi" }; table"#);
assert_eq!(actual.out, "hi");
}