1
0
forked from VimPlug/jedi
Files
jedi-fork/jedi/plugins/__init__.py
2018-07-21 15:03:05 +02:00

44 lines
1.2 KiB
Python

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()