diff --git a/src/builder/command.rs b/src/builder/command.rs index ac5b5469edf..549cd4e4213 100644 --- a/src/builder/command.rs +++ b/src/builder/command.rs @@ -171,8 +171,12 @@ impl<'help> Command<'help> { /// ``` /// [argument]: Arg #[must_use] - pub fn arg>>(mut self, a: A) -> Self { - let mut arg = a.into(); + pub fn arg>>(self, a: A) -> Self { + let arg = a.into(); + self.arg_internal(arg) + } + + fn arg_internal(mut self, mut arg: Arg<'help>) -> Self { if let Some(current_disp_ord) = self.current_disp_ord.as_mut() { if !arg.is_positional() && arg.provider != ArgProvider::Generated { let current = *current_disp_ord; @@ -401,8 +405,12 @@ impl<'help> Command<'help> { /// ``` #[inline] #[must_use] - pub fn subcommand>(mut self, subcmd: S) -> Self { - let mut subcmd = subcmd.into(); + pub fn subcommand>(self, subcmd: S) -> Self { + let subcmd = subcmd.into(); + self.subcommand_internal(subcmd) + } + + fn subcommand_internal(mut self, mut subcmd: Self) -> Self { if let Some(current_disp_ord) = self.current_disp_ord.as_mut() { let current = *current_disp_ord; subcmd.disp_ord.get_or_insert(current);