@@ -125,6 +125,32 @@ def remove_default(self, dct: dict[str, Any]) -> None:
125125 raise NotImplementedError
126126
127127
128+ class DeprecatedDefaultStagesWarning (NamedTuple ):
129+ key : str
130+
131+ def check (self , dct : dict [str , Any ]) -> None :
132+ if self .key not in dct :
133+ return
134+
135+ val = dct [self .key ]
136+ cfgv .check_array (cfgv .check_any )(val )
137+
138+ legacy_stages = [stage for stage in val if stage in _STAGES ]
139+ if legacy_stages :
140+ logger .warning (
141+ f'top-level `default_stages` uses deprecated stage names '
142+ f'({ ", " .join (legacy_stages )} ) which will be removed in a '
143+ f'future version. '
144+ f'run: `pre-commit migrate-config` to automatically fix this.' ,
145+ )
146+
147+ def apply_default (self , dct : dict [str , Any ]) -> None :
148+ pass
149+
150+ def remove_default (self , dct : dict [str , Any ]) -> None :
151+ raise NotImplementedError
152+
153+
128154MANIFEST_HOOK_DICT = cfgv .Map (
129155 'Hook' , 'id' ,
130156
@@ -398,6 +424,7 @@ def check(self, dct: dict[str, Any]) -> None:
398424 'default_language_version' , DEFAULT_LANGUAGE_VERSION , {},
399425 ),
400426 StagesMigration ('default_stages' , STAGES ),
427+ DeprecatedDefaultStagesWarning ('default_stages' ),
401428 cfgv .Optional ('files' , check_string_regex , '' ),
402429 cfgv .Optional ('exclude' , check_string_regex , '^$' ),
403430 cfgv .Optional ('fail_fast' , cfgv .check_bool , False ),
0 commit comments