https://github.com/hhpack/getopt
Option parsing in Hack
https://github.com/hhpack/getopt
cli hacklang hhvm option-parser
Last synced: about 2 months ago
JSON representation
Option parsing in Hack
- Host: GitHub
- URL: https://github.com/hhpack/getopt
- Owner: hhpack
- License: mit
- Created: 2015-12-20T08:06:20.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2019-04-15T03:30:42.000Z (almost 7 years ago)
- Last Synced: 2024-05-05T07:22:19.495Z (almost 2 years ago)
- Topics: cli, hacklang, hhvm, option-parser
- Language: Shell
- Size: 125 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# getopt
[](https://packagist.org/packages/hhpack/getopt)
[](https://circleci.com/gh/hhpack/getopt/tree/master)
[](https://www.versioneye.com/user/projects/5684c257eb4f47003000042e)
## Basic usage
The method of parsing command line arguments is as follows.
Define an option that takes no arguments, use the **on** function.
Define an option to take one argument, use the **take_on** function.
```hack
use HHPack\Getopt as cli;
final class Options {
public bool $help = false;
public bool $version = false;
public string $fileName = 'test';
}
$options = new Options();
$parser = cli\optparser([
cli\take_on([ '-n', '--name' ], 'NAME', 'file name', ($name) ==> { $options->fileName = $name; }),
cli\on([ '-h', '--help' ], 'display help message', () ==> { $options->help = true; }),
cli\on([ '-v', '--version' ], 'display version', () ==> { $options->version = true; })
]);
$args = $parser->parse($argv);
if ($options->help === true) {
echo 'help on', PHP_EOL;
}
if ($options->version === true) {
echo 'version on', PHP_EOL;
}
if ($options->fileName !== 'test') {
echo 'name = ', $fileName, PHP_EOL;
}
```
## CLI Application
If you want to create cli application, we recommend using **ArgumentParser**.
ArgumentParser implements an interface to display usage, program version.
```hack
use HHPack\Getopt as cli;
use HHPack\Getopt\App\{ ArgumentParser };
final class CliApplication
{
private bool $help = false;
private bool $version = false;
private string $fileName = 'test';
private ArgumentParser $argParser;
public function __construct()
{
$this->argParser = cli\app('example', '1.0.0')
->description("This cli application is example.\n\n")
->usage(" {app.name} [OPTIONS]\n\n")
->options([
cli\on(['-h', '--help'], 'display help message', () ==> {
$this->help = true;
}),
cli\on(['-v', '--version'], 'display version', () ==> {
$this->version = true;
}),
cli\take_on(['-n', '--name'], 'NAME', 'file name', ($name) ==> {
$this->fileName = $name;
})
]);
}
public function run(Traversable $argv): void
{
$this->argParser->parse($argv);
if ($this->help) {
$this->argParser->displayHelp();
} else if ($this->version) {
$this->argParser->displayVersion();
} else {
echo "file name: ", $this->fileName, PHP_EOL;
}
}
}
(new CliApplication())->run($argv);
```
## Run the test
composer install
composer test