@@ -325,6 +325,16 @@ pub fn symbol_picker(cx: &mut Context) {
325
325
let doc = doc ! ( cx. editor) ;
326
326
327
327
let language_server = language_server ! ( cx. editor, doc) ;
328
+
329
+ if matches ! (
330
+ language_server. capabilities( ) . workspace_symbol_provider,
331
+ None | Some ( lsp:: OneOf :: Left ( false ) )
332
+ ) {
333
+ cx. editor
334
+ . set_status ( "Document symbols are not enabled by the Language Server" ) ;
335
+ return ;
336
+ }
337
+
328
338
let current_url = doc. url ( ) ;
329
339
let offset_encoding = language_server. offset_encoding ( ) ;
330
340
@@ -359,6 +369,16 @@ pub fn workspace_symbol_picker(cx: &mut Context) {
359
369
let doc = doc ! ( cx. editor) ;
360
370
let current_url = doc. url ( ) ;
361
371
let language_server = language_server ! ( cx. editor, doc) ;
372
+
373
+ if matches ! (
374
+ language_server. capabilities( ) . workspace_symbol_provider,
375
+ None | Some ( lsp:: OneOf :: Left ( false ) )
376
+ ) {
377
+ cx. editor
378
+ . set_status ( "Workspace symbols are not enabled by the Language Server" ) ;
379
+ return ;
380
+ }
381
+
362
382
let offset_encoding = language_server. offset_encoding ( ) ;
363
383
let future = language_server. workspace_symbols ( "" . to_string ( ) ) ;
364
384
@@ -426,6 +446,15 @@ pub fn code_action(cx: &mut Context) {
426
446
427
447
let language_server = language_server ! ( cx. editor, doc) ;
428
448
449
+ if matches ! (
450
+ language_server. capabilities( ) . code_action_provider,
451
+ None | Some ( lsp:: CodeActionProviderCapability :: Simple ( false ) )
452
+ ) {
453
+ cx. editor
454
+ . set_status ( "Code actions are not enabled by the Language Server" ) ;
455
+ return ;
456
+ }
457
+
429
458
let selection_range = doc. selection ( view. id ) . primary ( ) ;
430
459
let offset_encoding = language_server. offset_encoding ( ) ;
431
460
@@ -737,6 +766,16 @@ fn to_locations(definitions: Option<lsp::GotoDefinitionResponse>) -> Vec<lsp::Lo
737
766
pub fn goto_definition ( cx : & mut Context ) {
738
767
let ( view, doc) = current ! ( cx. editor) ;
739
768
let language_server = language_server ! ( cx. editor, doc) ;
769
+
770
+ if matches ! (
771
+ language_server. capabilities( ) . definition_provider,
772
+ None | Some ( lsp:: OneOf :: Left ( false ) )
773
+ ) {
774
+ cx. editor
775
+ . set_status ( "Find definition is not enabled by the Language Server" ) ;
776
+ return ;
777
+ }
778
+
740
779
let offset_encoding = language_server. offset_encoding ( ) ;
741
780
742
781
let pos = doc. position ( view. id , offset_encoding) ;
@@ -755,6 +794,16 @@ pub fn goto_definition(cx: &mut Context) {
755
794
pub fn goto_type_definition ( cx : & mut Context ) {
756
795
let ( view, doc) = current ! ( cx. editor) ;
757
796
let language_server = language_server ! ( cx. editor, doc) ;
797
+
798
+ if matches ! (
799
+ language_server. capabilities( ) . type_definition_provider,
800
+ None | Some ( lsp:: TypeDefinitionProviderCapability :: Simple ( false ) )
801
+ ) {
802
+ cx. editor
803
+ . set_status ( "Find type definition is not enabled by the Language Server" ) ;
804
+ return ;
805
+ }
806
+
758
807
let offset_encoding = language_server. offset_encoding ( ) ;
759
808
760
809
let pos = doc. position ( view. id , offset_encoding) ;
@@ -773,6 +822,16 @@ pub fn goto_type_definition(cx: &mut Context) {
773
822
pub fn goto_implementation ( cx : & mut Context ) {
774
823
let ( view, doc) = current ! ( cx. editor) ;
775
824
let language_server = language_server ! ( cx. editor, doc) ;
825
+
826
+ if matches ! (
827
+ language_server. capabilities( ) . implementation_provider,
828
+ None | Some ( lsp:: ImplementationProviderCapability :: Simple ( false ) )
829
+ ) {
830
+ cx. editor
831
+ . set_status ( "Find implementation is not enabled by the Language Server" ) ;
832
+ return ;
833
+ }
834
+
776
835
let offset_encoding = language_server. offset_encoding ( ) ;
777
836
778
837
let pos = doc. position ( view. id , offset_encoding) ;
@@ -791,6 +850,16 @@ pub fn goto_implementation(cx: &mut Context) {
791
850
pub fn goto_reference ( cx : & mut Context ) {
792
851
let ( view, doc) = current ! ( cx. editor) ;
793
852
let language_server = language_server ! ( cx. editor, doc) ;
853
+
854
+ if matches ! (
855
+ language_server. capabilities( ) . references_provider,
856
+ None | Some ( lsp:: OneOf :: Left ( false ) )
857
+ ) {
858
+ cx. editor
859
+ . set_status ( "Find references is not enabled by the Language Server" ) ;
860
+ return ;
861
+ }
862
+
794
863
let offset_encoding = language_server. offset_encoding ( ) ;
795
864
796
865
let pos = doc. position ( view. id , offset_encoding) ;
@@ -832,6 +901,18 @@ pub fn signature_help_impl(cx: &mut Context, invoked: SignatureHelpInvoked) {
832
901
return ;
833
902
}
834
903
} ;
904
+
905
+ if was_manually_invoked
906
+ && language_server
907
+ . capabilities ( )
908
+ . signature_help_provider
909
+ . is_none ( )
910
+ {
911
+ cx. editor
912
+ . set_status ( "Signature help is not enabled by the Language Server" ) ;
913
+ return ;
914
+ }
915
+
835
916
let offset_encoding = language_server. offset_encoding ( ) ;
836
917
837
918
let pos = doc. position ( view. id , offset_encoding) ;
@@ -928,6 +1009,16 @@ pub fn signature_help_impl(cx: &mut Context, invoked: SignatureHelpInvoked) {
928
1009
pub fn hover ( cx : & mut Context ) {
929
1010
let ( view, doc) = current ! ( cx. editor) ;
930
1011
let language_server = language_server ! ( cx. editor, doc) ;
1012
+
1013
+ if matches ! (
1014
+ language_server. capabilities( ) . hover_provider,
1015
+ None | Some ( lsp:: HoverProviderCapability :: Simple ( false ) )
1016
+ ) {
1017
+ cx. editor
1018
+ . set_status ( "Hover is not enabled by the Language Server" ) ;
1019
+ return ;
1020
+ }
1021
+
931
1022
let offset_encoding = language_server. offset_encoding ( ) ;
932
1023
933
1024
// TODO: factor out a doc.position_identifier() that returns lsp::TextDocumentPositionIdentifier
@@ -1016,6 +1107,16 @@ pub fn rename_symbol(cx: &mut Context) {
1016
1107
pub fn select_references_to_symbol_under_cursor ( cx : & mut Context ) {
1017
1108
let ( view, doc) = current ! ( cx. editor) ;
1018
1109
let language_server = language_server ! ( cx. editor, doc) ;
1110
+
1111
+ if matches ! (
1112
+ language_server. capabilities( ) . document_highlight_provider,
1113
+ None | Some ( lsp:: OneOf :: Left ( false ) )
1114
+ ) {
1115
+ cx. editor
1116
+ . set_status ( "Document highlight is not enabled by the Language Server" ) ;
1117
+ return ;
1118
+ }
1119
+
1019
1120
let offset_encoding = language_server. offset_encoding ( ) ;
1020
1121
1021
1122
let pos = doc. position ( view. id , offset_encoding) ;
0 commit comments