zsh-workers
 help / color / mirror / code / Atom feed
* [BUG] Incorrect usage of $PREFIX and $SUFFIX in completion functions
@ 2024-04-09  7:27 Marlon Richert
  2024-04-09  9:14 ` Oliver Kiddle
  0 siblings, 1 reply; 2+ messages in thread
From: Marlon Richert @ 2024-04-09  7:27 UTC (permalink / raw)
  To: Zsh hackers list

[-- Attachment #1: Type: text/plain, Size: 924 bytes --]

Many completion functions in the Zsh code base use $PREFIX$SUFFIX to get
the word to complete on the command line. However, this seems incorrect to
me, because it prevents the _prefix completer from functioning correctly
for those completion functions.

Shouldn't all completion functions simply use $PREFIX to get the word to
complete, since it is the responsibility of the completer function
(_complete, _prefix, etc.) to decide whether the character to the right
should be considered part of the word to be completed?

Shouldn't _complete do `PREFIX+=$SUFFIX; SUFFIX=` before calling completion
functions, since, otherwise, there is no meaningful difference between it
and _prefix?

Additionally, if _complete should indeed do `PREFIX+=$SUFFIX; SUFFIX=`,
then shouldn't compinit always enable COMPLETE_IN_WORD, since, without it,
_prefix is not able to function correctly and _complete should behave the
same regardless?

[-- Attachment #2: Type: text/html, Size: 1534 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [BUG] Incorrect usage of $PREFIX and $SUFFIX in completion functions
  2024-04-09  7:27 [BUG] Incorrect usage of $PREFIX and $SUFFIX in completion functions Marlon Richert
@ 2024-04-09  9:14 ` Oliver Kiddle
  0 siblings, 0 replies; 2+ messages in thread
From: Oliver Kiddle @ 2024-04-09  9:14 UTC (permalink / raw)
  To: Marlon Richert; +Cc: Zsh hackers list

Marlon Richert wrote:
> Many completion functions in the Zsh code base use $PREFIX$SUFFIX to get the
> word to complete on the command line. However, this seems incorrect to me,
> because it prevents the _prefix completer from functioning correctly for those
> completion functions.

If it is being used to get the word to complete then it is wrong. In
some complex cases, it may be a necessary compromise. There are also
cases where $words[CURRENT] is used (wrongly) instead of $PREFIX.

However, most cases of $PREFIX$SUFFIX found in a search of the functions
look valid at a brief glance. Note that, e.g.
  [[ $PREFIX$SUFFIX = */* ]]
is equivalent to doing
  [[ $PREFIX = */* || $SUFFIX = */* ]]

> Shouldn't all completion functions simply use $PREFIX to get the word to
> complete, since it is the responsibility of the completer function (_complete,
> _prefix, etc.) to decide whether the character to the right should be
> considered part of the word to be completed?

Depends on what exactly you mean by "word to complete". It is best
to leave matching up to the completion system so that it can handle
matching control etc correctly. There are cases where generating matches
is faster if you let the external tools filter by prefix. This is also
not uncommon in completions that have been converted from bash (which
isn't really the case for any included with zsh).

> Shouldn't _complete do `PREFIX+=$SUFFIX; SUFFIX=` before calling completion
> functions, since, otherwise, there is no meaningful difference between it and
> _prefix?

Definitely not. Given a<cursor>c and candidate matches abc and acd,
_complete should complete to abc with complete_in_word set, offer both with
_prefix and complete to acd if complete_in_word is unset.

Oliver


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-04-09  9:16 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-09  7:27 [BUG] Incorrect usage of $PREFIX and $SUFFIX in completion functions Marlon Richert
2024-04-09  9:14 ` Oliver Kiddle

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).