miller/pkg/cli
John Kerl 71190d3d99
plans/exit.md: record final status; defer phase 5; convert stragglers (#2207)
Phase-5 wrap-up for plans/exit.md. The DSL-runtime cluster (pkg/dsl/cst:
hofs.go, udf.go, evaluable.go) is deferred rather than converted: 58
regression cases pin the current loud-failure behavior (exact stderr plus
exit 1), and the planned error-Mlrval mechanism would make HOF/UDF misuse
fail silently as bare '(error)' with exit 0 -- a debugging-UX regression.
The alternative (typed panic recovered at the Execute* boundaries) preserves
behavior but introduces panic/recover to a codebase that has none. The
decision belongs with the issue-440 strict-mode design, where the
fatal-vs-data error taxonomy gets decided anyway; plans/exit.md now records
the rationale, the phase-by-phase status (#2198, #2202, #2204, #2205), and
the final intentional keep-list.

Also converted here, since they're squarely in prior phases' patterns rather
than the deferred expression-depth cluster:

- RootNode.ProcessEndOfStream (a phase-3 leftover on the put/filter
  Transform path) returns an error instead of printing-and-exiting on
  end-of-stream close failures; first error returned, any others printed at
  the site.
- The three CompileMillerRegexOrDie calls in option_parse.go (inside
  error-returning parser closures since phase 2) use CompileMillerRegex and
  return the error; 'mlr --ifs-regex (' output and exit code are unchanged.

All 4779 regression cases pass; make lint 0 issues.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 16:05:53 -04:00
..
doc.go Export library code in pkg/ (#1391) 2023-09-10 17:15:13 -04:00
errors.go Remove os.Exit callsites below the entrypoint: phase 2 (#2202) 2026-07-15 14:09:57 -04:00
flag_json.go Switch to --as-json (#2106) 2026-06-28 17:04:10 -04:00
flag_types.go Remove os.Exit callsites below the entrypoint: phase 2 (#2202) 2026-07-15 14:09:57 -04:00
flag_types_test.go Shell tab-completion for bash and zsh (#2096) 2026-06-21 12:47:54 -04:00
flatten_unflatten.go Treat YAML like JSON for auto-flatten/auto-unflatten (#2196) 2026-07-15 10:15:33 -04:00
mlrcli_util.go Remove os.Exit callsites below the entrypoint: phase 2 (#2202) 2026-07-15 14:09:57 -04:00
option_parse.go plans/exit.md: record final status; defer phase 5; convert stragglers (#2207) 2026-07-15 16:05:53 -04:00
option_types.go Exit 0 when skip-trivial-records is used and CSV/TSV ends with blank lines (#1535) (#2146) 2026-07-06 15:22:51 -04:00
README.md Export library code in pkg/ (#1391) 2023-09-10 17:15:13 -04:00
separators.go Add GNU recutils (.rec) as a Miller I/O format (#2201) 2026-07-15 11:51:16 -04:00
verb_utils.go Improve error propagation (#1975) 2026-02-16 16:48:41 -05:00

Datatypes for parsing the Miller command line, and the flags table.

  • 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 and the flags table for the CLI-parser, which was split out to avoid a Go package-import cycle.