@@ -353,7 +353,6 @@ pub fn symbol_picker(cx: &mut Context) {
354 let mut futures: FuturesUnordered<_> = doc
354 let mut futures: FuturesUnordered<_> = doc
355 .language_servers_with_feature(LanguageServerFeature::DocumentSymbols)
355 .language_servers_with_feature(LanguageServerFeature::DocumentSymbols)
357 .filter_map(|ls| {
356 .filter_map(|ls| {
358 let request = ls.document_symbols(doc.identifier())?;
357 let request = ls.document_symbols(doc.identifier())?;
359 Some((request, ls.offset_encoding(), doc.identifier()))
358 Some((request, ls.offset_encoding(), doc.identifier()))
@@ -420,7 +419,6 @@ pub fn workspace_symbol_picker(cx: &mut Context) {
420 let doc = doc!(editor);
419 let doc = doc!(editor);
421 let mut futures: FuturesUnordered<_> = doc
420 let mut futures: FuturesUnordered<_> = doc
422 .language_servers_with_feature(LanguageServerFeature::WorkspaceSymbols)
421 .language_servers_with_feature(LanguageServerFeature::WorkspaceSymbols)
424 .filter_map(|ls| Some((ls.workspace_symbols(pattern.clone())?, ls.offset_encoding())))
422 .filter_map(|ls| Some((ls.workspace_symbols(pattern.clone())?, ls.offset_encoding())))
425 .map(|(request, offset_encoding)| async move {
423 .map(|(request, offset_encoding)| async move {
426 let json = request.await?;
424 let json = request.await?;
@@ -581,7 +579,6 @@ pub fn code_action(cx: &mut Context) {
582 let mut futures: FuturesUnordered<_> = doc
580 let mut futures: FuturesUnordered<_> = doc
583 .language_servers_with_feature(LanguageServerFeature::CodeAction)
581 .language_servers_with_feature(LanguageServerFeature::CodeAction)
585 // TODO this should probably already been filtered in something like "language_servers_with_feature"
582 // TODO this should probably already been filtered in something like "language_servers_with_feature"
586 .filter_map(|language_server| {
583 .filter_map(|language_server| {
587 let offset_encoding = language_server.offset_encoding();
584 let offset_encoding = language_server.offset_encoding();
@@ -1034,15 +1031,15 @@ fn to_locations(definitions: Option<lsp::GotoDefinitionResponse>) -> Vec<lsp::Lo
1034// TODO find a way to reduce boilerplate of all the goto functions, without unnecessary complexity...
1031// TODO find a way to reduce boilerplate of all the goto functions, without unnecessary complexity...
1035pub fn goto_declaration(cx: &mut Context) {
1032pub fn goto_declaration(cx: &mut Context) {
1036 let (view, doc) = current!(cx.editor);
1033 let (view, doc) = current!(cx.editor);
1037− let (future, offset_encoding) = match doc
1034+ let future_offset_encoding = doc
1038 .language_servers_with_feature(LanguageServerFeature::GotoDeclaration)
1035 .language_servers_with_feature(LanguageServerFeature::GotoDeclaration)
1040 .find_map(|language_server| {
1036 .find_map(|language_server| {
1041 let offset_encoding = language_server.offset_encoding();
1037 let offset_encoding = language_server.offset_encoding();
1042 let pos = doc.position(view.id, offset_encoding);
1038 let pos = doc.position(view.id, offset_encoding);
1043 let future = language_server.goto_declaration(doc.identifier(), pos, None)?;
1039 let future = language_server.goto_declaration(doc.identifier(), pos, None)?;
1044 Some((future, offset_encoding))
1040 Some((future, offset_encoding))
1042+ let (future, offset_encoding) = match future_offset_encoding {
1046 Some(future_offset_encoding) => future_offset_encoding,
1043 Some(future_offset_encoding) => future_offset_encoding,
1047 None => {
1044 None => {
1048 cx.editor
1045 cx.editor
@@ -1062,15 +1059,15 @@ pub fn goto_declaration(cx: &mut Context) {
1063pub fn goto_definition(cx: &mut Context) {
1060pub fn goto_definition(cx: &mut Context) {
1064 let (view, doc) = current!(cx.editor);
1061 let (view, doc) = current!(cx.editor);
1065− let (future, offset_encoding) = match doc
1062+ let future_offset_encoding = doc
1066 .language_servers_with_feature(LanguageServerFeature::GotoDefinition)
1063 .language_servers_with_feature(LanguageServerFeature::GotoDefinition)
1068 .find_map(|language_server| {
1064 .find_map(|language_server| {
1069 let offset_encoding = language_server.offset_encoding();
1065 let offset_encoding = language_server.offset_encoding();
1070 let pos = doc.position(view.id, offset_encoding);
1066 let pos = doc.position(view.id, offset_encoding);
1071 let future = language_server.goto_definition(doc.identifier(), pos, None)?;
1067 let future = language_server.goto_definition(doc.identifier(), pos, None)?;
1072 Some((future, offset_encoding))
1068 Some((future, offset_encoding))
1070+ let (future, offset_encoding) = match future_offset_encoding {
1074 Some(future_offset_encoding) => future_offset_encoding,
1071 Some(future_offset_encoding) => future_offset_encoding,
1075 None => {
1072 None => {
1076 cx.editor
1073 cx.editor
@@ -1090,15 +1087,15 @@ pub fn goto_definition(cx: &mut Context) {
1091pub fn goto_type_definition(cx: &mut Context) {
1088pub fn goto_type_definition(cx: &mut Context) {
1092 let (view, doc) = current!(cx.editor);
1089 let (view, doc) = current!(cx.editor);
1093− let (future, offset_encoding) = match doc
1090+ let future_offset_encoding = doc
1094 .language_servers_with_feature(LanguageServerFeature::GotoTypeDefinition)
1091 .language_servers_with_feature(LanguageServerFeature::GotoTypeDefinition)
1096 .find_map(|language_server| {
1092 .find_map(|language_server| {
1097 let offset_encoding = language_server.offset_encoding();
1093 let offset_encoding = language_server.offset_encoding();
1098 let pos = doc.position(view.id, offset_encoding);
1094 let pos = doc.position(view.id, offset_encoding);
1099 let future = language_server.goto_type_definition(doc.identifier(), pos, None)?;
1095 let future = language_server.goto_type_definition(doc.identifier(), pos, None)?;
1100 Some((future, offset_encoding))
1096 Some((future, offset_encoding))
1098+ let (future, offset_encoding) = match future_offset_encoding {
1102 Some(future_offset_encoding) => future_offset_encoding,
1099 Some(future_offset_encoding) => future_offset_encoding,
1103 None => {
1100 None => {
1104 cx.editor
1101 cx.editor
@@ -1118,15 +1115,15 @@ pub fn goto_type_definition(cx: &mut Context) {
1119pub fn goto_implementation(cx: &mut Context) {
1116pub fn goto_implementation(cx: &mut Context) {
1120 let (view, doc) = current!(cx.editor);
1117 let (view, doc) = current!(cx.editor);
1121− let (future, offset_encoding) = match doc
1118+ let future_offset_encoding = doc
1122 .language_servers_with_feature(LanguageServerFeature::GotoImplementation)
1119 .language_servers_with_feature(LanguageServerFeature::GotoImplementation)
1124 .find_map(|language_server| {
1120 .find_map(|language_server| {
1125 let offset_encoding = language_server.offset_encoding();
1121 let offset_encoding = language_server.offset_encoding();
1126 let pos = doc.position(view.id, offset_encoding);
1122 let pos = doc.position(view.id, offset_encoding);
1127 let future = language_server.goto_implementation(doc.identifier(), pos, None)?;
1123 let future = language_server.goto_implementation(doc.identifier(), pos, None)?;
1128 Some((future, offset_encoding))
1124 Some((future, offset_encoding))
1126+ let (future, offset_encoding) = match future_offset_encoding {
1130 Some(future_offset_encoding) => future_offset_encoding,
1127 Some(future_offset_encoding) => future_offset_encoding,
1131 None => {
1128 None => {
1132 cx.editor
1129 cx.editor
@@ -1147,9 +1144,8 @@ pub fn goto_implementation(cx: &mut Context) {
1147pub fn goto_reference(cx: &mut Context) {
1144pub fn goto_reference(cx: &mut Context) {
1148 let config = cx.editor.config();
1145 let config = cx.editor.config();
1149 let (view, doc) = current!(cx.editor);
1146 let (view, doc) = current!(cx.editor);
1150− let (future, offset_encoding) = match doc
1147+ let future_offset_encoding = doc
1151 .language_servers_with_feature(LanguageServerFeature::GotoReference)
1148 .language_servers_with_feature(LanguageServerFeature::GotoReference)
1153 .find_map(|language_server| {
1149 .find_map(|language_server| {
1154 let offset_encoding = language_server.offset_encoding();
1150 let offset_encoding = language_server.offset_encoding();
1155 let pos = doc.position(view.id, offset_encoding);
1151 let pos = doc.position(view.id, offset_encoding);
@@ -1160,7 +1156,8 @@ pub fn goto_reference(cx: &mut Context) {
1162 Some((future, offset_encoding))
1158 Some((future, offset_encoding))
1160+ let (future, offset_encoding) = match future_offset_encoding {
1164 Some(future_offset_encoding) => future_offset_encoding,
1161 Some(future_offset_encoding) => future_offset_encoding,
1165 None => {
1162 None => {
1166 cx.editor
1163 cx.editor
@@ -1192,13 +1189,14 @@ pub fn signature_help_impl(cx: &mut Context, invoked: SignatureHelpInvoked) {
1192 let (view, doc) = current!(cx.editor);
1189 let (view, doc) = current!(cx.editor);
1194 // TODO merge multiple language server signature help into one instead of just taking the first language server that supports it
1191 // TODO merge multiple language server signature help into one instead of just taking the first language server that supports it
1195− let future = match doc
1192+ let future = doc
1196 .language_servers_with_feature(LanguageServerFeature::SignatureHelp)
1193 .language_servers_with_feature(LanguageServerFeature::SignatureHelp)
1198 .find_map(|language_server| {
1194 .find_map(|language_server| {
1199 let pos = doc.position(view.id, language_server.offset_encoding());
1195 let pos = doc.position(view.id, language_server.offset_encoding());
1200 language_server.text_document_signature_help(doc.identifier(), pos, None)
1196 language_server.text_document_signature_help(doc.identifier(), pos, None)
1199+ let future = match future {
1202 Some(future) => future.boxed(),
1200 Some(future) => future.boxed(),
1203 None => {
1201 None => {
1204 // Do not show the message if signature help was invoked
1202 // Do not show the message if signature help was invoked
@@ -1328,7 +1326,6 @@ pub fn hover(cx: &mut Context) {
1328 // TODO: factor out a doc.position_identifier() that returns lsp::TextDocumentPositionIdentifier
1326 // TODO: factor out a doc.position_identifier() that returns lsp::TextDocumentPositionIdentifier
1329 let request = doc
1327 let request = doc
1330 .language_servers_with_feature(LanguageServerFeature::Hover)
1328 .language_servers_with_feature(LanguageServerFeature::Hover)
1332 .find_map(|language_server| {
1329 .find_map(|language_server| {
1333 let pos = doc.position(view.id, language_server.offset_encoding());
1330 let pos = doc.position(view.id, language_server.offset_encoding());
1334 language_server.text_document_hover(doc.identifier(), pos, None)
1331 language_server.text_document_hover(doc.identifier(), pos, None)
@@ -1436,7 +1433,6 @@ pub fn rename_symbol(cx: &mut Context) {
1436 let (view, doc) = current!(cx.editor);
1433 let (view, doc) = current!(cx.editor);
1437 let request = doc
1434 let request = doc
1438 .language_servers_with_feature(LanguageServerFeature::RenameSymbol)
1435 .language_servers_with_feature(LanguageServerFeature::RenameSymbol)
1440 .find_map(|language_server| {
1436 .find_map(|language_server| {
1441 if let Some(language_server_id) = language_server_id {
1437 if let Some(language_server_id) = language_server_id {
1442 if language_server.id() != language_server_id {
1438 if language_server.id() != language_server_id {
@@ -1475,7 +1471,6 @@ pub fn rename_symbol(cx: &mut Context) {
1476 let prepare_rename_request = doc
1472 let prepare_rename_request = doc
1477 .language_servers_with_feature(LanguageServerFeature::RenameSymbol)
1473 .language_servers_with_feature(LanguageServerFeature::RenameSymbol)
1479 .find_map(|language_server| {
1474 .find_map(|language_server| {
1480 let offset_encoding = language_server.offset_encoding();
1475 let offset_encoding = language_server.offset_encoding();
1481 let pos = doc.position(view.id, offset_encoding);
1476 let pos = doc.position(view.id, offset_encoding);
@@ -1516,17 +1511,17 @@ pub fn rename_symbol(cx: &mut Context) {
1517pub fn select_references_to_symbol_under_cursor(cx: &mut Context) {
1512pub fn select_references_to_symbol_under_cursor(cx: &mut Context) {
1518 let (view, doc) = current!(cx.editor);
1513 let (view, doc) = current!(cx.editor);
1519− let (future, offset_encoding) = match doc
1514+ let future_offset_encoding = doc
1520 .language_servers_with_feature(LanguageServerFeature::DocumentHighlight)
1515 .language_servers_with_feature(LanguageServerFeature::DocumentHighlight)
1522 .find_map(|language_server| {
1516 .find_map(|language_server| {
1523 let offset_encoding = language_server.offset_encoding();
1517 let offset_encoding = language_server.offset_encoding();
1524 let pos = doc.position(view.id, offset_encoding);
1518 let pos = doc.position(view.id, offset_encoding);
1525 let future =
1519 let future =
1526 language_server.text_document_document_highlight(doc.identifier(), pos, None)?;
1520 language_server.text_document_document_highlight(doc.identifier(), pos, None)?;
1527 Some((future, offset_encoding))
1521 Some((future, offset_encoding))
1529− Some(future) => future,
1523+ let (future, offset_encoding) = match future_offset_encoding {
1524+ Some(future_offset_encoding) => future_offset_encoding,
1530 None => {
1525 None => {
1531 cx.editor
1526 cx.editor
1532 .set_error("No language server supports document-highlight");
1527 .set_error("No language server supports document-highlight");
@@ -1587,8 +1582,8 @@ fn compute_inlay_hints_for_view(
1587 let view_id = view.id;
1582 let view_id = view.id;
1588 let doc_id = view.doc;
1583 let doc_id = view.doc;
1590− let language_servers = doc.language_servers_with_feature(LanguageServerFeature::InlayHints);
1585+ let mut language_servers = doc.language_servers_with_feature(LanguageServerFeature::InlayHints);
1591− let language_server = language_servers.iter().find(|language_server| {
1586+ let language_server = language_servers.find(|language_server| {
1592 matches!(
1587 matches!(
1593 language_server.capabilities().inlay_hint_provider,
1588 language_server.capabilities().inlay_hint_provider,