codanna/parsing/javascript/
definition.rs1use crate::parsing::{
4 LanguageBehavior, LanguageDefinition, LanguageId, LanguageParser, LanguageRegistry,
5};
6use crate::{IndexError, IndexResult, Settings};
7use std::sync::Arc;
8
9use super::{JavaScriptBehavior, JavaScriptParser};
10
11pub 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 }
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
49pub(crate) fn register(registry: &mut LanguageRegistry) {
51 registry.register(Arc::new(JavaScriptLanguage));
52}