summaryrefslogtreecommitdiff
path: root/lsp-parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'lsp-parse.c')
-rw-r--r--lsp-parse.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/lsp-parse.c b/lsp-parse.c
index 6d436d9..8797edf 100644
--- a/lsp-parse.c
+++ b/lsp-parse.c
@@ -79,9 +79,12 @@ static bool parse_range(LSP *lsp, const JSON *json, JSONValue range_value, LSPRa
static void parse_capabilities(LSP *lsp, const JSON *json, JSONObject capabilities) {
+ LSPCapabilities *cap = &lsp->capabilities;
+
+ // check CompletionOptions
JSONValue completion_value = json_object_get(json, capabilities, "completionProvider");
if (completion_value.type == JSON_OBJECT) {
- lsp->provides_completion = true;
+ cap->completion_support = true;
JSONObject completion = completion_value.val.object;
JSONArray trigger_chars = json_object_get_array(json, completion, "triggerCharacters");
@@ -104,6 +107,14 @@ static void parse_capabilities(LSP *lsp, const JSON *json, JSONObject capabiliti
}
}
}
+
+
+ JSONObject workspace = json_object_get_object(json, capabilities, "workspace");
+ // check WorkspaceFoldersServerCapabilities
+ JSONObject workspace_folders = json_object_get_object(json, workspace, "workspaceFolders");
+ if (json_object_get_bool(json, workspace_folders, "supported", false)) {
+ cap->workspace_folders_support = true;
+ }
}
static bool parse_completion(LSP *lsp, const JSON *json, LSPResponse *response) {
@@ -383,15 +394,12 @@ static void process_message(LSP *lsp, JSON *json) {
break;
case LSP_REQUEST_INITIALIZE: {
// it's the response to our initialize request!
-
if (result.type == JSON_OBJECT) {
// read server capabilities
JSONObject capabilities = json_object_get_object(json, result.val.object, "capabilities");
parse_capabilities(lsp, json, capabilities);
}
- // let's send back an "initialized" request (notification) because apparently
- // that's something we need to do.
LSPRequest initialized = {
.type = LSP_REQUEST_INITIALIZED,
.data = {0},