1mod analyze;
2mod elements;
3pub mod markdown;
4mod parse;
5mod record_keys;
6mod symbols;
7mod top_level;
8pub mod utf16;
9
10pub use gram_diagnostics::{Diagnostic, FileResult, LintResult, Position, Range, Severity};
11pub use parse::parse;
12pub use symbols::SymbolIndex;
13
14pub mod lint {
15 use std::path::Path;
16
17 pub use gram_diagnostics::{Diagnostic, Severity};
18
19 pub struct LintOptions {
20 pub strict: bool,
21 }
22
23 pub fn lint_source(source: &str, _opts: &LintOptions) -> Vec<Diagnostic> {
24 let (_, raw) = crate::analyze::analyze_source(source);
25 raw.iter().map(|d| crate::analyze::to_public(source, d)).collect()
26 }
27
28 pub fn lint_file(path: &Path, opts: &LintOptions) -> anyhow::Result<Vec<Diagnostic>> {
29 let source = std::fs::read_to_string(path)?;
30 Ok(lint_source(&source, opts))
31 }
32}