|
|
|
@ -39,64 +39,10 @@ But wait, there's more! What about all those other tasks you need to do
|
|
|
|
|
to make a command line application honorable in anyone's eyes? Tools are
|
|
|
|
|
needed.
|
|
|
|
|
|
|
|
|
|
## BPEGN: Generate Powerful Parsers Easily
|
|
|
|
|
|
|
|
|
|
BPEGN is a PEGN syntax implementation in pure Go using mostly slices and
|
|
|
|
|
structs. The Bonzai scan.Expect function produces verbose, specific
|
|
|
|
|
error messages that will make your users bow to your attentiveness.
|
|
|
|
|
Build complex parsers that are easily read and generated from any number
|
|
|
|
|
of meta-languages including PEGN, PEG, EBNF, and ABNF. Spend your time
|
|
|
|
|
working with the beautiful and standardized abstract syntax trees
|
|
|
|
|
instead of grinding out parser code. Domain language specifications are
|
|
|
|
|
a breeze, which is good, because you can customize any completer for any
|
|
|
|
|
nested command node or your application enabling powerful, intelligent,
|
|
|
|
|
and intuitive grammars you enable for your users directly from the
|
|
|
|
|
command line, hell, why not directly from your favorite chat
|
|
|
|
|
integration. After all, Bonzai commands are perfectly doable directly
|
|
|
|
|
from a chat client.
|
|
|
|
|
|
|
|
|
|
## A JSON Package Without Unnecessary Limitations
|
|
|
|
|
|
|
|
|
|
The standard Go `json` package is not what most people want. It uses
|
|
|
|
|
reflection which unnecessarily slows everything down, and produces
|
|
|
|
|
marshaled JSON output that escapes *every single Unicode character*
|
|
|
|
|
making the output impossible to read and virtual useless for any use
|
|
|
|
|
with languages that depend heavily on Unicode. It's really unfortunate
|
|
|
|
|
since the JSON standard fully supports Unicode characters as they are.
|
|
|
|
|
Bonzai JSON overcomes these limitations and is used to marshal
|
|
|
|
|
everything in the module and fulfill all `fmt.Stringer` interfaces as
|
|
|
|
|
2-space indented JSON instead of Go's virtually unusable default string
|
|
|
|
|
marshaling format.
|
|
|
|
|
|
|
|
|
|
## Single Module to Keep Legal Happy
|
|
|
|
|
|
|
|
|
|
Why have we put all of this stuff into one module? It's simple, if you
|
|
|
|
|
understand how enterprise software legal teams work. They are required
|
|
|
|
|
to track the legal pedigree of every single package that is included
|
|
|
|
|
into any software project. This task is laborious enough and we have
|
|
|
|
|
done everything to simplify it by providing most of the parts and tools
|
|
|
|
|
you would need to create almost any command-line utility, from simple
|
|
|
|
|
bash script port to monoliths with 100s of composed commands, even our
|
|
|
|
|
own BusyBox-like container Linux distro.
|
|
|
|
|
## Embedded Text or Web Docs FTW!
|
|
|
|
|
|
|
|
|
|
And, all the documentation for your command tree goes *inside* the
|
|
|
|
|
binary (if you want). That's right. Portable, text or web-enabled "man"
|
|
|
|
|
pages without the man page. You can use one of the composable
|
|
|
|
|
interactive-color-terminal-sensing help documentation commands like
|
|
|
|
|
`help.Cmd` that will easily marshal into JSON, or text, or well-styled
|
|
|
|
|
HTML locally while enabling you to write your embedded docs in
|
|
|
|
|
simplified CommonMark. Think "readthedocs" but without the Internet
|
|
|
|
|
dependency. And if you don't want `help.Cmd` you don't need it. You can
|
|
|
|
|
even write your own composable Bonzai command or pick from a rich
|
|
|
|
|
ecosystem of embeddable Bonzai command trees available from anywhere on
|
|
|
|
|
the Internet or maintained by the Bonzai project. No registries to worry
|
|
|
|
|
about. Just use good 'ol Go module imports are all that are need to
|
|
|
|
|
share your creations.
|
|
|
|
|
|
|
|
|
|
## Contributors/PRs Welcome
|
|
|
|
|
|
|
|
|
|
*... especially for "Completers" and Runtime Detection.*
|
|
|
|
|
*... especially for "Completers", included popular commands, and Runtime
|
|
|
|
|
Detection.*
|
|
|
|
|
|
|
|
|
|
Speaking of sharing, why not send a PR for your addition to the ever
|
|
|
|
|
growing collection of `comp` subpackage `Completers` for everything from
|
|
|
|
@ -184,21 +130,6 @@ other security tools
|
|
|
|
|
including tab completion in runtime environments that do not have
|
|
|
|
|
`complete -C foo foo` enabled.
|
|
|
|
|
|
|
|
|
|
* **Scanner implementation as a struct with no interface.** In order to
|
|
|
|
|
better tilt the scale toward Scanner performance the decision was made
|
|
|
|
|
to keep it as a struct with tight coupling to the scanner.Cur and
|
|
|
|
|
scanner.Pos structs as well.
|
|
|
|
|
|
|
|
|
|
* **Decided to use branch/leaf instead of parent/child.** The
|
|
|
|
|
anthropomorphic metaphor breaks down when choosing names for
|
|
|
|
|
"children" who don't have any any children of their own. What, are we
|
|
|
|
|
going to call them "barren"? The only other option is "terminal" (the
|
|
|
|
|
mathematically correct term) and mixing that just should bad. "This
|
|
|
|
|
child is 'terminal'" while the others are not. Besides, the bonsai
|
|
|
|
|
tree is one of our namesakes and you cannot have a branch and a leaf
|
|
|
|
|
in the same node. Every node is one or the other. Trees are much
|
|
|
|
|
simper to grok and walk this way.
|
|
|
|
|
|
|
|
|
|
## Style Guidelines
|
|
|
|
|
|
|
|
|
|
* Everything through `go fmt` or equiv, no exceptions
|
|
|
|
|