1
0
forked from VimPlug/jedi

Add a plugin infrastructure

This commit is contained in:
Dave Halter
2018-07-21 15:03:05 +02:00
parent 7d2b7bb3c1
commit df55f62ad8
4 changed files with 66 additions and 11 deletions

43
jedi/plugins/__init__.py Normal file
View File

@@ -0,0 +1,43 @@
from functools import partial
class _PluginManager(object):
def __init__(self, registered_plugin_classes=()):
self._registered_plugin_classes = list(registered_plugin_classes)
def register(self, plugin_class):
"""
Makes it possible to register your plugin.
"""
self._registered_plugins.append(plugin_class)
def _build_chain(self, evaluator):
for plugin_class in self._registered_plugin_classes:
yield plugin_class(evaluator)
def get_callbacks(self, evaluator):
return _PluginCallbacks(self._build_chain(evaluator))
class _PluginCallbacks(object):
def __init__(self, plugins):
plugins = list(plugins)
self.execute = self._wrap(plugins, 'execute')
def _wrap(self, plugins, name):
if not plugins:
def default_callback(callback, *args, **kwargs):
return callback(*args, **kwargs)
return default_callback
func = None
for plugin in plugins:
if func is None:
func = getattr(plugin, name)
else:
func = partial(getattr(plugin, name), func)
return func
plugin_manager = _PluginManager()