Skip to content

Commit

Permalink
Filter out already seen language servers in requests that can be sent…
Browse files Browse the repository at this point in the history
… to multiple language servers (code-action, completion, symbol pickers)
  • Loading branch information
Philipp-M committed May 18, 2023
1 parent 8ee5999 commit 451fe52
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 1 deletion.
3 changes: 3 additions & 0 deletions helix-term/src/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4243,9 +4243,12 @@ pub fn completion(cx: &mut Context) {
let text = savepoint.text.clone();
let cursor = savepoint.cursor();

let mut seen_language_servers = HashSet::new();

let mut futures: FuturesUnordered<_> = doc
.language_servers_with_feature(LanguageServerFeature::Completion)
// TODO this should probably already been filtered in something like "language_servers_with_feature"
.filter(|ls| seen_language_servers.insert(ls.id()))
.filter_map(|language_server| {
let language_server_id = language_server.id();
let offset_encoding = language_server.offset_encoding();
Expand Down
15 changes: 14 additions & 1 deletion helix-term/src/commands/lsp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,12 @@ use crate::{
};

use std::{
cmp::Ordering, collections::BTreeMap, fmt::Write, future::Future, path::PathBuf, sync::Arc,
cmp::Ordering,
collections::{BTreeMap, HashSet},
fmt::Write,
future::Future,
path::PathBuf,
sync::Arc,
};

impl ui::menu::Item for lsp::Location {
Expand Down Expand Up @@ -351,8 +356,11 @@ pub fn symbol_picker(cx: &mut Context) {
}
let doc = doc!(cx.editor);

let mut seen_language_servers = HashSet::new();

let mut futures: FuturesUnordered<_> = doc
.language_servers_with_feature(LanguageServerFeature::DocumentSymbols)
.filter(|ls| seen_language_servers.insert(ls.id()))
.filter_map(|ls| {
let request = ls.document_symbols(doc.identifier())?;
Some((request, ls.offset_encoding(), doc.identifier()))
Expand Down Expand Up @@ -413,8 +421,10 @@ pub fn workspace_symbol_picker(cx: &mut Context) {

let get_symbols = move |pattern: String, editor: &mut Editor| {
let doc = doc!(editor);
let mut seen_language_servers = HashSet::new();
let mut futures: FuturesUnordered<_> = doc
.language_servers_with_feature(LanguageServerFeature::WorkspaceSymbols)
.filter(|ls| seen_language_servers.insert(ls.id()))
.filter_map(|ls| Some((ls.workspace_symbols(pattern.clone())?, ls.offset_encoding())))
.map(|(request, offset_encoding)| async move {
let json = request.await?;
Expand Down Expand Up @@ -573,8 +583,11 @@ pub fn code_action(cx: &mut Context) {

let selection_range = doc.selection(view.id).primary();

let mut seen_language_servers = HashSet::new();

let mut futures: FuturesUnordered<_> = doc
.language_servers_with_feature(LanguageServerFeature::CodeAction)
.filter(|ls| seen_language_servers.insert(ls.id()))
// TODO this should probably already been filtered in something like "language_servers_with_feature"
.filter_map(|language_server| {
let offset_encoding = language_server.offset_encoding();
Expand Down

0 comments on commit 451fe52

Please sign in to comment.