Source code for flakeheaven.commands._plugins
# app
from .._constants import NAME, VERSION, ExitCode
from .._logic import colored, get_installed, get_plugin_rules
from .._patched import FlakeHeavenApplication
from .._types import CommandResult
[docs]def plugins_command(argv) -> CommandResult:
"""Show all installed plugins, their codes prefix, and matched rules from config.
"""
app = FlakeHeavenApplication(program=NAME, version=VERSION)
plugins = sorted(get_installed(app=app), key=lambda p: p['name'])
if not plugins:
return ExitCode.NO_PLUGINS_INSTALLED, 'no plugins installed'
name_width = max(len(p['name']) for p in plugins)
version_width = max(8, max(len(p['version']) for p in plugins))
codes_width = max(6, max(len(' '.join(p['codes'])) for p in plugins))
template = '{name} | {version} | {codes} | {rules}'
print(template.format(
name=colored('NAME'.ljust(name_width), 'yellow'),
version=colored('VERSION'.ljust(version_width), 'yellow'),
codes=colored('CODES'.ljust(codes_width), 'yellow'),
rules=colored('RULES', 'yellow'),
))
showed = set()
for plugin in plugins:
# Plugins returned by get_installed are unique by name and type.
# We are not showing type, so, let's show one name only once.
if plugin['name'] in showed:
continue
showed.add(plugin['name'])
rules = get_plugin_rules(
plugin_name=plugin['name'],
plugins=app.options.plugins,
)
colored_rules = []
for rule in rules:
if rule[0] == '+':
rule = colored(rule, 'green')
elif rule[0] == '-':
rule = colored(rule, 'red')
colored_rules.append(rule)
color = 'green' if rules else 'red'
print(template.format(
name=colored(plugin['name'].ljust(name_width), color),
version=plugin['version'].ljust(version_width),
codes=', '.join(plugin['codes']).ljust(codes_width),
rules=', '.join(colored_rules),
))
return ExitCode.OK, ''