Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Strange behavior about option completion of `git push`

Yasuhiro KIMURA wrote:
> Next let's type `git push --f' and hit TAB. In this case options that
> start with `--f' are `--follow-tags`, `--force` and
> `--force-with-lease` and all of them start with `--fo`. So expected
> behavior is that it will be completed as `git push --fo`. But what
> really happens is that there is no change after TAB is hit.

This appears to be a bug in the zsh completion internals. The difference
between --f and --r is that for --f, the options are added with more
than one call to compadd because there's a mix of suffix characters
required on those options.

Any further discussion on this line should probably go to -workers but a
minimal function to reproduce the issue is as follows:

  compadd -M 'r:|.=*' one
  compadd -M 'r:|-=*' - --follow-tags --force
  compadd -M 'r:|-=*' - --force-with-lease
  return 0

With _git_push the first of these compadd calls is from _ssh_hosts. The
matching control options are needed. The latter two with - as a pivot
but the first can use any character. The case with --r is equivalent to
combining the latter two compadd calls into a single call.

Matching control is known to have some gnarly issues.


Messages sorted by: Reverse Date, Date, Thread, Author