[gnome-builder] lsp: handle Location[] result from LSP



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]