@@ -208,6 +208,23 @@ void showcompls(json_t *msg) {
208208 }
209209}
210210
211+ void showhover (json_t * hover ) {
212+ if (json_is_string (hover )) {
213+ printf ("%s\n" , json_string_value (hover ));
214+ } else if (json_is_object (hover )) {
215+ printf ("%s\n" , json_string_value (GET (hover , "value" )));
216+ }
217+ }
218+
219+ void showhovers (json_t * msg ) {
220+ json_t * contents = GET (msg , "result" , "contents" );
221+ if (!json_is_array (contents )) {
222+ showhover (contents );
223+ } else for (size_t i = 0 , n = json_array_size (contents ); i < n ; i ++ ) {
224+ showhover (json_array_get (contents , i ));
225+ }
226+ }
227+
211228void showmatches (json_t * msg ) {
212229 avim_buf data = NULL ;
213230 avim_strv lines = NULL ;
@@ -607,6 +624,8 @@ json_t *capabilities(void) {
607624 "documentSymbol" , OBJ (
608625 "hierarchicalDocumentSymbolSupport" ,
609626 JSON (true)),
627+ "hover" , OBJ (
628+ "contentFormat" , JSON (string , "plaintext" )),
610629 "implementation" , JSON (object ),
611630 "references" , JSON (object ),
612631 "typeDefinition" , JSON (object ),
@@ -759,6 +778,10 @@ void cmd_def(void) {
759778 txtdoc ("textDocument/definition" , gotomatch , JSON (object ));
760779}
761780
781+ void cmd_hover (void ) {
782+ txtdoc ("textDocument/hover" , showhovers , JSON (object ));
783+ }
784+
762785void cmd_impl (void ) {
763786 txtdoc ("textDocument/implementation" , gotomatch , JSON (object ));
764787}
@@ -798,6 +821,7 @@ void initmenu(json_t *cap) {
798821 addcmd ("compl" , cmd_compl , cap , "completionProvider" );
799822 addcmd ("decl" , cmd_decl , cap , "declarationProvider" );
800823 addcmd ("def" , cmd_def , cap , "definitionProvider" );
824+ addcmd ("hover" , cmd_hover , cap , "hoverProvider" );
801825 addcmd ("impl" , cmd_impl , cap , "implementationProvider" );
802826 addcmd ("all-" , cmd_all_refs , cap , "referencesProvider" );
803827 addcmd ("refs" , cmd_refs , cap , "referencesProvider" );
0 commit comments