Skip to main content

codanna/parsing/rust/
definition.rs

1//! Rust language definition for the registry
2//!
3//! Provides the Rust language implementation that self-registers
4//! with the global registry. This module defines how Rust parsers
5//! and behaviors are created based on settings.
6
7use std::sync::Arc;
8
9use super::{RustBehavior, RustParser};
10use crate::parsing::{LanguageBehavior, LanguageDefinition, LanguageId, LanguageParser};
11use crate::{IndexResult, Settings};
12
13/// Rust language definition
14pub struct RustLanguage;
15
16impl RustLanguage {
17    /// Language identifier constant
18    pub const ID: LanguageId = LanguageId::new("rust");
19}
20
21impl LanguageDefinition for RustLanguage {
22    fn id(&self) -> LanguageId {
23        Self::ID
24    }
25
26    fn name(&self) -> &'static str {
27        "Rust"
28    }
29
30    fn extensions(&self) -> &'static [&'static str] {
31        &["rs"]
32    }
33
34    fn create_parser(&self, _settings: &Settings) -> IndexResult<Box<dyn LanguageParser>> {
35        let parser = RustParser::new().map_err(crate::IndexError::General)?;
36        Ok(Box::new(parser))
37    }
38
39    fn create_behavior(&self) -> Box<dyn LanguageBehavior> {
40        Box::new(RustBehavior::new())
41    }
42
43    fn default_enabled(&self) -> bool {
44        true // Rust is enabled by default as the primary language
45    }
46
47    fn is_enabled(&self, settings: &Settings) -> bool {
48        settings
49            .languages
50            .get(self.id().as_str())
51            .map(|config| config.enabled)
52            .unwrap_or(true) // Rust is enabled by default
53    }
54}
55
56/// Register Rust language with the global registry
57///
58/// This function is called from initialize_registry() to add
59/// Rust support to the system.
60pub(crate) fn register(registry: &mut crate::parsing::LanguageRegistry) {
61    registry.register(Arc::new(RustLanguage));
62}
63
64#[cfg(test)]
65mod tests {
66    use super::*;
67
68    #[test]
69    fn test_rust_definition() {
70        let rust = RustLanguage;
71
72        assert_eq!(rust.id(), LanguageId::new("rust"));
73        assert_eq!(rust.name(), "Rust");
74        assert_eq!(rust.extensions(), &["rs"]);
75    }
76
77    #[test]
78    fn test_rust_enabled_by_default() {
79        let rust = RustLanguage;
80        let settings = Settings::default();
81
82        // Should be enabled by default even if not in settings
83        assert!(rust.is_enabled(&settings));
84    }
85}