<div dir="ltr">Hi,<div><br></div><div style>I recently decided to convert the argument parsing of a llvm project of mine to the official LLVM CommandLine library. Specifically, my program takes as as the first positional argument a command, which has to be in a set of commands (similar to git).  EG </div>

<div style><br></div><div style>myprog [options] <command> [command's arguments]</div><div style><br></div><div style>In LLVM CommandLine lingo, I needed a Positional argument with a Enum Value mapping.  Unfortunately for me, positionals and value mapping don't mix.</div>

<div style><br></div><div style>This:</div><div style><br></div><div style><div>static cl::opt<Commands></div><div>Command(cl::Positional, </div><div><span class="" style="white-space:pre">       </span>cl::Required,</div>

<div><span class="" style="white-space:pre">    </span>cl::init(INVALID),</div><div><span class="" style="white-space:pre"> </span>cl::desc("<command>"),</div><div><span class="" style="white-space:pre">     </span>cl::value_desc("Commands:"), </div>

<div>cl::values(....));</div><div><br></div><div style>compiles and runs, but the program doesn't parse the <command> argument in the expected way.  Rather than do the smart thing, which would have been to write a custom parser class, I decided to dig into CommandLine and fix the problem at the source.  And after spending way too long stepping through CommandLine, I have a ugly hack that allows the cl::Positional flag  and values() to play nicely together.</div>

<div style><br></div><div style>So my questions are:</div><div style><br></div><div style>1. Would anyone find this useful - should I submit my changes to the trunk?</div><div style><br></div><div style>.. and if the answer to 1. is non-negative</div>

<div style><br></div><div style>2. How should I test the changes? They work for my limited use cases, but I have no idea I didn't break existing LLVM tools.</div><div style><br></div><div style>Thanks</div></div></div>