Skip to main content

codanna/parsing/javascript/
definition.rs

1//! JavaScript language definition and registration
2
3use crate::parsing::{
4    LanguageBehavior, LanguageDefinition, LanguageId, LanguageParser, LanguageRegistry,
5};
6use crate::{IndexError, IndexResult, Settings};
7use std::sync::Arc;
8
9use super::{JavaScriptBehavior, JavaScriptParser};
10
11/// JavaScript language definition
12pub struct JavaScriptLanguage;
13
14impl LanguageDefinition for JavaScriptLanguage {
15    fn id(&self) -> LanguageId {
16        LanguageId::new("javascript")
17    }
18
19    fn name(&self) -> &'static str {
20        "JavaScript"
21    }
22
23    fn extensions(&self) -> &'static [&'static str] {
24        &["js", "jsx", "mjs", "cjs"]
25    }
26
27    fn create_parser(&self, _settings: &Settings) -> IndexResult<Box<dyn LanguageParser>> {
28        let parser = JavaScriptParser::new().map_err(|e| IndexError::General(e.to_string()))?;
29        Ok(Box::new(parser))
30    }
31
32    fn create_behavior(&self) -> Box<dyn LanguageBehavior> {
33        Box::new(JavaScriptBehavior::new())
34    }
35
36    fn default_enabled(&self) -> bool {
37        true // Enable JavaScript by default
38    }
39
40    fn is_enabled(&self, settings: &Settings) -> bool {
41        settings
42            .languages
43            .get("javascript")
44            .map(|config| config.enabled)
45            .unwrap_or(self.default_enabled())
46    }
47}
48
49/// Register JavaScript language with the registry
50pub(crate) fn register(registry: &mut LanguageRegistry) {
51    registry.register(Arc::new(JavaScriptLanguage));
52}