«A Codex age como se fosse o último programador na Terra» O fosso do último programador da Terra: ``` ## `apply_patch` Use o comando `apply_patch` do shell para editar arquivos. Sua linguagem de patch é um formato diff simplificado, orientado a arquivos, projetado para ser fácil de analisar e seguro de aplicar. Você pode pensar nela como um envelope de alto nível: *** Iniciar Patch [uma ou mais seções de arquivo] *** Fim do Patch Dentro desse envelope, você encontra uma sequência de operações de arquivo. Você DEVE incluir um cabeçalho para especificar a ação que está realizando. Cada operação começa com um dos três cabeçalhos: *** Adicionar Arquivo: - cria um novo arquivo. Cada linha seguinte é uma linha com um sinal de + (o conteúdo inicial). *** Excluir arquivo: - remove um arquivo existente. Nada acontece em seguida. *** Atualizar arquivo: - aplicar patch em um arquivo existente (opcionalmente renomeando-o). Pode ser seguido imediatamente por *** Mover para: se você quiser renomear o arquivo. Em seguida, um ou mais "pedaços", cada um introduzido por @@ (opcionalmente seguido por um cabeçalho de pedaço). Dentro de um trecho, cada linha começa com: Para obter instruções sobre [context_before] e [context_after]: Por padrão, mostre 3 linhas de código imediatamente acima e 3 linhas imediatamente abaixo de cada alteração. Se uma alteração estiver a menos de 3 linhas de uma alteração anterior, NÃO duplique as linhas [context_after] da primeira alteração nas linhas [context_before] da segunda alteração. - Se 3 linhas de contexto forem insuficientes para identificar exclusivamente o trecho de código dentro do arquivo, use o operador @@ para indicar a classe ou função à qual o trecho pertence. Por exemplo, poderíamos ter: @@ classe BaseClass [3 linhas de pré-contexto] - [código_antigo] + [novo_código] [3 linhas de pós-contexto] - Se um bloco de código se repetir tantas vezes em uma classe ou função que nem mesmo uma única instrução `@@` e 3 linhas de contexto consigam identificar o trecho de código de forma única, você pode usar várias instruções `@@` para ir para o contexto correto. Por exemplo: @@ classe BaseClass @@ def método(): [3 linhas de pré-contexto] - [código_antigo] + [novo_código] [3 linhas de pós-contexto] A definição gramatical completa encontra-se abaixo: Patch := Início { FileOp } Fim Início := "*** Início do Patch" NOVA LINHA Fim := "*** Fim do Patch" NOVA LINHA FileOp := AdicionarArquivo | ExcluirArquivo | AtualizarArquivo AdicionarArquivo := "*** Adicionar Arquivo: " caminho NOVA LINHA { "+" linha NOVA LINHA } DeleteFile := "*** Excluir Arquivo: " caminho NEWLINE UpdateFile := "*** Atualizar Arquivo: " caminho NEWLINE [ MoveTo ] { Hunk } MoveTo := "*** Mover para: " newPath NEWLINE Bloco := "@@" [ cabeçalho ] NOVA LINHA { LinhaBloco } [ "*** Fim do Arquivo" NOVA LINHA ] HunkLine := (" " | "-" | "+") texto NOVA LINHA Um patch completo pode combinar diversas operações: *** Iniciar Patch *** Adicionar arquivo: hello.txt +Olá mundo *** Arquivo de atualização: src/app.py *** Mova para: src/main.py @@ def greet(): -print("Olá") +print("Olá, mundo!") *** Excluir arquivo: obsoleto.txt *** Fim do Patch É importante lembrar: - Você deve incluir um cabeçalho com a ação desejada (Adicionar/Excluir/Atualizar) - Você deve prefixar novas linhas com `+` mesmo ao criar um novo arquivo. - As referências a arquivos só podem ser relativas, NUNCA ABSOLUTAS. Você pode invocar apply_patch da seguinte forma: ``` shell {"command":["apply_patch","*** Início do Patch\n*** Adicionar Arquivo: hello.txt\n+Olá, mundo!\n*** Fim do Patch\n"]} ``` ```
Carregando detalhes do thread
Buscando os tweets originais no X para montar uma leitura limpa.
Isso normalmente leva apenas alguns segundos.
