@@ -16,6 +16,16 @@ use crate::{
17use std::borrow::Cow;
17use std::borrow::Cow;
20+macro_rules! language_server {
22+ match $doc.language_server() {
23+ Some(language_server) => language_server,
19fn location_to_file_location(location: &lsp::Location) -> FileLocation {
29fn location_to_file_location(location: &lsp::Location) -> FileLocation {
20 let path = location.uri.to_file_path().unwrap();
30 let path = location.uri.to_file_path().unwrap();
21 let line = Some((
31 let line = Some((
@@ -91,10 +101,7 @@ pub fn symbol_picker(cx: &mut Context) {
92 let doc = doc!(cx.editor);
102 let doc = doc!(cx.editor);
94− let language_server = match doc.language_server() {
104+ let language_server = language_server!(doc);
95− Some(language_server) => language_server,
98 let current_url = doc.url();
105 let current_url = doc.url();
99 let offset_encoding = language_server.offset_encoding();
106 let offset_encoding = language_server.offset_encoding();
@@ -130,10 +137,7 @@ pub fn symbol_picker(cx: &mut Context) {
130pub fn workspace_symbol_picker(cx: &mut Context) {
137pub fn workspace_symbol_picker(cx: &mut Context) {
131 let doc = doc!(cx.editor);
138 let doc = doc!(cx.editor);
132 let current_url = doc.url();
139 let current_url = doc.url();
133− let language_server = match doc.language_server() {
140+ let language_server = language_server!(doc);
134− Some(language_server) => language_server,
137 let offset_encoding = language_server.offset_encoding();
141 let offset_encoding = language_server.offset_encoding();
138 let future = language_server.workspace_symbols("".to_string());
142 let future = language_server.workspace_symbols("".to_string());
@@ -162,10 +166,7 @@ impl ui::menu::Item for lsp::CodeActionOrCommand {
162pub fn code_action(cx: &mut Context) {
166pub fn code_action(cx: &mut Context) {
163 let (view, doc) = current!(cx.editor);
167 let (view, doc) = current!(cx.editor);
165− let language_server = match doc.language_server() {
169+ let language_server = language_server!(doc);
166− Some(language_server) => language_server,
170 let range = range_to_lsp_range(
171 let range = range_to_lsp_range(
171 doc.text(),
172 doc.text(),
@@ -230,10 +231,7 @@ pub fn code_action(cx: &mut Context) {
231pub fn execute_lsp_command(editor: &mut Editor, cmd: lsp::Command) {
232pub fn execute_lsp_command(editor: &mut Editor, cmd: lsp::Command) {
232 let doc = doc!(editor);
233 let doc = doc!(editor);
233− let language_server = match doc.language_server() {
234+ let language_server = language_server!(doc);
234− Some(language_server) => language_server,
238 // the command is executed on the server and communicated back
236 // the command is executed on the server and communicated back
239 // to the client asynchronously using workspace edits
237 // to the client asynchronously using workspace edits
@@ -476,11 +474,7 @@ fn goto_impl(
477pub fn goto_definition(cx: &mut Context) {
475pub fn goto_definition(cx: &mut Context) {
478 let (view, doc) = current!(cx.editor);
476 let (view, doc) = current!(cx.editor);
479− let language_server = match doc.language_server() {
477+ let language_server = language_server!(doc);
480− Some(language_server) => language_server,
484 let offset_encoding = language_server.offset_encoding();
478 let offset_encoding = language_server.offset_encoding();
486 let pos = pos_to_lsp_pos(
480 let pos = pos_to_lsp_pos(
@@ -518,11 +512,7 @@ pub fn goto_definition(cx: &mut Context) {
519pub fn goto_type_definition(cx: &mut Context) {
513pub fn goto_type_definition(cx: &mut Context) {
520 let (view, doc) = current!(cx.editor);
514 let (view, doc) = current!(cx.editor);
521− let language_server = match doc.language_server() {
515+ let language_server = language_server!(doc);
522− Some(language_server) => language_server,
526 let offset_encoding = language_server.offset_encoding();
516 let offset_encoding = language_server.offset_encoding();
528 let pos = pos_to_lsp_pos(
518 let pos = pos_to_lsp_pos(
@@ -560,11 +550,7 @@ pub fn goto_type_definition(cx: &mut Context) {
561pub fn goto_implementation(cx: &mut Context) {
551pub fn goto_implementation(cx: &mut Context) {
562 let (view, doc) = current!(cx.editor);
552 let (view, doc) = current!(cx.editor);
563− let language_server = match doc.language_server() {
553+ let language_server = language_server!(doc);
564− Some(language_server) => language_server,
568 let offset_encoding = language_server.offset_encoding();
554 let offset_encoding = language_server.offset_encoding();
570 let pos = pos_to_lsp_pos(
556 let pos = pos_to_lsp_pos(
@@ -602,11 +588,7 @@ pub fn goto_implementation(cx: &mut Context) {
603pub fn goto_reference(cx: &mut Context) {
589pub fn goto_reference(cx: &mut Context) {
604 let (view, doc) = current!(cx.editor);
590 let (view, doc) = current!(cx.editor);
605− let language_server = match doc.language_server() {
591+ let language_server = language_server!(doc);
606− Some(language_server) => language_server,
610 let offset_encoding = language_server.offset_encoding();
592 let offset_encoding = language_server.offset_encoding();
612 let pos = pos_to_lsp_pos(
594 let pos = pos_to_lsp_pos(
@@ -636,11 +618,7 @@ pub fn goto_reference(cx: &mut Context) {
637pub fn signature_help(cx: &mut Context) {
619pub fn signature_help(cx: &mut Context) {
638 let (view, doc) = current!(cx.editor);
620 let (view, doc) = current!(cx.editor);
640− let language_server = match doc.language_server() {
621+ let language_server = language_server!(doc);
641− Some(language_server) => language_server,
645 let pos = pos_to_lsp_pos(
623 let pos = pos_to_lsp_pos(
646 doc.text(),
624 doc.text(),
@@ -675,11 +653,7 @@ pub fn signature_help(cx: &mut Context) {
676pub fn hover(cx: &mut Context) {
654pub fn hover(cx: &mut Context) {
677 let (view, doc) = current!(cx.editor);
655 let (view, doc) = current!(cx.editor);
679− let language_server = match doc.language_server() {
656+ let language_server = language_server!(doc);
680− Some(language_server) => language_server,
684 // TODO: factor out a doc.position_identifier() that returns lsp::TextDocumentPositionIdentifier
658 // TODO: factor out a doc.position_identifier() that returns lsp::TextDocumentPositionIdentifier
@@ -742,14 +716,8 @@ pub fn rename_symbol(cx: &mut Context) {
745− log::debug!("renaming to: {:?}", input);
747 let (view, doc) = current!(cx.editor);
719 let (view, doc) = current!(cx.editor);
748− let language_server = match doc.language_server() {
720+ let language_server = language_server!(doc);
749− Some(language_server) => language_server,
753 let offset_encoding = language_server.offset_encoding();
721 let offset_encoding = language_server.offset_encoding();
755 let pos = pos_to_lsp_pos(
723 let pos = pos_to_lsp_pos(
@@ -762,7 +730,6 @@ pub fn rename_symbol(cx: &mut Context) {
763 let task = language_server.rename_symbol(doc.identifier(), pos, input.to_string());
731 let task = language_server.rename_symbol(doc.identifier(), pos, input.to_string());
764 let edits = block_on(task).unwrap_or_default();
732 let edits = block_on(task).unwrap_or_default();
765− log::debug!("Edits from LSP: {:?}", edits);
766 apply_workspace_edit(cx.editor, offset_encoding, &edits);
733 apply_workspace_edit(cx.editor, offset_encoding, &edits);