-
-
Notifications
You must be signed in to change notification settings - Fork 14.1k
Description
Hi!
I have been playing around with rustdoc's JSON output for the past few weeks and I have now stumbled on a road block that I can't easily sort out on my own.
The problem
I have a function signature that looks like this:
pub fn extract_path(
_inner: pavex_runtime::http::Request<pavex_runtime::hyper::body::Body>,
) -> PathBuf {
todo!()
}where pavex_runtime is a third-party dependency that does nothing more than a public re-export:
//! pavex_runtime/src/lib.rs
pub use hyper;
pub use http;If I look at that function in the JSON output for the relevant crate, I see this item (stripping out irrelevant fields):
{
"id": "0:18:1598",
"crate_id": 0,
"name": "extract_path",
"kind": "function",
"inner": {
"decl": {
"inputs": [
[
"_inner",
{
"kind": "resolved_path",
"inner": {
"name": "pavex_runtime::http::Request",
"id": "31:1361:1602",
}
}
}
]
],
}The name in inner hints at the fact that we depend on http::Request through a re-export via pavex_runtime.
If I follow the id, I instead go directly to the canonical item definition in http:
"31:1361:1602": {
"crate_id": 31,
"path": [
"http",
"request",
"Request"
],
"kind": "struct"
},name seems to be the only place where rustdoc exposes the information that the dependency from my crate to http flows through a re-export in pavex_runtime.
Further experiments seem to suggest that name is set to whatever is used as the type name alias in the function definition.
E.g. by rewriting the definition as
use pavex_runtime::http::Request;
pub fn extract_path(
_inner: Request<pavex_runtime::hyper::body::Body>,
) -> PathBuf {
todo!()
}the name now shows up as Request.
This would imply that there is no way to reliably detect that extract_path (and the crate where it is defined) depend on http through a re-export in pavex_runtime.
What I expect to see
I'd expect the extract_path function item to refer, in its parameter list, to some kind of re-export item kind that is associated with pavex_runtime instead of going directly to http.
E.g. an item of kind "import".
This would allow consumers of the JSON representation to navigate up to the source type (http::Request) while retaining the information that the current crate does not depend on it directly (via pavex_runtime).
Other relevant information
Latest nightly, format version 18.