fix empty table and missing spans (#1614)

This commit is contained in:
Jonathan Turner
2020-04-20 19:44:19 +12:00
committed by GitHub
parent eec94e4016
commit 2ffb14c7d0
7 changed files with 17 additions and 82 deletions

View File

@ -1,5 +1,5 @@
use crate::commands::classified::expr::run_expression_block;
use crate::commands::classified::external::run_external_command;
//use crate::commands::classified::external::run_external_command;
use crate::commands::classified::internal::run_internal_command;
use crate::context::Context;
use crate::prelude::*;
@ -81,14 +81,6 @@ async fn run_pipeline(
run_internal_command(left, ctx, input, scope)?
}
(Some(ClassifiedCommand::External(left)), None) => {
run_external_command(left, ctx, input, scope, true).await?
}
(Some(ClassifiedCommand::External(left)), _) => {
run_external_command(left, ctx, input, scope, false).await?
}
(None, _) => break,
};
}

View File

@ -1,50 +0,0 @@
use crate::commands::classified::expr::run_expression_block;
use crate::commands::classified::external::run_external_command;
use crate::commands::classified::internal::run_internal_command;
use crate::context::Context;
use crate::stream::InputStream;
use nu_errors::ShellError;
use nu_protocol::hir::{ClassifiedCommand, ClassifiedPipeline};
use nu_protocol::Scope;
pub(crate) async fn run_pipeline(
pipeline: ClassifiedPipeline,
ctx: &mut Context,
mut input: InputStream,
scope: &Scope,
) -> Result<InputStream, ShellError> {
let mut iter = pipeline.commands.list.into_iter().peekable();
loop {
let item: Option<ClassifiedCommand> = iter.next();
let next: Option<&ClassifiedCommand> = iter.peek();
input = match (item, next) {
(Some(ClassifiedCommand::Dynamic(_)), _) | (_, Some(ClassifiedCommand::Dynamic(_))) => {
return Err(ShellError::unimplemented("Dynamic commands"))
}
(Some(ClassifiedCommand::Expr(expr)), _) => {
run_expression_block(*expr, ctx, input, scope)?
}
(Some(ClassifiedCommand::Error(err)), _) => return Err(err.into()),
(_, Some(ClassifiedCommand::Error(err))) => return Err(err.clone().into()),
(Some(ClassifiedCommand::Internal(left)), _) => {
run_internal_command(left, ctx, input, scope)?
}
(Some(ClassifiedCommand::External(left)), None) => {
run_external_command(left, ctx, input, scope, true).await?
}
(Some(ClassifiedCommand::External(left)), _) => {
run_external_command(left, ctx, input, scope, false).await?
}
(None, _) => break,
};
}
Ok(input)
}

View File

@ -55,13 +55,6 @@ impl PerItemCommand for Each {
).await;
match result {
Ok(stream) if stream.is_empty() => {
yield Err(ShellError::labeled_error(
"Expected a block",
"each needs a block",
tag,
));
}
Ok(mut stream) => {
let errors = context.get_errors();
if let Some(error) = errors.first() {

View File

@ -63,15 +63,15 @@ impl WholeStreamCommand for RunExternalCommand {
let command = ExternalCommand {
name,
name_tag: Tag::unknown(),
name_tag: args.call_info.name_tag.clone(),
args: ExternalArgs {
list: command_args
.map(|arg| ExternalArg {
arg: spanned_expression_to_string(arg),
tag: Tag::unknown(),
tag: Tag::unknown_anchor(arg.span),
})
.collect(),
span: Default::default(),
span: args.call_info.args.span,
},
};