mirror of
https://github.com/rust-lang/cargo
synced 2024-08-28 11:50:23 +00:00
Auto merge of #9663 - nebkor:master, r=alexcrichton
Add format option to `cargo tree` to print the lib_name Adds a way to have `cargo tree` display the name of the library inside a package dependency, which can differ from the name of the package. Updates the `tree::format` test to test for its proper behavior. Closes #9659
This commit is contained in:
commit
66a6737a0c
|
@ -1,7 +1,9 @@
|
|||
use std::fmt;
|
||||
|
||||
use anyhow::{bail, Error};
|
||||
|
||||
use self::parse::{Parser, RawChunk};
|
||||
use super::{Graph, Node};
|
||||
use anyhow::{bail, Error};
|
||||
use std::fmt;
|
||||
|
||||
mod parse;
|
||||
|
||||
|
@ -11,6 +13,7 @@ enum Chunk {
|
|||
License,
|
||||
Repository,
|
||||
Features,
|
||||
LibName,
|
||||
}
|
||||
|
||||
pub struct Pattern(Vec<Chunk>);
|
||||
|
@ -26,6 +29,7 @@ impl Pattern {
|
|||
RawChunk::Argument("l") => Chunk::License,
|
||||
RawChunk::Argument("r") => Chunk::Repository,
|
||||
RawChunk::Argument("f") => Chunk::Features,
|
||||
RawChunk::Argument("lib") => Chunk::LibName,
|
||||
RawChunk::Argument(a) => {
|
||||
bail!("unsupported pattern `{}`", a);
|
||||
}
|
||||
|
@ -97,6 +101,16 @@ impl<'a> fmt::Display for Display<'a> {
|
|||
Chunk::Features => {
|
||||
write!(fmt, "{}", features.join(","))?;
|
||||
}
|
||||
Chunk::LibName => {
|
||||
if let Some(target) = package
|
||||
.manifest()
|
||||
.targets()
|
||||
.iter()
|
||||
.find(|target| target.is_lib())
|
||||
{
|
||||
write!(fmt, "{}", target.crate_name())?;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -145,6 +145,7 @@ strings will be replaced with the corresponding value:
|
|||
- `{l}` — The package license.
|
||||
- `{r}` — The package repository URL.
|
||||
- `{f}` — Comma-separated list of package features that are enabled.
|
||||
- `{lib}` — The name, as used in a `use` statement, of the package's library.
|
||||
{{/option}}
|
||||
|
||||
{{#option "`--prefix` _prefix_" }}
|
||||
|
|
|
@ -138,6 +138,9 @@ OPTIONS
|
|||
o {f} — Comma-separated list of package features that are
|
||||
enabled.
|
||||
|
||||
o {lib} — The name, as used in a use statement, of the package's
|
||||
library.
|
||||
|
||||
--prefix prefix
|
||||
Sets how each line is displayed. The prefix value can be one of:
|
||||
|
||||
|
|
|
@ -145,6 +145,7 @@ strings will be replaced with the corresponding value:</p>
|
|||
<li><code>{l}</code> — The package license.</li>
|
||||
<li><code>{r}</code> — The package repository URL.</li>
|
||||
<li><code>{f}</code> — Comma-separated list of package features that are enabled.</li>
|
||||
<li><code>{lib}</code> — The name, as used in a <code>use</code> statement, of the package's library.</li>
|
||||
</ul></dd>
|
||||
|
||||
|
||||
|
|
|
@ -186,6 +186,10 @@ strings will be replaced with the corresponding value:
|
|||
.RS 4
|
||||
\h'-04'\(bu\h'+02'\fB{f}\fR \[em] Comma\-separated list of package features that are enabled.
|
||||
.RE
|
||||
.sp
|
||||
.RS 4
|
||||
\h'-04'\(bu\h'+02'\fB{lib}\fR \[em] The name, as used in a \fBuse\fR statement, of the package's library.
|
||||
.RE
|
||||
.RE
|
||||
.sp
|
||||
\fB\-\-prefix\fR \fIprefix\fR
|
||||
|
|
|
@ -1009,6 +1009,23 @@ foo v0.1.0 ([..]/foo)
|
|||
#[cargo_test]
|
||||
fn format() {
|
||||
Package::new("dep", "1.0.0").publish();
|
||||
Package::new("other-dep", "1.0.0").publish();
|
||||
|
||||
Package::new("dep_that_is_awesome", "1.0.0")
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
[package]
|
||||
name = "dep_that_is_awesome"
|
||||
version = "1.0.0"
|
||||
|
||||
[lib]
|
||||
name = "awesome_dep"
|
||||
"#,
|
||||
)
|
||||
.file("src/lib.rs", "pub struct Straw;")
|
||||
.publish();
|
||||
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
|
@ -1021,6 +1038,9 @@ fn format() {
|
|||
|
||||
[dependencies]
|
||||
dep = {version="1.0", optional=true}
|
||||
other-dep = {version="1.0", optional=true}
|
||||
dep_that_is_awesome = {version="1.0", optional=true}
|
||||
|
||||
|
||||
[features]
|
||||
default = ["foo"]
|
||||
|
@ -1028,7 +1048,7 @@ fn format() {
|
|||
bar = []
|
||||
"#,
|
||||
)
|
||||
.file("src/lib.rs", "")
|
||||
.file("src/main.rs", "")
|
||||
.build();
|
||||
|
||||
p.cargo("tree --format <<<{p}>>>")
|
||||
|
@ -1065,8 +1085,21 @@ Caused by:
|
|||
.arg("{p} [{f}]")
|
||||
.with_stdout(
|
||||
"\
|
||||
foo v0.1.0 ([..]/foo) [bar,default,dep,foo]
|
||||
└── dep v1.0.0 []
|
||||
foo v0.1.0 ([..]/foo) [bar,default,dep,dep_that_is_awesome,foo,other-dep]
|
||||
├── dep v1.0.0 []
|
||||
├── dep_that_is_awesome v1.0.0 []
|
||||
└── other-dep v1.0.0 []
|
||||
",
|
||||
)
|
||||
.run();
|
||||
|
||||
p.cargo("tree")
|
||||
.arg("--features=other-dep,dep_that_is_awesome")
|
||||
.arg("--format={lib}")
|
||||
.with_stdout(
|
||||
"
|
||||
├── awesome_dep
|
||||
└── other_dep
|
||||
",
|
||||
)
|
||||
.run();
|
||||
|
|
Loading…
Reference in a new issue