ricecoder_storage/lsp/languages/
mod.rs

1//! Built-in language configurations for LSP
2//!
3//! This module provides built-in language configurations that are embedded
4//! in the ricecoder-storage crate and available as fallback when no
5//! user or project configurations are found.
6
7/// Get all built-in language configurations
8pub fn get_builtin_language_configs() -> Vec<(&'static str, &'static str)> {
9    vec![
10        ("rust", include_str!("rust.yaml")),
11        ("typescript", include_str!("typescript.yaml")),
12        ("python", include_str!("python.yaml")),
13        ("go", include_str!("go.yaml")),
14        ("java", include_str!("java.yaml")),
15        ("kotlin", include_str!("kotlin.yaml")),
16        ("dart", include_str!("dart.yaml")),
17    ]
18}
19
20/// Get a specific built-in language configuration
21pub fn get_language_config(language: &str) -> Option<&'static str> {
22    match language {
23        "rust" => Some(include_str!("rust.yaml")),
24        "typescript" | "ts" | "tsx" => Some(include_str!("typescript.yaml")),
25        "python" | "py" => Some(include_str!("python.yaml")),
26        "go" => Some(include_str!("go.yaml")),
27        "java" => Some(include_str!("java.yaml")),
28        "kotlin" | "kt" | "kts" => Some(include_str!("kotlin.yaml")),
29        "dart" => Some(include_str!("dart.yaml")),
30        _ => None,
31    }
32}
33
34#[cfg(test)]
35mod tests {
36    use super::*;
37
38    #[test]
39    fn test_get_builtin_language_configs() {
40        let configs = get_builtin_language_configs();
41        assert_eq!(configs.len(), 7);
42        assert!(configs.iter().any(|(lang, _)| *lang == "rust"));
43        assert!(configs.iter().any(|(lang, _)| *lang == "typescript"));
44        assert!(configs.iter().any(|(lang, _)| *lang == "python"));
45        assert!(configs.iter().any(|(lang, _)| *lang == "go"));
46        assert!(configs.iter().any(|(lang, _)| *lang == "java"));
47        assert!(configs.iter().any(|(lang, _)| *lang == "kotlin"));
48        assert!(configs.iter().any(|(lang, _)| *lang == "dart"));
49    }
50
51    #[test]
52    fn test_get_language_config_rust() {
53        let config = get_language_config("rust");
54        assert!(config.is_some());
55        assert!(!config.unwrap().is_empty());
56    }
57
58    #[test]
59    fn test_get_language_config_typescript() {
60        let config = get_language_config("typescript");
61        assert!(config.is_some());
62        assert!(!config.unwrap().is_empty());
63    }
64
65    #[test]
66    fn test_get_language_config_python() {
67        let config = get_language_config("python");
68        assert!(config.is_some());
69        assert!(!config.unwrap().is_empty());
70    }
71
72    #[test]
73    fn test_get_language_config_aliases() {
74        assert!(get_language_config("ts").is_some());
75        assert!(get_language_config("tsx").is_some());
76        assert!(get_language_config("py").is_some());
77    }
78
79    #[test]
80    fn test_get_language_config_unknown() {
81        let config = get_language_config("unknown");
82        assert!(config.is_none());
83    }
84}