Skip to content

Commit

Permalink
Refactor: Create class _ComplexityExitMetrics(object). Issue #14
Browse files Browse the repository at this point in the history
  • Loading branch information
iZafiro committed Feb 24, 2020
1 parent e60cad7 commit 7837dec
Showing 1 changed file with 13 additions and 6 deletions.
19 changes: 13 additions & 6 deletions wemake_python_styleguide/visitors/ast/complexity/function.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,14 @@
_FunctionCounter,
]

@final @dataclass
class _ComplexityExitMetrics(object):
"""Helper class to store counters of statements that exit from a function."""

def __init__(self) -> None:
self.returns: _FunctionCounter = defaultdict(int)
self.raises: _FunctionCounter = defaultdict(int)


@final
class _ComplexityCounter(object):
Expand All @@ -52,12 +60,11 @@ def __init__(self) -> None:
self.awaits: _FunctionCounter = defaultdict(int) # noqa: WPS204
self.arguments: _FunctionCounterWithLambda = defaultdict(int)
self.asserts: _FunctionCounter = defaultdict(int)
self.returns: _FunctionCounter = defaultdict(int)
self.expressions: _FunctionCounter = defaultdict(int)
self.raises: _FunctionCounter = defaultdict(int)
self.variables: DefaultDict[AnyFunctionDef, List[str]] = defaultdict(
list,
)
self.exit_metrics: _ComplexityExitMetrics()

def check_arguments_count(self, node: AnyFunctionDefAndLambda) -> None:
"""Checks the number of the arguments in a function."""
Expand Down Expand Up @@ -104,11 +111,11 @@ def _check_sub_node(
self._update_variables(node, sub_node)

error_counters: _NodeTypeHandler = {
ast.Return: self.returns,
ast.Return: self.exit_metrics.returns,
ast.Expr: self.expressions,
ast.Await: self.awaits,
ast.Assert: self.asserts,
ast.Raise: self.raises,
ast.Raise: self.exit_metrics.raises,
}

for types, counter in error_counters.items():
Expand Down Expand Up @@ -204,7 +211,7 @@ def _function_checks(self) -> List[_CheckRule]:
TooManyArgumentsViolation,
),
(
self._counter.returns,
self._counter.exit_metrics.returns,
self.options.max_returns,
TooManyReturnsViolation,
),
Expand All @@ -219,7 +226,7 @@ def _function_checks(self) -> List[_CheckRule]:
TooManyAssertsViolation,
),
(
self._counter.raises,
self._counter.exit_metrics.raises,
self.options.max_raises,
TooManyRaisesViolation,
),
Expand Down

0 comments on commit 7837dec

Please sign in to comment.