doc: make it clear when DT properties are deprecated

Devicetree properties may be deprecated. Make deprecated properties
more prominent in the generated bindings documentation as follows:

  1. For deprecated node-specific properties, make a new tab which
     only contains the deprecated properties

  2. For deprecated child-binding properties, ensure a line
     mentioning derpecation is in the property details

  3. For deprecated 'base' binding properties, do the same thing as
     child-bindings. Note that there aren't any such properties,
     but they'd fall in this bucket if we add any later on.

Signed-off-by: Martí Bolívar <marti.bolivar@nordicsemi.no>
This commit is contained in:
Martí Bolívar 2021-02-03 17:19:21 -08:00 committed by Anas Nashif
parent 71fd58ccac
commit 1d439efbb3

View file

@ -442,18 +442,27 @@ def print_top_level_properties(binding, base_names, string_io):
#
# The 'base_names' set contains all the base.yaml properties.
def prop_table(filter_fn):
def prop_table(filter_fn, deprecated):
# Get a properly formatted and indented table of properties.
specs = [prop_spec for prop_spec in binding.prop2specs.values()
if filter_fn(prop_spec)]
indent = ' ' * 14
if specs:
temp_io = io.StringIO()
print_property_table(specs, temp_io)
print_property_table(specs, temp_io, deprecated=deprecated)
return textwrap.indent(temp_io.getvalue(), indent)
return indent + '(None)'
def node_props_filter(prop_spec):
return prop_spec.name not in base_names and not prop_spec.deprecated
def deprecated_node_props_filter(prop_spec):
return prop_spec.name not in base_names and prop_spec.deprecated
def base_props_filter(prop_spec):
return prop_spec.name in base_names
if binding.child_binding:
print_block('''\
Top level properties
@ -467,6 +476,7 @@ def print_top_level_properties(binding, base_names, string_io):
properties in the following sections.
''', string_io)
print_block(f'''\
.. tabs::
@ -474,7 +484,13 @@ def print_top_level_properties(binding, base_names, string_io):
Properties not inherited from the base binding file.
{prop_table(lambda prop_spec: prop_spec.name not in base_names)}
{prop_table(node_props_filter, False)}
.. group-tab:: Deprecated node specific properties
Deprecated properties not inherited from the base binding file.
{prop_table(deprecated_node_props_filter, False)}
.. group-tab:: Base properties
@ -482,7 +498,7 @@ def print_top_level_properties(binding, base_names, string_io):
common properties that may be set on many nodes. Not all of these
may apply to the "{binding.compatible}" compatible.
{prop_table(lambda prop_spec: prop_spec.name in base_names)}
{prop_table(base_props_filter, True)}
''', string_io)
else:
@ -505,13 +521,19 @@ def print_child_binding_properties(binding, string_io):
title = f'{level_string} node properties'
underline = '=' * len(title)
print(f'{title}\n{underline}\n', file=string_io)
print_property_table(child.prop2specs.values(), string_io)
print_property_table(child.prop2specs.values(), string_io,
deprecated=True)
child = child.child_binding
level += 1
def print_property_table(prop_specs, string_io):
def print_property_table(prop_specs, string_io, deprecated=False):
# Writes a table of properties based on 'prop_specs', an iterable
# of edtlib.PropertySpec objects, to 'string_io'.
#
# If 'deprecated' is true and the property is deprecated, an extra
# line is printed mentioning that fact. We allow this to be turned
# off for tables where all properties are deprecated, so it's
# clear from context.
# Table header.
print_block('''\
@ -555,6 +577,9 @@ def print_property_table(prop_specs, string_io):
details += (f'\n\nSee {zref("dt-important-props")} for more '
'information.')
if deprecated and prop_spec.deprecated:
details += '\n\nThis property is **deprecated**.'
return f"""\
* - ``{prop_spec.name}``
- ``{prop_spec.type}``