shyaml icon indicating copy to clipboard operation
shyaml copied to clipboard

Improvement: better command line API

Open vaab opened this issue 10 years ago • 1 comments

The current command line API has lots of thing left to be desired.

  • Name are not easy to remember
    • does it start with get- (get-values and values) ?
    • does it take a "s" (get-value and get-values) ?
  • Which ACTION can I use on which type ?
  • The final -0 seems like a bad smell, why not a separate option ? -0

Some others concerns raised:

  • Would be nice to have more choice that stdin as input and stdout as output. #11
  • order of KEY and ACTION could be inverted, as we first browse, then think to what we'd like to do with the target.
    • get-value ACTION could then be the default action and be removed.
    • and a separate optional [--get-keys | --get-values | --get-key-values | --get-type] could be enough for all remaining ACTIONs.

Some deeper reflection on these subject might help to get further:

  • . (dot) is the get-value action in some ways. Why not put all in the KEY and remove the need of ACTION. KEY would be a way to map a YAML entry into a list of YAML (possibly a list of 1 element).
    • This would require special chars to map to meanings as current keys, values.
    • how to differentiate between a list in one YAML entry and a list of YAML separated entries ?

vaab avatar Mar 06 '15 02:03 vaab

I'm inclined to go towards these changements::

shyaml KEY [--get-keys | --get-values | --get-key-values | --get-type] [-0] [--default DEFAULT]

With these rules:

  • all the --get-* are mutually exclusive and optional (choose one of them or none of them), and
    • they work on the YAML value currently targetted by KEY
    • if they finish with a s, then they'll output a list of values that requires a separator, by default this separator is \n, but can be changed to \0 thanks to -0 option.
    • if it mentions key then it works only on struct. --get-values on struct only return list of values.

Optionally we could also have:

  • [--input FILE | -i FILE] and [--output FILE | -o FILE] to read/write from files, supporting - as being stdin/stdout, and defaulted to those if not specified. #11

Any comments ?

vaab avatar Mar 06 '15 02:03 vaab