I don’t want to sound too negative about this, but creating completions piecemeal is going to be a bit of a challenge for most (if not all) shells. It’s made more complex by the fact that one should have *separate* completions based on the project you’re in far more than the version of Elixir you’re using.
My mix completions (only top-level) for fish look like this: https://github.com/halostatue/fish-elixir Oh My ZSH has a rake completion that could be adapted for mix: https://github.com/eddorre/oh-my-zsh/blob/master/rake_completion.zsh (this one is interesting because caching the results is generally acceptable; I chose not to carry this over for my Mix script in Fish, because I found that the performance was adequate). I have no clue how to write useful bash completions. Yes, it’s *possible* to have decent completion scripts written by command-line toolkits (https://github.com/spf13/cobra is a good example), but those are primarily generated for standalone executables, not subcommands. Fish needs its entire completion definition in a single file (although functions can be loaded), and functions are generally loaded from a single location. -a On Wed, Nov 16, 2022 at 12:53 PM Max Nordlund <max.nordl...@gmail.com> wrote: > Hello, > > I wanted to improve the shell (as in bash/zsh/fish/...) completions for > mix and its subcommands. But before I do I figured I should ask here. > First off, is this something people are interested in? > > --- > > If so, here's a sketch for the implementation. TL;DR, let mix generate > completions for each shell in a known place and let those be loaded by a > small script/completion that's shipped by OS package managers and/or the > shell itself. > > > The entry point needs to live in some sort of distribution, typically > the OS package manager or the shell itself. This script should be kept > as simple as possible, and hopefully stable over time. Its primary > function is to figure out where the generated completions (more on that > below) are. We want to do this dynamically to support multiple versions > of Elixir, for example if you use something like https://asdf-vm.com/. > This means that the entry point script must support both older and newer > versions of Elixir, so it needs some sort of decent fallback as well. > That could probably be just `mix --names`. > > Once these generated completions are found, we can literally just source > them. The hard part is generating them in the first place. Which I think > should be done on installation, so `mix archive.*` and/or `mix deps.*`. > I imagine the easiest/cleanest solution would be to extend OptionParser > to do the actual completion generation, and as part of that, extend the > swatches definition to include descriptions for each flag. > > This could also be used to generate the markdown list of options I've > seen in @shortdesc. I also would like to add support for a @swatches > attribute (like the one used in Phoenix). > > Thoughts? > > Sincerely Max Sörliden Nordlund > > -- > You received this message because you are subscribed to the Google Groups > "elixir-lang-core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to elixir-lang-core+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/2a43b76c-0080-0567-b9c0-2f4a781eb4a6%40gmail.com > . > -- Austin Ziegler • halosta...@gmail.com • aus...@halostatue.ca http://www.halostatue.ca/ • http://twitter.com/halostatue -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/CAJ4ekQu2VRNt9p4DxTuz%3DfEhOw-RXFMSsVtuVPhCTfUG%3DVT7xA%40mail.gmail.com.