miller/pkg/climain
Eng Zer Jun f4cf166358
Replace deprecated io/ioutil functions (#1452)
The io/ioutil package has been deprecated as of Go 1.16 [1]. This commit
replaces the existing io/ioutil functions with their new definitions in
io and os packages.

[1]: https://golang.org/doc/go1.16#ioutil
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
2023-12-20 09:44:02 -05:00
..
doc.go Export library code in pkg/ (#1391) 2023-09-10 17:15:13 -04:00
mlrcli_mlrrc.go Export library code in pkg/ (#1391) 2023-09-10 17:15:13 -04:00
mlrcli_parse.go mlr --norc cat was erroring (#1450) 2023-12-19 09:33:34 -05:00
mlrcli_shebang.go Replace deprecated io/ioutil functions (#1452) 2023-12-20 09:44:02 -05:00
README.md Export library code in pkg/ (#1391) 2023-09-10 17:15:13 -04:00

Logic for parsing the Miller command line.

  • pkg/climain 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.
  • pkg/cli 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.