Files
json/tools/generate_natvis/generate_natvis.py
T
Niels Lohmann a059e39662 Merge branch 'develop' into claude/abi-tag-strict-nul-handling
Resolve the conflict with #5344, which added the _psp ABI tag: _snul now
follows _psp, NLOHMANN_JSON_ABI_TAGS_CONCAT takes six tags, and
nlohmann_json.natvis and the amalgamation are regenerated.

Signed-off-by: Niels Lohmann <mail@nlohmann.me>
2026-09-25 18:09:46 +02:00

42 lines
1.4 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
import itertools
import jinja2
import os
import re
import sys
def semver(v):
if not re.fullmatch(r'\d+\.\d+\.\d+', v):
raise ValueError
return v
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--version', required=True, type=semver, help='Library version number')
parser.add_argument('output', help='Output directory for nlohmann_json.natvis')
args = parser.parse_args()
namespaces = ['nlohmann']
abi_prefix = 'json_abi'
abi_tags = ['_diag', '_ldvcmp', '_dp', '_bics', '_psp', '_snul']
version = '_v' + args.version.replace('.', '_')
inline_namespaces = []
# generate all combinations of inline namespace names
for n in range(0, len(abi_tags) + 1):
for tags in itertools.combinations(abi_tags, n):
ns = abi_prefix + ''.join(tags)
inline_namespaces += [ns, ns + version]
namespaces += [f'{namespaces[0]}::{ns}' for ns in inline_namespaces]
env = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath=sys.path[0]), autoescape=True, trim_blocks=True,
lstrip_blocks=True, keep_trailing_newline=True)
template = env.get_template('nlohmann_json.natvis.j2')
natvis = template.render(namespaces=namespaces)
with open(os.path.join(args.output, 'nlohmann_json.natvis'), 'w') as f:
f.write(natvis)