1
0
forked from VimPlug/jedi
Files
jedi-fork/jedi/plugins/__init__.py

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,
])