languages: Remove a eager conversion from LanguageName to String (#35667)

This PR changes the signature of `language_names` from

```rust
pub fn language_names(&self) -> Vec<String>
// Into
pub fn language_names(&self) -> Vec<LanguageName>
```

The function previously eagerly converted `LanguageName`'s to
`String`'s, which requires the reallocation of all of the elements. The
functions get called in many places in the code base, but only one of
which actually requires the conversion to a `String`. In one case it
would do a `SharedString` -> `String` -> `SharedString` conversion,
which is now totally bypassed.

Release Notes:

- N/A
This commit is contained in:
tidely 2025-08-05 23:46:57 +03:00 committed by GitHub
parent a508a9536f
commit c595ed19d6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 44 additions and 28 deletions

View file

@ -149,13 +149,12 @@ impl ScopeSelectorDelegate {
scope_selector: WeakEntity<ScopeSelector>,
language_registry: Arc<LanguageRegistry>,
) -> Self {
let candidates = Vec::from([GLOBAL_SCOPE_NAME.to_string()]).into_iter();
let languages = language_registry.language_names().into_iter();
let candidates = candidates
let candidates = std::iter::once(LanguageName::new(GLOBAL_SCOPE_NAME))
.chain(languages)
.enumerate()
.map(|(candidate_id, name)| StringMatchCandidate::new(candidate_id, &name))
.map(|(candidate_id, name)| StringMatchCandidate::new(candidate_id, name.as_ref()))
.collect::<Vec<_>>();
let mut existing_scopes = HashSet::new();