scribe_selection/
context.rs1use crate::selector::SelectionResult;
4use scribe_core::Result;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct ContextOptions {
9 pub include_dependencies: bool,
11 pub max_depth: usize,
13}
14
15impl Default for ContextOptions {
16 fn default() -> Self {
17 Self {
18 include_dependencies: true,
19 max_depth: 3,
20 }
21 }
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct ContextFile {
26 pub path: String,
28 pub contents: Option<String>,
30 pub token_estimate: Option<usize>,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct CodeContext {
36 pub files: Vec<ContextFile>,
38 pub dependencies: Vec<String>,
40 pub total_tokens: usize,
42}
43
44pub struct ContextExtractor;
45
46impl ContextExtractor {
47 pub fn new() -> Self {
48 Self
49 }
50
51 pub async fn extract(
52 &self,
53 selection: &SelectionResult,
54 _options: &ContextOptions,
55 ) -> Result<CodeContext> {
56 let files = selection
57 .files
58 .iter()
59 .map(|file| ContextFile {
60 path: file.relative_path.clone(),
61 contents: file.content.clone(),
62 token_estimate: file.token_estimate,
63 })
64 .collect();
65
66 Ok(CodeContext {
67 files,
68 dependencies: Vec::new(),
69 total_tokens: selection.total_tokens_used,
70 })
71 }
72}
73
74impl Default for ContextExtractor {
75 fn default() -> Self {
76 Self::new()
77 }
78}