def get_choices(cli, prog_name, args, incomplete): """ Parameters ---------- cli : click.Command The main click Command of the program prog_name : str The program name on the command line args : [str] The arguments already written by the user on the command line incomplete : str The partial argument to complete Returns ------- [(str, str)] A list of completion results. The first element of each tuple is actually the argument to complete, the second element is an help string for this argument. """ ctx = resolve_ctx(cli, prog_name, args) if ctx is None: return optctx = None if args: options = [param for param in ctx.command.get_params(ctx) if isinstance(param, Option)] arguments = [param for param in ctx.command.get_params(ctx) if isinstance(param, Argument)] for param in options: if not param.is_flag and args[-1] in param.opts + param.secondary_opts: optctx = param if optctx is None: for param in arguments: if ( not incomplete.startswith("-") and ( ctx.params.get(param.name) in (None, ()) or param.nargs == -1 ) ): optctx = param break choices = [] if optctx: choices += [c if isinstance(c, tuple) else (c, None) for c in optctx.type.complete(ctx, incomplete)] else: for param in ctx.command.get_params(ctx): if (completion_configuration.complete_options or incomplete and not incomplete[:1].isalnum()) and isinstance(param, Option): for opt in param.opts: if match(opt, incomplete): choices.append((opt, param.help)) for opt in param.secondary_opts: if match(opt, incomplete): # don't put the doc so fish won't group the primary and # and secondary options choices.append((opt, None)) if isinstance(ctx.command, MultiCommand): for name in ctx.command.list_commands(ctx): command = ctx.command.get_command(ctx, name) if match(name, incomplete) and not command.hidden: choices.append((name, command.get_short_help_str())) for item, help in choices: yield (item, help)
def get_choices(cli, prog_name, args, incomplete): """ Parameters ---------- cli : click.Command The main click Command of the program prog_name : str The program name on the command line args : [str] The arguments already written by the user on the command line incomplete : str The partial argument to complete Returns ------- [(str, str)] A list of completion results. The first element of each tuple is actually the argument to complete, the second element is an help string for this argument. """ ctx = resolve_ctx(cli, prog_name, args) if ctx is None: return optctx = None if args: options = [ param for param in ctx.command.get_params(ctx) if isinstance(param, Option) ] arguments = [ param for param in ctx.command.get_params(ctx) if isinstance(param, Argument) ] for param in options: if not param.is_flag and args[ -1] in param.opts + param.secondary_opts: optctx = param if optctx is None: for param in arguments: if (not incomplete.startswith("-") and (ctx.params.get(param.name) in (None, ()) or param.nargs == -1)): optctx = param break choices = [] if optctx: choices += [ c if isinstance(c, tuple) else (c, None) for c in optctx.type.complete(ctx, incomplete) ] else: for param in ctx.command.get_params(ctx): if (completion_configuration.complete_options or incomplete and not incomplete[:1].isalnum()) and isinstance( param, Option): for opt in param.opts: if match(opt, incomplete): choices.append((opt, param.help)) for opt in param.secondary_opts: if match(opt, incomplete): # don't put the doc so fish won't group the primary and # and secondary options choices.append((opt, None)) if isinstance(ctx.command, MultiCommand): for name in ctx.command.list_commands(ctx): command = ctx.command.get_command(ctx, name) if match(name, incomplete) and not command.hidden: choices.append((name, command.get_short_help_str())) for item, help in choices: yield (item, help)