diff --git a/crates/ui/src/highlighter/registry.rs b/crates/ui/src/highlighter/registry.rs index 2b5b0e74..1e7943e5 100644 --- a/crates/ui/src/highlighter/registry.rs +++ b/crates/ui/src/highlighter/registry.rs @@ -473,6 +473,12 @@ impl LanguageRegistry { /// Returns the language configuration for the given language name. pub fn language(&self, name: &str) -> Option<&LanguageConfig> { + // Try to get by name first, there may have a custom language registered + if let Some(language) = self.languages.get(name) { + return Some(language); + } + + // Then try to get built-in language to support short language names, e.g. "js" for "javascript" let language = Language::from_str(name); self.languages.get(language.name()) } @@ -482,6 +488,8 @@ impl LanguageRegistry { mod tests { use gpui::rgb; + use crate::highlighter::LanguageConfig; + #[test] fn test_syntax_colors() { use super::{HighlightTheme, SyntaxColors}; @@ -498,8 +506,14 @@ mod tests { #[test] fn test_registry() { use super::LanguageRegistry; - let registry = LanguageRegistry::new(); + let mut registry = LanguageRegistry::new(); + registry.register( + "foo", + &LanguageConfig::new("foo", tree_sitter_bash::LANGUAGE.into(), vec![], "", "", ""), + ); + + assert!(registry.language("foo").is_some()); assert!(registry.language("rust").is_some()); assert!(registry.language("rs").is_some()); assert!(registry.language("javascript").is_some());