#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Span {
pub start_byte: usize,
pub end_byte: usize,
pub start_line: usize,
pub start_column: usize,
pub end_line: usize,
pub end_column: usize,
}
#[derive(Debug, Clone, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ProcessResult {
pub language: String,
pub metrics: FileMetrics,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty", default))]
pub structure: Vec<StructureItem>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty", default))]
pub imports: Vec<ImportInfo>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty", default))]
pub exports: Vec<ExportInfo>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty", default))]
pub comments: Vec<CommentInfo>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty", default))]
pub docstrings: Vec<DocstringInfo>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty", default))]
pub symbols: Vec<SymbolInfo>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty", default))]
pub diagnostics: Vec<Diagnostic>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty", default))]
pub chunks: Vec<CodeChunk>,
#[cfg_attr(
feature = "serde",
serde(skip_serializing_if = "crate::extract::ahashmap_is_empty", default)
)]
pub extractions: ahash::AHashMap<String, crate::extract::PatternResult>,
}
#[derive(Debug, Clone, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct FileMetrics {
pub total_lines: usize,
pub code_lines: usize,
pub comment_lines: usize,
pub blank_lines: usize,
pub total_bytes: usize,
pub node_count: usize,
pub error_count: usize,
pub max_depth: usize,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum StructureKind {
Function,
Method,
Class,
Struct,
Interface,
Enum,
Module,
Trait,
Impl,
Namespace,
Other(String),
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct StructureItem {
pub kind: StructureKind,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub name: Option<String>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none", default))]
pub visibility: Option<String>,
pub span: Span,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty", default))]
pub children: Vec<StructureItem>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty", default))]
pub decorators: Vec<String>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none", default))]
pub doc_comment: Option<String>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none", default))]
pub signature: Option<String>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub body_span: Option<Span>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum CommentKind {
Line,
Block,
Doc,
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CommentInfo {
pub text: String,
pub kind: CommentKind,
pub span: Span,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub associated_node: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum DocstringFormat {
PythonTripleQuote,
JSDoc,
Rustdoc,
GoDoc,
JavaDoc,
Other(String),
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DocstringInfo {
pub text: String,
pub format: DocstringFormat,
pub span: Span,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub associated_item: Option<String>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty", default))]
pub parsed_sections: Vec<DocSection>,
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DocSection {
pub kind: String,
pub name: Option<String>,
pub description: String,
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ImportInfo {
pub source: String,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty", default))]
pub items: Vec<String>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none", default))]
pub alias: Option<String>,
pub is_wildcard: bool,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ExportKind {
Named,
Default,
ReExport,
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ExportInfo {
pub name: String,
pub kind: ExportKind,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum SymbolKind {
Variable,
Constant,
Function,
Class,
Type,
Interface,
Enum,
Module,
Other(String),
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SymbolInfo {
pub name: String,
pub kind: SymbolKind,
pub span: Span,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub type_annotation: Option<String>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none", default))]
pub doc: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum DiagnosticSeverity {
Error,
Warning,
Info,
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Diagnostic {
pub message: String,
pub severity: DiagnosticSeverity,
pub span: Span,
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CodeChunk {
pub content: String,
pub start_byte: usize,
pub end_byte: usize,
pub start_line: usize,
pub end_line: usize,
pub metadata: ChunkContext,
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ChunkContext {
pub language: String,
pub chunk_index: usize,
pub total_chunks: usize,
pub node_types: Vec<String>,
pub context_path: Vec<String>,
pub symbols_defined: Vec<String>,
pub comments: Vec<CommentInfo>,
pub docstrings: Vec<DocstringInfo>,
pub has_error_nodes: bool,
}