/advpl-find-issues
Analise estatica profunda. 10 regras detectam RecLock sem MsUnlock, SQL sem D_E_L_E_T_, GetMV sem default, For sem Local, MemoWrite esquecido. Auto-fix em 4 regras seguras.
Assinatura: /advpl-find-issues <arquivo OU pasta> [--fix] [--json] [--severity=info|warn|error]
/advpl-find-issues e a skill mais poderosa do pacote. Analise estatica equivalente a um linter Protheus, com 10 regras especificas de bugs comuns que advpls appre nao detecta.
10 regras implementadas (v0.2.1)
| Regra | Severidade | O que detecta |
|---|---|---|
no-msunlock | ERROR | RecLock aberto sem MsUnlock antes do Return |
sql-no-deleted | WARN | TCQuery/SQL sem filtro D_E_L_E_T_ = ' ' |
sql-no-filial | WARN | SQL sem filtro de filial (xFilial) |
getmv-no-default | WARN | GetMV sem 3o param — retorna NIL se MV nao existir |
function-not-user | ERROR | Function nua — RPO Token rejeita |
memowrite-debug | WARN | MemoWrite em codigo — debug esquecido |
for-i-not-declared | ERROR | For i := ... com i sem Local — vira PUBLIC |
reclock-no-xfilial | WARN | RecLock(alias, .T.) sem setar _FILIAL |
old-msg-yesno | INFO | MsgYesNo legado — usar ApMsgYesNo |
console-log-via-conout-em-tlpp | INFO | ConOut em TLPP — usar FwLogger |
Como usar
# 1 fonte
/advpl-find-issues arquivo.prw
# Pasta inteira
/advpl-find-issues src/
# So erros graves (gate de PR/CI)
/advpl-find-issues src/ --severity=error
# Auto-fix das regras seguras (cria .bak)
/advpl-find-issues arquivo.prw --fix
# Output JSON pra integracao CI/CD
/advpl-find-issues src/ --json
Output tipico
=== ADVPL FIND-ISSUES ===
Alvo: src/customizacoes/
Arquivos analisados: 12
Issues encontradas: 16
Resumo: 5 error · 8 warn · 3 info
| Arquivo:Linha | Sev | Regra | Mensagem
|------------------------|-----|--------------------|----------
| ALCMAIL.prw:847 | ERR | no-msunlock | RecLock aberto na linha 845 sem MsUnlock antes do Return
| FINA070.prw:42 | WRN | sql-no-deleted | Query SQL sem filtro D_E_L_E_T_
| MATA030V.prw:678 | ERR | for-i-not-declared | Variavel For "i" sem Local declarado
...
Auto-fix (4 regras seguras)
| Regra | Transformacao |
|---|---|
| getmv-no-default | GetMV("MV_X") → GetMV("MV_X", .F., NIL) |
| function-not-user | Function Calc() → User Function Calc() |
| old-msg-yesno | MsgYesNo → ApMsgYesNo |
| memowrite-debug | MemoWrite(...) → // FIXME-FIND-ISSUES: MemoWrite(...) |
6 regras NAO auto-fixed (requerem revisao humana semantica): no-msunlock, sql-no-deleted, sql-no-filial, for-i-not-declared, reclock-no-xfilial, console-log-via-conout-em-tlpp.
Caso real (post no blog)
Em Auditando 800 linhas de AdvPL em 30 segundos, a skill achou 16 bugs reais num fonte ALCMAIL.prw de 800 linhas em 30 segundos.
Integracao CI/CD
# GitHub Actions
- name: Static analysis AdvPL
run: |
node ~/.claude/skills/advpl-find-issues/scripts/analyze.js src/ \
--severity=error --json > report.json
# Exit 1 se houver ERROR → bloqueia merge
Limitacoes honestas
- Falsos positivos em SQL: query inline numa linha so pode escapar do detector
- Multi-arquivo: nao detecta funcao chamada em outro fonte
- Macros (#xcommand): nao expande — analisa o fonte literal
Instalacao
A skill faz parte do pacote claude-advpl-skill open source. Baixe e instale:
curl -O https://archtecgroup.com.br/downloads/claude-advpl-skill-v0.2.1.zip
unzip claude-advpl-skill-v0.2.1.zip
bash install.sh
# OU Windows PowerShell:
.\install.ps1
Documentacao tecnica completa: GitHub maycondev/claude-advpl-skill
Caso de uso real (post): Auditando 800 linhas de AdvPL em 30 segundos
Suporte / Customizacao
Precisa adaptar a skill pro seu fluxo, integrar em pipeline CI/CD custom, ou usar em ambiente corporativo com NDA?
A ArchTec oferece consultoria especializada em automacao de dev Protheus com Claude/AI. Fale com nossos especialistas →