use std::collections::{HashMap, HashSet};
use ls_types::*;
use super::pretty::PrettyInfo;
#[derive(Debug, Clone)]
pub struct RuleInfo {
pub name: String,
pub name_span: (usize, usize),
pub full_span: (usize, usize),
pub rhs_text: String,
pub references: Vec<ReferenceInfo>,
}
#[derive(Debug, Clone)]
pub struct ReferenceInfo {
pub name: String,
pub span: (usize, usize),
}
#[derive(Debug, Clone)]
pub struct SemanticTokenInfo {
pub span: (usize, usize),
pub token_type: u32,
}
#[derive(Debug, Clone)]
pub struct ImportInfo {
pub path: String,
pub span: (usize, usize),
pub items: Option<Vec<String>>,
}
#[derive(Debug, Clone)]
pub struct RecoverInfo {
pub rule_name: String,
pub span: (usize, usize),
pub rule_name_span: (usize, usize),
pub sync_expr_text: String,
}
#[derive(Debug, Clone)]
pub struct NoCollapseInfo {
pub rule_name: String,
pub span: (usize, usize),
pub rule_name_span: (usize, usize),
}
#[derive(Debug, Clone)]
pub struct DocumentInfo {
pub rules: Vec<RuleInfo>,
pub diagnostics: Vec<Diagnostic>,
pub rule_index: HashMap<String, usize>,
pub semantic_tokens: Vec<SemanticTokenInfo>,
pub first_set_labels: HashMap<String, String>,
pub nullable_rules: HashSet<String>,
pub cyclic_rule_paths: HashMap<String, String>,
pub imports: Vec<ImportInfo>,
pub recovers: Vec<RecoverInfo>,
pub no_collapses: Vec<NoCollapseInfo>,
pub pretties: Vec<PrettyInfo>,
}
#[derive(Debug, Clone)]
pub struct ParseDiagnostics {
pub offset: usize,
pub furthest_offset: usize,
pub panic_message: Option<String>,
}
pub mod token_types {
pub const RULE_DEFINITION: u32 = 0;
pub const RULE_REFERENCE: u32 = 1;
pub const STRING: u32 = 2;
pub const REGEXP: u32 = 3;
pub const KEYWORD: u32 = 5;
}