Source code for coalib.results.result_actions.IgnoreResultAction

from coalib.bearlib.languages import Language
from coalib.results.result_actions.ResultAction import ResultAction
from coalib.results.Result import Result
from coalib.results.Diff import Diff
from os.path import exists
from os.path import isfile
import shutil


[docs]class IgnoreResultAction(ResultAction): SUCCESS_MESSAGE = 'An ignore comment was added to your source code.' @staticmethod
[docs] def is_applicable(result, original_file_dict, file_diff_dict): """ For being applicable, the result has to point to a number of files that have to exist i.e. have not been previously deleted. """ if not isinstance(result, Result) or len(result.affected_code) == 0: return False filenames = set(src.renamed_file(file_diff_dict) for src in result.affected_code) return any(exists(filename) for filename in filenames)
[docs] def apply(self, result, original_file_dict, file_diff_dict, language: str, no_orig: bool=False): """ Add ignore comment """ comment_delimiter = Language[ language].get_default_version().comment_delimiter ignore_comment = (str(comment_delimiter) + ' Ignore ' + result.origin + '\n') source_range = next(filter(lambda sr: exists(sr.file), result.affected_code)) filename = source_range.file ignore_diff = Diff(original_file_dict[filename]) ignore_diff.change_line( source_range.start.line, original_file_dict[filename][source_range.start.line-1], original_file_dict[filename][source_range.start.line-1].rstrip() + ' ' + ignore_comment) if filename in file_diff_dict: ignore_diff = file_diff_dict[filename] + ignore_diff else: if not no_orig and isfile(filename): shutil.copy2(filename, filename + '.orig') file_diff_dict[filename] = ignore_diff new_filename = ignore_diff.rename if ignore_diff.rename else filename with open(new_filename, mode='w', encoding='utf-8') as file: file.writelines(ignore_diff.modified) return file_diff_dict