diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2d458874..42832de3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,14 +22,13 @@ jobs: pip install flake8 pytest pip install -r requirements.txt pip install -r requirements-test.txt -# - name: Lint with flake8 -# run: | -# # stop the build if there are Python syntax errors or undefined names -# flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics -# # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide -# flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics -# - name: Set up Eslint -# uses: stefanoeb/eslint-action@1.0.2 + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide. + # TODO: Delete W503 from ignore after refactoring and change max-complexity into 10 + flake8 . --count --exit-zero --max-complexity=15 --max-line-length=127 --ignore=I201,I101,I100,R504,A003,I202,SC200,E800,W505,SC100,E402,R504,W503 --statistics --exclude=.git,__pycache__,docs/source/conf.py,old,build,dist,venv,test/resources,.eggs,review.egg-info,.pytest_cache,node_modules - name: Set up Eslint run: | npm install eslint --save-dev diff --git a/src/python/__init__.py b/src/python/__init__.py index e02af948..496da56c 100644 --- a/src/python/__init__.py +++ b/src/python/__init__.py @@ -1,3 +1,3 @@ from pathlib import Path -MAIN_FOLDER = Path(__file__) \ No newline at end of file +MAIN_FOLDER = Path(__file__) diff --git a/src/python/review/inspectors/checkstyle/checkstyle.py b/src/python/review/inspectors/checkstyle/checkstyle.py index 5333e15c..389d889f 100644 --- a/src/python/review/inspectors/checkstyle/checkstyle.py +++ b/src/python/review/inspectors/checkstyle/checkstyle.py @@ -67,6 +67,6 @@ def choose_issue_type(cls, check_class: str) -> IssueType: issue_type = CHECK_CLASS_NAME_TO_ISSUE_TYPE.get(check_class_name) if not issue_type: logger.warning('Checkstyle: %s - unknown check class' % check_class_name) - issue_type = IssueType.BEST_PRACTICES + return IssueType.BEST_PRACTICES return issue_type diff --git a/src/python/review/inspectors/detekt/detekt.py b/src/python/review/inspectors/detekt/detekt.py index 09461e6c..2c2b197e 100644 --- a/src/python/review/inspectors/detekt/detekt.py +++ b/src/python/review/inspectors/detekt/detekt.py @@ -47,17 +47,15 @@ def inspect(self, path: Path, config) -> List[BaseIssue]: command = self._create_command(path, output_path) run_in_subprocess(command) - issues = parse_checkstyle_file_result(output_path, - self.inspector_type, - self.choose_issue_type, - self.origin_class_to_pattern) - - return issues + return parse_checkstyle_file_result(output_path, + self.inspector_type, + self.choose_issue_type, + self.origin_class_to_pattern) @classmethod def choose_issue_type(cls, issue_class: str) -> IssueType: issue_type = DETECT_CLASS_NAME_TO_ISSUE_TYPE.get(issue_class) if not issue_type: logger.info(f'{cls.inspector_type.value}: {issue_class} - unknown origin class') - issue_type = IssueType.BEST_PRACTICES + return IssueType.BEST_PRACTICES return issue_type diff --git a/src/python/review/inspectors/flake8/flake8.py b/src/python/review/inspectors/flake8/flake8.py index 91ba9bb9..d538c3a4 100644 --- a/src/python/review/inspectors/flake8/flake8.py +++ b/src/python/review/inspectors/flake8/flake8.py @@ -74,6 +74,6 @@ def choose_issue_type(code: str) -> IssueType: issue_type = CODE_PREFIX_TO_ISSUE_TYPE.get(code_prefix) if not issue_type: logger.warning(f'flake8: {code} - unknown error code') - issue_type = IssueType.BEST_PRACTICES + return IssueType.BEST_PRACTICES return issue_type diff --git a/src/python/review/inspectors/intellij/intellij.py b/src/python/review/inspectors/intellij/intellij.py index 6a1b0c59..7a224934 100644 --- a/src/python/review/inspectors/intellij/intellij.py +++ b/src/python/review/inspectors/intellij/intellij.py @@ -16,9 +16,7 @@ INTELLIJ_INSPECTOR_EXECUTABLE = os.environ.get('INTELLIJ_INSPECTOR_EXECUTABLE') INTELLIJ_INSPECTOR_PROJECT = Path(__file__).parent / 'project' -INTELLIJ_INSPECTOR_SETTINGS = ( - INTELLIJ_INSPECTOR_PROJECT / '.idea' / 'inspectionProfiles' / 'custom_profiles.xml' -) +INTELLIJ_INSPECTOR_SETTINGS = (INTELLIJ_INSPECTOR_PROJECT / '.idea' / 'inspectionProfiles' / 'custom_profiles.xml') PYTHON_FOLDER = 'python_sources' JAVA_FOLDER = 'java_sources/src' @@ -61,7 +59,6 @@ def inspect(self, path: Path, config: dict) -> List[BaseIssue]: command = self.create_command(temp_dir) run_in_subprocess(command) issues = self.parse(temp_dir, path_in_project_to_origin_path) - finally: for file_path_in_project in path_in_project_to_origin_path: file_path_in_project.unlink() diff --git a/src/python/review/inspectors/pmd/pmd.py b/src/python/review/inspectors/pmd/pmd.py index d060ae11..227169fc 100644 --- a/src/python/review/inspectors/pmd/pmd.py +++ b/src/python/review/inspectors/pmd/pmd.py @@ -76,6 +76,6 @@ def choose_issue_type(cls, rule: str) -> IssueType: if not issue_type: logger.warning('%s: %s - unknown rule' % (cls.inspector_type.value, rule)) - issue_type = IssueType.BEST_PRACTICES + return IssueType.BEST_PRACTICES return issue_type diff --git a/src/python/review/inspectors/pyast/python_ast.py b/src/python/review/inspectors/pyast/python_ast.py index 78f7f052..1cd28b89 100644 --- a/src/python/review/inspectors/pyast/python_ast.py +++ b/src/python/review/inspectors/pyast/python_ast.py @@ -111,9 +111,9 @@ class PythonAstInspector(BaseInspector): @classmethod def inspect(cls, path: Path, config: dict) -> List[BaseIssue]: if path.is_file(): - root_path, path_to_files = path.parent, [path] + path_to_files = [path] else: - root_path, path_to_files = path, get_all_file_paths_in_dir(path) + path_to_files = get_all_file_paths_in_dir(path) path_to_files = language.filter_paths(path_to_files, Language.PYTHON) diff --git a/src/python/review/inspectors/pylint/pylint.py b/src/python/review/inspectors/pylint/pylint.py index 8b8ea597..fb9db581 100644 --- a/src/python/review/inspectors/pylint/pylint.py +++ b/src/python/review/inspectors/pylint/pylint.py @@ -1,7 +1,7 @@ import logging import re from pathlib import Path -from typing import List +from typing import List, Optional from src.python.review.common.subprocess_runner import run_in_subprocess from src.python.review.inspectors.base_inspector import BaseInspector @@ -80,9 +80,9 @@ def choose_issue_type(code: str) -> IssueType: if code in CODE_TO_ISSUE_TYPE: return CODE_TO_ISSUE_TYPE[code] - issue_type = CATEGORY_TO_ISSUE_TYPE.get(code[0]) + issue_type: Optional[IssueType] = CATEGORY_TO_ISSUE_TYPE.get(code[0]) if not issue_type: logger.warning(f'pylint: {code} - unknown error category') - issue_type = IssueType.BEST_PRACTICES + return IssueType.BEST_PRACTICES return issue_type diff --git a/src/python/review/inspectors/springlint/springlint.py b/src/python/review/inspectors/springlint/springlint.py index 56c46761..97502c20 100644 --- a/src/python/review/inspectors/springlint/springlint.py +++ b/src/python/review/inspectors/springlint/springlint.py @@ -9,7 +9,8 @@ from src.python.review.common.subprocess_runner import run_in_subprocess from src.python.review.inspectors.base_inspector import BaseInspector from src.python.review.inspectors.inspector_type import InspectorType -from src.python.review.inspectors.issue import BaseIssue, ChildrenNumberIssue, ClassResponseIssue, CodeIssue, CohesionIssue, \ +from src.python.review.inspectors.issue import BaseIssue, ChildrenNumberIssue, ClassResponseIssue, CodeIssue, \ + CohesionIssue, \ CouplingIssue, InheritanceIssue, IssueType, MethodNumberIssue, WeightedMethodIssue from src.python.review.inspectors.tips import get_child_number_tip, get_class_coupling_tip, get_class_response_tip, \ get_cohesion_tip, get_inheritance_depth_tip, get_method_number_tip, get_weighted_method_tip diff --git a/src/python/review/inspectors/tips.py b/src/python/review/inspectors/tips.py index df548522..c1d3fba1 100644 --- a/src/python/review/inspectors/tips.py +++ b/src/python/review/inspectors/tips.py @@ -31,8 +31,8 @@ def add_complexity_tip(description: str) -> str: def get_inheritance_depth_tip() -> str: - return 'Too deep inheritance tree is complicated to understand. '\ - 'Try to reduce it (maybe you should use a composition instead).' + return 'Too deep inheritance tree is complicated to understand. ' \ + 'Try to reduce it (maybe you should use a composition instead).' # This issue will not be reported at this version diff --git a/src/python/review/logging_config.py b/src/python/review/logging_config.py index 1ad1cef1..ce3c47a0 100644 --- a/src/python/review/logging_config.py +++ b/src/python/review/logging_config.py @@ -1,6 +1,5 @@ import sys - logging_config = { 'version': 1, 'formatters': { diff --git a/src/python/review/quality/evaluate_quality.py b/src/python/review/quality/evaluate_quality.py index 77434423..8e260d2a 100644 --- a/src/python/review/quality/evaluate_quality.py +++ b/src/python/review/quality/evaluate_quality.py @@ -6,22 +6,28 @@ from src.python.review.quality.rules.best_practices_scoring import ( BestPracticesRule, LANGUAGE_TO_BEST_PRACTICES_RULE_CONFIG ) -from src.python.review.quality.rules.boolean_length_scoring import BooleanExpressionRule, LANGUAGE_TO_BOOLEAN_EXPRESSION_RULE_CONFIG +from src.python.review.quality.rules.boolean_length_scoring import BooleanExpressionRule, \ + LANGUAGE_TO_BOOLEAN_EXPRESSION_RULE_CONFIG from src.python.review.quality.rules.class_response_scoring import LANGUAGE_TO_RESPONSE_RULE_CONFIG, ResponseRule from src.python.review.quality.rules.code_style_scoring import CodeStyleRule, LANGUAGE_TO_CODE_STYLE_RULE_CONFIG from src.python.review.quality.rules.coupling_scoring import CouplingRule, LANGUAGE_TO_COUPLING_RULE_CONFIG -from src.python.review.quality.rules.cyclomatic_complexity_scoring import CyclomaticComplexityRule, LANGUAGE_TO_CYCLOMATIC_COMPLEXITY_RULE_CONFIG +from src.python.review.quality.rules.cyclomatic_complexity_scoring import CyclomaticComplexityRule, \ + LANGUAGE_TO_CYCLOMATIC_COMPLEXITY_RULE_CONFIG from src.python.review.quality.rules.error_prone_scoring import ErrorProneRule, LANGUAGE_TO_ERROR_PRONE_RULE_CONFIG -from src.python.review.quality.rules.function_length_scoring import FunctionLengthRule, LANGUAGE_TO_FUNCTION_LENGTH_RULE_CONFIG -from src.python.review.quality.rules.inheritance_depth_scoring import InheritanceDepthRule, LANGUAGE_TO_INHERITANCE_DEPTH_RULE_CONFIG +from src.python.review.quality.rules.function_length_scoring import FunctionLengthRule, \ + LANGUAGE_TO_FUNCTION_LENGTH_RULE_CONFIG +from src.python.review.quality.rules.inheritance_depth_scoring import InheritanceDepthRule, \ + LANGUAGE_TO_INHERITANCE_DEPTH_RULE_CONFIG from src.python.review.quality.rules.line_len_scoring import LANGUAGE_TO_LINE_LENGTH_RULE_CONFIG, LineLengthRule -from src.python.review.quality.rules.method_number_scoring import LANGUAGE_TO_METHOD_NUMBER_RULE_CONFIG, MethodNumberRule -from src.python.review.quality.rules.weighted_methods_scoring import LANGUAGE_TO_WEIGHTED_METHODS_RULE_CONFIG, WeightedMethodsRule +from src.python.review.quality.rules.method_number_scoring import LANGUAGE_TO_METHOD_NUMBER_RULE_CONFIG, \ + MethodNumberRule +from src.python.review.quality.rules.weighted_methods_scoring import LANGUAGE_TO_WEIGHTED_METHODS_RULE_CONFIG, \ + WeightedMethodsRule from src.python.review.reviewers.utils.code_statistics import CodeStatistics def get_statistics(statistics: CodeStatistics) -> Dict[IssueType, int]: - rule_type_counter = { + return { IssueType.CODE_STYLE: statistics.code_style_lines, @@ -58,7 +64,6 @@ def get_statistics(statistics: CodeStatistics) -> Dict[IssueType, int]: IssueType.WEIGHTED_METHOD: statistics.weighted_method_complexities } - return rule_type_counter def evaluate_quality(statistics: CodeStatistics, language: Language) -> Quality: diff --git a/src/python/review/quality/rules/best_practices_scoring.py b/src/python/review/quality/rules/best_practices_scoring.py index 2e9a3343..f014d6e8 100644 --- a/src/python/review/quality/rules/best_practices_scoring.py +++ b/src/python/review/quality/rules/best_practices_scoring.py @@ -1,10 +1,9 @@ -from typing import Optional - from dataclasses import dataclass +from typing import Optional -from src.python.review.quality.model import QualityType, Rule -from src.python.review.inspectors.issue import IssueType from src.python.review.common.language import Language +from src.python.review.inspectors.issue import IssueType +from src.python.review.quality.model import QualityType, Rule @dataclass diff --git a/src/python/review/quality/rules/boolean_length_scoring.py b/src/python/review/quality/rules/boolean_length_scoring.py index 16f3439e..b2d7c347 100644 --- a/src/python/review/quality/rules/boolean_length_scoring.py +++ b/src/python/review/quality/rules/boolean_length_scoring.py @@ -1,10 +1,9 @@ -from typing import Optional - from dataclasses import dataclass +from typing import Optional -from src.python.review.quality.model import QualityType, Rule -from src.python.review.inspectors.issue import IssueType from src.python.review.common.language import Language +from src.python.review.inspectors.issue import IssueType +from src.python.review.quality.model import QualityType, Rule @dataclass diff --git a/src/python/review/quality/rules/class_response_scoring.py b/src/python/review/quality/rules/class_response_scoring.py index 9b7633e8..4bfd4800 100644 --- a/src/python/review/quality/rules/class_response_scoring.py +++ b/src/python/review/quality/rules/class_response_scoring.py @@ -1,10 +1,9 @@ -from typing import Optional - from dataclasses import dataclass +from typing import Optional -from src.python.review.quality.model import QualityType, Rule -from src.python.review.inspectors.issue import IssueType from src.python.review.common.language import Language +from src.python.review.inspectors.issue import IssueType +from src.python.review.quality.model import QualityType, Rule @dataclass diff --git a/src/python/review/quality/rules/code_style_scoring.py b/src/python/review/quality/rules/code_style_scoring.py index 1f1be04e..eaa2c17d 100644 --- a/src/python/review/quality/rules/code_style_scoring.py +++ b/src/python/review/quality/rules/code_style_scoring.py @@ -1,8 +1,8 @@ from dataclasses import dataclass +from src.python.review.common.language import Language from src.python.review.inspectors.issue import IssueType from src.python.review.quality.model import QualityType, Rule -from src.python.review.common.language import Language @dataclass @@ -46,7 +46,6 @@ class CodeStyleRuleConfig: language=Language.JAVA ) - LANGUAGE_TO_CODE_STYLE_RULE_CONFIG = { Language.JAVA: java_code_style_rule_config, Language.KOTLIN: kotlin_code_style_rule_config, diff --git a/src/python/review/quality/rules/coupling_scoring.py b/src/python/review/quality/rules/coupling_scoring.py index a7e4e27b..83ea987b 100644 --- a/src/python/review/quality/rules/coupling_scoring.py +++ b/src/python/review/quality/rules/coupling_scoring.py @@ -1,10 +1,9 @@ -from typing import Optional - from dataclasses import dataclass +from typing import Optional -from src.python.review.quality.model import QualityType, Rule -from src.python.review.inspectors.issue import IssueType from src.python.review.common.language import Language +from src.python.review.inspectors.issue import IssueType +from src.python.review.quality.model import QualityType, Rule @dataclass diff --git a/src/python/review/quality/rules/cyclomatic_complexity_scoring.py b/src/python/review/quality/rules/cyclomatic_complexity_scoring.py index 6b0ec1da..79fb69dc 100644 --- a/src/python/review/quality/rules/cyclomatic_complexity_scoring.py +++ b/src/python/review/quality/rules/cyclomatic_complexity_scoring.py @@ -1,10 +1,9 @@ -from typing import Optional - from dataclasses import dataclass +from typing import Optional -from src.python.review.quality.model import QualityType, Rule -from src.python.review.inspectors.issue import IssueType from src.python.review.common.language import Language +from src.python.review.inspectors.issue import IssueType +from src.python.review.quality.model import QualityType, Rule @dataclass diff --git a/src/python/review/quality/rules/error_prone_scoring.py b/src/python/review/quality/rules/error_prone_scoring.py index bf585cc3..7a6dee0e 100644 --- a/src/python/review/quality/rules/error_prone_scoring.py +++ b/src/python/review/quality/rules/error_prone_scoring.py @@ -1,10 +1,9 @@ -from typing import Optional - from dataclasses import dataclass +from typing import Optional -from src.python.review.quality.model import QualityType, Rule -from src.python.review.inspectors.issue import IssueType from src.python.review.common.language import Language +from src.python.review.inspectors.issue import IssueType +from src.python.review.quality.model import QualityType, Rule @dataclass diff --git a/src/python/review/quality/rules/function_length_scoring.py b/src/python/review/quality/rules/function_length_scoring.py index d4f5b02f..f607f679 100644 --- a/src/python/review/quality/rules/function_length_scoring.py +++ b/src/python/review/quality/rules/function_length_scoring.py @@ -1,10 +1,9 @@ -from typing import Optional - from dataclasses import dataclass +from typing import Optional -from src.python.review.quality.model import QualityType, Rule -from src.python.review.inspectors.issue import IssueType from src.python.review.common.language import Language +from src.python.review.inspectors.issue import IssueType +from src.python.review.quality.model import QualityType, Rule @dataclass diff --git a/src/python/review/quality/rules/inheritance_depth_scoring.py b/src/python/review/quality/rules/inheritance_depth_scoring.py index 645d6c2a..cdabda6b 100644 --- a/src/python/review/quality/rules/inheritance_depth_scoring.py +++ b/src/python/review/quality/rules/inheritance_depth_scoring.py @@ -1,10 +1,9 @@ -from typing import Optional - from dataclasses import dataclass +from typing import Optional -from src.python.review.quality.model import QualityType, Rule -from src.python.review.inspectors.issue import IssueType from src.python.review.common.language import Language +from src.python.review.inspectors.issue import IssueType +from src.python.review.quality.model import QualityType, Rule @dataclass diff --git a/src/python/review/quality/rules/line_len_scoring.py b/src/python/review/quality/rules/line_len_scoring.py index ecb8ba10..664f3dfd 100644 --- a/src/python/review/quality/rules/line_len_scoring.py +++ b/src/python/review/quality/rules/line_len_scoring.py @@ -1,8 +1,8 @@ from dataclasses import dataclass -from src.python.review.quality.model import QualityType, Rule -from src.python.review.inspectors.issue import IssueType from src.python.review.common.language import Language +from src.python.review.inspectors.issue import IssueType +from src.python.review.quality.model import QualityType, Rule @dataclass diff --git a/src/python/review/quality/rules/method_number_scoring.py b/src/python/review/quality/rules/method_number_scoring.py index 6976d103..112390c3 100644 --- a/src/python/review/quality/rules/method_number_scoring.py +++ b/src/python/review/quality/rules/method_number_scoring.py @@ -1,10 +1,9 @@ -from typing import Optional - from dataclasses import dataclass +from typing import Optional -from src.python.review.quality.model import QualityType, Rule -from src.python.review.inspectors.issue import IssueType from src.python.review.common.language import Language +from src.python.review.inspectors.issue import IssueType +from src.python.review.quality.model import QualityType, Rule @dataclass diff --git a/src/python/review/quality/rules/weighted_methods_scoring.py b/src/python/review/quality/rules/weighted_methods_scoring.py index 329ecfc6..777d7b2d 100644 --- a/src/python/review/quality/rules/weighted_methods_scoring.py +++ b/src/python/review/quality/rules/weighted_methods_scoring.py @@ -1,10 +1,9 @@ -from typing import Optional - from dataclasses import dataclass +from typing import Optional -from src.python.review.quality.model import QualityType, Rule -from src.python.review.inspectors.issue import IssueType from src.python.review.common.language import Language +from src.python.review.inspectors.issue import IssueType +from src.python.review.quality.model import QualityType, Rule @dataclass diff --git a/src/python/review/reviewers/common.py b/src/python/review/reviewers/common.py index 3df326c9..3d7d8a06 100644 --- a/src/python/review/reviewers/common.py +++ b/src/python/review/reviewers/common.py @@ -88,7 +88,6 @@ def perform_language_review(metadata: Metadata, def filter_out_of_range_issues(issues: List[BaseIssue], start_line: int = 1, end_line: Optional[int] = None) -> List[BaseIssue]: - if end_line is None: end_line = 100_000_000 diff --git a/src/python/review/reviewers/utils/issues_filter.py b/src/python/review/reviewers/utils/issues_filter.py index a0caa23d..cb223cf3 100644 --- a/src/python/review/reviewers/utils/issues_filter.py +++ b/src/python/review/reviewers/utils/issues_filter.py @@ -3,12 +3,12 @@ from src.python.review.common.language import Language from src.python.review.inspectors.issue import BaseIssue, IssueType from src.python.review.quality.rules.boolean_length_scoring import LANGUAGE_TO_BOOLEAN_EXPRESSION_RULE_CONFIG +from src.python.review.quality.rules.class_response_scoring import LANGUAGE_TO_RESPONSE_RULE_CONFIG from src.python.review.quality.rules.coupling_scoring import LANGUAGE_TO_COUPLING_RULE_CONFIG from src.python.review.quality.rules.cyclomatic_complexity_scoring import LANGUAGE_TO_CYCLOMATIC_COMPLEXITY_RULE_CONFIG from src.python.review.quality.rules.function_length_scoring import LANGUAGE_TO_FUNCTION_LENGTH_RULE_CONFIG from src.python.review.quality.rules.inheritance_depth_scoring import LANGUAGE_TO_INHERITANCE_DEPTH_RULE_CONFIG from src.python.review.quality.rules.method_number_scoring import LANGUAGE_TO_METHOD_NUMBER_RULE_CONFIG -from src.python.review.quality.rules.class_response_scoring import LANGUAGE_TO_RESPONSE_RULE_CONFIG from src.python.review.quality.rules.weighted_methods_scoring import LANGUAGE_TO_WEIGHTED_METHODS_RULE_CONFIG @@ -27,41 +27,40 @@ def filter_low_metric_issues(issues: List[BaseIssue], # TODO make an abstraction for extraction the value for issue in issues: - if (issue.type == IssueType.CYCLOMATIC_COMPLEXITY and - issue.cc_value <= cyclomatic_complexity_rule_config.cc_value_moderate): + if (issue.type == IssueType.CYCLOMATIC_COMPLEXITY + and issue.cc_value <= cyclomatic_complexity_rule_config.cc_value_moderate): continue - if (issue.type == IssueType.FUNC_LEN and - issue.func_len <= func_len_rule_config.func_len_bad): + if (issue.type == IssueType.FUNC_LEN + and issue.func_len <= func_len_rule_config.func_len_bad): continue - if (issue.type == IssueType.BOOL_EXPR_LEN and - issue.bool_expr_len <= boolean_expression_rule_config.bool_expr_len_good): + if (issue.type == IssueType.BOOL_EXPR_LEN + and issue.bool_expr_len <= boolean_expression_rule_config.bool_expr_len_good): continue - if (issue.type == IssueType.INHERITANCE_DEPTH and - issue.inheritance_tree_depth <= inheritance_depth_rule_config.depth_bad): + if (issue.type == IssueType.INHERITANCE_DEPTH + and issue.inheritance_tree_depth <= inheritance_depth_rule_config.depth_bad): continue - if (issue.type == IssueType.METHOD_NUMBER and - issue.method_number <= method_number_rule_config.method_number_good): + if (issue.type == IssueType.METHOD_NUMBER + and issue.method_number <= method_number_rule_config.method_number_good): continue - if (issue.type == IssueType.CLASS_RESPONSE and - issue.class_response <= response_rule_config.response_good): + if (issue.type == IssueType.CLASS_RESPONSE + and issue.class_response <= response_rule_config.response_good): continue - if (issue.type == IssueType.WEIGHTED_METHOD and - issue.weighted_method <= weighted_methods_rule_config.weighted_methods_good): + if (issue.type == IssueType.WEIGHTED_METHOD + and issue.weighted_method <= weighted_methods_rule_config.weighted_methods_good): continue - if (issue.type == IssueType.COUPLING and - issue.class_objects_coupling <= coupling_rule_config.coupling_moderate): + if (issue.type == IssueType.COUPLING + and issue.class_objects_coupling <= coupling_rule_config.coupling_moderate): continue # Disable this types of issue, requires further investigation. - if (issue.type == IssueType.COHESION or - issue.type == IssueType.CHILDREN_NUMBER): + if (issue.type == IssueType.COHESION or issue.type == IssueType.CHILDREN_NUMBER): continue filtered_issues.append(issue) diff --git a/src/python/review/run_tool.py b/src/python/review/run_tool.py index 5ac2876c..70d10805 100644 --- a/src/python/review/run_tool.py +++ b/src/python/review/run_tool.py @@ -9,10 +9,12 @@ sys.path.append('') sys.path.append('../../..') + from src.python.review.application_config import ApplicationConfig, LanguageVersion from src.python.review.inspectors.inspector_type import InspectorType from src.python.review.logging_config import logging_config -from src.python.review.reviewers.perform_review import OutputFormat, PathNotExists,perform_and_print_review, UnsupportedLanguage +from src.python.review.reviewers.perform_review import OutputFormat, PathNotExists, perform_and_print_review, \ + UnsupportedLanguage logger = logging.getLogger(__name__) diff --git a/test/__init__.py b/test/__init__.py index 8b137891..e69de29b 100644 --- a/test/__init__.py +++ b/test/__init__.py @@ -1 +0,0 @@ - diff --git a/test/python/__init__.py b/test/python/__init__.py index 045bea02..3527a200 100644 --- a/test/python/__init__.py +++ b/test/python/__init__.py @@ -1,3 +1,3 @@ from pathlib import Path -TEST_DATA_FOLDER = Path(__file__).parent.parent / 'resources' \ No newline at end of file +TEST_DATA_FOLDER = Path(__file__).parent.parent / 'resources' diff --git a/test/python/functional_tests/test_duplicates.py b/test/python/functional_tests/test_duplicates.py index 9db420ad..13ff2a83 100644 --- a/test/python/functional_tests/test_duplicates.py +++ b/test/python/functional_tests/test_duplicates.py @@ -30,7 +30,7 @@ def test_allow_duplicates(local_command: LocalCommandBuilder): pylint_var_issue_re = re.compile(r'.*PYLINT.*Unused variable \'var\'.*', re.DOTALL) assert len(stdout_filter_duplicates) < len(stdout_allow_duplicates) - assert ((flake8_var_issue_re.match(stdout_allow_duplicates) is not None) and - (pylint_var_issue_re.match(stdout_allow_duplicates) is not None)) - assert ((flake8_var_issue_re.match(stdout_filter_duplicates) is not None) ^ - (pylint_var_issue_re.match(stdout_filter_duplicates) is not None)) + assert ((flake8_var_issue_re.match(stdout_allow_duplicates) is not None) and ( + pylint_var_issue_re.match(stdout_allow_duplicates) is not None)) + assert ((flake8_var_issue_re.match(stdout_filter_duplicates) is not None) ^ ( + pylint_var_issue_re.match(stdout_filter_duplicates) is not None)) diff --git a/test/python/functional_tests/test_range_of_lines.py b/test/python/functional_tests/test_range_of_lines.py index 33204714..bcadae0b 100644 --- a/test/python/functional_tests/test_range_of_lines.py +++ b/test/python/functional_tests/test_range_of_lines.py @@ -2,8 +2,8 @@ import pytest -from test.python.functional_tests.conftest import DATA_PATH, LocalCommandBuilder from src.python.review.common.subprocess_runner import run_in_subprocess +from test.python.functional_tests.conftest import DATA_PATH, LocalCommandBuilder PATH_TO_FILE = DATA_PATH / 'lines_range' / 'code_with_multiple_issues.py' @@ -45,7 +45,6 @@ def test_range_filter_when_no_range_specified( local_command: LocalCommandBuilder) -> None: - local_command.path = PATH_TO_FILE local_command.format = 'json' @@ -57,7 +56,6 @@ def test_range_filter_when_no_range_specified( def test_range_filter_when_start_line_is_first( local_command: LocalCommandBuilder) -> None: - local_command.path = PATH_TO_FILE local_command.format = 'json' local_command.start_line = 1 @@ -70,7 +68,6 @@ def test_range_filter_when_start_line_is_first( def test_range_filter_when_start_line_is_not_first( local_command: LocalCommandBuilder) -> None: - local_command.path = PATH_TO_FILE local_command.format = 'json' local_command.start_line = 3 @@ -80,8 +77,8 @@ def test_range_filter_when_start_line_is_not_first( expected_json_with_one_issue = { 'quality': { - 'code': 'MODERATE', - 'text': 'Code quality (beta): MODERATE'}, + 'code': 'MODERATE', + 'text': 'Code quality (beta): MODERATE'}, 'issues': [{ 'code': 'C0326', 'text': 'Exactly one space required around assignment', @@ -97,7 +94,6 @@ def test_range_filter_when_start_line_is_not_first( def test_range_filter_when_start_out_of_range( local_command: LocalCommandBuilder) -> None: - local_command.path = PATH_TO_FILE local_command.format = 'json' local_command.start_line = 5 @@ -112,7 +108,6 @@ def test_range_filter_when_start_out_of_range( def test_range_filter_when_start_line_is_not_positive( local_command: LocalCommandBuilder) -> None: - local_command.start_line = 0 with pytest.raises(Exception): @@ -128,7 +123,6 @@ def test_range_filter_when_start_line_is_not_positive( def test_range_filter_when_end_line_is_last( local_command: LocalCommandBuilder) -> None: - local_command.path = PATH_TO_FILE local_command.format = 'json' local_command.end_line = 4 # last line with an error @@ -141,7 +135,6 @@ def test_range_filter_when_end_line_is_last( def test_range_filter_when_end_line_is_first( local_command: LocalCommandBuilder) -> None: - local_command.path = PATH_TO_FILE local_command.format = 'json' local_command.end_line = 1 @@ -169,7 +162,6 @@ def test_range_filter_when_end_line_is_first( def test_range_filter_when_end_line_out_of_range( local_command: LocalCommandBuilder) -> None: - local_command.path = PATH_TO_FILE local_command.format = 'json' local_command.end_line = 10 @@ -182,7 +174,6 @@ def test_range_filter_when_end_line_out_of_range( def test_range_filter_when_both_start_and_end_lines_specified( local_command: LocalCommandBuilder) -> None: - local_command.path = PATH_TO_FILE local_command.format = 'json' local_command.start_line = 1 @@ -196,7 +187,6 @@ def test_range_filter_when_both_start_and_end_lines_specified( def test_range_filter_when_equal_start_and_end_lines( local_command: LocalCommandBuilder) -> None: - local_command.path = PATH_TO_FILE local_command.format = 'json' local_command.start_line = 3 @@ -210,7 +200,6 @@ def test_range_filter_when_equal_start_and_end_lines( def test_range_filter_when_both_start_and_end_lines_specified_not_equal_borders( local_command: LocalCommandBuilder) -> None: - local_command.path = PATH_TO_FILE local_command.format = 'json' local_command.start_line = 2 @@ -246,7 +235,6 @@ def test_range_filter_when_both_start_and_end_lines_specified_not_equal_borders( def test_range_filter_when_both_start_and_end_lines_out_of_range( local_command: LocalCommandBuilder) -> None: - local_command.path = PATH_TO_FILE local_command.format = 'json' local_command.start_line = 10 diff --git a/test/python/inspectors/conftest.py b/test/python/inspectors/conftest.py index 6945b2fa..615f95dc 100644 --- a/test/python/inspectors/conftest.py +++ b/test/python/inspectors/conftest.py @@ -13,7 +13,7 @@ @pytest.fixture def branch_info_response() -> Dict[str, Any]: - response = { + return { 'result': { 'commitsCount': 1, 'filesCount': 1, @@ -43,12 +43,10 @@ def branch_info_response() -> Dict[str, Any]: } } - return response - @pytest.fixture def ownership_summary_response() -> Dict[str, Any]: - response = { + return { 'result': { 'files': [ { @@ -65,8 +63,6 @@ def ownership_summary_response() -> Dict[str, Any]: } } - return response - @dataclass(frozen=True) class IssuesTestInfo: diff --git a/test/python/inspectors/test_checkstyle_inspector.py b/test/python/inspectors/test_checkstyle_inspector.py index be94ec73..6d3043df 100644 --- a/test/python/inspectors/test_checkstyle_inspector.py +++ b/test/python/inspectors/test_checkstyle_inspector.py @@ -3,8 +3,8 @@ from src.python.review.common.language import Language from src.python.review.inspectors.checkstyle.checkstyle import CheckstyleInspector from src.python.review.reviewers.utils.issues_filter import filter_low_metric_issues -from test.python.inspectors.conftest import gather_issues_test_info, IssuesTestInfo, use_file_metadata from test.python.inspectors import JAVA_DATA_FOLDER +from test.python.inspectors.conftest import gather_issues_test_info, IssuesTestInfo, use_file_metadata FILE_NAMES_AND_N_ISSUES = [ ('test_simple_valid_program.java', 0), diff --git a/test/python/inspectors/test_flake8_inspector.py b/test/python/inspectors/test_flake8_inspector.py index 8f864635..97d4bf31 100644 --- a/test/python/inspectors/test_flake8_inspector.py +++ b/test/python/inspectors/test_flake8_inspector.py @@ -4,8 +4,8 @@ from src.python.review.inspectors.flake8.flake8 import Flake8Inspector from src.python.review.inspectors.issue import IssueType from src.python.review.reviewers.utils.issues_filter import filter_low_metric_issues -from test.python.inspectors.conftest import gather_issues_test_info, IssuesTestInfo, use_file_metadata from test.python.inspectors import PYTHON_DATA_FOLDER +from test.python.inspectors.conftest import gather_issues_test_info, IssuesTestInfo, use_file_metadata FILE_NAMES_AND_N_ISSUES = [ ('case0_spaces.py', 5),