Skip to content

rustdoc-json: impl dyn Trait gets discarded #133719

Open
@aDotInTheVoid

Description

For the following code:

pub trait T1 {
    fn number(&self) -> i32;
}

impl dyn T1 {
    pub fn number_plus_one(&self) {
        self.number() + 1
    }
}

generates

{
  "format_version": 36,
  "includes_private": false,
  "index": {
    "0": {
      "attrs": [],
      "crate_id": 0,
      "deprecation": null,
      "docs": null,
      "id": 0,
      "inner": {"function": { ... }},
      "name": "number",
      "visibility": "default"
    },
    "1": {
      "attrs": [],
      "crate_id": 0,
      "deprecation": null,
      "docs": null,
      "id": 1,
      "inner": {
        "trait": {
          "bounds": [],
          "generics": {"params": [], "where_predicates": []},
          "implementations": [],
          "is_auto": false,
          "is_dyn_compatible": true,
          "is_unsafe": false,
          "items": [0]
        }
      },
      "name": "T1",
      "visibility": "public"
    },
    "2": {
      "attrs": [],
      "crate_id": 0,
      "deprecation": null,
      "docs": null,
      "id": 2,
      "inner": {"module": {"is_crate": true, "is_stripped": false, "items": [1]}},
      "name": "on_dyn_trait",
      "visibility": "public"
    }
  },
  "root": 2
}

(full).

There's nothing included for the number_plus_one method, but there should be.

The HTML backend get this right, so the releavent info is availible in clean:

Image

I'm not sure what's the best way to store this is in the format: Putting it into the implementations field seems wrong, as impl dyn T1 isn't an implementation of T1, but an implementation on dyn T1. I'd love to hear people's thoughts on this.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    A-rustdoc-jsonArea: Rustdoc JSON backendA-trait-objectsArea: trait objects, vtable layoutC-bugCategory: This is a bug.T-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