Update our plugin registration for debugging

This allows us to report whether or not a plugin is local when users
provide `flake8 --bug-report` output.
This commit is contained in:
Ian Stapleton Cordasco 2017-08-08 08:54:40 -05:00
parent d5dfd1180d
commit 156f90369f
No known key found for this signature in database
GPG key ID: C9D7A2604B4FCB2A
6 changed files with 65 additions and 48 deletions

View file

@ -53,8 +53,14 @@ def information(option_manager):
def plugins_from(option_manager):
"""Generate the list of plugins installed."""
return [{'plugin': plugin, 'version': version}
for (plugin, version) in sorted(option_manager.registered_plugins)]
return [
{
'plugin': plugin.name,
'version': plugin.version,
'is_local': plugin.local,
}
for plugin in sorted(option_manager.registered_plugins)
]
def dependencies():

View file

@ -1,4 +1,5 @@
"""Option handling and Option management logic."""
import collections
import logging
import optparse # pylint: disable=deprecated-module
@ -153,6 +154,10 @@ class Option(object):
return self._opt
PluginVersion = collections.namedtuple("PluginVersion",
["name", "version", "local"])
class OptionManager(object):
"""Manage Options and OptionParser while adding post-processing."""
@ -178,9 +183,9 @@ class OptionManager(object):
self.extended_default_select = set()
@staticmethod
def format_plugin(plugin_tuple):
"""Convert a plugin tuple into a dictionary mapping name to value."""
return dict(zip(["name", "version"], plugin_tuple))
def format_plugin(plugin):
"""Convert a PluginVersion into a dictionary mapping name to value."""
return {attr: getattr(plugin, attr) for attr in ["name", "version"]}
def add_option(self, *args, **kwargs):
"""Create and register a new option.
@ -306,7 +311,7 @@ class OptionManager(object):
self._normalize(options)
return options, xargs
def register_plugin(self, name, version):
def register_plugin(self, name, version, local=False):
"""Register a plugin relying on the OptionManager.
:param str name:
@ -314,5 +319,7 @@ class OptionManager(object):
attribute of the class or function loaded from the entry-point.
:param str version:
The version of the checker that we're using.
:param bool local:
Whether the plugin is local to the project/repository or not.
"""
self.registered_plugins.add((name, version))
self.registered_plugins.add(PluginVersion(name, version, local))

View file

@ -115,8 +115,6 @@ class Plugin(object):
self._version = version_for(self)
else:
self._version = self.plugin.version
if self.local:
self._version += ' [local]'
return self._version