hive-forge: let pr reviews take --at and -m text that starts with a hyphen
This commit is contained in:
parent
c1bb54b818
commit
de3c5cbb65
2 changed files with 35 additions and 2 deletions
|
|
@ -83,7 +83,7 @@ hive-forge pr timeline 42 # review rows list their line comment
|
||||||
hive-forge pr reviews 42 --approve # submit APPROVED review
|
hive-forge pr reviews 42 --approve # submit APPROVED review
|
||||||
hive-forge pr reviews 42 --request-changes -m "msg" # submit REQUEST_CHANGES review
|
hive-forge pr reviews 42 --request-changes -m "msg" # submit REQUEST_CHANGES review
|
||||||
hive-forge pr reviews 42 --comment -m "msg" # submit COMMENT review
|
hive-forge pr reviews 42 --comment -m "msg" # submit COMMENT review
|
||||||
hive-forge pr reviews 42 --request-changes -m "msg" --at src/a.rs:12 "off by one" --at src/b.rs:3 "why?" # one review carrying line comments; LINE is the new-file line `pr diff --numbered` prints
|
hive-forge pr reviews 42 --request-changes -m "msg" --at src/a.rs:12 "off by one" --at src/b.rs:3 "why?" # one review carrying line comments; LINE is the new-file line `pr diff --numbered` prints; the text of `--at` and `-m` may start with a hyphen (a markdown bullet)
|
||||||
hive-forge pr assign-reviewer 42 argus # set argus as a requested reviewer on the PR
|
hive-forge pr assign-reviewer 42 argus # set argus as a requested reviewer on the PR
|
||||||
hive-forge pr assign-reviewer 42 argus --remove # withdraw the request; fails if argus is still listed afterwards (a reviewer who already reviewed stays listed)
|
hive-forge pr assign-reviewer 42 argus --remove # withdraw the request; fails if argus is still listed afterwards (a reviewer who already reviewed stays listed)
|
||||||
hive-forge pr assign-committer 42 damocles # add damocles to the PR's assignee list
|
hive-forge pr assign-committer 42 damocles # add damocles to the PR's assignee list
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ pub struct Args {
|
||||||
|
|
||||||
/// Optional body / message for the review (used with --approve,
|
/// Optional body / message for the review (used with --approve,
|
||||||
/// --request-changes, or --comment).
|
/// --request-changes, or --comment).
|
||||||
#[arg(long, short = 'm')]
|
#[arg(long, short = 'm', allow_hyphen_values = true)]
|
||||||
body: Option<String>,
|
body: Option<String>,
|
||||||
|
|
||||||
/// An inline comment on a line of the new file: `--at path:LINE "text"`.
|
/// An inline comment on a line of the new file: `--at path:LINE "text"`.
|
||||||
|
|
@ -40,6 +40,7 @@ pub struct Args {
|
||||||
#[arg(
|
#[arg(
|
||||||
long,
|
long,
|
||||||
num_args = 2,
|
num_args = 2,
|
||||||
|
allow_hyphen_values = true,
|
||||||
value_names = ["PATH:LINE", "TEXT"],
|
value_names = ["PATH:LINE", "TEXT"],
|
||||||
action = clap::ArgAction::Append,
|
action = clap::ArgAction::Append,
|
||||||
conflicts_with = "only",
|
conflicts_with = "only",
|
||||||
|
|
@ -398,6 +399,38 @@ mod tests {
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Args` parsed the way the binary does, from `pr reviews`'s own argv.
|
||||||
|
fn parse(argv: &[&str]) -> Args {
|
||||||
|
#[derive(clap::Parser)]
|
||||||
|
struct Cli {
|
||||||
|
#[command(flatten)]
|
||||||
|
args: Args,
|
||||||
|
}
|
||||||
|
use clap::Parser as _;
|
||||||
|
Cli::try_parse_from(std::iter::once("reviews").chain(argv.iter().copied()))
|
||||||
|
.unwrap_or_else(|e| panic!("{argv:?}: {e}"))
|
||||||
|
.args
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn a_comment_or_body_may_start_with_a_hyphen() {
|
||||||
|
// A markdown bullet is a natural way to start a finding.
|
||||||
|
let got = parse(&[
|
||||||
|
"7",
|
||||||
|
"--comment",
|
||||||
|
"-m",
|
||||||
|
"- summary",
|
||||||
|
"--at",
|
||||||
|
"a.rs:1",
|
||||||
|
"- first",
|
||||||
|
"--at",
|
||||||
|
"b.rs:2",
|
||||||
|
"second",
|
||||||
|
]);
|
||||||
|
assert_eq!(got.body.as_deref(), Some("- summary"));
|
||||||
|
assert_eq!(got.at, ["a.rs:1", "- first", "b.rs:2", "second"]);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn at_pairs_become_new_file_line_comments() {
|
fn at_pairs_become_new_file_line_comments() {
|
||||||
let got = parse_inline_comments(&at(&[
|
let got = parse_inline_comments(&at(&[
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue