pub type NodeId = u32;
pub type ScopeId = String;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SourceSpan {
pub start_line: u32,
pub start_column: u32,
pub end_line: u32,
pub end_column: u32,
}
#[derive(Debug, Clone)]
pub struct NodeCore {
pub id: NodeId,
pub name: String,
pub scope: Option<ScopeId>,
pub context_size: u32, pub span: SourceSpan,
pub doc_score: f32, pub is_external: bool,
pub file_path: String, }
impl NodeCore {
#[allow(clippy::too_many_arguments)]
pub fn new(
id: NodeId,
name: String,
scope: Option<ScopeId>,
context_size: u32,
span: SourceSpan,
doc_score: f32,
is_external: bool,
file_path: String,
) -> Self {
Self {
id,
name,
scope,
context_size,
span,
doc_score,
is_external,
file_path,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Visibility {
Public,
Private,
Protected,
Internal,
}
#[derive(Debug, Clone)]
pub struct FunctionNode {
pub core: NodeCore,
pub param_count: u32,
pub typed_param_count: u32,
pub has_return_type: bool,
pub is_async: bool,
pub is_generator: bool,
pub visibility: Visibility,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Mutability {
Const, Immutable, Mutable, }
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum VariableKind {
Global, ClassField, }
#[derive(Debug, Clone)]
pub struct VariableNode {
pub core: NodeCore,
pub has_type_annotation: bool,
pub mutability: Mutability,
pub variable_kind: VariableKind,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum TypeKind {
Class,
Interface, Protocol, Struct,
Enum,
TypeAlias, FunctionType, Union, Intersection, }
#[derive(Debug, Clone)]
pub struct TypeNode {
pub core: NodeCore,
pub type_kind: TypeKind,
pub is_abstract: bool,
pub type_param_count: u32, }
#[derive(Debug, Clone)]
pub enum Node {
Function(FunctionNode),
Variable(VariableNode),
Type(TypeNode),
}
impl Node {
pub fn core(&self) -> &NodeCore {
match self {
Node::Function(f) => &f.core,
Node::Variable(v) => &v.core,
Node::Type(t) => &t.core,
}
}
pub fn core_mut(&mut self) -> &mut NodeCore {
match self {
Node::Function(f) => &mut f.core,
Node::Variable(v) => &mut v.core,
Node::Type(t) => &mut t.core,
}
}
}