1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use nu_protocol::{
ast::Block,
engine::{EngineState, StateWorkingSet},
PipelineData, Span,
};
use crate::error::{CrateError, CrateResult};
pub trait NewEmpty {
fn empty() -> Self;
}
impl NewEmpty for Span {
#[inline]
fn empty() -> Self {
Span::new(0, 0)
}
}
impl NewEmpty for PipelineData {
#[inline]
fn empty() -> Self {
Self::new(Span::empty())
}
}
pub fn parse_nu_script(engine_state: &mut EngineState, contents: String) -> CrateResult<Block> {
let mut working_set = StateWorkingSet::new(&engine_state);
let (block, err) = nu_parser::parse(&mut working_set, None, &contents.into_bytes(), false, &[]);
if let Some(err) = err {
Err(CrateError::from(err))
} else {
let delta = working_set.render();
engine_state.merge_delta(delta)?;
Ok(block)
}
}