Skip to content

Commit b5102b1

Browse files
authored
Fix issue with DEP004 being raised incorrectly (#376)
* Fix issue with DEP004 being raised incorrectly if a dependency is both a regular and a dev dependency
1 parent 54cb1c3 commit b5102b1

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

deptry/issues_finder/misplaced_dev.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,15 @@ def find(self) -> list[Violation]:
4343
return misplaced_dev_dependencies
4444

4545
def _is_development_dependency(self, module: Module, corresponding_package_name: str) -> bool:
46-
if not module.is_provided_by_dev_dependency:
46+
# Module can be provided both by a regular and by a development dependency.
47+
# Only continue if module is ONLY provided by a dev dependency.
48+
if not module.is_provided_by_dev_dependency or module.is_provided_by_dependency:
4749
return False
4850

4951
if module.name in self.ignored_modules:
5052
logging.debug(
51-
f"Module '{corresponding_package_name}' found to be a misplaced development dependency, but ignoring."
53+
f"Dependency '{corresponding_package_name}' found to be a misplaced development dependency, but"
54+
" ignoring."
5255
)
5356
return False
5457

tests/unit/issues_finder/test_misplaced_dev.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,21 @@ def test_simple() -> None:
2020
assert MisplacedDevDependenciesFinder(modules_locations, dependencies).find() == [
2121
MisplacedDevDependencyViolation(module_foo, location) for location in module_foo_locations
2222
]
23+
24+
25+
def test_regular_and_dev_dependency() -> None:
26+
"""
27+
If a dependency is both a regular and a development dependency, no 'misplaced dev dependency' violation
28+
should be detected if it is used in the code base.
29+
"""
30+
31+
dependencies = [Dependency("foo", Path("pyproject.toml"))]
32+
33+
module_foo_locations = [Location(Path("foo.py"), 1, 2)]
34+
module_foo = Module(
35+
"foo", dev_top_levels=["foo"], is_provided_by_dev_dependency=True, is_provided_by_dependency=True
36+
)
37+
38+
modules_locations = [ModuleLocations(module_foo, module_foo_locations)]
39+
40+
assert not MisplacedDevDependenciesFinder(modules_locations, dependencies).find()

0 commit comments

Comments
 (0)