Skip to main content

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 { providers: Vec::new() };
28
29        // Register default providers
30        registry.register(Box::new(rust::RustProvider::new()));
31        registry.register(Box::new(typescript::TypeScriptProvider::new()));
32        registry.register(Box::new(python::PythonProvider::new()));
33
34        registry
35    }
36
37    /// Register a language provider
38    pub fn register(&mut self, provider: Box<dyn LanguageProvider + Send + Sync>) {
39        self.providers.push(provider);
40    }
41
42    /// Get completions for a specific language
43    pub fn get_completions(&self, context: &CompletionContext) -> Vec<CompletionSuggestion> {
44        for provider in &self.providers {
45            if provider.supports_language(&context.language) {
46                return provider.get_completions(context);
47            }
48        }
49        Vec::new()
50    }
51}
52
53impl Default for LanguageRegistry {
54    fn default() -> Self {
55        Self::new()
56    }
57}