vtcode_core/code/code_completion/languages/
mod.rs

1pub mod python;
2pub mod rust;
3pub mod typescript;
4
5use crate::code::code_completion::context::CompletionContext;
6use crate::code::code_completion::engine::CompletionSuggestion;
7
8/// Language-specific completion provider trait
9pub trait LanguageProvider {
10    /// Get language-specific completions
11    fn get_completions(&self, context: &CompletionContext) -> Vec<CompletionSuggestion>;
12
13    /// Get language name
14    fn language_name(&self) -> &str;
15
16    /// Check if this provider supports the given language
17    fn supports_language(&self, language: &str) -> bool;
18}
19
20/// Language provider registry
21pub struct LanguageRegistry {
22    providers: Vec<Box<dyn LanguageProvider + Send + Sync>>,
23}
24
25impl LanguageRegistry {
26    pub fn new() -> Self {
27        let mut registry = Self {
28            providers: Vec::new(),
29        };
30
31        // Register default providers
32        registry.register(Box::new(rust::RustProvider::new()));
33        registry.register(Box::new(typescript::TypeScriptProvider::new()));
34        registry.register(Box::new(python::PythonProvider::new()));
35
36        registry
37    }
38
39    /// Register a language provider
40    pub fn register(&mut self, provider: Box<dyn LanguageProvider + Send + Sync>) {
41        self.providers.push(provider);
42    }
43
44    /// Get completions for a specific language
45    pub fn get_completions(&self, context: &CompletionContext) -> Vec<CompletionSuggestion> {
46        for provider in &self.providers {
47            if provider.supports_language(&context.language) {
48                return provider.get_completions(context);
49            }
50        }
51        Vec::new()
52    }
53}
54
55impl Default for LanguageRegistry {
56    fn default() -> Self {
57        Self::new()
58    }
59}