Skip to content

Commit 789b90b

Browse files
committed
fix: update get deps function to work
1 parent 47140e7 commit 789b90b

File tree

3 files changed

+40
-8
lines changed

3 files changed

+40
-8
lines changed

cpp_linter_hooks/util.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,13 @@ def get_version_from_dependency(tool: str) -> Optional[str]:
2020
return None
2121
with open(pyproject_path, "rb") as f:
2222
data = tomllib.load(f)
23-
dependencies = data.get("project", {}).get("dependencies", [])
24-
for dep in dependencies:
23+
# First try project.optional-dependencies.tools
24+
optional_deps = data.get("project", {}).get("optional-dependencies", {})
25+
tools_deps = optional_deps.get("tools", [])
26+
for dep in tools_deps:
2527
if dep.startswith(f"{tool}=="):
2628
return dep.split("==")[1]
29+
2730
return None
2831

2932

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ source = "https://github.com/cpp-linter/cpp-linter-hooks"
4545
tracker = "https://github.com/cpp-linter/cpp-linter-hooks/issues"
4646

4747
[project.optional-dependencies]
48+
# only clang tools can added to this section to make hooks work
4849
tools = [
4950
"clang-format==20.1.7",
5051
"clang-tidy==20.1.0",

tests/test_util.py

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,13 @@ def test_get_version_from_dependency_success():
102102
"""Test get_version_from_dependency with valid pyproject.toml."""
103103
mock_toml_content = {
104104
"project": {
105-
"dependencies": [
106-
"clang-format==20.1.7",
107-
"clang-tidy==20.1.0",
108-
"other-package==1.0.0",
109-
]
105+
"optional-dependencies": {
106+
"tools": [
107+
"clang-format==20.1.7",
108+
"clang-tidy==20.1.0",
109+
"other-package==1.0.0",
110+
]
111+
}
110112
}
111113
}
112114

@@ -132,7 +134,9 @@ def test_get_version_from_dependency_missing_file():
132134
@pytest.mark.benchmark
133135
def test_get_version_from_dependency_missing_dependency():
134136
"""Test get_version_from_dependency with missing dependency."""
135-
mock_toml_content = {"project": {"dependencies": ["other-package==1.0.0"]}}
137+
mock_toml_content = {
138+
"project": {"optional-dependencies": {"tools": ["other-package==1.0.0"]}}
139+
}
136140

137141
with (
138142
patch("pathlib.Path.exists", return_value=True),
@@ -155,6 +159,30 @@ def test_get_version_from_dependency_malformed_toml():
155159
assert result is None
156160

157161

162+
@pytest.mark.benchmark
163+
def test_get_version_from_dependency_fallback_to_dependencies():
164+
"""Test get_version_from_dependency falls back to project.dependencies."""
165+
mock_toml_content = {
166+
"project": {
167+
"dependencies": [
168+
"clang-format==20.1.7",
169+
"clang-tidy==20.1.0",
170+
"other-package==1.0.0",
171+
]
172+
}
173+
}
174+
175+
with (
176+
patch("pathlib.Path.exists", return_value=True),
177+
patch("cpp_linter_hooks.util.tomllib.load", return_value=mock_toml_content),
178+
):
179+
result = get_version_from_dependency("clang-format")
180+
assert result == "20.1.7"
181+
182+
result = get_version_from_dependency("clang-tidy")
183+
assert result == "20.1.0"
184+
185+
158186
# Tests for _resolve_version
159187
@pytest.mark.benchmark
160188
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)