[gnome-builder] lsp: handle Location[] result from LSP
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] lsp: handle Location[] result from LSP
- Date: Tue, 3 Dec 2019 05:55:53 +0000 (UTC)
commit 04ae7cee5729d41e0d6357f3e400ff6a30a6cbca
Author: Christian Hergert <chergert redhat com>
Date: Mon Dec 2 21:55:15 2019 -0800
lsp: handle Location[] result from LSP
This only takes the first result, but is sufficient for what we need.
Fixes #1086
src/libide/lsp/ide-lsp-symbol-resolver.c | 43 +++++++++++++++++++++-----------
1 file changed, 28 insertions(+), 15 deletions(-)
---
diff --git a/src/libide/lsp/ide-lsp-symbol-resolver.c b/src/libide/lsp/ide-lsp-symbol-resolver.c
index 08d3dc5b8..0a20fc8eb 100644
--- a/src/libide/lsp/ide-lsp-symbol-resolver.c
+++ b/src/libide/lsp/ide-lsp-symbol-resolver.c
@@ -195,27 +195,40 @@ ide_lsp_symbol_resolver_definition_cb (GObject *object,
}
#endif
- g_variant_iter_init (&iter, return_value);
+ /* We only take the first result here */
+ if (g_variant_is_of_type (return_value, G_VARIANT_TYPE ("av")))
+ {
+ g_variant_iter_init (&iter, return_value);
+ if (g_variant_iter_next (&iter, "v", &variant))
+ goto parse;
+ }
- if (g_variant_iter_next (&iter, "v", &variant))
+ if (g_variant_is_of_type (return_value, G_VARIANT_TYPE ("a{sv}")))
{
- success = JSONRPC_MESSAGE_PARSE (variant,
- "uri", JSONRPC_MESSAGE_GET_STRING (&uri),
- "range", "{",
- "start", "{",
- "line", JSONRPC_MESSAGE_GET_INT64 (&begin.line),
- "character", JSONRPC_MESSAGE_GET_INT64 (&begin.column),
- "}",
- "end", "{",
- "line", JSONRPC_MESSAGE_GET_INT64 (&end.line),
- "character", JSONRPC_MESSAGE_GET_INT64 (&end.column),
- "}",
- "}"
- );
+ variant = g_variant_ref (return_value);
+ goto parse;
}
+ IDE_GOTO (failure);
+
+parse:
+ success = JSONRPC_MESSAGE_PARSE (variant,
+ "uri", JSONRPC_MESSAGE_GET_STRING (&uri),
+ "range", "{",
+ "start", "{",
+ "line", JSONRPC_MESSAGE_GET_INT64 (&begin.line),
+ "character", JSONRPC_MESSAGE_GET_INT64 (&begin.column),
+ "}",
+ "end", "{",
+ "line", JSONRPC_MESSAGE_GET_INT64 (&end.line),
+ "character", JSONRPC_MESSAGE_GET_INT64 (&end.column),
+ "}",
+ "}"
+ );
+
if (!success)
{
+ failure:
ide_task_return_new_error (task,
G_IO_ERROR,
G_IO_ERROR_INVALID_DATA,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]