diff --git a/jedi.el b/jedi.el index df53b18..c6171c1 100644 --- a/jedi.el +++ b/jedi.el @@ -694,6 +694,33 @@ See also: `jedi:server-args'." (run-hooks 'jedi:doc-hook) (funcall jedi:doc-display-buffer (current-buffer))))))))) + +;;; All Python modules + +(defvar jedi:all-modules--value) + +(defun jedi:all-modules--get () + (mapcar #'car (epc:call-sync (jedi:get-epc) 'get_all_modules nil))) + +(defvar jedi:module-names--source + '((name . "Jedi Python modules") + (candidates . jedi:all-modules--value) + (action . insert))) + +(defun jedi:importable-modules--helm (helm) + (let ((jedi:all-modules--value (jedi:all-modules--get))) + (funcall helm + :sources 'jedi:module-names--source + :buffer (format "*%s jedi:importable-modules*" helm)))) + +(defun helm-jedi-importable-modules () + (interactive) + (jedi:importable-modules--helm 'helm)) + +(defun anything-jedi-importable-modules () + (interactive) + (jedi:importable-modules--helm 'anything)) + ;;; Meta info diff --git a/jediepcserver.py b/jediepcserver.py index 589faf1..7b14596 100644 --- a/jediepcserver.py +++ b/jediepcserver.py @@ -156,6 +156,11 @@ def get_module_version(module): return version +def get_all_modules(): + import pkgutil + return [(name, ispkg) for (_, name, ispkg) in pkgutil.iter_modules()] + + def get_jedi_version(): import epc import sexpdata @@ -185,6 +190,7 @@ def jedi_epc_server(address='localhost', port=0, port_file=sys.stdout, server.register_function(goto) server.register_function(related_names) server.register_function(get_definition) + server.register_function(get_all_modules) server.register_function(get_jedi_version) port_file.write(str(server.server_address[1])) # needed for Emacs client