Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit de6dcff

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /