Update the man page diagnostic script: settings and output format
Marco Ricci

Marco Ricci commited on 2025-06-14 20:07:44
Zeige 1 geänderte Dateien mit 20 Einfügungen und 21 Löschungen.


Update the man page diagnostic script to current settings: use the
updated path to the man pages, and use metavars without the `!s`
conversion. Additionally, since the output is currently a diagnostic on
standard error, and very verbose, emit a terser shorthand notation to
standard output instead. (Also sort the files to be examined first.)
... ...
@@ -31,8 +31,14 @@ def _replace_known_metavars(string: str) -> str:
31 31
             '{service_metavar!s}',
32 32
             cli_messages.Label.VAULT_METAVAR_SERVICE.value.singular,
33 33
         )
34
+        .replace(
35
+            '{service_metavar}',
36
+            cli_messages.Label.VAULT_METAVAR_SERVICE.value.singular,
37
+        )
34 38
         .replace('{PROG_NAME!s}', cli_messages.PROG_NAME)
39
+        .replace('{PROG_NAME}', cli_messages.PROG_NAME)
35 40
         .replace('{settings_type!s}', 'global/service-specific settings')
41
+        .replace('{settings_type}', 'global/service-specific settings')
36 42
     )
37 43
 
38 44
 
... ...
@@ -193,7 +199,11 @@ manpagedoc_documented_warnings: dict[EnumName, DiagnosticText] = {}
193 199
 for set_name, globs, errors, warnings in [
194 200
     (
195 201
         'manpages',
196
-        sorted(pathlib.Path(base, 'man').glob('derivepassphrase*.1')),
202
+        sorted(
203
+            pathlib.Path(base, 'share', 'man', 'man1').glob(
204
+                'derivepassphrase*.1'
205
+            )
206
+        ),
197 207
         manpage_documented_errors,
198 208
         manpage_documented_warnings,
199 209
     ),
... ...
@@ -209,23 +219,17 @@ for set_name, globs, errors, warnings in [
209 219
     ),
210 220
 ]:
211 221
     for path in globs:
212
-        print(f'Checking manpage {path}', file=sys.stderr)
222
+        print(f'CHECK DOC {str(path.relative_to(base))!r}')
213 223
         checker = (
214 224
             _check_manpage if set_name == 'manpages' else _check_manpagedoc
215 225
         )
216 226
         for diagnostic_type, (text, name) in checker(path):
217 227
             if diagnostic_type == 'warning':
218 228
                 warnings[name] = text
219
-                print(
220
-                    f'Found warning message {name!r} with {text!r} in manpage.',  # noqa: E501
221
-                    file=sys.stderr,
222
-                )
229
+                print(f'DOC WARN {name} {text!r}')
223 230
             else:
224 231
                 errors[name] = text
225
-                print(
226
-                    f'Found error message {name!r} with {text!r} in manpage.',
227
-                    file=sys.stderr,
228
-                )
232
+                print(f'DOC ERR {name} {text!r}')
229 233
     assert set(errors) >= set(known_errors), (
230 234
         f"Some error messages aren't documented in the {set_name}: "
231 235
         + repr(set(known_errors) - set(errors))
... ...
@@ -248,27 +252,22 @@ py_file_warnings: set[EnumName] = set()
248 252
 match_errors_warnings = re.compile(
249 253
     r'\b(?:cli_messages|msg|_msg)\.(Err|Warn)MsgTemplate\.([A-Z0-9_]+)'
250 254
 )
251
-for path in pathlib.Path(base, 'src', 'derivepassphrase').glob('**/*.py'):
255
+for path in sorted(
256
+    pathlib.Path(base, 'src', 'derivepassphrase').glob('**/*.py')
257
+):
252 258
     if path != pathlib.Path(
253 259
         base, 'src', 'derivepassphrase', '_internals', 'cli_messages.py'
254 260
     ):
261
+        print(f'CHECK SOURCE {str(path.relative_to(base))!r}')
255 262
         filecontents = path.read_text(encoding='UTF-8')
256 263
         for match in match_errors_warnings.finditer(filecontents):
257 264
             message_type, symbol = match.group(1, 2)
258 265
             if message_type == 'Err':
259 266
                 py_file_errors.add(cast('EnumName', symbol))
260
-                print(
261
-                    f'Found mention of error message {symbol} '
262
-                    f'in source file {path!r}.',
263
-                    file=sys.stderr,
264
-                )
267
+                print(f'SOURCE ERR {symbol}')
265 268
             elif message_type == 'Warn':
266 269
                 py_file_warnings.add(cast('EnumName', symbol))
267
-                print(
268
-                    f'Found mention of warning message {symbol} '
269
-                    f'in source file {path!r}.',
270
-                    file=sys.stderr,
271
-                )
270
+                print(f'SOURCE WARN {symbol}')
272 271
 if py_file_errors != set(known_errors):
273 272
     print(
274 273
         "Some error messages aren't in use: "
275 274