AUR-566: fix emite diff unificado padrão com contexto
O problema
O tutorial do AUR-561 mediu que aurumcode fix imprimia hunks sem linhas de
contexto (@@ -6,1 +6,1 @@), que o git apply só aceita com --unidiff-zero,
enquanto docs/getting-started.md mandava git apply sem a flag.
O que muda
internal/apply:BuildPlan(suggestions, fsys)eBuildPatch(suggestions, fsys)leem o arquivo de cada sugestão (porfs.FS; ofixpassaos.DirFS(cwd)) e renderizam cada hunk com três linhas de contexto reais (contextLines), cabeçalhos--- a/x/+++ b/xe@@ -l,n +l,n @@corretos. Sem dependência nova: o diff de linhas continua sendo o LCS próprio.- O contexto que o LCS da sugestão já continha é aparado e substituído pelo do arquivo, então cada lado tem no máximo três linhas.
- Mudanças cujo contexto se toca (distância de até seis linhas) viram um só hunk; o número de linha do lado novo acompanha o deslocamento acumulado.
- Arquivo sem newline final recebe
\ No newline at end of file; acrescentar depois de uma última linha sem newline é recusado (falha fechada). current_codeque não bate com o arquivo, linha inexistente, arquivo ausente e sugestões sobrepostas fazem o plano falhar, nomeando arquivo e linha. Isso substitui a mensagem genérica "patch does not apply".CreateFilePatcheDeleteFilePatchrenderizam arquivo novo (--- /dev/null) e remoção (+++ /dev/null). Ofixnão os usa: uma sugestão semcurrent_codecontinua sendo descartada (o conteúdo das sugestões não muda, é non-goal); as funções são a API para quem criar ou apagar arquivos.cmd/aurumcode: ofixvalida comgit apply --checksem flag e imprime o patch sem linha em branco final.docs/getting-started.md,docs/tutorials/revisao.mde a demodemo/tutoriais/revisao(casofixreexecutado,out/regravado) usamgit applypuro.
Prova
tests/acceptance/AUR-566.sh all: AC-001 (git apply sem flag num repositório
de exemplo, correção no arquivo), AC-002 (contexto de três, cabeçalhos, arquivo
novo e remoção aplicam com git apply; patch -p1 --dry-run quando patch
existe), AC-003 (run.sh --check do tutorial), AC-001-MUT-001 (contexto zero
reprova AC-001).
Execução real
bash demo/tutoriais/revisao/run.sh fix na imagem do produto (sem rede, uid do
usuário): o patch saiu com @@ -3,6 +3,6 @@, git apply --check e git apply
passaram sem flag, e a mesma sugestão, já velha, saiu com 1 e
aurumcode fix: app.go:6: working tree does not match the suggestion's current_code.
Limites
Sem patch(1) no contêiner do Go, o patch -p1 --dry-run é exercido só onde o
binário existe. O fix usa o diretório corrente como raiz dos caminhos.