@@ -18,10 +18,13 @@ use std::borrow::Cow;
19#[macro_export]
19#[macro_export]
20macro_rules! language_server {
20macro_rules! language_server {
21− ($doc:expr) => {
21+ ($editor:expr, $doc:expr) => {
22 match $doc.language_server() {
22 match $doc.language_server() {
23 Some(language_server) => language_server,
23 Some(language_server) => language_server,
25+ $editor.set_status("Language server not active for current buffer");
24− None => return,
26+ return;
@@ -127,7 +130,7 @@ pub fn symbol_picker(cx: &mut Context) {
128 let doc = doc!(cx.editor);
131 let doc = doc!(cx.editor);
130− let language_server = language_server!(doc);
133+ let language_server = language_server!(cx.editor, doc);
131 let current_url = doc.url();
134 let current_url = doc.url();
132 let offset_encoding = language_server.offset_encoding();
135 let offset_encoding = language_server.offset_encoding();
@@ -163,7 +166,7 @@ pub fn symbol_picker(cx: &mut Context) {
163pub fn workspace_symbol_picker(cx: &mut Context) {
166pub fn workspace_symbol_picker(cx: &mut Context) {
164 let doc = doc!(cx.editor);
167 let doc = doc!(cx.editor);
165 let current_url = doc.url();
168 let current_url = doc.url();
166− let language_server = language_server!(doc);
169+ let language_server = language_server!(cx.editor, doc);
167 let offset_encoding = language_server.offset_encoding();
170 let offset_encoding = language_server.offset_encoding();
168 let future = language_server.workspace_symbols("".to_string());
171 let future = language_server.workspace_symbols("".to_string());
@@ -192,7 +195,7 @@ impl ui::menu::Item for lsp::CodeActionOrCommand {
192pub fn code_action(cx: &mut Context) {
195pub fn code_action(cx: &mut Context) {
193 let (view, doc) = current!(cx.editor);
196 let (view, doc) = current!(cx.editor);
195− let language_server = language_server!(doc);
198+ let language_server = language_server!(cx.editor, doc);
197 let range = range_to_lsp_range(
200 let range = range_to_lsp_range(
198 doc.text(),
201 doc.text(),
@@ -257,7 +260,7 @@ pub fn code_action(cx: &mut Context) {
258pub fn execute_lsp_command(editor: &mut Editor, cmd: lsp::Command) {
261pub fn execute_lsp_command(editor: &mut Editor, cmd: lsp::Command) {
259 let doc = doc!(editor);
262 let doc = doc!(editor);
260− let language_server = language_server!(doc);
263+ let language_server = language_server!(editor, doc);
262 // the command is executed on the server and communicated back
265 // the command is executed on the server and communicated back
263 // to the client asynchronously using workspace edits
266 // to the client asynchronously using workspace edits
@@ -492,7 +495,7 @@ fn to_locations(definitions: Option<lsp::GotoDefinitionResponse>) -> Vec<lsp::Lo
493pub fn goto_definition(cx: &mut Context) {
496pub fn goto_definition(cx: &mut Context) {
494 let (view, doc) = current!(cx.editor);
497 let (view, doc) = current!(cx.editor);
495− let language_server = language_server!(doc);
498+ let language_server = language_server!(cx.editor, doc);
496 let offset_encoding = language_server.offset_encoding();
499 let offset_encoding = language_server.offset_encoding();
498 let pos = doc.position(view.id, offset_encoding);
501 let pos = doc.position(view.id, offset_encoding);
@@ -510,7 +513,7 @@ pub fn goto_definition(cx: &mut Context) {
511pub fn goto_type_definition(cx: &mut Context) {
514pub fn goto_type_definition(cx: &mut Context) {
512 let (view, doc) = current!(cx.editor);
515 let (view, doc) = current!(cx.editor);
513− let language_server = language_server!(doc);
516+ let language_server = language_server!(cx.editor, doc);
514 let offset_encoding = language_server.offset_encoding();
517 let offset_encoding = language_server.offset_encoding();
516 let pos = doc.position(view.id, offset_encoding);
519 let pos = doc.position(view.id, offset_encoding);
@@ -528,7 +531,7 @@ pub fn goto_type_definition(cx: &mut Context) {
529pub fn goto_implementation(cx: &mut Context) {
532pub fn goto_implementation(cx: &mut Context) {
530 let (view, doc) = current!(cx.editor);
533 let (view, doc) = current!(cx.editor);
531− let language_server = language_server!(doc);
534+ let language_server = language_server!(cx.editor, doc);
532 let offset_encoding = language_server.offset_encoding();
535 let offset_encoding = language_server.offset_encoding();
534 let pos = doc.position(view.id, offset_encoding);
537 let pos = doc.position(view.id, offset_encoding);
@@ -546,7 +549,7 @@ pub fn goto_implementation(cx: &mut Context) {
547pub fn goto_reference(cx: &mut Context) {
550pub fn goto_reference(cx: &mut Context) {
548 let (view, doc) = current!(cx.editor);
551 let (view, doc) = current!(cx.editor);
549− let language_server = language_server!(doc);
552+ let language_server = language_server!(cx.editor, doc);
550 let offset_encoding = language_server.offset_encoding();
553 let offset_encoding = language_server.offset_encoding();
552 let pos = doc.position(view.id, offset_encoding);
555 let pos = doc.position(view.id, offset_encoding);
@@ -564,7 +567,7 @@ pub fn goto_reference(cx: &mut Context) {
565pub fn signature_help(cx: &mut Context) {
568pub fn signature_help(cx: &mut Context) {
566 let (view, doc) = current!(cx.editor);
569 let (view, doc) = current!(cx.editor);
567− let language_server = language_server!(doc);
570+ let language_server = language_server!(cx.editor, doc);
568 let offset_encoding = language_server.offset_encoding();
571 let offset_encoding = language_server.offset_encoding();
570 let pos = doc.position(view.id, offset_encoding);
573 let pos = doc.position(view.id, offset_encoding);
@@ -592,7 +595,7 @@ pub fn signature_help(cx: &mut Context) {
593pub fn hover(cx: &mut Context) {
596pub fn hover(cx: &mut Context) {
594 let (view, doc) = current!(cx.editor);
597 let (view, doc) = current!(cx.editor);
595− let language_server = language_server!(doc);
598+ let language_server = language_server!(cx.editor, doc);
596 let offset_encoding = language_server.offset_encoding();
599 let offset_encoding = language_server.offset_encoding();
598 // TODO: factor out a doc.position_identifier() that returns lsp::TextDocumentPositionIdentifier
601 // TODO: factor out a doc.position_identifier() that returns lsp::TextDocumentPositionIdentifier
@@ -650,7 +653,7 @@ pub fn rename_symbol(cx: &mut Context) {
652 let (view, doc) = current!(cx.editor);
655 let (view, doc) = current!(cx.editor);
653− let language_server = language_server!(doc);
656+ let language_server = language_server!(cx.editor, doc);
654 let offset_encoding = language_server.offset_encoding();
657 let offset_encoding = language_server.offset_encoding();
656 let pos = doc.position(view.id, offset_encoding);
659 let pos = doc.position(view.id, offset_encoding);