Unnamed repository; edit this file 'description' to name the repository.
Respect lsp definition order for code actions (#9590)
Evgeniy Tatarkin 2024-04-09
parent cf99615 · commit 07cb24a
-rw-r--r--book/src/languages.md2
-rw-r--r--helix-term/src/commands/lsp.rs8
-rw-r--r--helix-term/src/ui/completion.rs5
3 files changed, 6 insertions, 9 deletions
diff --git a/book/src/languages.md b/book/src/languages.md
index dd93fec5..33ecbb92 100644
--- a/book/src/languages.md
+++ b/book/src/languages.md
@@ -150,6 +150,8 @@ They have to be defined in the `[language-server]` table as described in the pre
Different languages can use the same language server instance, e.g. `typescript-language-server` is used for javascript, jsx, tsx and typescript by default.
+The definition order of language servers affects the order in the results list of code action menu.
+
In case multiple language servers are specified in the `language-servers` attribute of a `language`,
it's often useful to only enable/disable certain language-server features for these language servers.
diff --git a/helix-term/src/commands/lsp.rs b/helix-term/src/commands/lsp.rs
index 63d1608f..6a5ceae6 100644
--- a/helix-term/src/commands/lsp.rs
+++ b/helix-term/src/commands/lsp.rs
@@ -1,4 +1,4 @@
-use futures_util::{stream::FuturesUnordered, FutureExt};
+use futures_util::{stream::FuturesOrdered, FutureExt};
use helix_lsp::{
block_on,
lsp::{
@@ -341,7 +341,7 @@ pub fn symbol_picker(cx: &mut Context) {
let mut seen_language_servers = HashSet::new();
- let mut futures: FuturesUnordered<_> = doc
+ let mut futures: FuturesOrdered<_> = doc
.language_servers_with_feature(LanguageServerFeature::DocumentSymbols)
.filter(|ls| seen_language_servers.insert(ls.id()))
.map(|language_server| {
@@ -416,7 +416,7 @@ 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
+ let mut futures: FuturesOrdered<_> = doc
.language_servers_with_feature(LanguageServerFeature::WorkspaceSymbols)
.filter(|ls| seen_language_servers.insert(ls.id()))
.map(|language_server| {
@@ -574,7 +574,7 @@ pub fn code_action(cx: &mut Context) {
let mut seen_language_servers = HashSet::new();
- let mut futures: FuturesUnordered<_> = doc
+ let mut futures: FuturesOrdered<_> = 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"
diff --git a/helix-term/src/ui/completion.rs b/helix-term/src/ui/completion.rs
index 6cbb5b10..735bc956 100644
--- a/helix-term/src/ui/completion.rs
+++ b/helix-term/src/ui/completion.rs
@@ -285,11 +285,6 @@ impl Completion {
let language_server = language_server!(item);
let offset_encoding = language_server.offset_encoding();
- let language_server = editor
- .language_servers
- .get_by_id(item.language_server_id)
- .unwrap();
-
// resolve item if not yet resolved
if !item.resolved {
if let Some(resolved) =