Skip to content

Commit f581460

Browse files
committed
coala-quickstart.py: Change the printing of bears
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
1 parent eca9c62 commit f581460

File tree

3 files changed

+55
-23
lines changed

3 files changed

+55
-23
lines changed

coala_quickstart/Strings.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,15 @@
5050
5151
You can see all of them here: {}
5252
""".format(BEAR_DOCS_URL)
53+
54+
PRINT_BEARS = {'unusable':
55+
{'msg': """
56+
\nBased on the configuration options the following
57+
bears have been identified to be unusable:
58+
""",
59+
'colors': ('green', 'red')},
60+
'usable': {'msg': """
61+
\nBased on the languages used in project the following
62+
bears have been identified to be usable:
63+
""",
64+
'colors': ('green', 'cyan')}}

coala_quickstart/coala_quickstart.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import logging
33
import os
44
import sys
5+
from collections import OrderedDict
56

67
from pyprint.ConsolePrinter import ConsolePrinter
78

@@ -90,15 +91,24 @@ def main():
9091

9192
extracted_information = collect_info(project_dir)
9293

93-
relevant_bears = filter_relevant_bears(
94-
used_languages, printer, arg_parser, extracted_information)
95-
96-
print_relevant_bears(printer, relevant_bears)
94+
# OrderedDict used for print_relevant_bears to first print unusable bears
95+
relevant_bears = OrderedDict(
96+
[('unusable', {}),
97+
('usable',
98+
filter_relevant_bears(used_languages,
99+
printer,
100+
arg_parser,
101+
extracted_information))])
97102

98103
if args.non_interactive and not args.incomplete_sections:
99-
unusable_bears = get_non_optional_settings_bears(relevant_bears)
104+
unusable_bears = get_non_optional_settings_bears(
105+
relevant_bears['usable'])
100106
remove_unusable_bears(relevant_bears, unusable_bears)
101-
print_relevant_bears(printer, relevant_bears, 'usable')
107+
108+
print_relevant_bears(printer, relevant_bears)
109+
110+
# Drop unusable bears
111+
relevant_bears = relevant_bears['usable']
102112

103113
settings = generate_settings(
104114
project_dir,

coala_quickstart/generation/Bears.py

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from coala_quickstart.Constants import (
88
IMPORTANT_BEAR_LIST, ALL_CAPABILITIES, DEFAULT_CAPABILTIES)
9-
from coala_quickstart.Strings import BEAR_HELP
9+
from coala_quickstart.Strings import (PRINT_BEARS, BEAR_HELP)
1010
from coala_quickstart.generation.SettingsFilling import is_autofill_possible
1111
from coalib.bearlib.abstractions.LinterClass import LinterClass
1212
from coalib.settings.ConfigurationGathering import get_filtered_bears
@@ -200,38 +200,48 @@ def get_non_optional_settings_bears(bears):
200200

201201
def remove_unusable_bears(bears, unusable_bears):
202202
"""
203-
From the bears dict, filter the bears appearing in unusable_bears.
203+
From the bears dict, filter the bears appearing in unusable_bears
204+
and save them under “unusable” key for printing later.
204205
205206
:param bears:
206207
A dict with language name as key and bear classes as value.
207208
:param unusable_bears:
208209
A collection of Bear classes.
209210
"""
210-
for language, language_bears in bears.items():
211+
for language, language_bears in bears['usable'].items():
211212
for bear in tuple(language_bears):
212213
if bear in unusable_bears:
213-
bears[language].remove(bear)
214+
bears['usable'][language].remove(bear)
215+
bears['unusable'][language] = bears['unusable'].get(
216+
language, ()) + (bear, )
214217

215218

216-
def print_relevant_bears(printer, relevant_bears, label='relevant'):
219+
def print_relevant_bears(printer, relevant_bears):
217220
"""
218-
Prints the relevant bears in sections separated by language.
221+
Prints both the usable and unusable, relevant bears
222+
in sections separated by language.
219223
220224
:param printer:
221225
A ``ConsolePrinter`` object used for console interactions.
222226
:param relevant_bears:
223-
A dict with language name as key and bear classes as value.
227+
An ``OrderedDict`` indexed by “usable” and “unusable” bears stored in
228+
dictionaries that use language as key and bear classes as value.
224229
"""
225-
if label == 'relevant':
226-
printer.print(BEAR_HELP)
227-
228-
printer.print("\nBased on the languages used in project the following "
229-
"bears have been identified to be %s:" % label)
230-
for language in relevant_bears:
231-
printer.print(" [" + language + "]", color="green")
232-
for bear in relevant_bears[language]:
233-
printer.print(" " + bear.name, color="cyan")
234-
printer.print("")
230+
printer.print(BEAR_HELP)
231+
232+
# Don't print anything for empty bear sets
233+
nonempty_label_bears = (
234+
label for label in relevant_bears if len(relevant_bears[label]) > 0)
235+
236+
for label_bears in nonempty_label_bears:
237+
printer.print(PRINT_BEARS[label_bears]['msg'])
238+
for language in relevant_bears[label_bears]:
239+
printer.print(" [" + language + "]",
240+
color=PRINT_BEARS[label_bears]["colors"][0])
241+
for bear in relevant_bears[label_bears][language]:
242+
printer.print(" " + bear.name,
243+
color=PRINT_BEARS[label_bears]["colors"][1])
244+
printer.print("")
235245

236246

237247
def generate_requirements_map(bears):

0 commit comments

Comments
 (0)