Skip to content

Commit

Permalink
coala-quickstart.py: Change the printing of bears
Browse files Browse the repository at this point in the history
Remove duplicate printing of `relevant_bears`` and instead change
`print_relevant_bears` to inform the user both of the usable and
unusable bears.

Closes #220
  • Loading branch information
tallicamike committed May 20, 2018
1 parent eca9c62 commit f581460
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 23 deletions.
12 changes: 12 additions & 0 deletions coala_quickstart/Strings.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,15 @@
You can see all of them here: {}
""".format(BEAR_DOCS_URL)

PRINT_BEARS = {'unusable':
{'msg': """
\nBased on the configuration options the following
bears have been identified to be unusable:
""",
'colors': ('green', 'red')},
'usable': {'msg': """
\nBased on the languages used in project the following
bears have been identified to be usable:
""",
'colors': ('green', 'cyan')}}
22 changes: 16 additions & 6 deletions coala_quickstart/coala_quickstart.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import logging
import os
import sys
from collections import OrderedDict

from pyprint.ConsolePrinter import ConsolePrinter

Expand Down Expand Up @@ -90,15 +91,24 @@ def main():

extracted_information = collect_info(project_dir)

relevant_bears = filter_relevant_bears(
used_languages, printer, arg_parser, extracted_information)

print_relevant_bears(printer, relevant_bears)
# OrderedDict used for print_relevant_bears to first print unusable bears
relevant_bears = OrderedDict(
[('unusable', {}),
('usable',
filter_relevant_bears(used_languages,
printer,
arg_parser,
extracted_information))])

if args.non_interactive and not args.incomplete_sections:
unusable_bears = get_non_optional_settings_bears(relevant_bears)
unusable_bears = get_non_optional_settings_bears(
relevant_bears['usable'])
remove_unusable_bears(relevant_bears, unusable_bears)
print_relevant_bears(printer, relevant_bears, 'usable')

print_relevant_bears(printer, relevant_bears)

# Drop unusable bears
relevant_bears = relevant_bears['usable']

settings = generate_settings(
project_dir,
Expand Down
44 changes: 27 additions & 17 deletions coala_quickstart/generation/Bears.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

from coala_quickstart.Constants import (
IMPORTANT_BEAR_LIST, ALL_CAPABILITIES, DEFAULT_CAPABILTIES)
from coala_quickstart.Strings import BEAR_HELP
from coala_quickstart.Strings import (PRINT_BEARS, BEAR_HELP)
from coala_quickstart.generation.SettingsFilling import is_autofill_possible
from coalib.bearlib.abstractions.LinterClass import LinterClass
from coalib.settings.ConfigurationGathering import get_filtered_bears
Expand Down Expand Up @@ -200,38 +200,48 @@ def get_non_optional_settings_bears(bears):

def remove_unusable_bears(bears, unusable_bears):
"""
From the bears dict, filter the bears appearing in unusable_bears.
From the bears dict, filter the bears appearing in unusable_bears
and save them under “unusable” key for printing later.
:param bears:
A dict with language name as key and bear classes as value.
:param unusable_bears:
A collection of Bear classes.
"""
for language, language_bears in bears.items():
for language, language_bears in bears['usable'].items():
for bear in tuple(language_bears):
if bear in unusable_bears:
bears[language].remove(bear)
bears['usable'][language].remove(bear)
bears['unusable'][language] = bears['unusable'].get(
language, ()) + (bear, )


def print_relevant_bears(printer, relevant_bears, label='relevant'):
def print_relevant_bears(printer, relevant_bears):
"""
Prints the relevant bears in sections separated by language.
Prints both the usable and unusable, relevant bears
in sections separated by language.
:param printer:
A ``ConsolePrinter`` object used for console interactions.
:param relevant_bears:
A dict with language name as key and bear classes as value.
An ``OrderedDict`` indexed by “usable” and “unusable” bears stored in
dictionaries that use language as key and bear classes as value.
"""
if label == 'relevant':
printer.print(BEAR_HELP)

printer.print("\nBased on the languages used in project the following "
"bears have been identified to be %s:" % label)
for language in relevant_bears:
printer.print(" [" + language + "]", color="green")
for bear in relevant_bears[language]:
printer.print(" " + bear.name, color="cyan")
printer.print("")
printer.print(BEAR_HELP)

# Don't print anything for empty bear sets
nonempty_label_bears = (
label for label in relevant_bears if len(relevant_bears[label]) > 0)

for label_bears in nonempty_label_bears:
printer.print(PRINT_BEARS[label_bears]['msg'])
for language in relevant_bears[label_bears]:
printer.print(" [" + language + "]",
color=PRINT_BEARS[label_bears]["colors"][0])
for bear in relevant_bears[label_bears][language]:
printer.print(" " + bear.name,
color=PRINT_BEARS[label_bears]["colors"][1])
printer.print("")


def generate_requirements_map(bears):
Expand Down

0 comments on commit f581460

Please sign in to comment.