Skip to content

Commit de6dcff

Browse files
committed
refactor(cargo_provider): cleanup and get rid of potential type errors
1 parent cc981fc commit de6dcff

File tree

1 file changed

+47
-45
lines changed

1 file changed

+47
-45
lines changed

commitizen/providers/cargo_provider.py

Lines changed: 47 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,16 @@
22

33
import fnmatch
44
import glob
5+
from collections.abc import Container
56
from pathlib import Path
67

7-
import tomlkit
8+
from tomlkit import TOMLDocument, dumps, parse
9+
from tomlkit.exceptions import NonExistentKey
10+
from tomlkit.items import AoT
811

912
from commitizen.providers.base_provider import TomlProvider
1013

1114

12-
def matches_exclude(path: str, exclude_patterns: list[str]) -> bool:
13-
for pattern in exclude_patterns:
14-
if fnmatch.fnmatch(path, pattern):
15-
return True
16-
return False
17-
18-
1915
class CargoProvider(TomlProvider):
2016
"""
2117
Cargo version management
@@ -30,65 +26,71 @@ class CargoProvider(TomlProvider):
3026
def lock_file(self) -> Path:
3127
return Path() / self.lock_filename
3228

33-
def get(self, document: tomlkit.TOMLDocument) -> str:
34-
# If there is a root package, change its version (but not the workspace version)
35-
try:
36-
return document["package"]["version"] # type: ignore[index,return-value]
37-
# Else, bump the workspace version
38-
except tomlkit.exceptions.NonExistentKey:
39-
...
40-
return document["workspace"]["package"]["version"] # type: ignore[index,return-value]
29+
def get(self, document: TOMLDocument) -> str:
30+
out = _try_get_workspace(document)["package"]["version"] # type: ignore[index]
31+
assert isinstance(out, str)
32+
return out
4133

42-
def set(self, document: tomlkit.TOMLDocument, version: str) -> None:
43-
try:
44-
document["workspace"]["package"]["version"] = version # type: ignore[index]
45-
return
46-
except tomlkit.exceptions.NonExistentKey:
47-
...
48-
document["package"]["version"] = version # type: ignore[index]
34+
def set(self, document: TOMLDocument, version: str) -> None:
35+
_try_get_workspace(document)["package"]["version"] = version # type: ignore[index]
4936

5037
def set_version(self, version: str) -> None:
5138
super().set_version(version)
5239
if self.lock_file.exists():
5340
self.set_lock_version(version)
5441

5542
def set_lock_version(self, version: str) -> None:
56-
cargo_toml_content = tomlkit.parse(self.file.read_text())
57-
cargo_lock_content = tomlkit.parse(self.lock_file.read_text())
58-
packages: tomlkit.items.AoT = cargo_lock_content["package"] # type: ignore[assignment]
43+
cargo_toml_content = parse(self.file.read_text())
44+
cargo_lock_content = parse(self.lock_file.read_text())
45+
packages = cargo_lock_content["package"]
46+
47+
assert isinstance(packages, AoT)
48+
5949
try:
60-
package_name = cargo_toml_content["package"]["name"] # type: ignore[index]
50+
cargo_package_name = cargo_toml_content["package"]["name"] # type: ignore[index]
51+
assert isinstance(cargo_package_name, str)
6152
for i, package in enumerate(packages):
62-
if package["name"] == package_name:
53+
if package["name"] == cargo_package_name:
6354
cargo_lock_content["package"][i]["version"] = version # type: ignore[index]
6455
break
65-
except tomlkit.exceptions.NonExistentKey:
66-
workspace_members = cargo_toml_content.get("workspace", {}).get(
67-
"members", []
68-
)
69-
excluded_workspace_members = cargo_toml_content.get("workspace", {}).get(
70-
"exclude", []
71-
)
72-
members_inheriting = []
56+
except NonExistentKey:
57+
workspace = cargo_toml_content.get("workspace", {})
58+
assert isinstance(workspace, dict)
59+
workspace_members = workspace.get("members", [])
60+
excluded_workspace_members = workspace.get("exclude", [])
61+
members_inheriting: list[str] = []
7362

7463
for member in workspace_members:
7564
for path in glob.glob(member, recursive=True):
76-
if matches_exclude(path, excluded_workspace_members):
65+
if any(
66+
fnmatch.fnmatch(path, pattern)
67+
for pattern in excluded_workspace_members
68+
):
7769
continue
70+
7871
cargo_file = Path(path) / "Cargo.toml"
79-
cargo_toml_content = tomlkit.parse(cargo_file.read_text())
72+
package_content = parse(cargo_file.read_text()).get("package", {})
73+
assert isinstance(package_content, dict)
8074
try:
81-
version_workspace = cargo_toml_content["package"]["version"][ # type: ignore[index]
82-
"workspace"
83-
]
75+
version_workspace = package_content["version"]["workspace"]
8476
if version_workspace is True:
85-
package_name = cargo_toml_content["package"]["name"] # type: ignore[index]
77+
package_name = package_content["name"]
78+
assert isinstance(package_name, str)
8679
members_inheriting.append(package_name)
87-
except tomlkit.exceptions.NonExistentKey:
88-
continue
80+
except NonExistentKey:
81+
pass
8982

9083
for i, package in enumerate(packages):
9184
if package["name"] in members_inheriting:
9285
cargo_lock_content["package"][i]["version"] = version # type: ignore[index]
9386

94-
self.lock_file.write_text(tomlkit.dumps(cargo_lock_content))
87+
self.lock_file.write_text(dumps(cargo_lock_content))
88+
89+
90+
def _try_get_workspace(document: TOMLDocument) -> Container:
91+
try:
92+
workspace = document["workspace"]
93+
assert isinstance(workspace, Container)
94+
return workspace
95+
except NonExistentKey:
96+
return document

0 commit comments

Comments
 (0)