@@ -16,6 +16,16 @@ use crate::{
1616
1717use std::borrow::Cow;
1818
19+#[macro_export]
20+macro_rules! language_server {
21+ ($doc:expr) => {
22+ match $doc.language_server() {
23+ Some(language_server) => language_server,
24+ None => return,
25+ }
26+ };
27+}
28+
1929fn location_to_file_location(location: &lsp::Location) -> FileLocation {
2030 let path = location.uri.to_file_path().unwrap();
2131 let line = Some((
@@ -91,10 +101,7 @@ pub fn symbol_picker(cx: &mut Context) {
91101 }
92102 let doc = doc!(cx.editor);
93103
94− let language_server = match doc.language_server() {
95− Some(language_server) => language_server,
96− None => return,
97− };
104+ let language_server = language_server!(doc);
98105 let current_url = doc.url();
99106 let offset_encoding = language_server.offset_encoding();
100107
@@ -130,10 +137,7 @@ pub fn symbol_picker(cx: &mut Context) {
130137pub fn workspace_symbol_picker(cx: &mut Context) {
131138 let doc = doc!(cx.editor);
132139 let current_url = doc.url();
133− let language_server = match doc.language_server() {
134− Some(language_server) => language_server,
135− None => return,
136− };
140+ let language_server = language_server!(doc);
137141 let offset_encoding = language_server.offset_encoding();
138142 let future = language_server.workspace_symbols("".to_string());
139143
@@ -162,10 +166,7 @@ impl ui::menu::Item for lsp::CodeActionOrCommand {
162166pub fn code_action(cx: &mut Context) {
163167 let (view, doc) = current!(cx.editor);
164168
165− let language_server = match doc.language_server() {
166− Some(language_server) => language_server,
167− None => return,
168− };
169+ let language_server = language_server!(doc);
169170
170171 let range = range_to_lsp_range(
171172 doc.text(),
@@ -230,10 +231,7 @@ pub fn code_action(cx: &mut Context) {
230231}
231232pub fn execute_lsp_command(editor: &mut Editor, cmd: lsp::Command) {
232233 let doc = doc!(editor);
233− let language_server = match doc.language_server() {
234− Some(language_server) => language_server,
235− None => return,
236− };
234+ let language_server = language_server!(doc);
237235
238236 // the command is executed on the server and communicated back
239237 // to the client asynchronously using workspace edits
@@ -476,11 +474,7 @@ fn goto_impl(
476474
477475pub fn goto_definition(cx: &mut Context) {
478476 let (view, doc) = current!(cx.editor);
479− let language_server = match doc.language_server() {
480− Some(language_server) => language_server,
481− None => return,
482− };
483−
477+ let language_server = language_server!(doc);
484478 let offset_encoding = language_server.offset_encoding();
485479
486480 let pos = pos_to_lsp_pos(
@@ -518,11 +512,7 @@ pub fn goto_definition(cx: &mut Context) {
518512
519513pub fn goto_type_definition(cx: &mut Context) {
520514 let (view, doc) = current!(cx.editor);
521− let language_server = match doc.language_server() {
522− Some(language_server) => language_server,
523− None => return,
524− };
525−
515+ let language_server = language_server!(doc);
526516 let offset_encoding = language_server.offset_encoding();
527517
528518 let pos = pos_to_lsp_pos(
@@ -560,11 +550,7 @@ pub fn goto_type_definition(cx: &mut Context) {
560550
561551pub fn goto_implementation(cx: &mut Context) {
562552 let (view, doc) = current!(cx.editor);
563− let language_server = match doc.language_server() {
564− Some(language_server) => language_server,
565− None => return,
566− };
567−
553+ let language_server = language_server!(doc);
568554 let offset_encoding = language_server.offset_encoding();
569555
570556 let pos = pos_to_lsp_pos(
@@ -602,11 +588,7 @@ pub fn goto_implementation(cx: &mut Context) {
602588
603589pub fn goto_reference(cx: &mut Context) {
604590 let (view, doc) = current!(cx.editor);
605− let language_server = match doc.language_server() {
606− Some(language_server) => language_server,
607− None => return,
608− };
609−
591+ let language_server = language_server!(doc);
610592 let offset_encoding = language_server.offset_encoding();
611593
612594 let pos = pos_to_lsp_pos(
@@ -636,11 +618,7 @@ pub fn goto_reference(cx: &mut Context) {
636618
637619pub fn signature_help(cx: &mut Context) {
638620 let (view, doc) = current!(cx.editor);
639−
640− let language_server = match doc.language_server() {
641− Some(language_server) => language_server,
642− None => return,
643− };
621+ let language_server = language_server!(doc);
644622
645623 let pos = pos_to_lsp_pos(
646624 doc.text(),
@@ -675,11 +653,7 @@ pub fn signature_help(cx: &mut Context) {
675653}
676654pub fn hover(cx: &mut Context) {
677655 let (view, doc) = current!(cx.editor);
678−
679− let language_server = match doc.language_server() {
680− Some(language_server) => language_server,
681− None => return,
682− };
656+ let language_server = language_server!(doc);
683657
684658 // TODO: factor out a doc.position_identifier() that returns lsp::TextDocumentPositionIdentifier
685659
@@ -742,14 +716,8 @@ pub fn rename_symbol(cx: &mut Context) {
742716 return;
743717 }
744718
745− log::debug!("renaming to: {:?}", input);
746−
747719 let (view, doc) = current!(cx.editor);
748− let language_server = match doc.language_server() {
749− Some(language_server) => language_server,
750− None => return,
751− };
752−
720+ let language_server = language_server!(doc);
753721 let offset_encoding = language_server.offset_encoding();
754722
755723 let pos = pos_to_lsp_pos(
@@ -762,7 +730,6 @@ pub fn rename_symbol(cx: &mut Context) {
762730
763731 let task = language_server.rename_symbol(doc.identifier(), pos, input.to_string());
764732 let edits = block_on(task).unwrap_or_default();
765− log::debug!("Edits from LSP: {:?}", edits);
766733 apply_workspace_edit(cx.editor, offset_encoding, &edits);
767734 },
768735 );