1010import sys
1111from collections .abc import Mapping
1212from pathlib import Path
13- from typing import TextIO
13+ from typing import NamedTuple , TextIO
1414
1515from packaging .version import InvalidVersion , Version
1616
2020from .types import PrinterLike
2121
2222_VSCODE_EXTENSION_TIP_KEY = "vscode_extension"
23- _DEAD_CODE_REACHABILITY_MIGRATION_TIP_KEY = (
23+ _DEAD_CODE_REACHABILITY_2_0_1_MIGRATION_TIP_KEY = (
2424 "dead_code_reachability_2_0_1_migration_shown"
2525)
26+ _DEAD_CODE_REACHABILITY_2_0_2_MIGRATION_TIP_KEY = (
27+ "dead_code_reachability_2_0_2_migration_shown"
28+ )
2629_TIPS_SCHEMA_VERSION = 1
2730_VSCODE_EXTENSION_URL = (
2831 "https://marketplace.visualstudio.com/items?itemName=orenlab.codeclone"
2932)
30- _DEAD_CODE_REACHABILITY_BASELINE_MIN = Version ("2.0.0b1" )
31- _DEAD_CODE_REACHABILITY_BASELINE_MAX = Version ("2.0.0" )
32- _DEAD_CODE_REACHABILITY_CURRENT_MIN = Version ("2.0.1" )
3333_CI_ENV_KEYS : tuple [str , ...] = (
3434 "CI" ,
3535 "GITHUB_ACTIONS" ,
4444)
4545
4646
47+ class _DeadCodeReachabilityMigration (NamedTuple ):
48+ tip_key : str
49+ baseline_min : Version
50+ baseline_max : Version
51+ current_min : Version
52+ target_version : str
53+
54+
55+ _DEAD_CODE_REACHABILITY_MIGRATIONS : tuple [
56+ _DeadCodeReachabilityMigration ,
57+ ...,
58+ ] = (
59+ _DeadCodeReachabilityMigration (
60+ tip_key = _DEAD_CODE_REACHABILITY_2_0_2_MIGRATION_TIP_KEY ,
61+ baseline_min = Version ("2.0.1" ),
62+ baseline_max = Version ("2.0.1" ),
63+ current_min = Version ("2.0.2" ),
64+ target_version = "2.0.2" ,
65+ ),
66+ _DeadCodeReachabilityMigration (
67+ tip_key = _DEAD_CODE_REACHABILITY_2_0_1_MIGRATION_TIP_KEY ,
68+ baseline_min = Version ("2.0.0b1" ),
69+ baseline_max = Version ("2.0.0" ),
70+ current_min = Version ("2.0.1" ),
71+ target_version = "2.0.1" ,
72+ ),
73+ )
74+
75+
4776def _tips_state_path (cache_path : Path ) -> Path :
4877 return cache_path .parent / "tips.json"
4978
@@ -165,24 +194,25 @@ def _tip_context_allowed(
165194 return _stream_is_tty (stream )
166195
167196
168- def _dead_code_reachability_migration_applies (
197+ def _dead_code_reachability_migration (
169198 * ,
170199 baseline_generator_version : str | None ,
171200 codeclone_version : str ,
172- ) -> bool :
201+ ) -> _DeadCodeReachabilityMigration | None :
173202 if not baseline_generator_version :
174- return False
203+ return None
175204 try :
176205 baseline_version = Version (baseline_generator_version )
177206 current_version = Version (codeclone_version )
178207 except InvalidVersion :
179- return False
180- return (
181- _DEAD_CODE_REACHABILITY_BASELINE_MIN
182- <= baseline_version
183- <= _DEAD_CODE_REACHABILITY_BASELINE_MAX
184- and current_version >= _DEAD_CODE_REACHABILITY_CURRENT_MIN
185- )
208+ return None
209+ for migration in _DEAD_CODE_REACHABILITY_MIGRATIONS :
210+ if (
211+ migration .baseline_min <= baseline_version <= migration .baseline_max
212+ and current_version >= migration .current_min
213+ ):
214+ return migration
215+ return None
186216
187217
188218def maybe_print_vscode_extension_tip (
@@ -239,10 +269,11 @@ def maybe_print_dead_code_reachability_migration_note(
239269) -> bool :
240270 if not baseline_trusted_for_diff :
241271 return False
242- if not _dead_code_reachability_migration_applies (
272+ migration = _dead_code_reachability_migration (
243273 baseline_generator_version = baseline_generator_version ,
244274 codeclone_version = codeclone_version ,
245- ):
275+ )
276+ if migration is None :
246277 return False
247278
248279 effective_environ = os .environ if environ is None else environ
@@ -258,16 +289,20 @@ def maybe_print_dead_code_reachability_migration_note(
258289 state = _load_tips_state (state_path )
259290 if _tip_was_shown (
260291 state ,
261- tip_key = _DEAD_CODE_REACHABILITY_MIGRATION_TIP_KEY ,
292+ tip_key = migration . tip_key ,
262293 ):
263294 return False
264295
265- console .print (ui .fmt_dead_code_reachability_migration_note ())
296+ console .print (
297+ ui .fmt_dead_code_reachability_migration_note (
298+ target_version = migration .target_version ,
299+ )
300+ )
266301 try :
267302 _remember_tip_shown (
268303 path = state_path ,
269304 state = state ,
270- tip_key = _DEAD_CODE_REACHABILITY_MIGRATION_TIP_KEY ,
305+ tip_key = migration . tip_key ,
271306 )
272307 except OSError :
273308 return True
0 commit comments