This is built on tree-sitter, but there are a couple of other interesting shell parser projects:
* https://github.com/mvdan/sh
* https://github.com/koalaman/shellcheck
At Fig (https://withfig.com), we had to write a bash parser from scratch. These projects all work well in the IDE context, but in a repl environment (ie when typing in your terminal) they don't support incomplete commands very well. e.g if I type `echo "$(` the above parsers will break as the double quote and parentheses are not closed.