diff options
author | Domen Kožar <domen@dev.si> | 2023-01-08 11:14:57 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-08 11:14:57 +0000 |
commit | dce3b02d44b081f4648261ff79be5c32e1356509 (patch) | |
tree | 4da7eb190a86fd6cea37e93103d6a471e0272b78 | |
parent | 2a19c135fc3a023b2bbf795f839b3c650ad2ee22 (diff) | |
parent | 18df33f5bc99d32e1312439cf670f0f4c580290b (diff) |
Merge pull request #209501 from sandydoo/improve/fix-commonmark-doc-isues
nixos/make-options-doc: skip re-escaping literal expressions
-rw-r--r-- | nixos/lib/make-options-doc/generateDoc.py | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/nixos/lib/make-options-doc/generateDoc.py b/nixos/lib/make-options-doc/generateDoc.py index 1fe4eb0253add..07884ed657e49 100644 --- a/nixos/lib/make-options-doc/generateDoc.py +++ b/nixos/lib/make-options-doc/generateDoc.py @@ -21,18 +21,22 @@ parser.add_argument( args = parser.parse_args() -# Pretty-print certain Nix types, like literal expressions. -def render_types(obj): - if '_type' not in obj: return obj +class OptionsEncoder(json.JSONEncoder): + def encode(self, obj): + # Unpack literal expressions and other Nix types. + # Don't escape the strings: they were escaped when initially serialized to JSON. + if isinstance(obj, dict): + _type = obj.get('_type') + if _type is not None: + if _type == 'literalExpression' or _type == 'literalDocBook': + return obj['text'] - _type = obj['_type'] - if _type == 'literalExpression' or _type == 'literalDocBook': - return obj['text'] + if _type == 'derivation': + return obj['name'] - if _type == 'derivation': - return obj['name'] + raise Exception(f'Unexpected type `{_type}` in {json.dumps(obj)}') - raise Exception(f'Unexpected type `{_type}` in {json.dumps(obj)}') + return super().encode(obj) def generate_commonmark(options): for (name, value) in options.items(): @@ -49,14 +53,14 @@ def generate_commonmark(options): if 'default' in value: print('*_Default_*') print('```') - print(json.dumps(value['default'], ensure_ascii=False, separators=(',', ':'))) + print(json.dumps(value['default'], cls=OptionsEncoder, ensure_ascii=False, separators=(',', ':'))) print('```') print() print() if 'example' in value: print('*_Example_*') print('```') - print(json.dumps(value['example'], ensure_ascii=False, separators=(',', ':'))) + print(json.dumps(value['example'], cls=OptionsEncoder, ensure_ascii=False, separators=(',', ':'))) print('```') print() print() @@ -76,7 +80,7 @@ def generate_asciidoc(options): print('Default::') print('+') print('----') - print(json.dumps(value['default'], ensure_ascii=False, separators=(',', ':'))) + print(json.dumps(value['default'], cls=OptionsEncoder, ensure_ascii=False, separators=(',', ':'))) print('----') print() else: @@ -89,7 +93,7 @@ def generate_asciidoc(options): print('Example::') print('+') print('----') - print(json.dumps(value['example'], ensure_ascii=False, separators=(',', ':'))) + print(json.dumps(value['example'], cls=OptionsEncoder, ensure_ascii=False, separators=(',', ':'))) print('----') print() else: @@ -97,7 +101,7 @@ def generate_asciidoc(options): print() with open(args.nix_options_path) as nix_options_json: - options = json.load(nix_options_json, object_hook=render_types) + options = json.load(nix_options_json) if args.format == 'commonmark': generate_commonmark(options) |