1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use nu_parser::{parse, ParseError};
use nu_protocol::engine::{EngineState, StateWorkingSet};
use reedline::{ValidationResult, Validator};

pub struct NuValidator {
    pub engine_state: EngineState,
}

impl Validator for NuValidator {
    fn validate(&self, line: &str) -> ValidationResult {
        let mut working_set = StateWorkingSet::new(&self.engine_state);
        let (_, err) = parse(&mut working_set, None, line.as_bytes(), false, &[]);

        if matches!(err, Some(ParseError::UnexpectedEof(..))) {
            ValidationResult::Incomplete
        } else {
            ValidationResult::Complete
        }
    }
}