perf: Extract non-generic part of App::new()

Saves 5K.
This commit is contained in:
Jan Verbeek 2022-01-31 00:18:55 +01:00
parent 7774a8ee8a
commit 778bcf2ecc

View file

@ -116,27 +116,33 @@ impl<'help> App<'help> {
/// # ; /// # ;
/// ``` /// ```
pub fn new<S: Into<String>>(name: S) -> Self { pub fn new<S: Into<String>>(name: S) -> Self {
let name = name.into(); /// The actual implementation of `new`, non-generic to save code size.
///
App { /// If we don't do this rustc will unnecessarily generate multiple versions
id: Id::from(&*name), /// of this code.
name, fn new_inner<'help>(name: String) -> App<'help> {
..Default::default() App {
id: Id::from(&*name),
name,
..Default::default()
}
.arg(
Arg::new("help")
.long("help")
.help("Print help information")
.global(true)
.generated(),
)
.arg(
Arg::new("version")
.long("version")
.help("Print version information")
.global(true)
.generated(),
)
} }
.arg(
Arg::new("help") new_inner(name.into())
.long("help")
.help("Print help information")
.global(true)
.generated(),
)
.arg(
Arg::new("version")
.long("version")
.help("Print version information")
.global(true)
.generated(),
)
} }
/// Adds an [argument] to the list of valid possibilities. /// Adds an [argument] to the list of valid possibilities.