Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

BUG: When using a Class for grouping commands `--self` shows as a flag

Aberta
#382 0 comentários 4 reações 0 responsáveis Ver no GitHub

@shivamtiwari3 já está trabalhando nisso.

Desde 8/3/2026.

  • #650 de @shivamtiwari3 — aberto

Avaliação

Dificuldade
3/5
Tempo estimado
1-2 dias
Facilidade para iniciantes
48/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
bash, python
Domínio
cli

Direção de pesquisa

Comece com fire/completion.py e reproduza o exemplo usando python3 example.py -- --completion. Rastreie como os métodos de classe são transformados em opções de conclusão e, em seguida, verifique se a conclusão do Bash gerada não lista mais --self para bar ou do-stuff, mantendo --arg1.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

bug
Example code (example.py):
import fire

class Foo:
    def bar(self):
        return 'bar'

    def do_stuff(self, arg1):
        return 'stuff'

if __name__ == '__main__':
    fire.Fire(Foo)
Run:

python3 example.py -- --completion

Completion Output (take note of --self in output):
# bash completion support for example.py
# DO NOT EDIT.
# This script is autogenerated by fire/completion.py.

_complete-examplepy()
{
  local cur prev opts lastcommand
  COMPREPLY=()
  prev="${COMP_WORDS[COMP_CWORD-1]}"
  cur="${COMP_WORDS[COMP_CWORD]}"
  lastcommand=$(get_lastcommand)

  opts=""
  GLOBAL_OPTIONS=""


  case "${lastcommand}" in

    bar)

      if is_prev_global; then
        opts="${GLOBAL_OPTIONS}"
      else
        opts="--self ${GLOBAL_OPTIONS}"
      fi
      opts=$(filter_options $opts)
    ;;

    do-stuff)

      if is_prev_global; then
        opts="${GLOBAL_OPTIONS}"
      else
        opts="--arg1 --self ${GLOBAL_OPTIONS}"
      fi
      opts=$(filter_options $opts)
    ;;

    example.py)

      opts="bar do-stuff ${GLOBAL_OPTIONS}"
      opts=$(filter_options $opts)
    ;;
  esac

  COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
  return 0
}

get_lastcommand()
{
  local lastcommand i

  lastcommand=
  for ((i=0; i < ${#COMP_WORDS[@]}; ++i)); do
    if [[ ${COMP_WORDS[i]} != -* ]] && [[ -n ${COMP_WORDS[i]} ]] && [[
      ${COMP_WORDS[i]} != $cur ]]; then
      lastcommand=${COMP_WORDS[i]}
    fi
  done

  echo $lastcommand
}

filter_options()
{
  local opts
  opts=""
  for opt in "$@"
  do
    if ! option_already_entered $opt; then
      opts="$opts $opt"
    fi
  done

  echo $opts
}

option_already_entered()
{
  local opt
  for opt in ${COMP_WORDS[@]:0:COMP_CWORD}
  do
    if [ $1 == $opt ]; then
      return 0
    fi
  done
  return 1
}

is_prev_global()
{
  local opt
  for opt in $GLOBAL_OPTIONS
  do
    if [ $opt == $prev ]; then
      return 0
    fi
  done
  return 1
}

complete -F _complete-examplepy example.py
Linguagem predominante
Python
Estrelas
28.2k
Forks
1.5k
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de google/python-fire

Todas as issues de google/python-fire

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.