use rowan::TextRange;
use super::Scope;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct SymbolManifest {
pub knots: Vec<DeclaredSymbol>,
pub stitches: Vec<DeclaredSymbol>,
pub variables: Vec<DeclaredSymbol>,
pub constants: Vec<DeclaredSymbol>,
pub lists: Vec<DeclaredSymbol>,
pub externals: Vec<DeclaredSymbol>,
pub labels: Vec<DeclaredSymbol>,
pub list_items: Vec<DeclaredSymbol>,
pub locals: Vec<LocalSymbol>,
pub unresolved: Vec<UnresolvedRef>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DeclaredSymbol {
pub name: String,
pub range: TextRange,
pub params: Vec<super::ParamInfo>,
pub detail: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LocalSymbol {
pub name: String,
pub range: TextRange,
pub scope: Scope,
pub kind: super::SymbolKind,
pub param_detail: Option<super::ParamInfo>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct UnresolvedRef {
pub path: String,
pub range: TextRange,
pub kind: RefKind,
pub scope: Scope,
pub arg_count: Option<usize>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum RefKind {
Divert,
Variable,
Function,
List,
}