Skip to content

Rustdoc-Json: Reference to missing item with 2 glob imports #100973

Closed
@aDotInTheVoid

Description

@aDotInTheVoid
#![feature(no_core)]
#![no_core]
mod m1 {
    pub fn f() {}
}
mod m2 {
    pub fn f(_: u8) {}
}
pub use m2::*;
pub use m1::*;

Produces an output with references to non existant items: 0:3:1564 and 0:1:1563

{
  "crate_version": null,
  "external_crates": {},
  "format_version": 18,
  "includes_private": false,
  "index": {
    "0:0:1565": {
      "crate_id": 0,
      "id": "0:0:1565",
      "inner": {"is_crate": true, "is_stripped": false, "items": ["0:5", "0:6"]},
      "kind": "module",
      "name": "glob_private_simple",
      "visibility": "public"
    },
    "0:5": {
      "crate_id": 0,
      "id": "0:5",
      "inner": {"glob": true, "id": "0:3:1564", "name": "m2", "source": "m2"},
      "kind": "import",
      "name": null,
      "visibility": "public"
    },
    "0:6": {
      "crate_id": 0,
      "id": "0:6",
      "inner": {"glob": true, "id": "0:1:1563", "name": "m1", "source": "m1"},
      "kind": "import",
      "name": null,
      "visibility": "public"
    }
  },
  "root": "0:0:1565"
}
Full
{
  "crate_version": null,
  "external_crates": {},
  "format_version": 18,
  "includes_private": false,
  "index": {
    "0:0:1565": {
      "attrs": ["#![feature(no_core)]", "#![no_core]"],
      "crate_id": 0,
      "deprecation": null,
      "docs": null,
      "id": "0:0:1565",
      "inner": {"is_crate": true, "is_stripped": false, "items": ["0:5", "0:6"]},
      "kind": "module",
      "links": {},
      "name": "glob_private_simple",
      "span": {
        "begin": [1, 0],
        "end": [12, 14],
        "filename": "/home/nixon/dev/rust/rust/src/test/rustdoc-json/reexport/glob_private_simple.rs"
      },
      "visibility": "public"
    },
    "0:5": {
      "attrs": [],
      "crate_id": 0,
      "deprecation": null,
      "docs": null,
      "id": "0:5",
      "inner": {"glob": true, "id": "0:3:1564", "name": "m2", "source": "m2"},
      "kind": "import",
      "links": {},
      "name": null,
      "span": {
        "begin": [11, 0],
        "end": [11, 14],
        "filename": "/home/nixon/dev/rust/rust/src/test/rustdoc-json/reexport/glob_private_simple.rs"
      },
      "visibility": "public"
    },
    "0:6": {
      "attrs": [],
      "crate_id": 0,
      "deprecation": null,
      "docs": null,
      "id": "0:6",
      "inner": {"glob": true, "id": "0:1:1563", "name": "m1", "source": "m1"},
      "kind": "import",
      "links": {},
      "name": null,
      "span": {
        "begin": [12, 0],
        "end": [12, 14],
        "filename": "/home/nixon/dev/rust/rust/src/test/rustdoc-json/reexport/glob_private_simple.rs"
      },
      "visibility": "public"
    }
  },
  "paths": {"0:0:1565": {"crate_id": 0, "kind": "module", "path": ["glob_private_simple"]}},
  "root": "0:0:1565"
}

If you remove one of the imports, everything is fine

#![feature(no_core)]
#![no_core]
mod m1 {
    pub fn f() {}
}
mod m2 {
    pub fn f(_: u8) {}
}
pub use m2::*;
{
  "crate_version": null,
  "external_crates": {},
  "format_version": 18,
  "includes_private": false,
  "index": {
    "0:0:1565": {
      "crate_id": 0,
      "id": "0:0:1565",
      "inner": {"is_crate": true, "is_stripped": false, "items": ["0:5"]},
      "kind": "module",
      "name": "glob_private_simple",
      "visibility": "public"
    },
    "0:3:1564": {
      "crate_id": 0,
      "id": "0:3:1564",
      "inner": {"is_crate": false, "is_stripped": true, "items": ["0:4:630"]},
      "kind": "module",
      "name": "m2",
      "visibility": "crate"
    },
    "0:4:630": {
      "crate_id": 0,
      "id": "0:4:630",
      "inner": { ... },
      "kind": "function",
      "name": "f",
      "visibility": "public"
    },
    "0:5": {
      "crate_id": 0,
      "id": "0:5",
      "inner": {"glob": true, "id": "0:3:1564", "name": "m2", "source": "m2"},
      "kind": "import",
      "name": null,
      "visibility": "public"
    }
  },
  "root": "0:0:1565"
}
Full
{
  "crate_version": null,
  "external_crates": {},
  "format_version": 18,
  "includes_private": false,
  "index": {
    "0:0:1565": {
      "attrs": ["#![feature(no_core)]", "#![no_core]"],
      "crate_id": 0,
      "deprecation": null,
      "docs": null,
      "id": "0:0:1565",
      "inner": {"is_crate": true, "is_stripped": false, "items": ["0:5"]},
      "kind": "module",
      "links": {},
      "name": "glob_private_simple",
      "span": {
        "begin": [1, 0],
        "end": [11, 14],
        "filename": "/home/nixon/dev/rust/rust/src/test/rustdoc-json/reexport/glob_private_simple.rs"
      },
      "visibility": "public"
    },
    "0:3:1564": {
      "attrs": [],
      "crate_id": 0,
      "deprecation": null,
      "docs": null,
      "id": "0:3:1564",
      "inner": {"is_crate": false, "is_stripped": true, "items": ["0:4:630"]},
      "kind": "module",
      "links": {},
      "name": "m2",
      "span": {
        "begin": [7, 0],
        "end": [7, 6],
        "filename": "/home/nixon/dev/rust/rust/src/test/rustdoc-json/reexport/glob_private_simple.rs"
      },
      "visibility": "crate"
    },
    "0:4:630": {
      "attrs": [],
      "crate_id": 0,
      "deprecation": null,
      "docs": null,
      "id": "0:4:630",
      "inner": {
        "decl": {
          "c_variadic": false,
          "inputs": [["_", {"inner": "u8", "kind": "primitive"}]],
          "output": null
        },
        "generics": {"params": [], "where_predicates": []},
        "header": {"abi": "Rust", "async": false, "const": false, "unsafe": false}
      },
      "kind": "function",
      "links": {},
      "name": "f",
      "span": {
        "begin": [8, 4],
        "end": [8, 22],
        "filename": "/home/nixon/dev/rust/rust/src/test/rustdoc-json/reexport/glob_private_simple.rs"
      },
      "visibility": "public"
    },
    "0:5": {
      "attrs": [],
      "crate_id": 0,
      "deprecation": null,
      "docs": null,
      "id": "0:5",
      "inner": {"glob": true, "id": "0:3:1564", "name": "m2", "source": "m2"},
      "kind": "import",
      "links": {},
      "name": null,
      "span": {
        "begin": [11, 0],
        "end": [11, 14],
        "filename": "/home/nixon/dev/rust/rust/src/test/rustdoc-json/reexport/glob_private_simple.rs"
      },
      "visibility": "public"
    }
  },
  "paths": {"0:0:1565": {"crate_id": 0, "kind": "module", "path": ["glob_private_simple"]}},
  "root": "0:0:1565"
}

This should have been caught by check_missing_items.py, but wasn't. Instead is was caught by jsondoclint, a rust based replacement (PR soon).

@rustbot modify labels: +A-rustdoc-json +T-rustdoc

Metadata

Metadata

Assignees

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