miller/go/src/cli
John Kerl 4fce7a8079
mlr --help split up (#582)
* Remove leading "$ " from code examples, now that highlighting is in place
* avoid package dependency cycle between auxents and cli
* transforming/transformers package merge
* pivotable lib.DOC_URL
* unexpose auxent usage funcs
* major refactor
2021-06-28 00:06:22 -04:00
..
mlrcli.go Neaten of some CLI-parser source files 2021-05-31 09:49:50 -04:00
mlrcli_mlrrc.go mlr --help split up (#582) 2021-06-28 00:06:22 -04:00
mlrcli_parse.go mlr --help split up (#582) 2021-06-28 00:06:22 -04:00
README.md mlr --help split up (#582) 2021-06-28 00:06:22 -04:00

Logic for parsing the Miller command line.

  • src/cli is the flag-parsing logic for supporting Miller's command-line interface. When you type something like mlr --icsv --ojson put '$sum = $a + $b' then filter '$sum > 1000' myfile.csv, it's the CLI parser which makes it possible for Miller to construct a CSV record-reader, a transformer chain of put then filter, and a JSON record-writer.
  • src/cliutil contains datatypes for the CLI-parser, which was split out to avoid a Go package-import cycle.
  • I don't use the Go flag package. The flag package is quite fine; Miller's command-line processing is multi-purpose between serving CLI needs per se as well as for manpage/docfile generation, and I found it simplest to roll my own command-line handling here. More importantly, some Miller verbs such as sort take flags more than once -- mlr sort -f field1 -n field2 -f field3 -- which is not supported by the flag package.