These are cases which could be detected by clap, and potentially warn at compile time. Maybe even with a nice web URL to more info.

Abrv. Syntax

First, a little about the syntax to understand the setup of rule. This syntax will make each rule more concise so we don't have to write an entire clap definition.

Arg Types

  • --opt is an option
  • --flag is a flag
  • # (i.e. 1 or 2) is a positional argument
  • val is an option value

Modifiers

Can be used on val or Arg types

  • *: zero or more
  • +: one or more
  • ?: zero or one
  • {#,#}: # to # times (i.e. {1,4} is one to four times)
  • <>: required
  • =: requires equals
  • Ends in ,: requires delimiter
  • (foo,bar): values can only be foo or bar

--opt val? 1

Ambiguous Uses

$ prog --opt foo
# is foo option val or positional?

Non-Ambiguous Uses

$ prog 1 --opt
$ prog --opt -- 1

Fixes

Require equals on --opt

$ prog --opt foo
# foo is positional

$ prog --opt=val foo

--opt val+ 1

Ambiguous Uses

$ prog --opt foo bar
# is bar option val or positional?

Non-Ambiguous Uses

$ prog 1 --opt val
$ prog --opt val -- 1

Fixes

--opt only one val per occurrence

$ prog --opt foo bar
# bar is positional

$ prog --opt val bar --opt foo
# bar is positional