use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum CodeContentMode {
#[default]
Chunks,
Raw,
Structure,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TreeSitterConfig {
#[serde(default = "default_true")]
pub enabled: bool,
#[serde(default)]
pub cache_dir: Option<PathBuf>,
#[serde(default)]
pub languages: Option<Vec<String>>,
#[serde(default)]
pub groups: Option<Vec<String>>,
#[serde(default)]
pub process: TreeSitterProcessConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TreeSitterProcessConfig {
#[serde(default = "default_true")]
pub structure: bool,
#[serde(default = "default_true")]
pub imports: bool,
#[serde(default = "default_true")]
pub exports: bool,
#[serde(default)]
pub comments: bool,
#[serde(default)]
pub docstrings: bool,
#[serde(default)]
pub symbols: bool,
#[serde(default)]
pub diagnostics: bool,
#[serde(default)]
pub chunk_max_size: Option<usize>,
#[serde(default)]
pub content_mode: CodeContentMode,
}
impl Default for TreeSitterConfig {
fn default() -> Self {
Self {
enabled: true,
cache_dir: None,
languages: None,
groups: None,
process: TreeSitterProcessConfig::default(),
}
}
}
impl Default for TreeSitterProcessConfig {
fn default() -> Self {
Self {
structure: true,
imports: true,
exports: true,
comments: false,
docstrings: false,
symbols: false,
diagnostics: false,
chunk_max_size: None,
content_mode: CodeContentMode::default(),
}
}
}
fn default_true() -> bool {
true
}
impl From<&TreeSitterProcessConfig> for tree_sitter_language_pack::ProcessConfig {
fn from(p: &TreeSitterProcessConfig) -> Self {
Self {
language: std::borrow::Cow::Borrowed(""),
structure: p.structure,
imports: p.imports,
exports: p.exports,
comments: p.comments,
docstrings: p.docstrings,
symbols: p.symbols,
diagnostics: p.diagnostics,
chunk_max_size: p.chunk_max_size,
extractions: None,
}
}
}