@semacode/cli 2.3.0 → 3.0.0
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/LICENSE +39 -39
- package/README.md +112 -41
- package/dist/agentContextPack.js +14 -10
- package/dist/agentEntryPoints.d.ts +5 -0
- package/dist/agentEntryPoints.js +102 -91
- package/dist/angular-consumer-standalone.d.ts +3 -1
- package/dist/angular-consumer-standalone.js +12 -8
- package/dist/bin.d.ts +6 -0
- package/dist/bin.js +130 -0
- package/dist/cliArgs.js +4 -4
- package/dist/cliControlError.d.ts +12 -0
- package/dist/cliControlError.js +47 -0
- package/dist/cliGrammar.d.ts +11 -0
- package/dist/cliGrammar.js +551 -0
- package/dist/cliHelp.d.ts +13 -0
- package/dist/cliHelp.js +19 -0
- package/dist/cliHelpTexto.d.ts +3 -0
- package/dist/cliHelpTexto.js +168 -0
- package/dist/cliRuntime.d.ts +2 -0
- package/dist/cliRuntime.js +31 -0
- package/dist/comandos.js +9 -22
- package/dist/contexto.js +5 -5
- package/dist/dev/index.d.ts +1 -0
- package/dist/dev/index.js +51 -9
- package/dist/discovery/catalog.js +3 -3
- package/dist/distribuicao/filesystemGlobal.d.ts +63 -0
- package/dist/distribuicao/filesystemGlobal.js +701 -0
- package/dist/distribuicao/index.d.ts +7 -0
- package/dist/distribuicao/index.js +227 -0
- package/dist/distribuicao/launcherGlobal.d.ts +53 -0
- package/dist/distribuicao/launcherGlobal.js +643 -0
- package/dist/distribuicao/launcherWindows.d.ts +28 -0
- package/dist/distribuicao/launcherWindows.js +326 -0
- package/dist/distribuicao/lockContextGlobal.d.ts +10 -0
- package/dist/distribuicao/lockContextGlobal.js +17 -0
- package/dist/distribuicao/lockGlobal.d.ts +6 -0
- package/dist/distribuicao/lockGlobal.js +520 -0
- package/dist/distribuicao/skillGlobal.d.ts +48 -0
- package/dist/distribuicao/skillGlobal.js +652 -0
- package/dist/distribuicao/skillIntentPolicy.d.ts +21 -0
- package/dist/distribuicao/skillIntentPolicy.js +115 -0
- package/dist/distribuicao/tipos.d.ts +50 -0
- package/dist/distribuicao/tipos.js +10 -0
- package/dist/distribuicao/versaoSemantica.d.ts +3 -0
- package/dist/distribuicao/versaoSemantica.js +62 -0
- package/dist/drift.part01.d.ts +34 -2
- package/dist/drift.part01.js +3 -0
- package/dist/drift.part04.d.ts +12 -2
- package/dist/drift.part04.js +89 -15
- package/dist/drift.part05.d.ts +2 -1
- package/dist/drift.part05.js +9 -6
- package/dist/drift.part06.d.ts +2 -1
- package/dist/drift.part06.js +115 -24
- package/dist/drift.part07.d.ts +11 -10
- package/dist/drift.part07.js +261 -255
- package/dist/drift.part08.d.ts +2 -1
- package/dist/drift.part08.js +35 -25
- package/dist/drift.part11.js +279 -32
- package/dist/drift.part12.d.ts +1 -1
- package/dist/drift.part12.js +196 -11
- package/dist/drift.part13.d.ts +18 -2
- package/dist/drift.part13.js +654 -76
- package/dist/drift.part14.js +21 -7
- package/dist/driftCacheCas.d.ts +43 -0
- package/dist/driftCacheCas.js +351 -0
- package/dist/driftCacheFilesystem.d.ts +64 -0
- package/dist/driftCacheFilesystem.js +313 -0
- package/dist/driftCacheModes.d.ts +38 -0
- package/dist/driftCacheModes.js +147 -0
- package/dist/driftCacheStore.d.ts +80 -0
- package/dist/driftCacheStore.js +603 -0
- package/dist/driftCatalogo.d.ts +65 -0
- package/dist/driftCatalogo.js +516 -0
- package/dist/driftEscopo.d.ts +21 -0
- package/dist/driftEscopo.js +647 -0
- package/dist/driftEscopoReferencias.d.ts +8 -0
- package/dist/driftEscopoReferencias.js +612 -0
- package/dist/driftOrcamento.d.ts +6 -0
- package/dist/driftOrcamento.js +20 -3
- package/dist/geracaoCore.js +4 -6
- package/dist/iaPrompts.d.ts +3 -3
- package/dist/iaPrompts.js +13 -14
- package/dist/index.d.ts +4 -1
- package/dist/index.js +6 -25
- package/dist/index.part01.d.ts +21 -14
- package/dist/index.part01.js +20 -165
- package/dist/index.part02.js +57 -43
- package/dist/index.part03.d.ts +23 -1
- package/dist/index.part03.js +83 -8
- package/dist/index.part04.d.ts +10 -2
- package/dist/index.part04.js +48 -14
- package/dist/index.part05.d.ts +1 -1
- package/dist/index.part05.js +109 -30
- package/dist/index.part06.js +34 -16
- package/dist/index.part07.js +31 -27
- package/dist/index.part08.d.ts +1 -1
- package/dist/index.part08.js +23 -28
- package/dist/init/templates.part01.js +393 -393
- package/dist/init/templates.part02.js +189 -189
- package/dist/initCommand.js +5 -1
- package/dist/initTemplatesBackend.js +73 -73
- package/dist/initTemplatesBase.js +7 -5
- package/dist/initTemplatesFlutter.js +137 -137
- package/dist/initTemplatesRuntime.js +350 -350
- package/dist/initTemplatesWeb.js +309 -309
- package/dist/pipelineConteudo/command.d.ts +1 -0
- package/dist/pipelineConteudo/command.js +4 -32
- package/dist/pipelineConteudo/help.d.ts +2 -0
- package/dist/pipelineConteudo/help.js +33 -0
- package/dist/profileAuthorCommand.js +3 -7
- package/dist/profileCommand.js +3 -7
- package/dist/projeto.d.ts +1 -1
- package/dist/projetoCarregar.d.ts +2 -2
- package/dist/projetoCarregar.js +69 -28
- package/dist/projetoCatalogo.d.ts +8 -0
- package/dist/projetoCatalogo.js +164 -0
- package/dist/projetoOrigens.d.ts +2 -0
- package/dist/projetoOrigens.js +65 -9
- package/dist/projetoTipos.d.ts +15 -5
- package/dist/resultadoCli.d.ts +20 -0
- package/dist/resultadoCli.js +57 -0
- package/dist/saidaCli.d.ts +35 -0
- package/dist/saidaCli.js +118 -0
- package/dist/sistemasInterativos/acceptanceEvidence.d.ts +22 -0
- package/dist/sistemasInterativos/acceptanceEvidence.js +345 -0
- package/dist/sistemasInterativos/engineObservation.d.ts +12 -0
- package/dist/sistemasInterativos/engineObservation.js +438 -0
- package/dist/sistemasInterativos/jobOrchestration.d.ts +2 -0
- package/dist/sistemasInterativos/jobOrchestration.js +204 -0
- package/dist/sistemasInterativos/operationPrimitives.d.ts +21 -0
- package/dist/sistemasInterativos/operationPrimitives.js +194 -0
- package/dist/sistemasInterativos/operations.d.ts +4 -39
- package/dist/sistemasInterativos/operations.js +5 -1164
- package/dist/skillCommand.d.ts +5 -0
- package/dist/skillCommand.js +88 -0
- package/dist/sync/index.js +35 -35
- package/docs/README.md +11 -7
- package/docs/ai-integration.md +18 -11
- package/docs/ai-onboarding.md +81 -62
- package/docs/ai-workflow.md +10 -4
- package/docs/auth.md +26 -26
- package/docs/cli.md +197 -79
- package/docs/commands.md +30 -6
- package/docs/database.md +15 -15
- package/docs/deploy.md +54 -41
- package/docs/documentation.md +11 -10
- package/docs/drift-cache.md +108 -0
- package/docs/env.md +16 -16
- package/docs/frontend.md +41 -41
- package/docs/getting-started.md +82 -57
- package/docs/i18n.md +15 -15
- package/docs/repositories.md +60 -43
- package/docs/rollback.md +38 -31
- package/docs/security.md +54 -32
- package/docs/sistemas-interativos.md +27 -27
- package/docs/support.md +8 -8
- package/docs/testing.md +123 -17
- package/docs/vocabulary.md +29 -29
- package/exemplos/agendamento.sema +1 -1
- package/exemplos/assinatura.sema +1 -1
- package/exemplos/auditoria.sema +1 -1
- package/exemplos/autenticacao.sema +1 -1
- package/exemplos/author_obra_comum.sema +1 -1
- package/exemplos/author_tema_sensivel.sema +1 -1
- package/exemplos/automacao.sema +1 -1
- package/exemplos/cadastro_usuario.sema +1 -1
- package/exemplos/calculadora.sema +1 -1
- package/exemplos/crud_simples.sema +1 -1
- package/exemplos/estoque.sema +1 -1
- package/exemplos/exportacao.sema +1 -1
- package/exemplos/fila.sema +1 -1
- package/exemplos/integracao_externa.sema +1 -1
- package/exemplos/multi_tenant.sema +1 -1
- package/exemplos/notificacao.sema +1 -1
- package/exemplos/operacao_estrategia.sema +132 -132
- package/exemplos/operacao_estrategia_discovery.sema +220 -220
- package/exemplos/operacao_estrategia_fluxo.sema +114 -114
- package/exemplos/operacao_estrategia_gates.sema +106 -106
- package/exemplos/operacao_estrategia_quarentena.sema +133 -133
- package/exemplos/operacao_estrategia_rollout.sema +124 -124
- package/exemplos/pagamento.sema +1 -1
- package/exemplos/pagamento_dominio.sema +1 -1
- package/exemplos/pedido.sema +1 -1
- package/exemplos/permissao.sema +1 -1
- package/exemplos/persistencia_vendor_first.sema +1 -1
- package/exemplos/profile_conversas.sema +165 -165
- package/exemplos/profile_game.sema +1 -1
- package/exemplos/profile_legal.sema +1 -1
- package/exemplos/profile_ops.sema +1 -1
- package/exemplos/profile_research.sema +1 -1
- package/exemplos/profile_software.sema +1 -1
- package/exemplos/profile_workflow_n8n.sema +1 -1
- package/exemplos/relatorio.sema +1 -1
- package/exemplos/replica_analitica_erp.sema +1 -1
- package/exemplos/testes_embutidos.sema +1 -1
- package/exemplos/tratamento_erro.sema +1 -1
- package/exemplos/upload_arquivo.sema +1 -1
- package/exemplos/webhook.sema +1 -1
- package/node_modules/@sema/gerador-cpp/dist/index.js +176 -176
- package/node_modules/@sema/gerador-css/dist/index.part01.js +10 -10
- package/node_modules/@sema/gerador-css/dist/index.part02.js +460 -460
- package/node_modules/@sema/gerador-dotnet/dist/index.js +169 -169
- package/node_modules/@sema/gerador-html/dist/index.js +17 -17
- package/node_modules/@sema/gerador-python/dist/index.part02.js +3 -3
- package/node_modules/@sema/gerador-typescript/dist/index.part02.js +11 -11
- package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +42 -42
- package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +1 -0
- package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1 -0
- package/package.json +7 -2
- package/scripts/postinstall.mjs +148 -0
- package/skills/sema/SKILL.md +199 -0
- package/skills/sema/agents/openai.yaml +4 -0
- package/node_modules/@sema/gerador-cpp/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-css/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-css/dist/index.part01.js.map +0 -1
- package/node_modules/@sema/gerador-css/dist/index.part02.js.map +0 -1
- package/node_modules/@sema/gerador-dart/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-dotnet/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-html/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-javascript/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-lua/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-php/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-python/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-python/dist/index.part01.js.map +0 -1
- package/node_modules/@sema/gerador-python/dist/index.part02.js.map +0 -1
- package/node_modules/@sema/gerador-typescript/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-typescript/dist/index.part01.js.map +0 -1
- package/node_modules/@sema/gerador-typescript/dist/index.part02.js.map +0 -1
- package/node_modules/@sema/gerador-typescript/dist/index.part03.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/diagnosticos/snippets.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/formatador/index.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/formatador/index.part01.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/formatador/index.part02.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/index.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.part02.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.part03.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.declaracoes.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.modulo.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.part01.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.part02.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.part03.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part02.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part03.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part04.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part05.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part06.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part07.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part08.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/estruturas.part01.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/estruturas.part02.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +0 -1
- package/node_modules/@sema/padroes/dist/index.js.map +0 -1
package/dist/drift.part07.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// SEMA-GOVERNED: sema.
|
|
2
|
-
// Descricao:
|
|
1
|
+
// SEMA-GOVERNED: sema.produto.governanca_ia.drift
|
|
2
|
+
// Descricao: indexa linguagens legadas sem reabrir fontes fora do catalogo do drift.
|
|
3
3
|
import { readFile } from "node:fs/promises";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { extrairSimbolosCpp } from "./cpp-symbols.js";
|
|
@@ -11,134 +11,149 @@ import { extrairRotasPhp, extrairSimbolosPhp } from "./php-http.js";
|
|
|
11
11
|
import { contarIndentacaoPython, extrairRotasFlaskDecoradas } from "./python-http.js";
|
|
12
12
|
import { extrairRotasRust, extrairSimbolosRust } from "./rust-http.js";
|
|
13
13
|
import { categorizarPersistenciaPorOrigem } from "./drift.part01.js";
|
|
14
|
-
import { caminhosSimbolicos, listarArquivosRecursivos } from "./drift.part04.js";
|
|
14
|
+
import { caminhosSimbolicos, chaveCaminhoCanonicoDrift, deduplicarRaizesSobrepostasDrift, listarArquivosRecursivos, } from "./drift.part04.js";
|
|
15
15
|
import { extrairRecursosPersistenciaCodigoVivo, extrairRecursosPrisma, extrairSimbolosSqlDeclarativos, recursoEhIgnorado, registrarRecursoDrift } from "./drift.part03.js";
|
|
16
16
|
import { registrarRotasPython, registrarSimboloPython } from "./drift.part06.js";
|
|
17
17
|
import { arquivoEhRotasFlutterConsumer, extrairRotasFlutterConsumer, inferirRotaFlutterConsumer } from "./drift.part05.js";
|
|
18
18
|
import { fecharPrefixoRecurso, limparLiteralRecurso, normalizarNomeRecursoDrift } from "./drift.part02.js";
|
|
19
|
-
|
|
19
|
+
async function listarArquivosIndexacaoCompartilhada(diretorios, extensoes, adaptadorLeitura) {
|
|
20
|
+
const arquivos = new Map();
|
|
21
|
+
for (const diretorio of deduplicarRaizesSobrepostasDrift(diretorios)) {
|
|
22
|
+
for (const arquivo of await listarArquivosRecursivos(diretorio, extensoes, adaptadorLeitura)) {
|
|
23
|
+
const chave = chaveCaminhoCanonicoDrift(arquivo);
|
|
24
|
+
if (!arquivos.has(chave)) {
|
|
25
|
+
arquivos.set(chave, { diretorio, arquivo });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return [...arquivos.values()];
|
|
30
|
+
}
|
|
31
|
+
async function lerTextoIndexacaoCompartilhada(arquivo, adaptadorLeitura) {
|
|
32
|
+
return adaptadorLeitura
|
|
33
|
+
? adaptadorLeitura.lerTexto(arquivo)
|
|
34
|
+
: readFile(arquivo, "utf8");
|
|
35
|
+
}
|
|
36
|
+
export async function indexarPython(diretorios, adaptadorLeitura) {
|
|
37
|
+
adaptadorLeitura?.emitir?.("extractor.run");
|
|
20
38
|
const simbolos = new Map();
|
|
21
39
|
const rotas = [];
|
|
22
40
|
const recursos = new Map();
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
41
|
+
const arquivos = (await listarArquivosIndexacaoCompartilhada(diretorios, [".py"], adaptadorLeitura))
|
|
42
|
+
.filter(({ arquivo }) => !arquivo.endsWith("__init__.py") && !/tests?[\\/]/i.test(arquivo));
|
|
43
|
+
for (const { diretorio, arquivo } of arquivos) {
|
|
44
|
+
const texto = await lerTextoIndexacaoCompartilhada(arquivo, adaptadorLeitura);
|
|
45
|
+
const basesSimbolicas = caminhosSimbolicos(diretorio, arquivo);
|
|
46
|
+
const prefixo = texto.match(/APIRouter\s*\(\s*prefix\s*=\s*["']([^"']+)["']/)?.[1];
|
|
47
|
+
for (const recurso of extrairRecursosPersistenciaCodigoVivo(arquivo, texto)) {
|
|
48
|
+
registrarRecursoDrift(recursos, recurso.origem, recurso.tipo, recurso.nome, recurso.arquivo, recurso.simbolo);
|
|
49
|
+
}
|
|
50
|
+
for (const rota of extrairRotasFlaskDecoradas(texto)) {
|
|
51
|
+
rotas.push({
|
|
52
|
+
origem: "flask",
|
|
53
|
+
metodo: rota.metodo,
|
|
54
|
+
caminho: rota.caminho,
|
|
55
|
+
arquivo,
|
|
56
|
+
simbolo: rota.nomeFuncao,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
const blocos = [];
|
|
60
|
+
let decoratorsPendentes = [];
|
|
61
|
+
for (const linha of texto.split(/\r?\n/)) {
|
|
62
|
+
const trim = linha.trim();
|
|
63
|
+
if (trim === "" || trim.startsWith("#")) {
|
|
64
|
+
decoratorsPendentes = [];
|
|
65
|
+
continue;
|
|
32
66
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
metodo: rota.metodo,
|
|
37
|
-
caminho: rota.caminho,
|
|
38
|
-
arquivo,
|
|
39
|
-
simbolo: rota.nomeFuncao,
|
|
40
|
-
});
|
|
67
|
+
const indentacao = contarIndentacaoPython(linha);
|
|
68
|
+
while (blocos.length > 0 && indentacao <= blocos[blocos.length - 1].indentacao) {
|
|
69
|
+
blocos.pop();
|
|
41
70
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
if (classe) {
|
|
60
|
-
blocos.push({ tipo: "class", nome: classe[1], indentacao });
|
|
61
|
-
decoratorsPendentes = [];
|
|
62
|
-
continue;
|
|
71
|
+
if (trim.startsWith("@")) {
|
|
72
|
+
decoratorsPendentes.push(trim);
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const classe = trim.match(/^class\s+([A-Za-z_]\w*)(?:\([^)]*\))?:\s*(?:#.*)?$/);
|
|
76
|
+
if (classe) {
|
|
77
|
+
blocos.push({ tipo: "class", nome: classe[1], indentacao });
|
|
78
|
+
decoratorsPendentes = [];
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
const definicao = trim.match(/^(?:async\s+def|def)\s+([A-Za-z_]\w*)\s*\(/);
|
|
82
|
+
if (definicao) {
|
|
83
|
+
const nomeFuncao = definicao[1];
|
|
84
|
+
const existeDefPai = blocos.some((bloco) => bloco.tipo === "def");
|
|
85
|
+
const classeAtual = [...blocos].reverse().find((bloco) => bloco.tipo === "class");
|
|
86
|
+
if (!existeDefPai && classeAtual) {
|
|
87
|
+
registrarSimboloPython(simbolos, basesSimbolicas, arquivo, nomeFuncao, classeAtual.nome);
|
|
63
88
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const existeDefPai = blocos.some((bloco) => bloco.tipo === "def");
|
|
68
|
-
const classeAtual = [...blocos].reverse().find((bloco) => bloco.tipo === "class");
|
|
69
|
-
if (!existeDefPai && classeAtual) {
|
|
70
|
-
registrarSimboloPython(simbolos, basesSimbolicas, arquivo, nomeFuncao, classeAtual.nome);
|
|
71
|
-
}
|
|
72
|
-
else if (!existeDefPai) {
|
|
73
|
-
registrarSimboloPython(simbolos, basesSimbolicas, arquivo, nomeFuncao);
|
|
74
|
-
registrarRotasPython(rotas, decoratorsPendentes, prefixo, arquivo, nomeFuncao);
|
|
75
|
-
}
|
|
76
|
-
blocos.push({ tipo: "def", nome: nomeFuncao, indentacao });
|
|
77
|
-
decoratorsPendentes = [];
|
|
78
|
-
continue;
|
|
89
|
+
else if (!existeDefPai) {
|
|
90
|
+
registrarSimboloPython(simbolos, basesSimbolicas, arquivo, nomeFuncao);
|
|
91
|
+
registrarRotasPython(rotas, decoratorsPendentes, prefixo, arquivo, nomeFuncao);
|
|
79
92
|
}
|
|
93
|
+
blocos.push({ tipo: "def", nome: nomeFuncao, indentacao });
|
|
80
94
|
decoratorsPendentes = [];
|
|
95
|
+
continue;
|
|
81
96
|
}
|
|
97
|
+
decoratorsPendentes = [];
|
|
82
98
|
}
|
|
83
99
|
}
|
|
84
100
|
return { simbolos: [...simbolos.values()], rotas, recursos: [...recursos.values()] };
|
|
85
101
|
}
|
|
86
|
-
export async function indexarDart(diretorios) {
|
|
102
|
+
export async function indexarDart(diretorios, adaptadorLeitura) {
|
|
103
|
+
adaptadorLeitura?.emitir?.("extractor.run");
|
|
87
104
|
const simbolos = new Map();
|
|
88
105
|
const rotas = [];
|
|
89
106
|
const recursos = new Map();
|
|
90
107
|
const consumerSurfaces = new Map();
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
108
|
+
const arquivos = (await listarArquivosIndexacaoCompartilhada(diretorios, [".dart"], adaptadorLeitura))
|
|
109
|
+
.filter(({ arquivo }) => !arquivo.endsWith(".g.dart") && !arquivo.endsWith(".freezed.dart"));
|
|
110
|
+
for (const { diretorio, arquivo } of arquivos) {
|
|
111
|
+
const texto = await lerTextoIndexacaoCompartilhada(arquivo, adaptadorLeitura);
|
|
112
|
+
const basesSimbolicas = caminhosSimbolicos(diretorio, arquivo);
|
|
113
|
+
const relacao = path.relative(diretorio, arquivo);
|
|
114
|
+
for (const recurso of extrairRecursosPersistenciaCodigoVivo(arquivo, texto)) {
|
|
115
|
+
registrarRecursoDrift(recursos, recurso.origem, recurso.tipo, recurso.nome, recurso.arquivo, recurso.simbolo);
|
|
116
|
+
}
|
|
117
|
+
for (const match of texto.matchAll(/(?:Future<[^\n]+>|[\w?<>.,\s]+)\s+(\w+)\(([^)]*)\)\s*(?:async\s*)?\{/g)) {
|
|
118
|
+
const nome = match[1];
|
|
119
|
+
if (["build", "toString"].includes(nome)) {
|
|
120
|
+
continue;
|
|
100
121
|
}
|
|
101
|
-
for (const
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
for (const baseSimbolica of basesSimbolicas) {
|
|
107
|
-
const caminho = `${baseSimbolica}.${nome}`;
|
|
108
|
-
simbolos.set(caminho, { origem: "dart", caminho, arquivo, simbolo: nome });
|
|
109
|
-
}
|
|
122
|
+
for (const baseSimbolica of basesSimbolicas) {
|
|
123
|
+
const caminho = `${baseSimbolica}.${nome}`;
|
|
124
|
+
simbolos.set(caminho, { origem: "dart", caminho, arquivo, simbolo: nome });
|
|
110
125
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
126
|
+
}
|
|
127
|
+
const superficieFlutter = inferirRotaFlutterConsumer(relacao);
|
|
128
|
+
if (superficieFlutter) {
|
|
129
|
+
consumerSurfaces.set(`${superficieFlutter.rota}:${arquivo}:${superficieFlutter.tipoArquivo}`, {
|
|
130
|
+
rota: superficieFlutter.rota,
|
|
131
|
+
arquivo,
|
|
132
|
+
tipoArquivo: superficieFlutter.tipoArquivo,
|
|
133
|
+
});
|
|
134
|
+
rotas.push({
|
|
135
|
+
origem: "flutter-consumer",
|
|
136
|
+
metodo: "VIEW",
|
|
137
|
+
caminho: superficieFlutter.rota,
|
|
138
|
+
arquivo,
|
|
139
|
+
simbolo: superficieFlutter.tipoArquivo,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
if (arquivoEhRotasFlutterConsumer(relacao, texto)) {
|
|
143
|
+
for (const rotaFlutter of extrairRotasFlutterConsumer(relacao, texto)) {
|
|
144
|
+
consumerSurfaces.set(`${rotaFlutter.rota}:${arquivo}:router`, {
|
|
145
|
+
rota: rotaFlutter.rota,
|
|
115
146
|
arquivo,
|
|
116
|
-
tipoArquivo:
|
|
147
|
+
tipoArquivo: "router",
|
|
117
148
|
});
|
|
118
149
|
rotas.push({
|
|
119
150
|
origem: "flutter-consumer",
|
|
120
151
|
metodo: "VIEW",
|
|
121
|
-
caminho:
|
|
152
|
+
caminho: rotaFlutter.rota,
|
|
122
153
|
arquivo,
|
|
123
|
-
simbolo:
|
|
154
|
+
simbolo: "router",
|
|
124
155
|
});
|
|
125
156
|
}
|
|
126
|
-
if (arquivoEhRotasFlutterConsumer(relacao, texto)) {
|
|
127
|
-
for (const rotaFlutter of extrairRotasFlutterConsumer(relacao, texto)) {
|
|
128
|
-
consumerSurfaces.set(`${rotaFlutter.rota}:${arquivo}:router`, {
|
|
129
|
-
rota: rotaFlutter.rota,
|
|
130
|
-
arquivo,
|
|
131
|
-
tipoArquivo: "router",
|
|
132
|
-
});
|
|
133
|
-
rotas.push({
|
|
134
|
-
origem: "flutter-consumer",
|
|
135
|
-
metodo: "VIEW",
|
|
136
|
-
caminho: rotaFlutter.rota,
|
|
137
|
-
arquivo,
|
|
138
|
-
simbolo: "router",
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
157
|
}
|
|
143
158
|
}
|
|
144
159
|
return {
|
|
@@ -173,135 +188,129 @@ export function registrarSimboloGenerico(simbolos, origem, basesSimbolicas, arqu
|
|
|
173
188
|
}
|
|
174
189
|
}
|
|
175
190
|
}
|
|
176
|
-
export async function indexarDotnet(diretorios) {
|
|
191
|
+
export async function indexarDotnet(diretorios, adaptadorLeitura) {
|
|
192
|
+
adaptadorLeitura?.emitir?.("extractor.run");
|
|
177
193
|
const simbolos = new Map();
|
|
178
194
|
const rotas = [];
|
|
179
195
|
const recursos = new Map();
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
});
|
|
200
|
-
}
|
|
196
|
+
const arquivos = (await listarArquivosIndexacaoCompartilhada(diretorios, [".cs"], adaptadorLeitura))
|
|
197
|
+
.filter(({ arquivo }) => !/(^|[\\/])(bin|obj|Test[s]?)([\\/]|$)/i.test(arquivo));
|
|
198
|
+
for (const { diretorio, arquivo } of arquivos) {
|
|
199
|
+
const codigo = await lerTextoIndexacaoCompartilhada(arquivo, adaptadorLeitura);
|
|
200
|
+
const basesSimbolicas = caminhosSimbolicos(diretorio, arquivo);
|
|
201
|
+
for (const recurso of extrairRecursosPersistenciaCodigoVivo(arquivo, codigo)) {
|
|
202
|
+
registrarRecursoDrift(recursos, recurso.origem, recurso.tipo, recurso.nome, recurso.arquivo, recurso.simbolo);
|
|
203
|
+
}
|
|
204
|
+
for (const simbolo of extrairSimbolosDotnet(codigo)) {
|
|
205
|
+
registrarSimboloGenerico(simbolos, "cs", basesSimbolicas, arquivo, simbolo.simbolo);
|
|
206
|
+
}
|
|
207
|
+
for (const rota of extrairRotasDotnet(codigo)) {
|
|
208
|
+
rotas.push({
|
|
209
|
+
origem: "dotnet",
|
|
210
|
+
metodo: rota.metodo,
|
|
211
|
+
caminho: rota.caminho,
|
|
212
|
+
arquivo,
|
|
213
|
+
simbolo: rota.simbolo,
|
|
214
|
+
});
|
|
201
215
|
}
|
|
202
216
|
}
|
|
203
217
|
return { simbolos: [...simbolos.values()], rotas, recursos: [...recursos.values()] };
|
|
204
218
|
}
|
|
205
|
-
export async function indexarJava(diretorios) {
|
|
219
|
+
export async function indexarJava(diretorios, adaptadorLeitura) {
|
|
220
|
+
adaptadorLeitura?.emitir?.("extractor.run");
|
|
206
221
|
const simbolos = new Map();
|
|
207
222
|
const rotas = [];
|
|
208
223
|
const recursos = new Map();
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
});
|
|
229
|
-
}
|
|
224
|
+
const arquivos = (await listarArquivosIndexacaoCompartilhada(diretorios, [".java"], adaptadorLeitura))
|
|
225
|
+
.filter(({ arquivo }) => !/(^|[\\/])(target|build|out|Test[s]?)([\\/]|$)/i.test(arquivo));
|
|
226
|
+
for (const { diretorio, arquivo } of arquivos) {
|
|
227
|
+
const codigo = await lerTextoIndexacaoCompartilhada(arquivo, adaptadorLeitura);
|
|
228
|
+
const basesSimbolicas = caminhosSimbolicos(diretorio, arquivo);
|
|
229
|
+
for (const recurso of extrairRecursosPersistenciaCodigoVivo(arquivo, codigo)) {
|
|
230
|
+
registrarRecursoDrift(recursos, recurso.origem, recurso.tipo, recurso.nome, recurso.arquivo, recurso.simbolo);
|
|
231
|
+
}
|
|
232
|
+
for (const simbolo of extrairSimbolosJava(codigo)) {
|
|
233
|
+
registrarSimboloGenerico(simbolos, "java", basesSimbolicas, arquivo, simbolo.simbolo);
|
|
234
|
+
}
|
|
235
|
+
for (const rota of extrairRotasJava(codigo)) {
|
|
236
|
+
rotas.push({
|
|
237
|
+
origem: "java",
|
|
238
|
+
metodo: rota.metodo,
|
|
239
|
+
caminho: rota.caminho,
|
|
240
|
+
arquivo,
|
|
241
|
+
simbolo: rota.simbolo,
|
|
242
|
+
});
|
|
230
243
|
}
|
|
231
244
|
}
|
|
232
245
|
return { simbolos: [...simbolos.values()], rotas, recursos: [...recursos.values()] };
|
|
233
246
|
}
|
|
234
|
-
export async function indexarGo(diretorios) {
|
|
247
|
+
export async function indexarGo(diretorios, adaptadorLeitura) {
|
|
248
|
+
adaptadorLeitura?.emitir?.("extractor.run");
|
|
235
249
|
const simbolos = new Map();
|
|
236
250
|
const rotas = [];
|
|
237
251
|
const recursos = new Map();
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
});
|
|
257
|
-
}
|
|
252
|
+
const arquivos = await listarArquivosIndexacaoCompartilhada(diretorios, [".go"], adaptadorLeitura);
|
|
253
|
+
for (const { diretorio, arquivo } of arquivos) {
|
|
254
|
+
const codigo = await lerTextoIndexacaoCompartilhada(arquivo, adaptadorLeitura);
|
|
255
|
+
const basesSimbolicas = caminhosSimbolicos(diretorio, arquivo);
|
|
256
|
+
for (const recurso of extrairRecursosPersistenciaCodigoVivo(arquivo, codigo)) {
|
|
257
|
+
registrarRecursoDrift(recursos, recurso.origem, recurso.tipo, recurso.nome, recurso.arquivo, recurso.simbolo);
|
|
258
|
+
}
|
|
259
|
+
for (const simbolo of extrairSimbolosGo(codigo)) {
|
|
260
|
+
registrarSimboloGenerico(simbolos, "go", basesSimbolicas, arquivo, simbolo.simbolo);
|
|
261
|
+
}
|
|
262
|
+
for (const rota of extrairRotasGo(codigo)) {
|
|
263
|
+
rotas.push({
|
|
264
|
+
origem: "go",
|
|
265
|
+
metodo: rota.metodo,
|
|
266
|
+
caminho: rota.caminho,
|
|
267
|
+
arquivo,
|
|
268
|
+
simbolo: rota.simbolo,
|
|
269
|
+
});
|
|
258
270
|
}
|
|
259
271
|
}
|
|
260
272
|
return { simbolos: [...simbolos.values()], rotas, recursos: [...recursos.values()] };
|
|
261
273
|
}
|
|
262
|
-
export async function indexarRust(diretorios) {
|
|
274
|
+
export async function indexarRust(diretorios, adaptadorLeitura) {
|
|
275
|
+
adaptadorLeitura?.emitir?.("extractor.run");
|
|
263
276
|
const simbolos = new Map();
|
|
264
277
|
const rotas = [];
|
|
265
278
|
const recursos = new Map();
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
});
|
|
285
|
-
}
|
|
279
|
+
const arquivos = await listarArquivosIndexacaoCompartilhada(diretorios, [".rs"], adaptadorLeitura);
|
|
280
|
+
for (const { diretorio, arquivo } of arquivos) {
|
|
281
|
+
const codigo = await lerTextoIndexacaoCompartilhada(arquivo, adaptadorLeitura);
|
|
282
|
+
const basesSimbolicas = caminhosSimbolicos(diretorio, arquivo);
|
|
283
|
+
for (const recurso of extrairRecursosPersistenciaCodigoVivo(arquivo, codigo)) {
|
|
284
|
+
registrarRecursoDrift(recursos, recurso.origem, recurso.tipo, recurso.nome, recurso.arquivo, recurso.simbolo);
|
|
285
|
+
}
|
|
286
|
+
for (const simbolo of extrairSimbolosRust(codigo)) {
|
|
287
|
+
registrarSimboloGenerico(simbolos, "rust", basesSimbolicas, arquivo, simbolo.simbolo);
|
|
288
|
+
}
|
|
289
|
+
for (const rota of extrairRotasRust(codigo)) {
|
|
290
|
+
rotas.push({
|
|
291
|
+
origem: "rust",
|
|
292
|
+
metodo: rota.metodo,
|
|
293
|
+
caminho: rota.caminho,
|
|
294
|
+
arquivo,
|
|
295
|
+
simbolo: rota.simbolo,
|
|
296
|
+
});
|
|
286
297
|
}
|
|
287
298
|
}
|
|
288
299
|
return { simbolos: [...simbolos.values()], rotas, recursos: [...recursos.values()] };
|
|
289
300
|
}
|
|
290
|
-
export async function indexarCpp(diretorios) {
|
|
301
|
+
export async function indexarCpp(diretorios, adaptadorLeitura) {
|
|
302
|
+
adaptadorLeitura?.emitir?.("extractor.run");
|
|
291
303
|
const simbolos = new Map();
|
|
292
304
|
const recursos = new Map();
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
for (const simbolo of extrairSimbolosCpp(codigo)) {
|
|
303
|
-
registrarSimboloGenerico(simbolos, "cpp", basesSimbolicas, arquivo, simbolo.simbolo);
|
|
304
|
-
}
|
|
305
|
+
const arquivos = (await listarArquivosIndexacaoCompartilhada(diretorios, [".cpp", ".cc", ".cxx", ".hpp", ".h"], adaptadorLeitura)).filter(({ arquivo }) => !/(^|[\\/])(windows|linux|macos|runner|flutter|ephemeral|build|vendor)([\\/]|$)/i.test(arquivo));
|
|
306
|
+
for (const { diretorio, arquivo } of arquivos) {
|
|
307
|
+
const codigo = await lerTextoIndexacaoCompartilhada(arquivo, adaptadorLeitura);
|
|
308
|
+
const basesSimbolicas = caminhosSimbolicos(diretorio, arquivo);
|
|
309
|
+
for (const recurso of extrairRecursosPersistenciaCodigoVivo(arquivo, codigo)) {
|
|
310
|
+
registrarRecursoDrift(recursos, recurso.origem, recurso.tipo, recurso.nome, recurso.arquivo, recurso.simbolo);
|
|
311
|
+
}
|
|
312
|
+
for (const simbolo of extrairSimbolosCpp(codigo)) {
|
|
313
|
+
registrarSimboloGenerico(simbolos, "cpp", basesSimbolicas, arquivo, simbolo.simbolo);
|
|
305
314
|
}
|
|
306
315
|
}
|
|
307
316
|
return {
|
|
@@ -309,40 +318,39 @@ export async function indexarCpp(diretorios) {
|
|
|
309
318
|
recursos: [...recursos.values()],
|
|
310
319
|
};
|
|
311
320
|
}
|
|
312
|
-
export async function indexarPhp(diretorios) {
|
|
321
|
+
export async function indexarPhp(diretorios, adaptadorLeitura) {
|
|
322
|
+
adaptadorLeitura?.emitir?.("extractor.run");
|
|
313
323
|
const simbolos = new Map();
|
|
314
324
|
const rotas = [];
|
|
315
325
|
const recursos = new Map();
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
simbolos.set(alias, {
|
|
329
|
-
origem: "php",
|
|
330
|
-
caminho: alias,
|
|
331
|
-
arquivo,
|
|
332
|
-
simbolo: simbolo.simbolo,
|
|
333
|
-
});
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
for (const rota of extrairRotasPhp(codigo)) {
|
|
337
|
-
rotas.push({
|
|
326
|
+
const arquivos = (await listarArquivosIndexacaoCompartilhada(diretorios, [".php"], adaptadorLeitura))
|
|
327
|
+
.filter(({ arquivo }) => !/(^|[\\/])(vendor|storage|bootstrap[\\/]cache|cache|tests?)([\\/]|$)/i.test(arquivo));
|
|
328
|
+
for (const { diretorio, arquivo } of arquivos) {
|
|
329
|
+
const codigo = await lerTextoIndexacaoCompartilhada(arquivo, adaptadorLeitura);
|
|
330
|
+
const basesSimbolicas = caminhosSimbolicos(diretorio, arquivo);
|
|
331
|
+
for (const recurso of extrairRecursosPersistenciaCodigoVivo(arquivo, codigo)) {
|
|
332
|
+
registrarRecursoDrift(recursos, recurso.origem, recurso.tipo, recurso.nome, recurso.arquivo, recurso.simbolo);
|
|
333
|
+
}
|
|
334
|
+
for (const simbolo of extrairSimbolosPhp(codigo)) {
|
|
335
|
+
registrarSimboloGenerico(simbolos, "php", basesSimbolicas, arquivo, simbolo.simbolo);
|
|
336
|
+
for (const alias of simbolo.aliases ?? []) {
|
|
337
|
+
simbolos.set(alias, {
|
|
338
338
|
origem: "php",
|
|
339
|
-
|
|
340
|
-
caminho: rota.caminho,
|
|
339
|
+
caminho: alias,
|
|
341
340
|
arquivo,
|
|
342
|
-
simbolo:
|
|
341
|
+
simbolo: simbolo.simbolo,
|
|
343
342
|
});
|
|
344
343
|
}
|
|
345
344
|
}
|
|
345
|
+
for (const rota of extrairRotasPhp(codigo)) {
|
|
346
|
+
rotas.push({
|
|
347
|
+
origem: "php",
|
|
348
|
+
metodo: rota.metodo,
|
|
349
|
+
caminho: rota.caminho,
|
|
350
|
+
arquivo,
|
|
351
|
+
simbolo: rota.simbolo,
|
|
352
|
+
});
|
|
353
|
+
}
|
|
346
354
|
}
|
|
347
355
|
return {
|
|
348
356
|
simbolos: [...simbolos.values()],
|
|
@@ -350,21 +358,20 @@ export async function indexarPhp(diretorios) {
|
|
|
350
358
|
recursos: [...recursos.values()],
|
|
351
359
|
};
|
|
352
360
|
}
|
|
353
|
-
export async function indexarLua(diretorios) {
|
|
361
|
+
export async function indexarLua(diretorios, adaptadorLeitura) {
|
|
362
|
+
adaptadorLeitura?.emitir?.("extractor.run");
|
|
354
363
|
const simbolos = new Map();
|
|
355
364
|
const recursos = new Map();
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
registrarSimboloGenerico(simbolos, "lua", basesSimbolicas, arquivo, simbolo.simbolo);
|
|
367
|
-
}
|
|
365
|
+
const arquivos = (await listarArquivosIndexacaoCompartilhada(diretorios, [".lua"], adaptadorLeitura))
|
|
366
|
+
.filter(({ arquivo }) => !/(^|[\\/])(vendor|build|dist|generated|tests?)([\\/]|$)/i.test(arquivo));
|
|
367
|
+
for (const { diretorio, arquivo } of arquivos) {
|
|
368
|
+
const codigo = await lerTextoIndexacaoCompartilhada(arquivo, adaptadorLeitura);
|
|
369
|
+
const basesSimbolicas = caminhosSimbolicos(diretorio, arquivo);
|
|
370
|
+
for (const recurso of extrairRecursosPersistenciaCodigoVivo(arquivo, codigo)) {
|
|
371
|
+
registrarRecursoDrift(recursos, recurso.origem, recurso.tipo, recurso.nome, recurso.arquivo, recurso.simbolo);
|
|
372
|
+
}
|
|
373
|
+
for (const simbolo of extrairSimbolosLua(codigo)) {
|
|
374
|
+
registrarSimboloGenerico(simbolos, "lua", basesSimbolicas, arquivo, simbolo.simbolo);
|
|
368
375
|
}
|
|
369
376
|
}
|
|
370
377
|
return {
|
|
@@ -372,26 +379,25 @@ export async function indexarLua(diretorios) {
|
|
|
372
379
|
recursos: [...recursos.values()],
|
|
373
380
|
};
|
|
374
381
|
}
|
|
375
|
-
export async function indexarPersistenciaDeclarativa(diretorios) {
|
|
382
|
+
export async function indexarPersistenciaDeclarativa(diretorios, adaptadorLeitura) {
|
|
383
|
+
adaptadorLeitura?.emitir?.("extractor.run");
|
|
376
384
|
const recursos = new Map();
|
|
377
385
|
const simbolos = new Map();
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
simbolos.set(`${simbolo.caminho}:${simbolo.arquivo}`, simbolo);
|
|
394
|
-
}
|
|
386
|
+
const arquivos = await listarArquivosIndexacaoCompartilhada(diretorios, [
|
|
387
|
+
".sql", ".psql", ".ddl", ".prisma",
|
|
388
|
+
".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
|
|
389
|
+
".py", ".dart", ".lua", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h", ".php",
|
|
390
|
+
], adaptadorLeitura);
|
|
391
|
+
for (const { arquivo } of arquivos) {
|
|
392
|
+
const codigo = await lerTextoIndexacaoCompartilhada(arquivo, adaptadorLeitura);
|
|
393
|
+
const extracoes = arquivo.endsWith(".prisma")
|
|
394
|
+
? extrairRecursosPrisma(arquivo, codigo)
|
|
395
|
+
: extrairRecursosPersistenciaCodigoVivo(arquivo, codigo);
|
|
396
|
+
for (const recurso of extracoes) {
|
|
397
|
+
registrarRecursoDrift(recursos, recurso.origem, recurso.tipo, recurso.nome, recurso.arquivo, recurso.simbolo);
|
|
398
|
+
}
|
|
399
|
+
for (const simbolo of extrairSimbolosSqlDeclarativos(arquivo, codigo)) {
|
|
400
|
+
simbolos.set(`${simbolo.caminho}:${simbolo.arquivo}`, simbolo);
|
|
395
401
|
}
|
|
396
402
|
}
|
|
397
403
|
return { recursos: [...recursos.values()], simbolos: [...simbolos.values()] };
|