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 {
28 providers: Vec::new(),
29 };
30
31 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 pub fn register(&mut self, provider: Box<dyn LanguageProvider + Send + Sync>) {
41 self.providers.push(provider);
42 }
43
44 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}