-
Notifications
You must be signed in to change notification settings - Fork 0
Arquitetura
Visão geral da arquitetura interna da extensão para contribuidores.


src/extension.ts é o orquestrador. src/runner.ts contém executeRun (modo
CLI) e src/oracleRunner.ts contém executeRunOracle (modo Oracle direto).
As funções canônicas compartilhadas ficam em src/results.ts
(applyResultsFromCases, applyCoverageFromXml, countResults,
resolveStackFrameToUri).
-
oracleRunner.ts: conn1 executaut_runner.run(...)(bloqueante); conn2 faz polling deUT_OUTPUT_BUFFER_TMPa cada 200ms (documentação em tempo real + XML JUnit/Cobertura no final). -
Connection pooling (v0.10.0): pool gerenciado (
ensurePool), recriado se a conexão mudar, fechado nodeactivate()com drenagem de 10s. -
discoverUtplsqlSchema: prefixoUT3.viaALL_SYNONYMS(shared install).
O main aponta para dist/extension.js — bundle único via esbuild
(npm run bundle), com vscode e oracledb externos; os binários nativos
do oracledb são podados no VSIX (.vscodeignore), sobrando só o thin driver
(plugins/ de auth IAM/OCI também é podado — a extensão usa apenas conexão
user/pass). Deps puras (fast-xml-parser v5 + transitivas, iconv-lite) vão
embutidas no bundle.
Puro (testável com node --test) |
Depende de vscode
|
|---|---|
suiteParser.ts — regex %suite/%test + annotations |
extension.ts |
junit.ts — parse XML JUnit + stack frames |
runner.ts, results.ts
|
cobertura.ts — parse XML Cobertura |
config.ts |
invocation.ts — monta args CLI |
cli.ts |
matching.ts — filtro por URI/pasta + matching resultado→teste |
discovery.ts |
cliInfo.ts — parse utplsql info
|
coverage.ts, oracleRunner.ts
|
cliReporters.ts — parse utplsql reporters
|
compilationDiagnostics.ts, quickfix.ts
|
cliEncoding.ts — decode de output |
decorations.ts, statusBar.ts
|
codelens.ts (parse) — parseCodeLensItems
|
|
state.ts, types.ts (type-only) |
Módulos da coluna esquerda não importam vscode (em runtime) e são
testáveis com node --test sem qualquer setup.
| Key | Quando |
|---|---|
utplsql:activated |
Extensão ativada |
utplsql:running |
Execução em andamento |
utplsql:connected |
Conexão resolvida/limpa |
utplsql:hasFailures |
Último run teve falhas |
| Setting (package.json) | config.ts (readConfig) |
Uso |
|---|---|---|
utplsql.cliPath |
cfg.cliPath |
invocation.ts (file) |
utplsql.cliHome |
cfg.cliHome |
invocation.ts (classpath modo java) |
utplsql.invocation |
cfg.invocation |
invocation.ts (launcher vs java) |
utplsql.javaPath/javaArgs
|
cfg.javaPath/cfg.javaArgs
|
invocation.ts (modo java) |
utplsql.sourcePath |
cfg.sourcePath |
-source_path / resolveSourceUri
|
utplsql.includePatterns |
cfg.includePatterns |
discovery.ts (findFiles) |
utplsql.extraRunArgs |
cfg.extraRunArgs |
args extras do CLI |
utplsql.coverageOwner/coverageSourceArgs
|
cfg.coverageOwner/cfg.coverageSourceArgs
|
mapeamento de cobertura CLI |
utplsql.timeoutMinutes |
cfg.timeoutMinutes |
-t=N (só se !=60) |
utplsql.dbmsOutput |
cfg.dbmsOutput |
-D (só se true) |
utplsql.quiet |
cfg.quiet |
-q (só se true) |
utplsql.failureExitCode |
cfg.failureExitCode |
--failure-exit-code (só se !=1) |
utplsql.additionalReporters |
cfg.additionalReporters |
-f= flags (deduplicados) |
utplsql.runnerMode |
cfg.runnerMode |
runner.ts (auto/cli/oracle) |
utplsql.oraclePoolMin/Max/Increment/PingInterval |
cfg.oraclePool* |
oracleRunner.ts (ensurePool) |
utplsql.codeLens/statusBar/decorations.enabled |
cfg.*Enabled |
providers UX |
utplsql.compilationDiagnostics.enabled |
cfg.compilationDiagnosticsEnabled |
runner.ts |
utplsql.setupDiagnostics.enabled |
cfg.setupDiagnosticsEnabled |
quickfix.ts |
utplsql.organization/organization.schemaPattern
|
cfg.organization/organizationSchemaPattern
|
extension.ts (árvore + descoberta via DB) |
utplsql.connection |
resolveConnection() |
connection param CLI/Oracle |
UTPLSQL_CONN (env) |
resolveConnection() (2ª fonte) |
connection param CLI/Oracle |
Módulos que importam vscode (coluna da direita) usam um sistema de stub
em duas camadas:
-
Por teste —
src/test/unit/setup.tsredirecionarequire('vscode')parasrc/test/vscode-stub.ts -
Runner global —
scripts/run-tests.cjscom--require scripts/test-setup.cjscomo rede de segurança
npm run test:integration sobe uma instância VSCode via @vscode/test-cli.
Requer banco Oracle real + UTPLSQL_CONN, UTPLSQL_CLI_PATH, UTPLSQL_CLI_HOME
definidos em .env.
applyResultsFromCases em results.ts (função canônica, v0.11.0) usa
heurística: casa por package (último segmento do classname JUnit) +
nome/descrição do teste, com fallback por nome. O índice de match é construído
em matching.ts (funções puras buildMatchIndex/findByNameOnly), escopado
por package para minimizar ambiguidade. applyResults em runner.ts é só um
wrapper (erro quando o JUnit não existe).
resolveSourceUri em coverage.ts tenta:
- Caminho absoluto (já resolvido)
- Relativo ao workspace folder
- Relativo ao
sourcePath
- Getting Started
- Usage
- Advanced Tools
- Reference
- Development
- Help