Create a section node that documents a RangeField config field.

    Parameters
    ----------
    field_name : `str`
        Name of the configuration field (the attribute name of on the config
        class).
    field : ``lsst.pex.config.RangeField``
        A configuration field.
    field_id : `str`
        Unique identifier for this field. This is used as the id and name of
        the section node. with a -section suffix
    state : ``docutils.statemachine.State``
        Usually the directive's ``state`` attribute.
    lineno (`int`)
        Usually the directive's ``lineno`` attribute.

    Returns
    -------
    ``docutils.nodes.section``
        Section containing documentation nodes for the RangeField.

def format_rangefield_nodes(field_name, field, field_id, state, lineno):
    """Create a section node that documents a RangeField config field.

    Parameters
    ----------
    field_name : `str`
        Name of the configuration field (the attribute name of on the config
        class).
    field : ``lsst.pex.config.RangeField``
        A configuration field.
    field_id : `str`
        Unique identifier for this field. This is used as the id and name of
        the section node. with a -section suffix
    state : ``docutils.statemachine.State``
        Usually the directive's ``state`` attribute.
    lineno (`int`)
        Usually the directive's ``lineno`` attribute.

    Returns
    -------
    ``docutils.nodes.section``
        Section containing documentation nodes for the RangeField.
    """
    # Field type
    field_type_item = nodes.definition_list_item()
    field_type_item.append(nodes.term(text="Field type"))
    field_type_item_content = nodes.definition()
    field_type_item_content_p = nodes.paragraph()
    field_type_item_content_p += make_python_xref_nodes_for_type(
        field.dtype,
        state,
        hide_namespace=False)[0].children[0]
    field_type_item_content_p += nodes.Text(' ', ' ')
    field_type_item_content_p += make_python_xref_nodes_for_type(
        type(field),
        state,
        hide_namespace=True)[0].children[0]
    if field.optional:
        field_type_item_content_p += nodes.Text(' (optional)', ' (optional)')
    field_type_item_content += field_type_item_content_p
    field_type_item += field_type_item_content

    # Format definition list item for the range
    range_node = nodes.definition_list_item()
    range_node += nodes.term(text='Range')
    range_node_def = nodes.definition()
    range_node_def += nodes.paragraph(text=field.rangeString)
    range_node += range_node_def

    # Definition list for key-value metadata
    dl = nodes.definition_list()
    dl += create_default_item_node(field, state)
    dl += field_type_item
    dl += range_node

    # Doc for this field, parsed as rst
    desc_node = create_description_node(field, state)

    # Title for configuration field
    title = create_title_node(field_name, field, field_id, state, lineno)

    return [title, dl, desc_node]