extern-location
MCP for this feature: #303
The unused-extern-crates
lint reports when a crate was specified on the rustc
command-line with --extern name=path
but no symbols were referenced in it.
This is useful to know, but it's hard to map that back to a specific place a user
or tool could fix (ie, to remove the unused dependency).
The --extern-location
flag allows the build system to associate a location with
the --extern
option, which is then emitted as part of the diagnostics. This location
is abstract and just round-tripped through rustc; the compiler never attempts to
interpret it in any way.
There are two supported forms of location: a bare string, or a blob of json:
--extern-location foo=raw:Makefile:123
would associate the raw stringMakefile:123
--extern-location 'bar=json:{"target":"//my_project:library","dep":"//common:serde"}
would associate the json structure with--extern bar=<path>
, indicating which dependency of which rule introduced the unused extern crate.
This primarily intended to be used with tooling - for example a linter which can automatically remove unused dependencies - rather than being directly presented to users.
raw
locations are presented as part of the normal rendered diagnostics and included in
the json form. json
locations are only included in the json form of diagnostics,
as a tool_metadata
field. For raw
locations tool_metadata
is simply a json string,
whereas json
allows the rustc invoker to fully control its form and content.