Files
Buffteks-Website/venv/lib/python3.12/site-packages/deptry/violations/finder.py
2025-05-08 21:10:14 -05:00

57 lines
1.8 KiB
Python

from __future__ import annotations
import operator
from typing import TYPE_CHECKING
from deptry.violations import (
DEP001MissingDependenciesFinder,
DEP002UnusedDependenciesFinder,
DEP003TransitiveDependenciesFinder,
DEP004MisplacedDevDependenciesFinder,
DEP005StandardLibraryDependenciesFinder,
)
if TYPE_CHECKING:
from collections.abc import Mapping
from deptry.dependency import Dependency
from deptry.module import ModuleLocations
from deptry.violations import Violation, ViolationsFinder
_VIOLATIONS_FINDERS: tuple[type[ViolationsFinder], ...] = (
DEP001MissingDependenciesFinder,
DEP002UnusedDependenciesFinder,
DEP003TransitiveDependenciesFinder,
DEP004MisplacedDevDependenciesFinder,
DEP005StandardLibraryDependenciesFinder,
)
def find_violations(
imported_modules_with_locations: list[ModuleLocations],
dependencies: list[Dependency],
ignore: tuple[str, ...],
per_rule_ignores: Mapping[str, tuple[str, ...]],
standard_library_modules: frozenset[str],
) -> list[Violation]:
violations = []
for violation_finder in _VIOLATIONS_FINDERS:
if violation_finder.violation.error_code not in ignore:
violations.extend(
violation_finder(
imported_modules_with_locations=imported_modules_with_locations,
dependencies=dependencies,
ignored_modules=per_rule_ignores.get(violation_finder.violation.error_code, ()),
standard_library_modules=standard_library_modules,
).find()
)
return _get_sorted_violations(violations)
def _get_sorted_violations(violations: list[Violation]) -> list[Violation]:
return sorted(
violations, key=operator.attrgetter("location.file", "location.line", "location.column", "error_code")
)