Skip to content

Commit 1c02970

Browse files
committed
fix(Init): fix a typo in _ask_version_provider options and remove unnecessary filter, use named tuple for options
1 parent e70c0a6 commit 1c02970

File tree

1 file changed

+70
-35
lines changed

1 file changed

+70
-35
lines changed

commitizen/commands/init.py

Lines changed: 70 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import os
44
import shutil
5-
from typing import Any
5+
from typing import Any, NamedTuple
66

77
import questionary
88
import yaml
@@ -17,6 +17,54 @@
1717
from commitizen.version_schemes import KNOWN_SCHEMES, Version, get_version_scheme
1818

1919

20+
class _VersionProviderOption(NamedTuple):
21+
value: str
22+
description: str
23+
24+
@property
25+
def title(self) -> str:
26+
return f"{self.value}: {self.description}"
27+
28+
29+
_VERSION_PROVIDER_CHOICES = tuple(
30+
questionary.Choice(title=option.title, value=option.value)
31+
for option in (
32+
_VersionProviderOption(
33+
value="commitizen",
34+
description="Fetch and set version in commitizen config (default)",
35+
),
36+
_VersionProviderOption(
37+
value="cargo",
38+
description="Get and set version from Cargo.toml:project.version field",
39+
),
40+
_VersionProviderOption(
41+
value="composer",
42+
description="Get and set version from composer.json:project.version field",
43+
),
44+
_VersionProviderOption(
45+
value="npm",
46+
description="Get and set version from package.json:project.version field",
47+
),
48+
_VersionProviderOption(
49+
value="pep621",
50+
description="Get and set version from pyproject.toml:project.version field",
51+
),
52+
_VersionProviderOption(
53+
value="poetry",
54+
description="Get and set version from pyproject.toml:tool.poetry.version field",
55+
),
56+
_VersionProviderOption(
57+
value="uv",
58+
description="Get and set version from pyproject.toml and uv.lock",
59+
),
60+
_VersionProviderOption(
61+
value="scm",
62+
description="Fetch the version from git and does not need to set it back",
63+
),
64+
)
65+
)
66+
67+
2068
class ProjectInfo:
2169
"""Discover information about the current folder."""
2270

@@ -228,45 +276,32 @@ def _ask_tag_format(self, latest_tag: str) -> str:
228276
def _ask_version_provider(self) -> str:
229277
"""Ask for setting: version_provider"""
230278

231-
OPTS = {
232-
"commitizen": "commitizen: Fetch and set version in commitizen config (default)",
233-
"cargo": "cargo: Get and set version from Cargo.toml:project.version field",
234-
"composer": "composer: Get and set version from composer.json:project.version field",
235-
"npm": "npm: Get and set version from package.json:project.version field",
236-
"pep621": "pep621: Get and set version from pyproject.toml:project.version field",
237-
"poetry": "poetry: Get and set version from pyproject.toml:tool.poetry.version field",
238-
"uv": "uv: Get and set version from pyproject.toml and uv.lock",
239-
"scm": "scm: Fetch the version from git and does not need to set it back",
240-
}
241-
242-
default_val = "commitizen"
243-
if self.project_info.is_python:
244-
if self.project_info.is_python_poetry:
245-
default_val = "poetry"
246-
elif self.project_info.is_python_uv:
247-
default_val = "uv"
248-
else:
249-
default_val = "pep621"
250-
elif self.project_info.is_rust_cargo:
251-
default_val = "cargo"
252-
elif self.project_info.is_npm_package:
253-
default_val = "npm"
254-
elif self.project_info.is_php_composer:
255-
default_val = "composer"
256-
257-
choices = [
258-
questionary.Choice(title=title, value=value)
259-
for value, title in OPTS.items()
260-
]
261-
default = next(filter(lambda x: x.value == default_val, choices))
262279
version_provider: str = questionary.select(
263280
"Choose the source of the version:",
264-
choices=choices,
281+
choices=_VERSION_PROVIDER_CHOICES,
265282
style=self.cz.style,
266-
default=default,
283+
default=self._default_version_provider,
267284
).unsafe_ask()
268285
return version_provider
269286

287+
@property
288+
def _default_version_provider(self) -> str:
289+
if self.project_info.is_python:
290+
if self.project_info.is_python_poetry:
291+
return "poetry"
292+
if self.project_info.is_python_uv:
293+
return "uv"
294+
return "pep621"
295+
296+
if self.project_info.is_rust_cargo:
297+
return "cargo"
298+
if self.project_info.is_npm_package:
299+
return "npm"
300+
if self.project_info.is_php_composer:
301+
return "composer"
302+
303+
return "commitizen"
304+
270305
def _ask_version_scheme(self) -> str:
271306
"""Ask for setting: version_scheme"""
272307
default_scheme = "pep440" if self.project_info.is_python else "semver"
@@ -291,7 +326,7 @@ def _ask_major_version_zero(self, version: Version) -> bool:
291326
return major_version_zero
292327

293328
def _ask_update_changelog_on_bump(self) -> bool:
294-
"Ask for setting: update_changelog_on_bump"
329+
"""Ask for setting: update_changelog_on_bump"""
295330
update_changelog_on_bump: bool = questionary.confirm(
296331
"Create changelog automatically on bump",
297332
default=True,

0 commit comments

Comments
 (0)