1
0
mirror of https://github.com/nlohmann/json.git synced 2025-04-18 01:57:37 +03:00

fixes issue 4691 (#4693)

* bugfix removeprefix not available in python version < 3.9

there was a problem in my cLion gdb that comes with python version 3.8.
the pretty printer script do not work because the removeprefix function is added in version 3.9.
therefore we need a fix for that.

Signed-off-by: Matthias Popp <mpopp@arri.at>

* fix indentation, use the same indentation size at in class JsonValuePrinter

the indentation size was a mix up, we should use always the same indentation size of 4

Signed-off-by: Matthias Popp <mpopp@arri.at>

* use prefix as variable

easier handling or easier to change

Signed-off-by: Matthias Popp <mpopp@arri.at>

* add variables for easier access

Signed-off-by: Matthias Popp <mpopp@arri.at>

---------

Signed-off-by: Matthias Popp <mpopp@arri.at>
Co-authored-by: Matthias Popp <mpopp@arri.at>
This commit is contained in:
bitFiedler 2025-03-18 14:01:25 +01:00 committed by GitHub
parent 5474b22277
commit 7abcb5e9a7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -15,18 +15,21 @@ class JsonValuePrinter:
def json_lookup_function(val):
if m := ns_pattern.fullmatch(str(val.type.strip_typedefs().name)):
name = m.group('name')
if name and name.startswith('basic_json<') and name.endswith('>'):
m = ns_pattern.fullmatch(str(val["m_data"]['m_type']))
t = m.group('name')
if t and t.startswith('detail::value_t::'):
try:
union_val = val["m_data"]['m_value'][t.removeprefix('detail::value_t::')]
if union_val.type.code == gdb.TYPE_CODE_PTR:
return gdb.default_visualizer(union_val.dereference())
else:
return JsonValuePrinter(union_val)
except Exception:
return JsonValuePrinter(val["m_data"]['m_type'])
name = m.group('name')
if name and name.startswith('basic_json<') and name.endswith('>'):
m_data = val['m_data']
m_type = m_data['m_type']
m = ns_pattern.fullmatch(str(m_type))
t = m.group('name')
prefix = 'detail::value_t::'
if t and t.startswith(prefix):
try:
union_val = m_data['m_value'][t.replace(prefix, '', 1)]
if union_val.type.code == gdb.TYPE_CODE_PTR:
return gdb.default_visualizer(union_val.dereference())
else:
return JsonValuePrinter(union_val)
except Exception:
return JsonValuePrinter(m_type)
gdb.pretty_printers.append(json_lookup_function)