Unverified Commit 18df33f5 authored by sandydoo's avatar sandydoo
Browse files

nixos/make-options-doc: skip re-escaping strings

parent a5cf714b
Loading
Loading
Loading
Loading
+18 −14
Original line number Diff line number Diff line
@@ -21,11 +21,13 @@ 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

    _type = obj['_type']
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']

@@ -34,6 +36,8 @@ def render_types(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():
        print('##', name.replace('<', '&lt;').replace('>', '&gt;'))
@@ -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)