Split nu-cli into nu-cli/nu-engine (#2898)

We split off the evaluation engine part of nu-cli into its own crate. This helps improve build times for nu-cli by 17% in my tests. It also helps us see a bit better what's the core engine portion vs the part specific to the interactive CLI piece.

There's more than can be done here, but I think it's a good start in the right direction.
This commit is contained in:
Jonathan Turner
2021-01-10 15:50:49 +13:00
committed by GitHub
parent 9de2144fc4
commit 93e8f6c05e
280 changed files with 1890 additions and 1750 deletions

View File

@@ -2,7 +2,7 @@ use crate::prelude::*;
use futures::stream::iter;
use nu_errors::ShellError;
use nu_protocol::{Primitive, Type, UntaggedValue, Value};
use nu_source::{PrettyDebug, Tag, Tagged, TaggedItem};
use nu_source::{HasFallibleSpan, PrettyDebug, Tag, Tagged, TaggedItem};
pub struct InputStream {
values: BoxStream<'static, Value>,
@@ -174,3 +174,23 @@ impl From<Vec<Value>> for InputStream {
}
}
}
pub trait ToInputStream {
fn to_input_stream(self) -> InputStream;
}
impl<T, U> ToInputStream for T
where
T: Stream<Item = U> + Send + 'static,
U: Into<Result<nu_protocol::Value, nu_errors::ShellError>>,
{
fn to_input_stream(self) -> InputStream {
InputStream::from_stream(self.map(|item| match item.into() {
Ok(result) => result,
Err(err) => match HasFallibleSpan::maybe_span(&err) {
Some(span) => nu_protocol::UntaggedValue::Error(err).into_value(span),
None => nu_protocol::UntaggedValue::Error(err).into_untagged_value(),
},
}))
}
}

View File

@@ -33,3 +33,16 @@ impl<V> Stream for InterruptibleStream<V> {
}
}
}
pub trait Interruptible<V> {
fn interruptible(self, ctrl_c: Arc<AtomicBool>) -> InterruptibleStream<V>;
}
impl<S, V> Interruptible<V> for S
where
S: Stream<Item = V> + Send + 'static,
{
fn interruptible(self, ctrl_c: Arc<AtomicBool>) -> InterruptibleStream<V> {
InterruptibleStream::new(self, ctrl_c)
}
}

View File

@@ -7,3 +7,4 @@ mod output;
pub use input::*;
pub use interruptible::*;
pub use output::*;
pub use prelude::ToOutputStream;

View File

@@ -36,7 +36,7 @@ macro_rules! trace_stream {
);
});
$crate::stream::InputStream::from_stream(objects.boxed())
nu_stream::InputStream::from_stream(objects.boxed())
} else {
$expr
}