vtcode_core/code/code_completion/languages/
mod.rs1pub mod python;
2pub mod rust;
3pub mod typescript;
4
5use crate::code::code_completion::context::CompletionContext;
6use crate::code::code_completion::engine::CompletionSuggestion;
7
8pub trait LanguageProvider {
10 fn get_completions(&self, context: &CompletionContext) -> Vec<CompletionSuggestion>;
12
13 fn language_name(&self) -> &str;
15
16 fn supports_language(&self, language: &str) -> bool;
18}
19
20pub 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 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 pub fn register(&mut self, provider: Box<dyn LanguageProvider + Send + Sync>) {
39 self.providers.push(provider);
40 }
41
42 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}