diff options
author | pommicket <pommicket@gmail.com> | 2022-12-22 23:46:17 -0500 |
---|---|---|
committer | pommicket <pommicket@gmail.com> | 2022-12-22 23:46:17 -0500 |
commit | daee4283b56603e172aac547c20c5534e588f60d (patch) | |
tree | a271d0f1a0754945e08f10fca2061f194b74882e | |
parent | b906df08a805e704e45cb7f2bc4b31e83d3222fe (diff) |
finish up capabilities (for now)
-rw-r--r-- | autocomplete.c | 2 | ||||
-rw-r--r-- | lsp-parse.c | 11 | ||||
-rw-r--r-- | lsp-write.c | 13 | ||||
-rw-r--r-- | main.c | 3 |
4 files changed, 28 insertions, 1 deletions
diff --git a/autocomplete.c b/autocomplete.c index f6c6ff6..67da65a 100644 --- a/autocomplete.c +++ b/autocomplete.c @@ -361,7 +361,7 @@ static void autocomplete_frame(Ted *ted) { if (completion->deprecated) { gl_geometry_rect(rect(V2(label_x, y + (char_height - border_thickness) * 0.5f), V2((float)state.x - label_x, 1)), - colors[COLOR_TEXT]); + colors[label_color]); } y += char_height; diff --git a/lsp-parse.c b/lsp-parse.c index 6b4dc46..9d02782 100644 --- a/lsp-parse.c +++ b/lsp-parse.c @@ -171,6 +171,17 @@ static bool parse_completion(LSP *lsp, const JSON *json, LSPResponse *response) item->text_edit.type = (LSPTextEditType)edit_type; } + JSONString documentation = {0}; + JSONValue documentation_value = json_object_get(json, item_object, "documentation"); + // the "documentation" field is either just a string or an object containing + // a type ("markdown" or "plaintext") and a string. + if (documentation_value.type == JSON_STRING) { + documentation = documentation_value.val.string; + } else if (documentation_value.type == JSON_OBJECT) { + documentation = json_object_get_string(json, documentation_value.val.object, + "value"); + } + JSONString detail_text = json_object_get_string(json, item_object, "detail"); if (detail_text.pos) { diff --git a/lsp-write.c b/lsp-write.c index 9922862..4a56543 100644 --- a/lsp-write.c +++ b/lsp-write.c @@ -291,7 +291,20 @@ static void write_request(LSP *lsp, LSPRequest *request) { // completion capabilities write_key_obj_start(o, "completionItem"); write_key_bool(o, "snippetSupport", false); + write_key_bool(o, "commitCharactersSupport", false); + write_key_arr_start(o, "documentationFormat"); + // we dont really support markdown + write_arr_elem_string(o, "plaintext"); + write_arr_end(o); write_key_bool(o, "deprecatedSupport", true); + write_key_bool(o, "preselectSupport", false); + write_key_obj_start(o, "tagSupport"); + write_key_arr_start(o, "valueSet"); + // currently the only tag in the spec + write_arr_elem_number(o, 1); + write_arr_end(o); + write_obj_end(o); + write_key_bool(o, "insertReplaceSupport", false); write_obj_end(o); // "completion item kinds" supported by ted // (these are the little icons displayed for function/variable/etc.) @@ -1,5 +1,7 @@ /* @TODO: +- show documentation +- finish up capabilities - trigger characters (with setting) - only show "Loading..." if it's taking some time (prevent flash) - LSP setting @@ -8,6 +10,7 @@ - close completions when a non-word character is typed - rename buffer->filename to buffer->path - make buffer->path NULL for untitled buffers & fix resulting mess +- run everything through valgrind ideally with leak checking - rust-analyzer bug reports: - bad json can give "Unexpected error: client exited without proper shutdown sequence" - rust-analyzer should wait until cargo metadata/check is done before sending initialize response |