Avoid allocating a string to compare language names

Antonio Scandurra created

Change summary

Cargo.lock                      | 1 +
crates/language/Cargo.toml      | 1 +
crates/language/src/language.rs | 4 +++-
3 files changed, 5 insertions(+), 1 deletion(-)

Detailed changes

Cargo.lock 🔗

@@ -3157,6 +3157,7 @@ dependencies = [
  "tree-sitter-ruby",
  "tree-sitter-rust",
  "tree-sitter-typescript",
+ "unicase",
  "unindent",
  "util",
 ]

crates/language/Cargo.toml 🔗

@@ -53,6 +53,7 @@ smol = "1.2"
 tree-sitter = "0.20"
 tree-sitter-rust = { version = "*", optional = true }
 tree-sitter-typescript = { version = "*", optional = true }
+unicase = "2.6"
 
 [dev-dependencies]
 client = { path = "../client", features = ["test-support"] }

crates/language/src/language.rs 🔗

@@ -41,6 +41,7 @@ use std::{
 use syntax_map::SyntaxSnapshot;
 use theme::{SyntaxTheme, Theme};
 use tree_sitter::{self, Query};
+use unicase::UniCase;
 use util::ResultExt;
 
 #[cfg(any(test, feature = "test-support"))]
@@ -467,10 +468,11 @@ impl LanguageRegistry {
     }
 
     pub fn language_for_name(&self, name: &str) -> Option<Arc<Language>> {
+        let name = UniCase::new(name);
         self.languages
             .read()
             .iter()
-            .find(|language| language.name().to_lowercase() == name.to_lowercase())
+            .find(|language| UniCase::new(language.name()) == name)
             .cloned()
     }