--- /dev/null
+#!/usr/bin/env python3
+
+import argparse
+import fileinput
+import sys
+import yaml
+from typing import Any, Dict
+
+
+class ValidationError(Exception):
+ pass
+
+
+OptionType = Dict[str, Any]
+
+
+def validate_see_also(opt: OptionType, opts: Dict[str, OptionType]) -> None:
+ see_also = opt.get('see_also')
+ if see_also is None:
+ return
+ for ref in see_also:
+ if ref not in opts:
+ msg = f'see_also contains "{ref}". But it is not found.'
+ raise ValidationError(msg)
+
+
+def main() -> None:
+ parser = argparse.ArgumentParser(
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+ parser.add_argument('yamls', nargs='*')
+ opts = parser.parse_args()
+ options = {}
+ for yaml_file in opts.yamls:
+ with open(yaml_file) as f:
+ yml = yaml.load(f, yaml.SafeLoader)
+ options.update({opt['name']: opt for opt in yml['options']})
+ for name, opt in options.items():
+ try:
+ validate_see_also(opt, options)
+ except ValidationError as e:
+ raise Exception(f'failed to validate "{name}": {e}')
+
+
+if __name__ == '__main__':
+ try:
+ main()
+ except Exception as e:
+ print(e, file=sys.stderr)
+ sys.exit(1)