@@ -99,6 +99,32 @@ def apply_default(self, dct: dict[str, Any]) -> None:
99
99
super ().apply_default (dct )
100
100
101
101
102
+ class DeprecatedStagesWarning (NamedTuple ):
103
+ key : str
104
+
105
+ def check (self , dct : dict [str , Any ]) -> None :
106
+ if self .key not in dct :
107
+ return
108
+
109
+ val = dct [self .key ]
110
+ cfgv .check_array (cfgv .check_any )(val )
111
+
112
+ legacy_stages = [stage for stage in val if stage in _STAGES ]
113
+ if legacy_stages :
114
+ logger .warning (
115
+ f'hook id `{ dct ["id" ]} ` uses deprecated stage names '
116
+ f'({ ", " .join (legacy_stages )} ) which will be removed in a '
117
+ f'future version. '
118
+ f'run: `pre-commit migrate-config` to automatically fix this.' ,
119
+ )
120
+
121
+ def apply_default (self , dct : dict [str , Any ]) -> None :
122
+ pass
123
+
124
+ def remove_default (self , dct : dict [str , Any ]) -> None :
125
+ raise NotImplementedError
126
+
127
+
102
128
MANIFEST_HOOK_DICT = cfgv .Map (
103
129
'Hook' , 'id' ,
104
130
@@ -267,6 +293,12 @@ def check(self, dct: dict[str, Any]) -> None:
267
293
raise cfgv .ValidationError (f'{ self .key !r} cannot be overridden' )
268
294
269
295
296
+ _COMMON_HOOK_WARNINGS = (
297
+ OptionalSensibleRegexAtHook ('files' , cfgv .check_string ),
298
+ OptionalSensibleRegexAtHook ('exclude' , cfgv .check_string ),
299
+ DeprecatedStagesWarning ('stages' ),
300
+ )
301
+
270
302
META_HOOK_DICT = cfgv .Map (
271
303
'Hook' , 'id' ,
272
304
cfgv .Required ('id' , cfgv .check_string ),
@@ -289,8 +321,7 @@ def check(self, dct: dict[str, Any]) -> None:
289
321
item
290
322
for item in MANIFEST_HOOK_DICT .items
291
323
),
292
- OptionalSensibleRegexAtHook ('files' , cfgv .check_string ),
293
- OptionalSensibleRegexAtHook ('exclude' , cfgv .check_string ),
324
+ * _COMMON_HOOK_WARNINGS ,
294
325
)
295
326
CONFIG_HOOK_DICT = cfgv .Map (
296
327
'Hook' , 'id' ,
@@ -308,16 +339,13 @@ def check(self, dct: dict[str, Any]) -> None:
308
339
if item .key != 'stages'
309
340
),
310
341
StagesMigrationNoDefault ('stages' , []),
311
- OptionalSensibleRegexAtHook ('files' , cfgv .check_string ),
312
- OptionalSensibleRegexAtHook ('exclude' , cfgv .check_string ),
342
+ * _COMMON_HOOK_WARNINGS ,
313
343
)
314
344
LOCAL_HOOK_DICT = cfgv .Map (
315
345
'Hook' , 'id' ,
316
346
317
347
* MANIFEST_HOOK_DICT .items ,
318
-
319
- OptionalSensibleRegexAtHook ('files' , cfgv .check_string ),
320
- OptionalSensibleRegexAtHook ('exclude' , cfgv .check_string ),
348
+ * _COMMON_HOOK_WARNINGS ,
321
349
)
322
350
CONFIG_REPO_DICT = cfgv .Map (
323
351
'Repository' , 'repo' ,
0 commit comments