Skip to content

Rustdoc-Json: Dangling ID when foreign trait method doc linkes to foreign enum varant. #105025

Closed
@aDotInTheVoid

Description

@aDotInTheVoid
// --- src/test/rustdoc-json/intra-doc-links/foreign_variant.rs ---
// aux-build: enum_variant_in_trait_method.rs

extern crate enum_variant_in_trait_method;
pub struct Local;
impl enum_variant_in_trait_method::Trait for Local {}

// --- src/test/rustdoc-json/intra-doc-links/auxiliary/enum_variant_in_trait_method.rs
pub trait Trait {
    /// [`Enum::Variant`]
    fn method() {}
}

pub enum Enum {
    Variant,
}

Produces (abridged):

{
  "crate_version": null,
  "external_crates": { ... },
  "format_version": 23,
  "includes_private": false,
  "index": {
    "0:0:1568": {
      "crate_id": 0,
      "docs": null,
      "id": "0:0:1568",
      "inner": {"is_crate": true, "is_stripped": false, "items": ["0:4:1566"]},
      "kind": "module",
      "links": {},
      "name": "foreign_variant"
    },
    "0:4:1566": {
      "crate_id": 0,
      "docs": null,
      "id": "0:4:1566",
      "inner": {
        "generics": {"params": [], "where_predicates": []},
        "impls": [ ..., "0:6"],
        "kind": "unit"
      },
      "kind": "struct",
      "links": {},
      "name": "Local"
    },
    "0:6": {
      "crate_id": 0,
      "docs": null,
      "id": "0:6",
      "inner": {
        "blanket_impl": null,
        "for": {
          "inner": {"args": {"angle_bracketed": {"args": [], "bindings": []}}, "id": "0:4:1566", "name": "Local"},
          "kind": "resolved_path"
        },
        "generics": {"params": [], "where_predicates": []},
        "is_unsafe": false,
        "items": [],
        "negative": false,
        "provided_trait_methods": ["method"],
        "synthetic": false,
        "trait": {"args": {"angle_bracketed": {"args": [], "bindings": []}}, "id": "20:3:1567", "name": "Trait"}
      },
      "kind": "impl",
      "links": {},
      "name": null
    },
    "20:3:1567": {
      "crate_id": 20,
      "docs": null,
      "id": "20:3:1567",
      "inner": {
        "bounds": [],
        "generics": {"params": [], "where_predicates": []},
        "implementations": [],
        "is_auto": false,
        "is_unsafe": false,
        "items": ["20:4:4198"]
      },
      "kind": "trait",
      "links": {},
      "name": "Trait"
    },
    "20:4:4198": {
      "crate_id": 20,
      "docs": "[`Enum::Variant`]",
      "id": "20:4:4198",
      "inner": {
        "decl": {"c_variadic": false, "inputs": [], "output": null},
        "generics": {"params": [], "where_predicates": []},
        "has_body": true,
        "header": {"abi": "Rust", "async": false, "const": false, "unsafe": false}
      },
      "kind": "function",
      "links": {"`Enum::Variant`": "20:6:65935"},
      "name": "method"
    }
  },
  "paths": {
    "0:0:1568": {"crate_id": 0, "kind": "module", "path": ["foreign_variant"]},
    "0:4:1566": {"crate_id": 0, "kind": "struct", "path": ["foreign_variant", "Local"]},
    "20:0:1565": {"crate_id": 20, "kind": "module", "path": ["enum_variant_in_trait_method"]},
    "20:3:1567": {"crate_id": 20, "kind": "trait", "path": ["enum_variant_in_trait_method", "Trait"]},
    "20:5:1826": {"crate_id": 20, "kind": "enum", "path": ["enum_variant_in_trait_method", "Enum"]},
    "2:0:481": {"crate_id": 2, "kind": "module", "path": ["core"]}
  },
  "root": "0:0:1568"
}

Causes where "links": {"Enum::Variant": "20:6:65935"}, is dangling, because the foreign enum variant wasn't inlined, but the local one was (and enum variants don't appear in path)

Caught by #105015, and blocks it from landing

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-rustdoc-jsonArea: Rustdoc JSON backendT-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions