Source code for coalib.results.result_actions.GeneratePatchesAction

from pygments.lexers import guess_lexer_for_filename
from pyprint.ConsolePrinter import ConsolePrinter

from coalib.results.result_actions.ResultAction import ResultAction
from coalib.results.result_actions.ShowPatchAction import ShowPatchAction
from coalib.output.printers.LogPrinter import LogPrinter
from coalib.parsing.FilterHelper import apply_filters
from coalib.coala_modes import mode_normal
from coalib.parsing.DefaultArgParser import default_arg_parser


OBJECT_INDEX = FILENAME_INDEX = 0
DEFAULT_BEAR = 'SpaceConsistencyBear'


[docs]def show_possibilities(console_printer, i, action): console_printer.print('[{:>4}] {}. Apply patch (\'{}\')'.format('', i, action))
[docs]def create_arg_parser(files, bears): """ A function that generates a `default_arg_parser`. :param files: A list that contains filenames. :param bears: A list that contains name of bears. :return: An object of type `default_arg_parser`. """ args = default_arg_parser().parse_args() args.files = files args.bears = bears args.default_actions = '**: ApplyPatchAction' return args
[docs]def filter_bears(language): """ Filter bears by language. :param language: The language to filter with. :return: A list of bears. """ return list(apply_filters([['language', language]], None)[0]['cli'])
[docs]def find_language(filename): """ Find the language used in `filename`. :param filename: The name of the file. :return: The language used. """ return guess_lexer_for_filename(filename, 'Error, no file ' 'found').name
[docs]class DefaultBear(): def __init__(self): self.name = DEFAULT_BEAR
[docs]class GeneratePatchesAction(ResultAction): SUCCESS_MESSAGE = 'Patch generated successfully.' is_applicable = staticmethod(ShowPatchAction.is_applicable)
[docs] def apply(self, result, original_file_dict, file_diff_dict): """ (G)enerate patches """ console_printer = ConsolePrinter() log_printer = LogPrinter() to_filename = sorted(result.diffs.items())[OBJECT_INDEX][FILENAME_INDEX] filtered_bears = filter_bears(find_language(to_filename)) filtered_bears.insert(0, DefaultBear()) possible_options = [b.name for b in filtered_bears] console_printer.print('[{:>4}] *0. Do Nothing'.format('')) # Let the user choose a bear that wants to apply on the files for i, action in enumerate(possible_options, 1): show_possibilities(console_printer, i, action) choose_action = str(input('[{:>4}] Enter a number: '.format(''))) if choose_action is '' or choose_action is '0': return False choose_action = int(choose_action) chosen_bear = [possible_options[choose_action - 1]] return mode_normal(console_printer, log_printer, create_arg_parser([ to_filename], chosen_bear), debug=False)