Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 7 additions & 8 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/python/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
from pathlib import Path

MAIN_FOLDER = Path(__file__)
MAIN_FOLDER = Path(__file__)
2 changes: 1 addition & 1 deletion src/python/review/inspectors/checkstyle/checkstyle.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
12 changes: 5 additions & 7 deletions src/python/review/inspectors/detekt/detekt.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion src/python/review/inspectors/flake8/flake8.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
5 changes: 1 addition & 4 deletions src/python/review/inspectors/intellij/intellij.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -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()
Expand Down
2 changes: 1 addition & 1 deletion src/python/review/inspectors/pmd/pmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
4 changes: 2 additions & 2 deletions src/python/review/inspectors/pyast/python_ast.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
6 changes: 3 additions & 3 deletions src/python/review/inspectors/pylint/pylint.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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
3 changes: 2 additions & 1 deletion src/python/review/inspectors/springlint/springlint.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions src/python/review/inspectors/tips.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion src/python/review/logging_config.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import sys


logging_config = {
'version': 1,
'formatters': {
Expand Down
21 changes: 13 additions & 8 deletions src/python/review/quality/evaluate_quality.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,

Expand Down Expand Up @@ -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:
Expand Down
7 changes: 3 additions & 4 deletions src/python/review/quality/rules/best_practices_scoring.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down
7 changes: 3 additions & 4 deletions src/python/review/quality/rules/boolean_length_scoring.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down
7 changes: 3 additions & 4 deletions src/python/review/quality/rules/class_response_scoring.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down
3 changes: 1 addition & 2 deletions src/python/review/quality/rules/code_style_scoring.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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,
Expand Down
7 changes: 3 additions & 4 deletions src/python/review/quality/rules/coupling_scoring.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
7 changes: 3 additions & 4 deletions src/python/review/quality/rules/error_prone_scoring.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down
7 changes: 3 additions & 4 deletions src/python/review/quality/rules/function_length_scoring.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down
7 changes: 3 additions & 4 deletions src/python/review/quality/rules/inheritance_depth_scoring.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down
4 changes: 2 additions & 2 deletions src/python/review/quality/rules/line_len_scoring.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down
7 changes: 3 additions & 4 deletions src/python/review/quality/rules/method_number_scoring.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down
7 changes: 3 additions & 4 deletions src/python/review/quality/rules/weighted_methods_scoring.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down
1 change: 0 additions & 1 deletion src/python/review/reviewers/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Loading