[gnome-builder/wip/elad/jedi-fixes: 9/9] jedi: support argument completion for GObject Introspection functions
- From: Elad Alfassa <eladalfassa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/elad/jedi-fixes: 9/9] jedi: support argument completion for GObject Introspection functions
- Date: Tue, 25 Aug 2015 20:49:05 +0000 (UTC)
commit 01b9fbe9f9f24bb912a1086e6d4cdc37311f4bc2
Author: Elad Alfassa <elad fedoraproject org>
Date: Tue Aug 25 23:45:33 2015 +0300
jedi: support argument completion for GObject Introspection functions
plugins/jedi/jedi_plugin.py | 36 ++++++++++++++++++++++++++++--------
1 files changed, 28 insertions(+), 8 deletions(-)
---
diff --git a/plugins/jedi/jedi_plugin.py b/plugins/jedi/jedi_plugin.py
index ab7d807..7d9b4f1 100644
--- a/plugins/jedi/jedi_plugin.py
+++ b/plugins/jedi/jedi_plugin.py
@@ -3,6 +3,7 @@
#
# jedi_plugin.py
#
+# Copyright (C) 2015 Elad Alfassa <elad fedoraproject org>
# Copyright (C) 2015 Christian Hergert <chris dronelabs com>
#
# This program is free software: you can redistribute it and/or modify
@@ -21,6 +22,7 @@
from gi.importer import DynamicImporter
from gi.module import IntrospectionModule
+from gi.module import FunctionInfo
from gi.repository import GLib
from gi.repository import GObject
from gi.repository import Gtk
@@ -80,6 +82,12 @@ except ImportError:
import threading
+class GIParam(object):
+ "A pygobject ArgInfo wrapper to make it similar to Jedi's Param class"
+ def __init__(self, arg_info):
+ self.name = arg_info.get_name()
+
+
class CompletionThread(threading.Thread):
cancelled = False
@@ -100,6 +108,16 @@ class CompletionThread(threading.Thread):
completions = []
if not self.cancelled:
for info in script.completions():
+ if self.cancelled:
+ break
+ # we have to use custom names here because .type and .params can't be overriden
(they are properties)
+ if type(info._definition) == CompiledObject and \
+ type(info._definition.obj) == FunctionInfo:
+ info.real_type = 'function'
+ obj = info._definition.obj
+ info.gi_params = [GIParam(argument) for argument in obj.get_arguments()]
+ else:
+ info.real_type = info.type
completion = JediCompletionProposal(self._provider, self._context, info)
completions.append(completion)
self._completions = completions
@@ -197,13 +215,16 @@ class JediCompletionProvider(Ide.Object,
snippet.add_chunk(chunk)
# Add parameter completion for functions.
- if proposal.completion.type == 'function':
+ if proposal.completion.real_type == 'function':
chunk = Ide.SourceSnippetChunk()
chunk.set_text('(')
chunk.set_text_set(True)
snippet.add_chunk(chunk)
- params = proposal.completion.params
+ if hasattr(proposal.completion, 'gi_params'):
+ params = proposal.completion.gi_params
+ else:
+ params = proposal.completion.params
if not params:
chunk = Ide.SourceSnippetChunk()
@@ -267,16 +288,16 @@ class JediCompletionProposal(GObject.Object, GtkSource.CompletionProposal):
return self.completion.complete
def do_get_icon_name(self):
- if self.completion.type == 'class':
+ if self.completion.real_type == 'class':
return 'lang-class-symbolic'
- elif self.completion.type == 'instance':
+ elif self.completion.real_type in ('instance', 'param'):
return 'lang-variable-symbolic'
- elif self.completion.type in ('import', 'module'):
+ elif self.completion.real_type in ('import', 'module'):
# FIXME: Would be nice to do something better here.
return 'lang-include-symbolic'
- elif self.completion.type == 'function':
+ elif self.completion.real_type == 'function':
return 'lang-function-symbolic'
- elif self.completion.type == 'keyword':
+ elif self.completion.real_type == 'keyword':
# FIXME: And here
return None
return None
@@ -289,4 +310,3 @@ class JediCompletionProposal(GObject.Object, GtkSource.CompletionProposal):
def do_changed(self):
pass
-
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]