1) serializes the fields the bash completion API gives you (when you hit TAB)
2) exports them to Rust, then
3) passes the Rust program's results back to bash?
I've been working on similar problems, and I understand why that's appealing. Bash is a pretty bad language to write completion scripts in! It's really bad at string and array processing [1].
----
Though on a quick glance, if you're exporting $COMP_LINE and $COMP_POINT, then it's making the job of the completion script very hard, since you're passing off the responsibility of parsing shell to it:
In other words, if you have something like:
mycommand --flag arg\ with\ spaces --flag2=<TAB>
Then it's not desirable to pass the entire string. It would be better to parse it and pass: ["mycommand", "--flag", "arg with spaces", "--flag2="] # and indicate index 3 being completed
Another common case is: echo $(dirname <TAB> # I don't need echo $( to complete
I noticed this deficiency of bash while essentially cloning the bash API for Oil: https://www.oilshell.org/One consequence of this is that the bash-completion project (maintained separately from bash) actually has an ad hoc bash parser in bash! This is really bad -- unsurprisingly it has obvious bugs, like not being able to complete inside command subs. An ad hoc bash parser in Rust would also be bad.
So instead Oil parses shell for you -- since it has a shell parser! -- and then it gives you the partial argv array. So then the plugin is only responsible for what it can reasonably do.
-----
Additional, I proposed that this could be made into a protocol that other shells consume. So instead of writing bash completions in Rust, you could write zsh/fish/bash/Oil completions in Rust.
https://github.com/oilshell/oil/wiki/Shellac-Protocol-Propos...
A lot of people are already "scraping" bash completions this way, i.e. to use in zsh or their own shells, so it should not be hard to come up with something "standard", given those working examples.
https://github.com/oilshell/oil/wiki/Projects-Already-Doing-...
If you're interested in chatting about it please join https://oilshell.zulipchat.com/ .
I wouldn't say it's the #1 priority now because Oil already emulates bash quite well, but I think a bunch of people are motivated because they 1) don't want to write completions N times, for every shell and 2) Don't want to write completions in the bash language.
home page: main page: https://github.com/oilshell/oil/wiki/Shell-Autocompletion
IMO it makes sense to write completions in whatever language the command line tool / flag parser is written in.