forked from VimPlug/jedi
40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
from jedi.plugins.stdlib import StdlibPlugin
|
|
from jedi.plugins.typeshed import TypeshedPlugin
|
|
from jedi.plugins.flask import FlaskPlugin
|
|
|
|
|
|
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):
|
|
self._plugins = list(plugins)
|
|
|
|
def decorate(self, name, callback):
|
|
for plugin in reversed(self._plugins):
|
|
# Need to reverse so the first plugin is run first.
|
|
callback = getattr(plugin, name)(callback)
|
|
return callback
|
|
|
|
|
|
plugin_manager = _PluginManager([
|
|
StdlibPlugin,
|
|
FlaskPlugin,
|
|
TypeshedPlugin,
|
|
])
|