codanna/parsing/rust/
definition.rs1use std::sync::Arc;
8
9use super::{RustBehavior, RustParser};
10use crate::parsing::{LanguageBehavior, LanguageDefinition, LanguageId, LanguageParser};
11use crate::{IndexResult, Settings};
12
13pub struct RustLanguage;
15
16impl RustLanguage {
17 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 }
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) }
54}
55
56pub(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 assert!(rust.is_enabled(&settings));
84 }
85}