Start working on highlighter

This commit is contained in:
JT 2021-07-22 19:48:45 +12:00
parent 1ac0c0bfc5
commit 07c22c7e81
3 changed files with 38 additions and 22 deletions

View File

@ -74,7 +74,7 @@ fn main() -> std::io::Result<()> {
.required("y", SyntaxShape::Int, "y value"); .required("y", SyntaxShape::Int, "y value");
working_set.add_decl(sig.into()); working_set.add_decl(sig.into());
working_set.delta working_set.render()
}; };
{ {
@ -134,7 +134,7 @@ fn main() -> std::io::Result<()> {
); );
println!("{:#?}", output); println!("{:#?}", output);
println!("Error: {:?}", err); println!("Error: {:?}", err);
working_set.delta working_set.render()
}; };
ParserState::merge_delta(&mut *parser_state.borrow_mut(), delta); ParserState::merge_delta(&mut *parser_state.borrow_mut(), delta);

View File

@ -1,5 +1,5 @@
use crate::{parser::Block, Declaration, Span}; use crate::{parser::Block, Declaration, Span};
use std::{cell::RefCell, collections::HashMap, rc::Rc, sync::Arc}; use std::collections::HashMap;
#[derive(Debug)] #[derive(Debug)]
pub struct ParserState { pub struct ParserState {
@ -327,6 +327,10 @@ impl<'a> ParserWorkingSet<'a> {
self.delta.decls.get(decl_id - num_permanent_decls).cloned() self.delta.decls.get(decl_id - num_permanent_decls).cloned()
} }
} }
pub fn render(self) -> ParserDelta {
self.delta
}
} }
#[cfg(test)] #[cfg(test)]
@ -362,7 +366,7 @@ mod parser_state_tests {
let delta = { let delta = {
let mut working_set = ParserWorkingSet::new(&parser_state); let mut working_set = ParserWorkingSet::new(&parser_state);
working_set.add_file("child.nu".into(), &[]); working_set.add_file("child.nu".into(), &[]);
working_set.delta working_set.render()
}; };
ParserState::merge_delta(&mut parser_state, delta); ParserState::merge_delta(&mut parser_state, delta);

View File

@ -1,24 +1,36 @@
use std::sync::Arc; use std::{cell::RefCell, rc::Rc};
use crate::{Block, Expr, Expression, ParserState, ParserWorkingSet, Statement}; use crate::{Block, Expr, Expression, ParserState, ParserWorkingSet, Statement};
fn syntax_highlight<'a, 'b>(parser_state: &'a ParserState, input: &'b [u8]) { struct Highlighter {
// let mut working_set = ParserWorkingSet::new(parser_state); parser_state: Rc<RefCell<ParserState>>,
// let (block, _) = working_set.parse_source(input, false);
// for stmt in &block.stmts {
// match stmt {
// Statement::Expression(expr) => {
// }
// }
// }
// No merge at the end because this parse is speculative
} }
fn highlight_expression(expression: &Expression) { impl Highlighter {
// match &expression.expr { fn syntax_highlight(&self, input: &[u8]) {
// Expr::BinaryOp() let block = {
// } let parser_state = self.parser_state.borrow();
let mut working_set = ParserWorkingSet::new(&*parser_state);
let (block, _) = working_set.parse_source(input, false);
block
};
// let (block, _) = working_set.parse_source(input, false);
// for stmt in &block.stmts {
// match stmt {
// Statement::Expression(expr) => {
// }
// }
// }
// No merge at the end because this parse is speculative
}
fn highlight_expression(expression: &Expression) {
// match &expression.expr {
// Expr::BinaryOp()
// }
}
} }