22
33import os
44import os .path
5- from collections .abc import Generator
5+ from collections .abc import Generator , Iterable , Mapping
66from difflib import SequenceMatcher
77from operator import itemgetter
88from pathlib import Path
9+ from typing import Any , cast
910
1011from commitizen import changelog , defaults , factory , git , out
1112from commitizen .changelog_formats import get_changelog_format
2829class Changelog :
2930 """Generate a changelog based on the commit history."""
3031
31- def __init__ (self , config : BaseConfig , args ):
32+ def __init__ (self , config : BaseConfig , args : Mapping [ str , Any ] ):
3233 if not git .is_git_project ():
3334 raise NotAGitProjectError ()
3435
@@ -76,10 +77,11 @@ def __init__(self, config: BaseConfig, args):
7677 self .change_type_map = (
7778 self .config .settings .get ("change_type_map" ) or self .cz .change_type_map
7879 )
79- self .change_type_order = (
80+ self .change_type_order = cast (
81+ list [str ],
8082 self .config .settings .get ("change_type_order" )
8183 or self .cz .change_type_order
82- or defaults .CHANGE_TYPE_ORDER
84+ or defaults .CHANGE_TYPE_ORDER ,
8385 )
8486 self .rev_range = args .get ("rev_range" )
8587 self .tag_format : str = (
@@ -102,7 +104,7 @@ def __init__(self, config: BaseConfig, args):
102104 self .extras = args .get ("extras" ) or {}
103105 self .export_template_to = args .get ("export_template" )
104106
105- def _find_incremental_rev (self , latest_version : str , tags : list [GitTag ]) -> str :
107+ def _find_incremental_rev (self , latest_version : str , tags : Iterable [GitTag ]) -> str :
106108 """Try to find the 'start_rev'.
107109
108110 We use a similarity approach. We know how to parse the version from the markdown
@@ -151,18 +153,18 @@ def write_changelog(
151153
152154 changelog_file .write (changelog_out )
153155
154- def export_template (self ):
156+ def export_template (self )-> None :
155157 tpl = changelog .get_changelog_template (self .cz .template_loader , self .template )
156- src = Path (tpl .filename )
157- Path (self .export_template_to ).write_text (src .read_text ())
158+ src = Path (tpl .filename )# type: ignore
159+ Path (self .export_template_to ).write_text (src .read_text ())# type: ignore
158160
159- def __call__ (self ):
161+ def __call__ (self )-> None :
160162 commit_parser = self .cz .commit_parser
161163 changelog_pattern = self .cz .changelog_pattern
162164 start_rev = self .start_rev
163165 unreleased_version = self .unreleased_version
164166 changelog_meta = changelog .Metadata ()
165- change_type_map : dict | None = self .change_type_map
167+ change_type_map : dict [ str , str ] | None = self .change_type_map # type: ignore
166168 changelog_message_builder_hook : MessageBuilderHook | None = (
167169 self .cz .changelog_message_builder_hook
168170 )
@@ -190,7 +192,7 @@ def __call__(self):
190192 changelog_meta = self .changelog_format .get_metadata (self .file_name )
191193 if changelog_meta .latest_version :
192194 start_rev = self ._find_incremental_rev (
193- strip_local_version (changelog_meta .latest_version_tag ), tags
195+ strip_local_version (changelog_meta .latest_version_tag or "" ), tags
194196 )
195197 if self .rev_range :
196198 start_rev , end_rev = changelog .get_oldest_and_newest_rev (
0 commit comments