Some function stuff

It's not done, but honestly it's getting too tedious. I will need to
rethink how I'm doing it.
This commit is contained in:
Yehuda Katz
2019-06-10 12:13:29 -07:00
parent 3f3ea4153a
commit 2b876da56f
13 changed files with 14927 additions and 3467 deletions

View File

@ -9,14 +9,33 @@ crate use ast::Pipeline;
crate use registry::{Args, CommandConfig};
use crate::errors::ShellError;
use ast::Module;
use lexer::Lexer;
use log::trace;
use parser::PipelineParser;
use parser::{ModuleParser, ReplLineParser};
pub fn parse(input: &str) -> Result<Pipeline, ShellError> {
let _ = pretty_env_logger::try_init();
let parser = PipelineParser::new();
let parser = ReplLineParser::new();
let tokens = Lexer::new(input, false);
trace!(
"Tokens: {:?}",
tokens.clone().collect::<Result<Vec<_>, _>>()
);
match parser.parse(tokens) {
Ok(val) => Ok(val),
Err(err) => Err(ShellError::parse_error(err)),
}
}
#[allow(unused)]
pub fn parse_module(input: &str) -> Result<Module, ShellError> {
let _ = pretty_env_logger::try_init();
let parser = ModuleParser::new();
let tokens = Lexer::new(input, false);
trace!(
@ -62,6 +81,44 @@ mod tests {
assert_eq!(parsed, expected);
assert_eq!(printed, source);
let span = expected.span;
let expected_module = ModuleBuilder::spanned_items(
vec![Spanned::from_item(RawItem::Expression(expected), span)],
span.start,
span.end,
);
assert_parse_module(source, expected_module);
}
fn assert_parse_module(source: &str, expected: Module) {
let parsed = match parse_module(source) {
Ok(p) => p,
Err(ShellError::Diagnostic(diag)) => {
use language_reporting::termcolor;
let writer = termcolor::StandardStream::stdout(termcolor::ColorChoice::Auto);
let files = crate::parser::span::Files::new(source.to_string());
language_reporting::emit(
&mut writer.lock(),
&files,
&diag.diagnostic,
&language_reporting::DefaultConfig,
)
.unwrap();
panic!("Test failed")
}
Err(err) => panic!("Something went wrong during parse: {:#?}", err),
};
let printed = parsed.print();
assert_eq!(parsed, expected);
assert_eq!(printed, source);
}
macro_rules! commands {
@ -214,4 +271,8 @@ mod tests {
],
)
}
use crate::parser::ast::{ModuleBuilder, RawItem};
use crate::parser::lexer::Spanned;
}