purescript-contrib/purescript-optparse

Generated completions for Fish shell don't work for Spago

postsolar opened this issue · 1 comments

Describe the bug
Generated completions for Fish shell don't work for Spago

To Reproduce

> spago --fish-completion-script (which spago) > ~/.config/fish/completions/spago.fish
> source ~/.config/fish/config.fish
# and just in case
> source ~/.config/fish/completions/spago.fish

Expected behavior
Shell completions appear upon pressing tab etc.

Additional context
Fish 3.6.1
Spago v0.93.18

Generated script:

 function _bundle.js
    set -l cl (commandline --tokenize --current-process)
    # Hack around fish issue #3934
    set -l cn (commandline --tokenize --cut-at-cursor --current-process)
    set -l cn (count $cn)
    set -l tmpline --bash-completion-enriched --bash-completion-index $cn
    for arg in $cl
      set tmpline $tmpline --bash-completion-word $arg
    end
    for opt in (/home/me/.asdf/shims/spago $tmpline)
      if test -d $opt
        echo -E "$opt/"
      else
        echo -E "$opt"
      end
    end
end

complete --no-files --command bundle.js --arguments '(_bundle.js)'

After looking at it for a bit, I notice two things:

  1. I used PNPM to install spago and it bundles the package so the program name ends up being bundle.js. bundle.js is also what shows up in the output of spago --help. This is the case also with Bash and ZSH. If I use NPM as the installation method this problem doesn't show up.
  2. There is something wrong with the indexing. It generates args like --bash-completion-enriched --bash-completion-index 1 --bash-completion-word "spago build", where the index is always 1.