diff --git a/coala_quickstart/Strings.py b/coala_quickstart/Strings.py index e81a435..af2ca05 100644 --- a/coala_quickstart/Strings.py +++ b/coala_quickstart/Strings.py @@ -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')}} diff --git a/coala_quickstart/coala_quickstart.py b/coala_quickstart/coala_quickstart.py index 54ac369..8db7a37 100644 --- a/coala_quickstart/coala_quickstart.py +++ b/coala_quickstart/coala_quickstart.py @@ -2,6 +2,7 @@ import logging import os import sys +from collections import OrderedDict from pyprint.ConsolePrinter import ConsolePrinter @@ -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, diff --git a/coala_quickstart/generation/Bears.py b/coala_quickstart/generation/Bears.py index b89e82f..620c15f 100644 --- a/coala_quickstart/generation/Bears.py +++ b/coala_quickstart/generation/Bears.py @@ -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 @@ -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):