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 36698e7

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

File tree

1 file changed

+46
-45
lines changed

1 file changed

+46
-45
lines changed

‎commitizen/providers/cargo_provider.py‎

Lines changed: 46 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,13 @@
44
import glob
55
from pathlib import Path
66

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

911
from commitizen.providers.base_provider import TomlProvider
1012

1113

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-
1914
class CargoProvider(TomlProvider):
2015
"""
2116
Cargo version management
@@ -30,65 +25,71 @@ class CargoProvider(TomlProvider):
3025
def lock_file(self) -> Path:
3126
return Path() / self.lock_filename
3227

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]
28+
def get(self, document: TOMLDocument) -> str:
29+
out = _try_get_workspace(document)["package"]["version"]
30+
assert isinstance(out, str)
31+
return out
4132

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]
33+
def set(self, document: TOMLDocument, version: str) -> None:
34+
_try_get_workspace(document)["package"]["version"] = version
4935

5036
def set_version(self, version: str) -> None:
5137
super().set_version(version)
5238
if self.lock_file.exists():
5339
self.set_lock_version(version)
5440

5541
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]
42+
cargo_toml_content = parse(self.file.read_text())
43+
cargo_lock_content = parse(self.lock_file.read_text())
44+
packages = cargo_lock_content["package"]
45+
46+
assert isinstance(packages, AoT)
47+
5948
try:
60-
package_name = cargo_toml_content["package"]["name"] # type: ignore[index]
49+
cargo_package_name = cargo_toml_content["package"]["name"] # type: ignore[index]
50+
assert isinstance(cargo_package_name, str)
6151
for i, package in enumerate(packages):
62-
if package["name"] == package_name:
52+
if package["name"] == cargo_package_name:
6353
cargo_lock_content["package"][i]["version"] = version # type: ignore[index]
6454
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 = []
55+
except NonExistentKey:
56+
workspace = cargo_toml_content.get("workspace", {})
57+
assert isinstance(workspace, dict)
58+
workspace_members = workspace.get("members", [])
59+
excluded_workspace_members = workspace.get("exclude", [])
60+
members_inheriting: list[str] = []
7361

7462
for member in workspace_members:
7563
for path in glob.glob(member, recursive=True):
76-
if matches_exclude(path, excluded_workspace_members):
64+
if any(
65+
fnmatch.fnmatch(path, pattern)
66+
for pattern in excluded_workspace_members
67+
):
7768
continue
69+
7870
cargo_file = Path(path) / "Cargo.toml"
79-
cargo_toml_content = tomlkit.parse(cargo_file.read_text())
71+
package_content = parse(cargo_file.read_text()).get("package", {})
72+
assert isinstance(package_content, dict)
8073
try:
81-
version_workspace = cargo_toml_content["package"]["version"][ # type: ignore[index]
82-
"workspace"
83-
]
74+
version_workspace = package_content["version"]["workspace"]
8475
if version_workspace is True:
85-
package_name = cargo_toml_content["package"]["name"] # type: ignore[index]
76+
package_name = package_content["name"]
77+
assert isinstance(package_name, str)
8678
members_inheriting.append(package_name)
87-
except tomlkit.exceptions.NonExistentKey:
88-
continue
79+
except NonExistentKey:
80+
pass
8981

9082
for i, package in enumerate(packages):
9183
if package["name"] in members_inheriting:
9284
cargo_lock_content["package"][i]["version"] = version # type: ignore[index]
9385

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

0 commit comments

Comments
(0)

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