yog_script_analyze/
lib.rs1mod source;
7
8pub use source::token;
9
10pub mod ast;
11pub mod index;
12mod lexer;
13pub mod parser;
14pub mod resolve;
15pub mod words;
16
17use std::path::Path;
18
19use yog_data::Diagnostic;
20use yog_ids::Format;
21
22#[derive(Debug)]
24pub struct Parsed {
25 pub file: ast::File,
26 pub problems: Vec<Diagnostic>,
27}
28
29#[derive(Debug)]
31pub struct Checked {
32 pub file: ast::File,
33 pub symbols: resolve::Symbols,
34 pub problems: Vec<Diagnostic>,
35}
36
37#[must_use]
40pub fn parse(name: &str, src: &str) -> Parsed {
41 let mut report = yog_analysis::Report::new(name, src);
42 let file = read(name, src, &mut report);
43 Parsed {
44 file,
45 problems: report.out,
46 }
47}
48
49#[must_use]
52pub fn check(name: &str, src: &str) -> Checked {
53 let mut report = yog_analysis::Report::new(name, src);
54 let file = read(name, src, &mut report);
55 let symbols = resolve::resolve(&file, &mut report);
56 Checked {
57 file,
58 symbols,
59 problems: report.out,
60 }
61}
62
63fn read(name: &str, src: &str, report: &mut yog_analysis::Report<'_>) -> ast::File {
64 let nanites = Format::Nanites.is(Path::new(name));
65 let tokens = lexer::lex(src, report);
66 parser::Parser::new(&tokens, report, nanites).file()
67}