Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
REVIEW
◌ CI pending Lorenz Leutgeb committed 7 months ago
commit 822f58e60db732b42b2a1890df09fb612b573730
parent 6ed56f7029ec8f0ce19efa396fedd63da61db816
1 pending (1 total) View logs
2 files changed +28 -31
modified crates/radicle-cli/src/commands/issue.rs
@@ -197,12 +197,11 @@ pub fn run(args: Args, ctx: impl term::Context) -> anyhow::Result<()> {
            let signer = term::signer(&profile)?;
            issue.label(labels, &signer)?;
        }
-
        Command::List(list_args) => {
-
            let assigned = list_args.assigned.clone();
+
        Command::List(ref list_args) => {
            list(
                issues,
-
                &assigned,
-
                &list_args.state.unwrap_or_default().into(),
+
                &list_args.assigned,
+
                &((&list_args.state).into()),
                &profile,
                args.verbose,
            )?;
modified crates/radicle-cli/src/commands/issue/args.rs
@@ -220,26 +220,26 @@ pub(crate) struct EmptyArgs {

    #[clap(flatten)]
    #[allow(clippy::missing_docs_in_private_items)] // flattened
-
    pub(crate) state: Option<EmptyStateArgs>,
+
    pub(crate) state: EmptyStateArgs,
}

/// Counterpart to [`ListStateArgs`] for the empty subcommand.
-
#[derive(Parser, Debug)]
+
#[derive(Parser, Debug, Default)]
#[group(id = "state", required = false, multiple = false)]
pub(crate) struct EmptyStateArgs {
-
    #[arg(long, group = "state", hide = true)]
+
    #[arg(long, hide = true)]
    #[allow(clippy::missing_docs_in_private_items)] // hidden
    all: bool,

-
    #[arg(long, group = "state", hide = true)]
+
    #[arg(long, hide = true)]
    #[allow(clippy::missing_docs_in_private_items)] // hidden
    open: bool,

-
    #[arg(long, group = "state", hide = true)]
+
    #[arg(long, hide = true)]
    #[allow(clippy::missing_docs_in_private_items)] // hidden
    closed: bool,

-
    #[arg(long, group = "state", hide = true)]
+
    #[arg(long, hide = true)]
    #[allow(clippy::missing_docs_in_private_items)] // hidden
    solved: bool,
}
@@ -255,39 +255,38 @@ pub(crate) struct ListArgs {

    #[clap(flatten)]
    #[allow(clippy::missing_docs_in_private_items)] // flattened
-
    pub(crate) state: Option<ListStateArgs>,
+
    pub(crate) state: ListStateArgs,
}

-
#[derive(Parser, Debug)]
+
#[derive(Parser, Debug, Default)]
#[group(id = "state", required = false, multiple = false)]
pub(crate) struct ListStateArgs {
    /// List all issues
-
    #[arg(long, group = "state")]
+
    #[arg(long)]
    all: bool,

    /// List only open issues (default)
-
    #[arg(long, group = "state")]
+
    #[arg(long)]
    open: bool,

    /// List only closed issues
-
    #[arg(long, group = "state")]
+
    #[arg(long)]
    closed: bool,

    /// List only solved issues
-
    #[arg(long, group = "state")]
+
    #[arg(long)]
    solved: bool,
}

-
impl From<ListStateArgs> for Option<State> {
-
    fn from(args: ListStateArgs) -> Self {
-
        // These are mutually exclusive, guaranteed by clap grouping.
+
impl From<&ListStateArgs> for Option<State> {
+
    fn from(args: &ListStateArgs) -> Self {
        match (args.all, args.open, args.closed, args.solved) {
-
            (true, _, _, _) => None,
-
            (_, true, _, _) => Some(State::Open),
-
            (_, _, true, _) => Some(State::Closed {
+
            (true, false, false, false) => None,
+
            (false, true, false, false) | (false, false, false, false) => Some(State::Open),
+
            (false, false, true, false) => Some(State::Closed {
                reason: CloseReason::Other,
            }),
-
            (_, _, _, true) => Some(State::Closed {
+
            (false, false, false, true) => Some(State::Closed {
                reason: CloseReason::Solved,
            }),
            _ => unreachable!(),
@@ -297,7 +296,12 @@ impl From<ListStateArgs> for Option<State> {

impl From<EmptyStateArgs> for ListStateArgs {
    fn from(args: EmptyStateArgs) -> Self {
-
        Self { all: args.all, open: args.open, closed: args.closed, solved: args.solved }
+
        Self {
+
            all: args.all,
+
            open: args.open,
+
            closed: args.closed,
+
            solved: args.solved,
+
        }
    }
}

@@ -305,17 +309,11 @@ impl From<EmptyArgs> for ListArgs {
    fn from(args: EmptyArgs) -> Self {
        Self {
            assigned: args.assigned,
-
            state: args.state.map(Into::into),
+
            state: args.state.into(),
        }
    }
}

-
impl Default for ListStateArgs {
-
    fn default() -> Self {
-
        Self { all: false, open: true, closed: false, solved: false }
-
    }
-
}
-

/// Arguments for the [`Command::Comment`] subcommand.
#[derive(Parser, Debug)]
pub(crate) struct CommentArgs {