use only_diagnostic::Diagnostic;
use crate::ast_view::DocumentNode;
use crate::parse::parse_tokens;
use crate::{LexToken, ParseResult, ParseResultExt, SyntaxNode, lex};
#[derive(Debug, Clone)]
pub struct SyntaxSnapshot {
pub tokens: Vec<LexToken>,
pub parse: ParseResult,
}
impl SyntaxSnapshot {
pub fn document(&self) -> DocumentNode {
self.parse.document()
}
pub fn root(&self) -> &SyntaxNode {
&self.parse.root
}
pub fn diagnostics(&self) -> &[Diagnostic] {
self.parse.diagnostics()
}
}
pub fn snapshot(source: &str) -> SyntaxSnapshot {
let tokens = lex(source);
let parse = parse_tokens(&tokens);
SyntaxSnapshot { tokens, parse }
}