On Fri, Sep 17, 2021 at 09:31:13 +0200, Michal Prívozník wrote: > On 9/16/21 7:10 PM, Peter Krempa wrote: > > Make it simple to spot which options of which commands are missing > > autocompletion functions by introducing this hidden option. > > > > In the future when we'll have completers for everything this can be also > > used as a hard fail so that completers are always added. > > > > Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx> > > --- > > tools/vsh.c | 28 ++++++++++++++++++++++++---- > > tools/vsh.h | 3 ++- > > 2 files changed, 26 insertions(+), 5 deletions(-) > > > > diff --git a/tools/vsh.c b/tools/vsh.c > > index 05da50eace..9c6783dad1 100644 > > --- a/tools/vsh.c > > +++ b/tools/vsh.c > > @@ -261,11 +261,13 @@ vshCmddefGetInfo(const vshCmdDef * cmd, const char *name) > > /* Check if the internal command definitions are correct */ > > static int > > vshCmddefCheckInternals(vshControl *ctl, > > - const vshCmdDef *cmd) > > + const vshCmdDef *cmd, > > + bool missingCompleters) > > { > > size_t i; > > const char *help = NULL; > > bool seenOptionalOption = false; > > + g_auto(virBuffer) complbuf = VIR_BUFFER_INITIALIZER; > > > > /* in order to perform the validation resolve the alias first */ > > if (cmd->flags & VSH_CMD_FLAG_ALIAS) { > > @@ -309,6 +311,11 @@ vshCmddefCheckInternals(vshControl *ctl, > > return -1; /* too many options */ > > } > > > > + if (missingCompleters && > > + (opt->type == VSH_OT_STRING || opt->type == VSH_OT_DATA) && > > Technically, only VSH_OT_BOOL options can't have a completer because > bool --options don't accept any argument. For everything else the > completer callback is called (if defined), see vshReadlineParse(). > > But we can start small and expand later. There is plenty of say > VSH_OT_ARGV/VSH_OT_INT arguments that can't have completer because their > value don't depend on anything domain/network/nwfilter/... related. Mind > you, some DO depend and have completers already: > virshKeycodeNameCompleter() or virshDomainVcpuCompleter(). Hmm, yeah I kind of forgot about VSH_OT_ARGV. I've specifically omitted VSH_OT_INT as in most cases it's just taking an arbitrary number form a range not tied to an object but to a user configuration. I'll perhaps do another round later.