@netoalmanca/advpl-sensei 1.1.2 → 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/commands/entrypoint.md +26 -0
- package/commands/lint.md +27 -0
- package/commands/snippets.md +207 -0
- package/commands/sx.md +110 -0
- package/commands/validate-tdn.md +202 -0
- package/commands/validate.md +209 -0
- package/dist/__tests__/phase10-mcp-validation-test.js +267 -0
- package/dist/__tests__/phase5-boilerplate-integration-test.js +56 -0
- package/dist/__tests__/phase5-test.js +189 -0
- package/dist/__tests__/phase6-tdn-validation-test.js +168 -0
- package/dist/__tests__/phase8-snippet-validation-test.js +240 -0
- package/dist/__tests__/phase9-scraper-test.js +204 -0
- package/dist/__tests__/registry-quality-check.js +15 -0
- package/dist/boilerplates.js +229 -0
- package/dist/commands/validate-tdn.js +222 -0
- package/dist/function-registry.js +913 -0
- package/dist/index.js +253 -2
- package/dist/linter.js +140 -0
- package/dist/registry-analyzer.js +345 -0
- package/dist/snippets-generator.js +470 -0
- package/dist/snippets-validator.js +102 -0
- package/dist/sx-tool.js +369 -0
- package/dist/tdn-function-validator.js +190 -0
- package/dist/tdn-scraper.js +732 -0
- package/dist/template-validator.js +315 -0
- package/package.json +9 -2
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Busca informações técnicas detalhadas sobre um Entry Point (Ponto de Entrada) diretamente no TDN da TOTVS
|
|
3
|
+
parameters:
|
|
4
|
+
name:
|
|
5
|
+
type: string
|
|
6
|
+
description: "Nome do Entry Point (ex: MT100LOK, MATA010, etc.)"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# /advpl-sensei:entrypoint
|
|
10
|
+
|
|
11
|
+
Busca a documentação oficial do Entry Point no TOTVS Developer Network (TDN) e retorna os parâmetros `PARAMIXB`, tipos de retorno e rotinas envolvidas.
|
|
12
|
+
|
|
13
|
+
## O que esta ferramenta retorna:
|
|
14
|
+
|
|
15
|
+
- **PARAMIXB**: Lista detalhada de todos os parâmetros recebidos.
|
|
16
|
+
- **Return Type**: Qual o tipo de retorno esperado pelo sistema.
|
|
17
|
+
- **Routine**: Qual programa padrão aciona este ponto de entrada.
|
|
18
|
+
- **URL**: Link oficial para conferência.
|
|
19
|
+
|
|
20
|
+
## Uso
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
/advpl-sensei:entrypoint MT100LOK
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Esta ferramenta é essencial antes de gerar código para pontos de entrada, garantindo que a assinatura da função esteja correta de acordo com a versão atual do Protheus.
|
package/commands/lint.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Valida o código ADVPL/TLPP seguindo as regras de ouro do Sensei (Locals no topo, Notação Húngara, sem Privates)
|
|
3
|
+
parameters:
|
|
4
|
+
source:
|
|
5
|
+
type: string
|
|
6
|
+
description: "Código fonte ADVPL/TLPP para validar"
|
|
7
|
+
filename:
|
|
8
|
+
type: string
|
|
9
|
+
description: "Nome do arquivo (opcional)"
|
|
10
|
+
required: false
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# /advpl-sensei:lint
|
|
14
|
+
|
|
15
|
+
Valida o código fonte fornecido contra as regras de ouro do Advpl Sensei.
|
|
16
|
+
|
|
17
|
+
## Regras Verificadas
|
|
18
|
+
|
|
19
|
+
| Código | Regra | Severidade |
|
|
20
|
+
|--------|-------|------------|
|
|
21
|
+
| `L001` | Variáveis `Local` no topo da função | Erro |
|
|
22
|
+
| `L002` | Proibido uso de `Private` ou `Public` | Erro |
|
|
23
|
+
| `L003` | Notação Húngara obrigatória | Aviso |
|
|
24
|
+
|
|
25
|
+
## Uso
|
|
26
|
+
|
|
27
|
+
Forneça o código fonte completo ou parcial para análise.
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Snippets Generator
|
|
3
|
+
description: Gera snippets VS Code baseado nas regras de ouro do Sensei. Facilita a escrita de código ADVPL/TLPP seguindo os padrões.
|
|
4
|
+
parameters:
|
|
5
|
+
action:
|
|
6
|
+
type: string
|
|
7
|
+
description: "Ação a executar: list, generate_vscode, export_json, export_markdown"
|
|
8
|
+
required: true
|
|
9
|
+
output:
|
|
10
|
+
type: string
|
|
11
|
+
description: "Caminho de saída para o arquivo de snippets (opcional)"
|
|
12
|
+
required: false
|
|
13
|
+
outputDir:
|
|
14
|
+
type: string
|
|
15
|
+
description: "Diretório para salvar o arquivo (padrão: diretório atual)"
|
|
16
|
+
required: false
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Snippets Generator - Templates para VS Code
|
|
20
|
+
|
|
21
|
+
Gerador de snippets VS Code que facilitam a escrita de código ADVPL/TLPP seguindo as regras de ouro do Sensei.
|
|
22
|
+
|
|
23
|
+
## Funcionalidades
|
|
24
|
+
|
|
25
|
+
### 1. **list** - Lista todos os snippets disponíveis
|
|
26
|
+
Exibe todos os snippets com seus prefixos e descrições
|
|
27
|
+
|
|
28
|
+
**Exemplo:**
|
|
29
|
+
```
|
|
30
|
+
action: list
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Snippets Disponíveis:**
|
|
34
|
+
|
|
35
|
+
- `advpl_func` - Função ADVPL com estrutura padrão
|
|
36
|
+
- `advpl_func_array` - Função que retorna array
|
|
37
|
+
- `tlpp_class` - Classe TLPP com namespaces
|
|
38
|
+
- `advpl_report` - Report com Pergunte() para parâmetros
|
|
39
|
+
- `advpl_rest` - REST API ADVPL
|
|
40
|
+
- `advpl_validation` - Função de validação
|
|
41
|
+
- `advpl_mvc` - Estrutura MVC
|
|
42
|
+
- `advpl_job` - Job de processamento
|
|
43
|
+
- `advpl_try_catch` - Begin Sequence/Except padrão
|
|
44
|
+
- `advpl_db_select` - Acesso seguro a área de dados
|
|
45
|
+
|
|
46
|
+
### 2. **generate_vscode** - Gera arquivo de snippets para VS Code
|
|
47
|
+
Cria o arquivo `.code-snippets` na estrutura do projeto
|
|
48
|
+
|
|
49
|
+
**Exemplo:**
|
|
50
|
+
```
|
|
51
|
+
action: generate_vscode
|
|
52
|
+
output: .vscode/advpl-sensei.code-snippets
|
|
53
|
+
outputDir: /path/to/project
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Resultado: Cria arquivo JSON pronto para usar como snippets globais do VS Code
|
|
57
|
+
|
|
58
|
+
### 3. **export_json** - Exporta snippets em JSON
|
|
59
|
+
Exporta todos os snippets em formato JSON
|
|
60
|
+
|
|
61
|
+
**Exemplo:**
|
|
62
|
+
```
|
|
63
|
+
action: export_json
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 4. **export_markdown** - Exporta referência em Markdown
|
|
67
|
+
Gera documentação Markdown com todos os snippets
|
|
68
|
+
|
|
69
|
+
**Exemplo:**
|
|
70
|
+
```
|
|
71
|
+
action: export_markdown
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Estrutura dos Snippets
|
|
75
|
+
|
|
76
|
+
Todos os snippets seguem estas regras de ouro do Sensei:
|
|
77
|
+
|
|
78
|
+
✅ **Includes corretos** - `#Include "TOTVS.CH"` e `#Include "PROTHEUS.CH"`
|
|
79
|
+
✅ **Protheus.doc header** - Documentação padrão
|
|
80
|
+
✅ **Begin Sequence com tratamento de erro** - Tratamento de exceções
|
|
81
|
+
✅ **Locals no topo** - Variáveis declaradas corretamente
|
|
82
|
+
✅ **Notação Húngara** - Nomenclatura de variáveis
|
|
83
|
+
✅ **RestArea** - Preservação de área de dados
|
|
84
|
+
|
|
85
|
+
## Exemplos de Uso
|
|
86
|
+
|
|
87
|
+
### Snippet: `advpl_func`
|
|
88
|
+
Função completa com estrutura padrão
|
|
89
|
+
|
|
90
|
+
```advpl
|
|
91
|
+
#Include "TOTVS.CH"
|
|
92
|
+
#Include "PROTHEUS.CH"
|
|
93
|
+
|
|
94
|
+
/*/{Protheus.doc} NomeFuncao
|
|
95
|
+
Descrição breve da função
|
|
96
|
+
@type function
|
|
97
|
+
@author Seu Nome
|
|
98
|
+
@since Data
|
|
99
|
+
@version 1.0
|
|
100
|
+
/*/
|
|
101
|
+
User Function NomeFuncao()
|
|
102
|
+
// Declarações de variáveis locais
|
|
103
|
+
Local nRetorno := 0
|
|
104
|
+
Local cMsg := ""
|
|
105
|
+
Local aArea := GetArea()
|
|
106
|
+
|
|
107
|
+
Begin Sequence
|
|
108
|
+
// Lógica da função aqui
|
|
109
|
+
|
|
110
|
+
Except
|
|
111
|
+
cMsg := "Erro em NomeFuncao: " + AllTrim(OldNotation(GetErrorMessage(GetException())))
|
|
112
|
+
ConOut(cMsg)
|
|
113
|
+
nRetorno := 0
|
|
114
|
+
|
|
115
|
+
End Sequence
|
|
116
|
+
|
|
117
|
+
RestArea(aArea)
|
|
118
|
+
Return nRetorno
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Snippet: `tlpp_class`
|
|
122
|
+
Classe TLPP com namespace e métodos
|
|
123
|
+
|
|
124
|
+
```tlpp
|
|
125
|
+
#Include "TOTVS.CH"
|
|
126
|
+
#Include "PROTHEUS.CH"
|
|
127
|
+
|
|
128
|
+
Namespace NomeNamespace
|
|
129
|
+
|
|
130
|
+
/*/{Protheus.doc} NomeClasse
|
|
131
|
+
Descrição da classe
|
|
132
|
+
@type class
|
|
133
|
+
@author Seu Nome
|
|
134
|
+
@since Data
|
|
135
|
+
@version 1.0
|
|
136
|
+
/*/
|
|
137
|
+
Class NomeClasse
|
|
138
|
+
Data cPropriedade := ""
|
|
139
|
+
Data nValor := 0
|
|
140
|
+
|
|
141
|
+
Method New() Constructor
|
|
142
|
+
Method Execute() As Logical
|
|
143
|
+
EndClass
|
|
144
|
+
|
|
145
|
+
Method New() Class NomeClasse
|
|
146
|
+
::cPropriedade := ""
|
|
147
|
+
::nValor := 0
|
|
148
|
+
Return Self
|
|
149
|
+
|
|
150
|
+
Method Execute() As Logical Class NomeClasse
|
|
151
|
+
Local lRetorno := .T.
|
|
152
|
+
Local cMsg := ""
|
|
153
|
+
|
|
154
|
+
Begin Sequence
|
|
155
|
+
// Implementação aqui
|
|
156
|
+
|
|
157
|
+
Except
|
|
158
|
+
cMsg := "Erro em Execute: " + AllTrim(OldNotation(GetErrorMessage(GetException())))
|
|
159
|
+
ConOut(cMsg)
|
|
160
|
+
lRetorno := .F.
|
|
161
|
+
|
|
162
|
+
End Sequence
|
|
163
|
+
|
|
164
|
+
Return lRetorno
|
|
165
|
+
|
|
166
|
+
EndClass
|
|
167
|
+
|
|
168
|
+
End Namespace
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Como Usar no VS Code
|
|
172
|
+
|
|
173
|
+
### 1. **Gerar e instalar os snippets**
|
|
174
|
+
```
|
|
175
|
+
Ação: generate_vscode
|
|
176
|
+
Output: .vscode/advpl-sensei.code-snippets
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### 2. **Usar um snippet**
|
|
180
|
+
- Abra um arquivo `.prw` ou `.tlpp`
|
|
181
|
+
- Digite o prefixo (ex: `advpl_func`)
|
|
182
|
+
- Pressione Tab ou Enter para expandir
|
|
183
|
+
- Preencha os placeholders (${1:texto}, ${2:texto}, etc)
|
|
184
|
+
|
|
185
|
+
### 3. **Exemplo prático**
|
|
186
|
+
1. Digite `advpl_func` e pressione Tab
|
|
187
|
+
2. VS Code expande para a estrutura completa
|
|
188
|
+
3. Seu nome fica destacado para preenchimento
|
|
189
|
+
4. Pressione Tab para ir para próximo placeholder
|
|
190
|
+
5. Continue até completar todos os campos
|
|
191
|
+
|
|
192
|
+
## Benefícios
|
|
193
|
+
|
|
194
|
+
✨ **Consistência** - Garante uso das regras de ouro em todo projeto
|
|
195
|
+
📝 **Agilidade** - Economiza tempo na escrita de boilerplate
|
|
196
|
+
🎓 **Educação** - Demonstra padrões corretos para novos desenvolvedores
|
|
197
|
+
🔍 **Rastreabilidade** - Facilita análise e linting de código
|
|
198
|
+
|
|
199
|
+
## Customização
|
|
200
|
+
|
|
201
|
+
Para adicionar novos snippets ou modificar existentes:
|
|
202
|
+
|
|
203
|
+
1. Mantenha a estrutura de Begin Sequence...Except
|
|
204
|
+
2. Use Notação Húngara em variáveis
|
|
205
|
+
3. Inclua Protheus.doc header
|
|
206
|
+
4. Adicione RestArea para preservar área de dados
|
|
207
|
+
5. Siga as convenções de naming do Sensei
|
package/commands/sx.md
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: SX Tool
|
|
3
|
+
description: Consulta estruturada ao dicionário Protheus (SX tables). Busque tabelas, campos, parâmetros do sistema e tabelas genéricas.
|
|
4
|
+
parameters:
|
|
5
|
+
action:
|
|
6
|
+
type: string
|
|
7
|
+
description: "Ação a executar: list_tables, get_table, search_fields, get_parameters, get_generic_table, export"
|
|
8
|
+
required: true
|
|
9
|
+
query:
|
|
10
|
+
type: string
|
|
11
|
+
description: "Parâmetro da consulta (nome da tabela, padrão de busca, código de parâmetro, etc)"
|
|
12
|
+
required: false
|
|
13
|
+
format:
|
|
14
|
+
type: string
|
|
15
|
+
description: "Formato de resposta: markdown ou json (padrão: markdown)"
|
|
16
|
+
required: false
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# SX Tool - Consulta ao Dicionário Protheus
|
|
20
|
+
|
|
21
|
+
Ferramenta especializada em fornecer acesso rápido e estruturado ao dicionário de dados Protheus (tabelas SX).
|
|
22
|
+
|
|
23
|
+
## Funcionalidades
|
|
24
|
+
|
|
25
|
+
### 1. **list_tables** - Lista todas as tabelas
|
|
26
|
+
Exibe todas as tabelas disponíveis com suas descrições
|
|
27
|
+
|
|
28
|
+
**Exemplo de uso:**
|
|
29
|
+
```
|
|
30
|
+
action: list_tables
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 2. **get_table** - Obtém detalhes de uma tabela
|
|
34
|
+
Retorna a estrutura completa de uma tabela com todos os campos
|
|
35
|
+
|
|
36
|
+
**Exemplo de uso:**
|
|
37
|
+
```
|
|
38
|
+
action: get_table
|
|
39
|
+
query: SA1
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 3. **search_fields** - Busca campos por padrão
|
|
43
|
+
Busca campos em uma tabela usando wildcards (*)
|
|
44
|
+
|
|
45
|
+
**Exemplo de uso:**
|
|
46
|
+
```
|
|
47
|
+
action: search_fields
|
|
48
|
+
query: SA1|*COD
|
|
49
|
+
```
|
|
50
|
+
Busca todos os campos contendo "COD" na tabela SA1
|
|
51
|
+
|
|
52
|
+
### 4. **get_parameters** - Lista parâmetros do sistema
|
|
53
|
+
Retorna parâmetros MV_* organizados por módulo
|
|
54
|
+
|
|
55
|
+
**Exemplo de uso:**
|
|
56
|
+
```
|
|
57
|
+
action: get_parameters
|
|
58
|
+
query: Financeiro
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 5. **get_generic_table** - Consulta tabelas genéricas (SX5)
|
|
62
|
+
Retorna valores de uma tabela genérica com códigos e descrições
|
|
63
|
+
|
|
64
|
+
**Exemplo de uso:**
|
|
65
|
+
```
|
|
66
|
+
action: get_generic_table
|
|
67
|
+
query: 13
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 6. **export** - Exporta dados em JSON
|
|
71
|
+
Exporta os dados do dicionário em formato JSON
|
|
72
|
+
|
|
73
|
+
**Exemplo de uso:**
|
|
74
|
+
```
|
|
75
|
+
action: export
|
|
76
|
+
query: tables
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Tabelas Disponíveis para Consulta
|
|
80
|
+
|
|
81
|
+
- **SA1** - Clientes
|
|
82
|
+
- **SA3** - Vendedores
|
|
83
|
+
- **SC5** - Pedidos de Vendas
|
|
84
|
+
- **SX3** - Dicionário de Campos
|
|
85
|
+
|
|
86
|
+
## Tabelas Genéricas (SX5)
|
|
87
|
+
|
|
88
|
+
- **01** - Condições de Pagamento
|
|
89
|
+
- **13** - Estados/Províncias
|
|
90
|
+
- **AB** - Possíveis UF
|
|
91
|
+
|
|
92
|
+
## Parâmetros por Módulo
|
|
93
|
+
|
|
94
|
+
- Geral: MV_ESTADO
|
|
95
|
+
- Financeiro: MV_MOEDA1, MV_JUROS, MV_MULTA
|
|
96
|
+
- Faturamento: MV_USARFT
|
|
97
|
+
|
|
98
|
+
## Exemplo de Fluxo
|
|
99
|
+
|
|
100
|
+
1. Usuário: "Quais são os campos da tabela SA1?"
|
|
101
|
+
- SX Tool executa: `get_table | SA1`
|
|
102
|
+
- Retorna estrutura completa com tipos, tamanhos e descrições
|
|
103
|
+
|
|
104
|
+
2. Usuário: "Como validar um estado?"
|
|
105
|
+
- SX Tool executa: `get_generic_table | 13`
|
|
106
|
+
- Retorna lista de estados válidos
|
|
107
|
+
|
|
108
|
+
3. Usuário: "Qual é a taxa de juros padrão?"
|
|
109
|
+
- SX Tool executa: `get_parameters | Financeiro`
|
|
110
|
+
- Retorna valor do parâmetro MV_JUROS
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: validate-tdn
|
|
3
|
+
description: Valida código ADVPL/TLPP ou funções individuais contra TDN (TOTVS Developer Network). Detecta funções fictícias, incompatibilidades de linguagem e cobertura TDN.
|
|
4
|
+
parameters:
|
|
5
|
+
code:
|
|
6
|
+
type: string
|
|
7
|
+
required: false
|
|
8
|
+
description: "Código ADVPL/TLPP a validar. Análise de funções usadas. Exemplo: 'Local x := Upper(\"test\")'"
|
|
9
|
+
function:
|
|
10
|
+
type: string
|
|
11
|
+
required: false
|
|
12
|
+
description: "Nome de função individual a validar. Exemplo: 'DbSeek'"
|
|
13
|
+
language:
|
|
14
|
+
type: string
|
|
15
|
+
required: false
|
|
16
|
+
description: "Linguagem do código. Valores: 'advpl', 'tlpp', 'both'. Padrão: 'advpl'"
|
|
17
|
+
enum: ["advpl", "tlpp", "both"]
|
|
18
|
+
filename:
|
|
19
|
+
type: string
|
|
20
|
+
required: false
|
|
21
|
+
description: "Nome do arquivo para contexto. Exemplo: 'meu-programa.prw'. Padrão: 'code.prw'"
|
|
22
|
+
detailed:
|
|
23
|
+
type: boolean
|
|
24
|
+
required: false
|
|
25
|
+
description: "Se true, retorna detalhes completos incluindo sugestões. Padrão: false"
|
|
26
|
+
forceRefresh:
|
|
27
|
+
type: boolean
|
|
28
|
+
required: false
|
|
29
|
+
description: "Se true, busca dados TDN atualizados (ignora cache de 24h). Padrão: false"
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
# Validação TDN - Comando ADVPL Sensei
|
|
33
|
+
|
|
34
|
+
## Descrição
|
|
35
|
+
|
|
36
|
+
Valida código ADVPL/TLPP ou funções individuais contra o banco de dados de funções TDN (TOTVS Developer Network).
|
|
37
|
+
|
|
38
|
+
**Funcionalidades:**
|
|
39
|
+
- ✅ Validação de funções contra TDN
|
|
40
|
+
- ✅ Detecção automática de funções fictícias
|
|
41
|
+
- ✅ Verificação de compatibilidade ADVPL/TLPP
|
|
42
|
+
- ✅ Relatórios formatados com severity
|
|
43
|
+
- ✅ Cache inteligente de 24 horas
|
|
44
|
+
- ✅ Sugestões de correção
|
|
45
|
+
|
|
46
|
+
## Uso
|
|
47
|
+
|
|
48
|
+
### Validar Função Individual
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
advpl_validate_tdn function="DbSeek" language="advpl"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Resultado:**
|
|
55
|
+
```
|
|
56
|
+
✅ Status: VALID
|
|
57
|
+
📝 Message: Function 'DbSeek' verified in TDN ✅
|
|
58
|
+
⚠️ Severity: info
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Validar Bloco de Código
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
advpl_validate_tdn code="Local x := Upper('hello')" language="advpl"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Resultado:**
|
|
68
|
+
```
|
|
69
|
+
✅ No issues found - Code is valid!
|
|
70
|
+
|
|
71
|
+
🎯 TDN Coverage: 100%
|
|
72
|
+
📊 Functions Found: 0 (none to validate)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Validar com Detalhes
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
advpl_validate_tdn code="Local y := FakeFunc()" language="advpl" detailed=true
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Resultado mostrará:**
|
|
82
|
+
- Informações completas sobre funções
|
|
83
|
+
- Sugestões de correção
|
|
84
|
+
- Links para documentação TDN
|
|
85
|
+
|
|
86
|
+
## Fases
|
|
87
|
+
|
|
88
|
+
- **Phase 6:** TdnFunctionValidator criado (base)
|
|
89
|
+
- **Phase 8:** Integração com snippets (validação de código)
|
|
90
|
+
- **Phase 9:** TdnFunctionScraper (76 funções catalogadas)
|
|
91
|
+
- **Phase 10:** `advpl_validate_tdn` command (NEW)
|
|
92
|
+
|
|
93
|
+
## TDN Coverage
|
|
94
|
+
|
|
95
|
+
**76 funções verificadas em 9 categorias:**
|
|
96
|
+
|
|
97
|
+
| Categoria | Funções | Exemplos |
|
|
98
|
+
|-----------|---------|----------|
|
|
99
|
+
| Database | 20 | DbSeek, DbSkip, Eof, GetArea, RestArea |
|
|
100
|
+
| Type | 17 | Val, Str, Date, Empty, Int, Round |
|
|
101
|
+
| String | 13 | Upper, Lower, SubStr, StrTran, Len |
|
|
102
|
+
| Math | 6 | Min, Max, Mod, Sqrt, Exp, Log |
|
|
103
|
+
| Array | 6 | AClone, AAdd, ADel, ASize, AScan, ASort |
|
|
104
|
+
| Date | 4 | Month, Year, Day, Time |
|
|
105
|
+
| Parameters | 4 | GetMV, GetSX3, GetSX5, PutMV |
|
|
106
|
+
| Interface | 3 | Alert, MsgBox, ConOut |
|
|
107
|
+
| Framework | 3 | GetException, GetErrorMessage, OldNotation |
|
|
108
|
+
|
|
109
|
+
## Exemplos
|
|
110
|
+
|
|
111
|
+
### Exemplo 1: Detectar Ficção
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
advpl_validate_tdn code="oServer := HttpServer():New()"
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Resultado: **❌ HttpServer is fictitious** (não existe em TDN)
|
|
118
|
+
|
|
119
|
+
### Exemplo 2: Compatibilidade ADVPL/TLPP
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
advpl_validate_tdn code="DbSeek(...)" language="tlpp"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Resultado: **⚠️ Incompatibility** (DbSeek é ADVPL-only)
|
|
126
|
+
|
|
127
|
+
### Exemplo 3: Validação Completa
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
advpl_validate_tdn code="
|
|
131
|
+
Local aArea := GetArea()
|
|
132
|
+
DbSeek(cCodigo)
|
|
133
|
+
If !Eof()
|
|
134
|
+
RecLock()
|
|
135
|
+
...
|
|
136
|
+
RestArea(aArea)
|
|
137
|
+
EndIf
|
|
138
|
+
" language="advpl" detailed=true
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Resultado: **✅ All functions verified**
|
|
142
|
+
|
|
143
|
+
## Fluxo de Validação
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
1. Code Input
|
|
147
|
+
↓
|
|
148
|
+
2. Parse Functions
|
|
149
|
+
↓
|
|
150
|
+
3. Check against TdnFunctionValidator
|
|
151
|
+
↓
|
|
152
|
+
4. Verify with TdnFunctionScraper (76 functions)
|
|
153
|
+
↓
|
|
154
|
+
5. Check Registry (78 functions)
|
|
155
|
+
↓
|
|
156
|
+
6. Generate Report with Severity
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Relatórios
|
|
160
|
+
|
|
161
|
+
### Formato: Problema Encontrado
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
⚠️ Issues Found: 2
|
|
165
|
+
|
|
166
|
+
🔴 TDN Validation Issues:
|
|
167
|
+
|
|
168
|
+
ERRORS (1):
|
|
169
|
+
• HttpServer: Function 'HttpServer' is fictitious or deprecated
|
|
170
|
+
|
|
171
|
+
WARNINGS (0):
|
|
172
|
+
|
|
173
|
+
🟡 Structure Validation Issues:
|
|
174
|
+
• [ERROR] Missing return statement
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Formato: Sem Problemas
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
✅ No issues found - Code is valid!
|
|
181
|
+
|
|
182
|
+
🎯 TDN Coverage: 100%
|
|
183
|
+
📊 Functions Found: 0 (none to validate)
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Cache
|
|
187
|
+
|
|
188
|
+
- **Duração:** 24 horas
|
|
189
|
+
- **Bypass:** Use `forceRefresh=true`
|
|
190
|
+
- **Rastreamento:** Campo `"Cache Hit"` no relatório
|
|
191
|
+
|
|
192
|
+
## Próximas Melhorias
|
|
193
|
+
|
|
194
|
+
- [ ] Web scraper real de TDN
|
|
195
|
+
- [ ] Persistência de cache em arquivo
|
|
196
|
+
- [ ] Integração com IDE real
|
|
197
|
+
- [ ] Análise de padrões de uso
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
**Versão:** Phase 10 - MCP Integration
|
|
202
|
+
**Status:** ✅ Production Ready
|