advpl-code-review
Skill1 starsChanged 6 months agoMITView on GitHub
24 regras de code review ADVPL (BP/SEC/PERF/MOD). No MVP plugadvpl v0.1, 13 são detectadas via regex single-file; 11 deferidas para v0.2 (semantic/cross-file). Use após gerar/editar código ADVPL.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- thalysjuvenal/advpl-specialisttheir own version, first seen Sep 14, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- thalysjuvenal/advpl-specialist★ 183same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository29 other files it gives its agents.
- advpl-advancedSkill
- advpl-dicionario-sxSkill
- advpl-embedded-sqlSkill
- advpl-encodingSkill
- advpl-fundamentalsSkill
- advpl-jobs-rpcSkill
- advpl-matxfisSkill
- advpl-mvc-avancadoSkill
- advpl-mvcSkill
- advpl-pontos-entradaSkill
- advpl-tlppSkill
- advpl-webserviceSkill
- advpl-webSkill
- archSkill
- calleesSkill
- callersSkill
- doctorSkill
- findSkill
- grepSkill
- helpSkill
- ingestSkill
- initSkill
- lintSkill
- paramSkill
- plugadvpl-index-usageSkill
- reindexSkill
- setupSkill
- statusSkill
- tablesSkill
The file
Files
advpl-code-review — As 24 regras de code review
plugadvpl cataloga 24 regras de code review para ADVPL/TLPP, agrupadas em 4 categorias:
- BP-xxx — Best-Practice (8 regras).
- SEC-xxx — Segurança (5 regras).
- PERF-xxx — Performance (6 regras).
- MOD-xxx — Modernização (4 regras).
No MVP v0.1, 13 regras são detectáveis com regex single-file (rápido, alto recall). As outras 11 ficam catalogadas em lint_rules mas só serão detectadas no v0.2 (análise semantic / cross-file).
Quando usar
- Logo após gerar/editar qualquer fonte ADVPL.
- Antes de marcar tarefa como "concluída".
- Quando usuário pede "revise este código" / "tem boa prática aqui?".
- Antes de propor PR / commit.
Rode /plugadvpl:lint <arq> para resultado de fato — esta skill é o guia mental das regras.
As 24 regras — quick reference
Best Practice (BP)
| ID | Sev | Título | v0.1 |
BP-001 | critical | RecLock sem MsUnlock correspondente | ✅ |
BP-002 | error | Local declarado fora do header da função | ✅ |
BP-002b | warning | Variável como Private/Public em vez de Local | ✅ |
BP-003 | warning | Falta GetArea/RestArea em função que usa DbSelectArea/DbSeek | ⏸ (v0.2) |
BP-004 | warning | #Include "Protheus.ch" em vez de "TOTVS.CH" | ✅ |
BP-005 | warning | Falta Begin Sequence/Recover/End em operação crítica | ⏸ (v0.2) |
BP-006 | info | Variável sem notação húngara | ✅ |
BP-007 | info | Função sem header Protheus.doc | ✅ |
BP-008 | critical | Shadowing de variável reservada (cFilAnt, cEmpAnt, etc.) | ✅ |
Security (SEC)
| ID | Sev | Título | v0.1 |
SEC-001 | critical | SQL com concatenação + (SQL injection) | ✅ |
SEC-002 | critical | SELF:GetContent() / oRest:GetBody sem validação | ⏸ (v0.2) |
SEC-003 | warning | PII/credenciais em ConOut/FWLogMsg | ⏸ (v0.2) |
SEC-004 | warning | Credenciais hardcoded | ✅ |
SEC-005 | critical | Uso de função TOTVS restrita/interna | ✅ (via lookup) |
Performance (PERF)
| ID | Sev | Título | v0.1 |
PERF-001 | critical | SELECT * em BeginSql/TCQuery | ✅ |
PERF-002 | warning | DbSeek dentro de loop | ⏸ (v0.2) |
PERF-003 | warning | Falta TCSetField para data/numérico pós-query | ⏸ (v0.2) |
PERF-004 | warning | Concatenação de string com +/+= em loop | ⏸ (v0.2) |
PERF-005 | warning | RecCount() para checar existência | ✅ |
PERF-006 | info | WHERE/ORDER BY em coluna sem índice | ⏸ (v0.2 — cross-file SIX) |
Modernization (MOD)
| ID | Sev | Título | v0.1 |
MOD-001 | info | .prw com CLASS que poderia migrar para .tlpp | ✅ |
MOD-002 | info | using namespace em .tlpp em vez de .th include | ✅ |
MOD-003 | info | Funções com prefixo comum candidatas a virar classe | ⏸ (v0.2 — cross-function) |
MOD-004 | info | Uso de AxCadastro/Modelo2/Modelo3 em vez de MVC | ✅ |
Total v0.1 ativas: 13 (8 BP-detectáveis + 3 SEC + 1 PERF + 3 MOD — contabilizando aliás SEC-005 que é via lookup).
Severidades — política de bloqueio
| Severidade | Significado | Bloqueia merge? |
critical | Bug grave / falha de segurança garantida | SIM (corrigir antes) |
error | Erro de compilação ou runtime provável | SIM |
warning | Funciona, mas má prática | Corrigir; pode flagged em PR |
info | Estilo / sugestão | Não bloqueia |
Workflow de revisão
- Termine de editar o arquivo.
/plugadvpl:lint <arq>— roda regex single-file, lista findings.- Para cada
critical/error: corrija antes de prosseguir. - Para
warning: corrija; justifique se não der (PR-only). - Para
info: trate como TODO de longo prazo. - Para v0.2 (regras deferidas), faça revisão manual usando esta skill como checklist.
Checklist mental por severidade (ao gerar código)
Antes de devolver código para o usuário, mentalmente percorra:
Critical (não passar com isso)
- Todo
RecLocktemMsUnlockpareado, inclusive em branch de erro (BP-001). - Nenhuma variável reservada (
cFilAnt,cEmpAnt,nUsado) declarada comoLocal(BP-008). - Nenhum SQL concatenado com
+ cVar +(SEC-001) — use%exp:. - Nenhuma função restrita TOTVS usada (
SEC-005) — checoufuncoes_restritas? SELECT *removido (PERF-001).
Error/Warning
Localno topo da função, antes de qualquer statement (BP-002).Localem vez dePrivate/Publicquando possível (BP-002b).GetArea/RestAreaem funções que mudam WorkArea (BP-003).#include "TOTVS.CH"(nãoProtheus.ch) (BP-004).Begin Sequence/Recover/End Sequenceem operações críticas (BP-005).- Credenciais via SuperGet/SX6, não hardcoded (
SEC-004). - Logs de
ConOutsem PII/senha (SEC-003). - Validação de input REST antes de usar (
SEC-002). DbSeekem loop substituído por JOIN/IN quando possível (PERF-002).TCSetFieldapós query pra colunas D/N (PERF-003).- Concatenação em loop usa array +
Array2String(PERF-004). - Existência testada com
!Eof(), nãoRecCount() > 0(PERF-005).
Info (sugestões)
- Notação húngara em todas as variáveis (
BP-006). - Header Protheus.doc em todas as funções (
BP-007). - Cobertura de índice consultada (
PERF-006). - Classes em
.prwcandidatas a.tlpp(MOD-001). .tlppusa.them vez deusing namespace(MOD-002).- Grupos de funções com prefixo comum → considerar classe (
MOD-003). - Sem
AxCadastro/Modelo2/Modelo3— usar MVC (MOD-004).
Exemplos de fix por regra
BP-001 — RecLock sem MsUnlock
// ERRADO
RecLock("SA1", .F.)
SA1->A1_NOME := "novo"
// faltou MsUnlock
// CORRETO
RecLock("SA1", .F.)
SA1->A1_NOME := "novo"
SA1->(MsUnlock())BP-002 — Local no meio do código
// ERRADO
Function Foo()
DbSelectArea("SA1")
Local cCod := "001" // declarado depois de statement
// CORRETO
Function Foo()
Local cCod := "001" // todos no topo
DbSelectArea("SA1")SEC-001 — SQL injection
// ERRADO
cSql := "SELECT * FROM SA1010 WHERE A1_COD = '" + cCod + "'"
// CORRETO
BeginSql Alias "QRY"
SELECT A1_COD, A1_NOME
FROM %table:SA1% SA1
WHERE SA1.A1_FILIAL = %xfilial:SA1%
AND SA1.A1_COD = %exp:cCod%
AND SA1.%notDel%
EndSqlPERF-005 — RecCount para existência
// ERRADO
TCQuery cSql NEW ALIAS "QRY"
If QRY->(RecCount()) > 0
// ...
// CORRETO
TCQuery cSql NEW ALIAS "QRY"
If !QRY->(Eof())
// ...Anti-padrões gerais
- Aplicar fix automático cego sem entender a regra → pode quebrar lógica.
- Suprimir warning sem comentário justificativo → conhecimento perdido.
- Tratar
infocomo ruído → no agregado, é o que diferencia código mantível. - Não rodar lint antes de PR → ciclo de review fica longo desnecessariamente.
Comandos plugadvpl relacionados
/plugadvpl:lint <arq>— roda as 13 regras ativas do MVP./plugadvpl:lint(sem arg) — roda no projeto inteiro./plugadvpl:find function <restrita>— descobre funções proibidas (SEC-005).- A tabela
lint_findingsno índice armazena o histórico; útil pra dashboard.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

