/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)

RegraSeveridadeO que detecta
no-msunlockERRORRecLock aberto sem MsUnlock antes do Return
sql-no-deletedWARNTCQuery/SQL sem filtro D_E_L_E_T_ = ' '
sql-no-filialWARNSQL sem filtro de filial (xFilial)
getmv-no-defaultWARNGetMV sem 3o param — retorna NIL se MV nao existir
function-not-userERRORFunction nua — RPO Token rejeita
memowrite-debugWARNMemoWrite em codigo — debug esquecido
for-i-not-declaredERRORFor i := ... com i sem Local — vira PUBLIC
reclock-no-xfilialWARNRecLock(alias, .T.) sem setar _FILIAL
old-msg-yesnoINFOMsgYesNo legado — usar ApMsgYesNo
console-log-via-conout-em-tlppINFOConOut 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)

RegraTransformacao
getmv-no-defaultGetMV("MV_X")GetMV("MV_X", .F., NIL)
function-not-userFunction Calc()User Function Calc()
old-msg-yesnoMsgYesNoApMsgYesNo
memowrite-debugMemoWrite(...)// 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

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 →

Veja também