Skip to content

Commit

Permalink
Merge pull request #84618 from YuriSizov/docs-resolve-method-referenc…
Browse files Browse the repository at this point in the history
…e-collisions

Resolve collisions in reference anchors added for methods
  • Loading branch information
akien-mga committed Nov 9, 2023
2 parents 26f1c50 + 0924ae0 commit e769a75
Showing 1 changed file with 28 additions and 14 deletions.
42 changes: 28 additions & 14 deletions doc/tools/make_rst.py
Original file line number Diff line number Diff line change
Expand Up @@ -1224,7 +1224,11 @@ def make_rst_class(class_def: ClassDef, state: State, dry_run: bool, output_dir:
# Create method signature and anchor point.

if i == 0:
f.write(f".. _class_{class_name}_method_{m.name}:\n\n")
method_qualifier = ""
if m.name.startswith("_"):
method_qualifier = "private_"

f.write(f".. _class_{class_name}_{method_qualifier}method_{m.name}:\n\n")

f.write(".. rst-class:: classref-method\n\n")

Expand Down Expand Up @@ -1388,6 +1392,11 @@ def make_method_signature(
for parameter in definition.parameters:
out += f"_{parameter.type_name.type_name}"
out += f">` "
elif ref_type == "method":
ref_type_qualifier = ""
if definition.name.startswith("_"):
ref_type_qualifier = "private_"
out += f":ref:`{definition.name}<class_{class_def.name}_{ref_type_qualifier}{ref_type}_{definition.name}>` "
else:
out += f":ref:`{definition.name}<class_{class_def.name}_{ref_type}_{definition.name}>` "
else:
Expand Down Expand Up @@ -1915,19 +1924,21 @@ def format_text_block(
)

# Default to the tag command name. This works by default for most tags,
# but member and theme_item have special cases.
# but method, member, and theme_item have special cases.
ref_type = "_{}".format(tag_state.name)
if tag_state.name == "member":
ref_type = "_property"

if target_class_name in state.classes:
class_def = state.classes[target_class_name]

if tag_state.name == "method" and target_name not in class_def.methods:
print_error(
f'{state.current_class}.xml: Unresolved method reference "{link_target}" in {context_name}.',
state,
)
if tag_state.name == "method":
if target_name.startswith("_"):
ref_type = "_private_method"

if target_name not in class_def.methods:
print_error(
f'{state.current_class}.xml: Unresolved method reference "{link_target}" in {context_name}.',
state,
)

elif tag_state.name == "constructor" and target_name not in class_def.constructors:
print_error(
Expand All @@ -1941,11 +1952,14 @@ def format_text_block(
state,
)

elif tag_state.name == "member" and target_name not in class_def.properties:
print_error(
f'{state.current_class}.xml: Unresolved member reference "{link_target}" in {context_name}.',
state,
)
elif tag_state.name == "member":
ref_type = "_property"

if target_name not in class_def.properties:
print_error(
f'{state.current_class}.xml: Unresolved member reference "{link_target}" in {context_name}.',
state,
)

elif tag_state.name == "signal" and target_name not in class_def.signals:
print_error(
Expand Down

0 comments on commit e769a75

Please sign in to comment.