@aroman22/codegraph-vba-darwin-arm64 1.15.0 → 1.17.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/lib/dist/bin/codegraph.js +13 -7
- package/lib/dist/bin/codegraph.js.map +1 -1
- package/lib/dist/bin/daemon-release.d.ts +7 -0
- package/lib/dist/bin/daemon-release.d.ts.map +1 -0
- package/lib/dist/bin/daemon-release.js +18 -0
- package/lib/dist/bin/daemon-release.js.map +1 -0
- package/lib/dist/db/queries.d.ts +41 -0
- package/lib/dist/db/queries.d.ts.map +1 -1
- package/lib/dist/db/queries.js +78 -1
- package/lib/dist/db/queries.js.map +1 -1
- package/lib/dist/extraction/access-erd-extractor.d.ts +57 -0
- package/lib/dist/extraction/access-erd-extractor.d.ts.map +1 -0
- package/lib/dist/extraction/access-erd-extractor.js +389 -0
- package/lib/dist/extraction/access-erd-extractor.js.map +1 -0
- package/lib/dist/extraction/extraction-version.d.ts +1 -1
- package/lib/dist/extraction/extraction-version.js +1 -1
- package/lib/dist/extraction/grammars.d.ts +20 -0
- package/lib/dist/extraction/grammars.d.ts.map +1 -1
- package/lib/dist/extraction/grammars.js +34 -0
- package/lib/dist/extraction/grammars.js.map +1 -1
- package/lib/dist/extraction/index.d.ts +1 -0
- package/lib/dist/extraction/index.d.ts.map +1 -1
- package/lib/dist/extraction/index.js +371 -351
- package/lib/dist/extraction/index.js.map +1 -1
- package/lib/dist/extraction/parse-pool.d.ts +8 -3
- package/lib/dist/extraction/parse-pool.d.ts.map +1 -1
- package/lib/dist/extraction/parse-pool.js +1 -2
- package/lib/dist/extraction/parse-pool.js.map +1 -1
- package/lib/dist/extraction/parse-worker.js +7 -6
- package/lib/dist/extraction/parse-worker.js.map +1 -1
- package/lib/dist/extraction/sql-query-extractor.d.ts +16 -14
- package/lib/dist/extraction/sql-query-extractor.d.ts.map +1 -1
- package/lib/dist/extraction/sql-query-extractor.js +43 -31
- package/lib/dist/extraction/sql-query-extractor.js.map +1 -1
- package/lib/dist/extraction/sql-table-scan.d.ts +184 -0
- package/lib/dist/extraction/sql-table-scan.d.ts.map +1 -0
- package/lib/dist/extraction/sql-table-scan.js +288 -0
- package/lib/dist/extraction/sql-table-scan.js.map +1 -0
- package/lib/dist/extraction/tree-sitter.d.ts +10 -1
- package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/lib/dist/extraction/tree-sitter.js +34 -3
- package/lib/dist/extraction/tree-sitter.js.map +1 -1
- package/lib/dist/extraction/vba/call-sweep.d.ts +2 -7
- package/lib/dist/extraction/vba/call-sweep.d.ts.map +1 -1
- package/lib/dist/extraction/vba/call-sweep.js +144 -90
- package/lib/dist/extraction/vba/call-sweep.js.map +1 -1
- package/lib/dist/extraction/vba/calls.d.ts +24 -4
- package/lib/dist/extraction/vba/calls.d.ts.map +1 -1
- package/lib/dist/extraction/vba/calls.js +42 -12
- package/lib/dist/extraction/vba/calls.js.map +1 -1
- package/lib/dist/extraction/vba/constants.d.ts +7 -14
- package/lib/dist/extraction/vba/constants.d.ts.map +1 -1
- package/lib/dist/extraction/vba/constants.js +8 -36
- package/lib/dist/extraction/vba/constants.js.map +1 -1
- package/lib/dist/extraction/vba/context.d.ts +443 -7
- package/lib/dist/extraction/vba/context.d.ts.map +1 -1
- package/lib/dist/extraction/vba/context.js +325 -29
- package/lib/dist/extraction/vba/context.js.map +1 -1
- package/lib/dist/extraction/vba/controls.d.ts +18 -1
- package/lib/dist/extraction/vba/controls.d.ts.map +1 -1
- package/lib/dist/extraction/vba/controls.js +99 -27
- package/lib/dist/extraction/vba/controls.js.map +1 -1
- package/lib/dist/extraction/vba/declarations.d.ts +1 -6
- package/lib/dist/extraction/vba/declarations.d.ts.map +1 -1
- package/lib/dist/extraction/vba/declarations.js +5 -39
- package/lib/dist/extraction/vba/declarations.js.map +1 -1
- package/lib/dist/extraction/vba/dims.d.ts +11 -7
- package/lib/dist/extraction/vba/dims.d.ts.map +1 -1
- package/lib/dist/extraction/vba/dims.js +265 -29
- package/lib/dist/extraction/vba/dims.js.map +1 -1
- package/lib/dist/extraction/vba/docmd.d.ts +29 -2
- package/lib/dist/extraction/vba/docmd.d.ts.map +1 -1
- package/lib/dist/extraction/vba/docmd.js +297 -18
- package/lib/dist/extraction/vba/docmd.js.map +1 -1
- package/lib/dist/extraction/vba/enums-consts.d.ts +7 -14
- package/lib/dist/extraction/vba/enums-consts.d.ts.map +1 -1
- package/lib/dist/extraction/vba/enums-consts.js +11 -45
- package/lib/dist/extraction/vba/enums-consts.js.map +1 -1
- package/lib/dist/extraction/vba/error-channel.d.ts +57 -0
- package/lib/dist/extraction/vba/error-channel.d.ts.map +1 -0
- package/lib/dist/extraction/vba/error-channel.js +128 -0
- package/lib/dist/extraction/vba/error-channel.js.map +1 -0
- package/lib/dist/extraction/vba/errors.d.ts +64 -0
- package/lib/dist/extraction/vba/errors.d.ts.map +1 -0
- package/lib/dist/extraction/vba/errors.js +775 -0
- package/lib/dist/extraction/vba/errors.js.map +1 -0
- package/lib/dist/extraction/vba/filesystem-statements.d.ts +23 -0
- package/lib/dist/extraction/vba/filesystem-statements.d.ts.map +1 -0
- package/lib/dist/extraction/vba/filesystem-statements.js +70 -0
- package/lib/dist/extraction/vba/filesystem-statements.js.map +1 -0
- package/lib/dist/extraction/vba/implements.d.ts +1 -6
- package/lib/dist/extraction/vba/implements.d.ts.map +1 -1
- package/lib/dist/extraction/vba/implements.js +1 -22
- package/lib/dist/extraction/vba/implements.js.map +1 -1
- package/lib/dist/extraction/vba/labels.d.ts +26 -0
- package/lib/dist/extraction/vba/labels.d.ts.map +1 -0
- package/lib/dist/extraction/vba/labels.js +180 -0
- package/lib/dist/extraction/vba/labels.js.map +1 -0
- package/lib/dist/extraction/vba/module-vars.d.ts +36 -0
- package/lib/dist/extraction/vba/module-vars.d.ts.map +1 -0
- package/lib/dist/extraction/vba/module-vars.js +145 -0
- package/lib/dist/extraction/vba/module-vars.js.map +1 -0
- package/lib/dist/extraction/vba/options.d.ts +88 -0
- package/lib/dist/extraction/vba/options.d.ts.map +1 -0
- package/lib/dist/extraction/vba/options.js +39 -0
- package/lib/dist/extraction/vba/options.js.map +1 -0
- package/lib/dist/extraction/vba/parameters.d.ts +35 -0
- package/lib/dist/extraction/vba/parameters.d.ts.map +1 -0
- package/lib/dist/extraction/vba/parameters.js +110 -0
- package/lib/dist/extraction/vba/parameters.js.map +1 -0
- package/lib/dist/extraction/vba/procedures.d.ts +1 -9
- package/lib/dist/extraction/vba/procedures.d.ts.map +1 -1
- package/lib/dist/extraction/vba/procedures.js +174 -112
- package/lib/dist/extraction/vba/procedures.js.map +1 -1
- package/lib/dist/extraction/vba/rules.d.ts +10 -5
- package/lib/dist/extraction/vba/rules.d.ts.map +1 -1
- package/lib/dist/extraction/vba/rules.js +19 -0
- package/lib/dist/extraction/vba/rules.js.map +1 -1
- package/lib/dist/extraction/vba/runtime-objects.d.ts +59 -0
- package/lib/dist/extraction/vba/runtime-objects.d.ts.map +1 -0
- package/lib/dist/extraction/vba/runtime-objects.js +106 -0
- package/lib/dist/extraction/vba/runtime-objects.js.map +1 -0
- package/lib/dist/extraction/vba/signature.d.ts +57 -0
- package/lib/dist/extraction/vba/signature.d.ts.map +1 -0
- package/lib/dist/extraction/vba/signature.js +164 -0
- package/lib/dist/extraction/vba/signature.js.map +1 -0
- package/lib/dist/extraction/vba/sql-wrapper.d.ts +76 -3
- package/lib/dist/extraction/vba/sql-wrapper.d.ts.map +1 -1
- package/lib/dist/extraction/vba/sql-wrapper.js +725 -151
- package/lib/dist/extraction/vba/sql-wrapper.js.map +1 -1
- package/lib/dist/extraction/vba/tempvars.d.ts.map +1 -1
- package/lib/dist/extraction/vba/tempvars.js +4 -0
- package/lib/dist/extraction/vba/tempvars.js.map +1 -1
- package/lib/dist/extraction/vba/text-utils.d.ts +62 -2
- package/lib/dist/extraction/vba/text-utils.d.ts.map +1 -1
- package/lib/dist/extraction/vba/text-utils.js +84 -6
- package/lib/dist/extraction/vba/text-utils.js.map +1 -1
- package/lib/dist/extraction/vba-extractor.d.ts +18 -1
- package/lib/dist/extraction/vba-extractor.d.ts.map +1 -1
- package/lib/dist/extraction/vba-extractor.js +111 -16
- package/lib/dist/extraction/vba-extractor.js.map +1 -1
- package/lib/dist/extraction/vba-form-extractor.d.ts +28 -14
- package/lib/dist/extraction/vba-form-extractor.d.ts.map +1 -1
- package/lib/dist/extraction/vba-form-extractor.js +56 -21
- package/lib/dist/extraction/vba-form-extractor.js.map +1 -1
- package/lib/dist/extraction/vba-preprocess.d.ts +89 -3
- package/lib/dist/extraction/vba-preprocess.d.ts.map +1 -1
- package/lib/dist/extraction/vba-preprocess.js +221 -57
- package/lib/dist/extraction/vba-preprocess.js.map +1 -1
- package/lib/dist/extraction/vba-source.d.ts +0 -10
- package/lib/dist/extraction/vba-source.d.ts.map +1 -1
- package/lib/dist/extraction/vba-source.js +0 -13
- package/lib/dist/extraction/vba-source.js.map +1 -1
- package/lib/dist/extraction/vba-test-manifest-extractor.d.ts +0 -6
- package/lib/dist/extraction/vba-test-manifest-extractor.d.ts.map +1 -1
- package/lib/dist/extraction/vba-test-manifest-extractor.js +0 -1
- package/lib/dist/extraction/vba-test-manifest-extractor.js.map +1 -1
- package/lib/dist/graph/behavior-evidence.d.ts +162 -0
- package/lib/dist/graph/behavior-evidence.d.ts.map +1 -0
- package/lib/dist/graph/behavior-evidence.js +529 -0
- package/lib/dist/graph/behavior-evidence.js.map +1 -0
- package/lib/dist/index.d.ts +22 -0
- package/lib/dist/index.d.ts.map +1 -1
- package/lib/dist/index.js +37 -1
- package/lib/dist/index.js.map +1 -1
- package/lib/dist/mcp/daemon-manager.d.ts.map +1 -1
- package/lib/dist/mcp/daemon-manager.js +7 -3
- package/lib/dist/mcp/daemon-manager.js.map +1 -1
- package/lib/dist/mcp/daemon-paths.d.ts +6 -0
- package/lib/dist/mcp/daemon-paths.d.ts.map +1 -1
- package/lib/dist/mcp/daemon-paths.js +15 -0
- package/lib/dist/mcp/daemon-paths.js.map +1 -1
- package/lib/dist/mcp/daemon-registry.d.ts +82 -7
- package/lib/dist/mcp/daemon-registry.d.ts.map +1 -1
- package/lib/dist/mcp/daemon-registry.js +557 -45
- package/lib/dist/mcp/daemon-registry.js.map +1 -1
- package/lib/dist/mcp/daemon-watchdog.d.ts +12 -0
- package/lib/dist/mcp/daemon-watchdog.d.ts.map +1 -1
- package/lib/dist/mcp/daemon-watchdog.js +37 -7
- package/lib/dist/mcp/daemon-watchdog.js.map +1 -1
- package/lib/dist/mcp/daemon.d.ts +20 -1
- package/lib/dist/mcp/daemon.d.ts.map +1 -1
- package/lib/dist/mcp/daemon.js +123 -30
- package/lib/dist/mcp/daemon.js.map +1 -1
- package/lib/dist/mcp/index.d.ts.map +1 -1
- package/lib/dist/mcp/index.js +13 -2
- package/lib/dist/mcp/index.js.map +1 -1
- package/lib/dist/mcp/proxy.d.ts +32 -0
- package/lib/dist/mcp/proxy.d.ts.map +1 -1
- package/lib/dist/mcp/proxy.js +163 -31
- package/lib/dist/mcp/proxy.js.map +1 -1
- package/lib/dist/mcp/server-instructions.d.ts +1 -1
- package/lib/dist/mcp/server-instructions.d.ts.map +1 -1
- package/lib/dist/mcp/server-instructions.js +26 -4
- package/lib/dist/mcp/server-instructions.js.map +1 -1
- package/lib/dist/mcp/tools.d.ts +12 -0
- package/lib/dist/mcp/tools.d.ts.map +1 -1
- package/lib/dist/mcp/tools.js +92 -1
- package/lib/dist/mcp/tools.js.map +1 -1
- package/lib/dist/project-config.d.ts +43 -2
- package/lib/dist/project-config.d.ts.map +1 -1
- package/lib/dist/project-config.js +86 -2
- package/lib/dist/project-config.js.map +1 -1
- package/lib/dist/resolution/index.d.ts +47 -2
- package/lib/dist/resolution/index.d.ts.map +1 -1
- package/lib/dist/resolution/index.js +160 -5
- package/lib/dist/resolution/index.js.map +1 -1
- package/lib/dist/resolution/name-matcher.d.ts +25 -0
- package/lib/dist/resolution/name-matcher.d.ts.map +1 -1
- package/lib/dist/resolution/name-matcher.js +59 -0
- package/lib/dist/resolution/name-matcher.js.map +1 -1
- package/lib/dist/resolution/vba-runtime-objects.d.ts +11 -11
- package/lib/dist/resolution/vba-runtime-objects.d.ts.map +1 -1
- package/lib/dist/resolution/vba-runtime-objects.js +18 -38
- package/lib/dist/resolution/vba-runtime-objects.js.map +1 -1
- package/lib/dist/types.d.ts +13 -5
- package/lib/dist/types.d.ts.map +1 -1
- package/lib/dist/types.js +17 -0
- package/lib/dist/types.js.map +1 -1
- package/lib/dist/utils/backtrace-helpers.d.ts +14 -2
- package/lib/dist/utils/backtrace-helpers.d.ts.map +1 -1
- package/lib/dist/utils/backtrace-helpers.js +81 -7
- package/lib/dist/utils/backtrace-helpers.js.map +1 -1
- package/lib/dist/utils/sql-impact-helpers.d.ts.map +1 -1
- package/lib/dist/utils/sql-impact-helpers.js +119 -30
- package/lib/dist/utils/sql-impact-helpers.js.map +1 -1
- package/lib/node_modules/.modules.yaml +1 -1
- package/lib/node_modules/.pnpm-workspace-state-v1.json +1 -1
- package/lib/package.json +3 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/extraction/vba/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ProcInfo, VbaExtractorContext } from './context';
|
|
2
|
+
export declare const VBA_FILESYSTEM_STATEMENT_SYNTHESIZED_BY: "vba-filesystem-statement";
|
|
3
|
+
export type VbaFilesystemOperation = 'kill' | 'open' | 'close';
|
|
4
|
+
/**
|
|
5
|
+
* Parse only the intrinsic grammar-shaped statement forms. The input must be a
|
|
6
|
+
* single string-masked statement clause, so quoted keywords remain opaque while
|
|
7
|
+
* valid string operands retain their token shape.
|
|
8
|
+
*/
|
|
9
|
+
export declare function detectVbaFilesystemStatement(statement: string): VbaFilesystemOperation | null;
|
|
10
|
+
/**
|
|
11
|
+
* The shared provenance gate used by both resolution and runtime
|
|
12
|
+
* classification. Name, kind, language, family, and operation must agree; a
|
|
13
|
+
* copied or partially forged metadata stamp is rejected.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isExactVbaFilesystemStatementReference(ref: {
|
|
16
|
+
language?: string | null;
|
|
17
|
+
referenceKind?: string | null;
|
|
18
|
+
referenceName?: string | null;
|
|
19
|
+
metadata?: Record<string, unknown> | null;
|
|
20
|
+
}): boolean;
|
|
21
|
+
/** Emit one typed unresolved runtime reference from the containing procedure. */
|
|
22
|
+
export declare function emitVbaFilesystemStatementReference(ctx: VbaExtractorContext, caller: ProcInfo, statement: string, lineNum: number): boolean;
|
|
23
|
+
//# sourceMappingURL=filesystem-statements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-statements.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/filesystem-statements.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAE/D,eAAO,MAAM,uCAAuC,EAClD,0BAAmC,CAAC;AAEtC,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAkB/D;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,GAChB,sBAAsB,GAAG,IAAI,CAK/B;AAED;;;;GAIG;AACH,wBAAgB,sCAAsC,CAAC,GAAG,EAAE;IAC1D,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC3C,GAAG,OAAO,CAcV;AAED,iFAAiF;AACjF,wBAAgB,mCAAmC,CACjD,GAAG,EAAE,mBAAmB,EACxB,MAAM,EAAE,QAAQ,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAoBT"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VBA_FILESYSTEM_STATEMENT_SYNTHESIZED_BY = void 0;
|
|
4
|
+
exports.detectVbaFilesystemStatement = detectVbaFilesystemStatement;
|
|
5
|
+
exports.isExactVbaFilesystemStatementReference = isExactVbaFilesystemStatementReference;
|
|
6
|
+
exports.emitVbaFilesystemStatementReference = emitVbaFilesystemStatementReference;
|
|
7
|
+
exports.VBA_FILESYSTEM_STATEMENT_SYNTHESIZED_BY = 'vba-filesystem-statement';
|
|
8
|
+
const IDENT = String.raw `\p{L}[\p{L}\p{N}_]*`;
|
|
9
|
+
const FILE_NUMBER = String.raw `#?\s*(?:\d+|${IDENT})`;
|
|
10
|
+
const KILL_STATEMENT_RE = /^\s*Kill\s+(?!\s*\()([^,]+?)\s*$/iu;
|
|
11
|
+
const OPEN_STATEMENT_RE = new RegExp(String.raw `^\s*Open\s+(?!\s*\()(.+?)\s+For\s+(Append|Binary|Input|Output|Random)` +
|
|
12
|
+
String.raw `(?:\s+Access\s+(?:Read|Write|Read\s+Write))?` +
|
|
13
|
+
String.raw `(?:\s+Lock\s+(?:Read|Write|Read\s+Write|Shared))?` +
|
|
14
|
+
String.raw `\s+As\s+${FILE_NUMBER}(?:\s+Len\s*=\s*.+)?\s*$`, 'iu');
|
|
15
|
+
const CLOSE_STATEMENT_RE = new RegExp(String.raw `^\s*Close(?:\s+${FILE_NUMBER}(?:\s*,\s*${FILE_NUMBER})*)?\s*$`, 'iu');
|
|
16
|
+
/**
|
|
17
|
+
* Parse only the intrinsic grammar-shaped statement forms. The input must be a
|
|
18
|
+
* single string-masked statement clause, so quoted keywords remain opaque while
|
|
19
|
+
* valid string operands retain their token shape.
|
|
20
|
+
*/
|
|
21
|
+
function detectVbaFilesystemStatement(statement) {
|
|
22
|
+
if (KILL_STATEMENT_RE.test(statement))
|
|
23
|
+
return 'kill';
|
|
24
|
+
if (OPEN_STATEMENT_RE.test(statement))
|
|
25
|
+
return 'open';
|
|
26
|
+
if (CLOSE_STATEMENT_RE.test(statement))
|
|
27
|
+
return 'close';
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The shared provenance gate used by both resolution and runtime
|
|
32
|
+
* classification. Name, kind, language, family, and operation must agree; a
|
|
33
|
+
* copied or partially forged metadata stamp is rejected.
|
|
34
|
+
*/
|
|
35
|
+
function isExactVbaFilesystemStatementReference(ref) {
|
|
36
|
+
if ((ref.language ?? '').toLowerCase() !== 'vba')
|
|
37
|
+
return false;
|
|
38
|
+
if (ref.referenceKind !== 'calls')
|
|
39
|
+
return false;
|
|
40
|
+
const operation = (ref.referenceName ?? '').toLowerCase();
|
|
41
|
+
if (operation !== 'kill' && operation !== 'open' && operation !== 'close') {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
return (ref.metadata?.synthesizedBy === exports.VBA_FILESYSTEM_STATEMENT_SYNTHESIZED_BY &&
|
|
45
|
+
ref.metadata.runtimeFamily === 'filesystem' &&
|
|
46
|
+
ref.metadata.operation === operation);
|
|
47
|
+
}
|
|
48
|
+
/** Emit one typed unresolved runtime reference from the containing procedure. */
|
|
49
|
+
function emitVbaFilesystemStatementReference(ctx, caller, statement, lineNum) {
|
|
50
|
+
const operation = detectVbaFilesystemStatement(statement);
|
|
51
|
+
if (!operation)
|
|
52
|
+
return false;
|
|
53
|
+
const referenceName = operation[0].toUpperCase() + operation.slice(1);
|
|
54
|
+
ctx.unresolvedReferences.push({
|
|
55
|
+
fromNodeId: ctx.findOrCreateFunctionNodeId(caller),
|
|
56
|
+
referenceName,
|
|
57
|
+
referenceKind: 'calls',
|
|
58
|
+
line: lineNum,
|
|
59
|
+
column: Math.max(0, statement.search(/\S/)),
|
|
60
|
+
filePath: ctx.filePath,
|
|
61
|
+
language: 'vba',
|
|
62
|
+
metadata: {
|
|
63
|
+
synthesizedBy: exports.VBA_FILESYSTEM_STATEMENT_SYNTHESIZED_BY,
|
|
64
|
+
runtimeFamily: 'filesystem',
|
|
65
|
+
operation,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=filesystem-statements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-statements.js","sourceRoot":"","sources":["../../../src/extraction/vba/filesystem-statements.ts"],"names":[],"mappings":";;;AA4BA,oEAOC;AAOD,wFAmBC;AAGD,kFAyBC;AAvFY,QAAA,uCAAuC,GAClD,0BAAmC,CAAC;AAItC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAA,qBAAqB,CAAC;AAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAA,eAAe,KAAK,GAAG,CAAC;AAEtD,MAAM,iBAAiB,GAAG,oCAAoC,CAAC;AAC/D,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAClC,MAAM,CAAC,GAAG,CAAA,uEAAuE;IAC/E,MAAM,CAAC,GAAG,CAAA,8CAA8C;IACxD,MAAM,CAAC,GAAG,CAAA,mDAAmD;IAC7D,MAAM,CAAC,GAAG,CAAA,WAAW,WAAW,0BAA0B,EAC5D,IAAI,CACL,CAAC;AACF,MAAM,kBAAkB,GAAG,IAAI,MAAM,CACnC,MAAM,CAAC,GAAG,CAAA,kBAAkB,WAAW,aAAa,WAAW,UAAU,EACzE,IAAI,CACL,CAAC;AAEF;;;;GAIG;AACH,SAAgB,4BAA4B,CAC1C,SAAiB;IAEjB,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,MAAM,CAAC;IACrD,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,MAAM,CAAC;IACrD,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,OAAO,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAgB,sCAAsC,CAAC,GAKtD;IACC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAC/D,IAAI,GAAG,CAAC,aAAa,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAEhD,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1D,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,GAAG,CAAC,QAAQ,EAAE,aAAa,KAAK,+CAAuC;QACvE,GAAG,CAAC,QAAQ,CAAC,aAAa,KAAK,YAAY;QAC3C,GAAG,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,CACrC,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAgB,mCAAmC,CACjD,GAAwB,EACxB,MAAgB,EAChB,SAAiB,EACjB,OAAe;IAEf,MAAM,SAAS,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAE7B,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvE,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC;QAC5B,UAAU,EAAE,GAAG,CAAC,0BAA0B,CAAC,MAAM,CAAC;QAClD,aAAa;QACb,aAAa,EAAE,OAAO;QACtB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3C,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACR,aAAa,EAAE,+CAAuC;YACtD,aAAa,EAAE,YAAY;YAC3B,SAAS;SACV;KACF,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { VbaClassifier } from './context';
|
|
2
2
|
import { VbaExtractionRule } from './rules';
|
|
3
3
|
/**
|
|
4
4
|
* Issue #153: the declarative rule table for the implements concern.
|
|
@@ -19,9 +19,4 @@ export declare const RULES: readonly VbaExtractionRule<unknown>[];
|
|
|
19
19
|
* if/else cascade" is gone.
|
|
20
20
|
*/
|
|
21
21
|
export declare function createImplementsClassifier(): VbaClassifier;
|
|
22
|
-
/**
|
|
23
|
-
* Backward-compat wrapper (see procedures.ts). Returns the classifier's
|
|
24
|
-
* `count` so the orchestrator can decide `hasAnySymbols`.
|
|
25
|
-
*/
|
|
26
|
-
export declare function sweepImplements(ctx: VbaExtractorContext, src: string): number;
|
|
27
22
|
//# sourceMappingURL=implements.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implements.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/implements.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"implements.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/implements.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAwB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAKlE;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,EAAE,SAAS,iBAAiB,CAAC,OAAO,CAAC,EAyCtD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,IAAI,aAAa,CAS1D"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RULES = void 0;
|
|
4
4
|
exports.createImplementsClassifier = createImplementsClassifier;
|
|
5
|
-
exports.sweepImplements = sweepImplements;
|
|
6
5
|
const tree_sitter_helpers_1 = require("../tree-sitter-helpers");
|
|
7
6
|
const rules_1 = require("./rules");
|
|
8
7
|
/** Implements regex. */
|
|
@@ -72,28 +71,8 @@ function createImplementsClassifier() {
|
|
|
72
71
|
count: 0,
|
|
73
72
|
classifyLine(line, i, ctx) {
|
|
74
73
|
const lineNum = i + 1;
|
|
75
|
-
|
|
76
|
-
const m = (0, rules_1.matchRule)(rule.pattern, line);
|
|
77
|
-
if (!m)
|
|
78
|
-
continue;
|
|
79
|
-
const result = rule.emit(m, ctx, line, lineNum);
|
|
80
|
-
if (result !== null && result !== undefined) {
|
|
81
|
-
this.count += rule.count ? rule.count(result) : 1;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
74
|
+
this.count += (0, rules_1.runRules)(exports.RULES, ctx, line, line, lineNum, {});
|
|
84
75
|
},
|
|
85
76
|
};
|
|
86
77
|
}
|
|
87
|
-
/**
|
|
88
|
-
* Backward-compat wrapper (see procedures.ts). Returns the classifier's
|
|
89
|
-
* `count` so the orchestrator can decide `hasAnySymbols`.
|
|
90
|
-
*/
|
|
91
|
-
function sweepImplements(ctx, src) {
|
|
92
|
-
const cls = createImplementsClassifier();
|
|
93
|
-
const lines = src.split('\n');
|
|
94
|
-
for (let i = 0; i < lines.length; i++) {
|
|
95
|
-
cls.classifyLine(lines[i] ?? '', i, ctx);
|
|
96
|
-
}
|
|
97
|
-
return cls.count;
|
|
98
|
-
}
|
|
99
78
|
//# sourceMappingURL=implements.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implements.js","sourceRoot":"","sources":["../../../src/extraction/vba/implements.ts"],"names":[],"mappings":";;;AAyEA,
|
|
1
|
+
{"version":3,"file":"implements.js","sourceRoot":"","sources":["../../../src/extraction/vba/implements.ts"],"names":[],"mappings":";;;AAyEA,gEASC;AA5ED,gEAAwD;AAExD,mCAAkE;AAElE,wBAAwB;AACxB,MAAM,aAAa,GAAG,0CAA0C,CAAC;AAEjE;;;;;;;GAOG;AACU,QAAA,KAAK,GAA0C;IAC1D,IAAA,kBAAU,EAAC;QACT,EAAE,EAAE,YAAY;QAChB,WAAW,EACT,0GAA0G;QAC5G,OAAO,EAAE,aAAa;QACtB,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvB,MAAM,QAAQ,GAAG,IAAA,oCAAc,EAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1E,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBACb,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,WAAW;gBACjB,IAAI;gBACJ,aAAa,EAAE,IAAI;gBACnB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,OAAO;gBAChB,WAAW,EAAE,CAAC;gBACd,SAAS,EAAE,IAAI,CAAC,MAAM;gBACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;YACH,MAAM,IAAI,GAAS;gBACjB,MAAM,EAAE,EAAE,EAAE,kDAAkD;gBAC9D,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,YAAY;gBAClB,gEAAgE;gBAChE,wDAAwD;gBACxD,8DAA8D;gBAC9D,0DAA0D;gBAC1D,0BAA0B;gBAC1B,UAAU,EAAE,QAAQ;gBACpB,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,CAAC;aACV,CAAC;YACF,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,GAAG,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;CACH,CAAC;AAEF;;;;;;;;GAQG;AACH,SAAgB,0BAA0B;IACxC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,CAAC;QACR,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG;YACvB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,KAAK,IAAI,IAAA,gBAAQ,EAAC,aAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAC9D,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { VbaErrorPolicy, VbaErrorPolicyState, VbaExtractorContext } from './context';
|
|
2
|
+
/** `handles-error` edges and their unresolved twin carry this provenance. */
|
|
3
|
+
export declare const ERROR_HANDLER_SYNTHESIZED_BY = "vba-error-handler";
|
|
4
|
+
/** A plain `GoTo <label>` jump — a generic `references` edge. */
|
|
5
|
+
export declare const GOTO_SYNTHESIZED_BY = "vba-goto";
|
|
6
|
+
/**
|
|
7
|
+
* A `GoTo` (plain or `On Error`) naming a label the procedure never defines.
|
|
8
|
+
* One shared tag for both, because from a consumer's point of view they are
|
|
9
|
+
* the same defect: a jump with no landing site.
|
|
10
|
+
*/
|
|
11
|
+
export declare const GOTO_UNRESOLVED_SYNTHESIZED_BY = "vba-goto-unresolved";
|
|
12
|
+
/**
|
|
13
|
+
* Emit this procedure's `label` nodes and the three edge shapes that reach
|
|
14
|
+
* them, then hand control back to `closeErrorPolicy`.
|
|
15
|
+
*
|
|
16
|
+
* `policy` is the object that was just folded from `state`; it is read, never
|
|
17
|
+
* recomputed. `endLine` is the procedure's terminating `End` line.
|
|
18
|
+
*
|
|
19
|
+
* Ordering matters and is the caller's responsibility: this runs BEFORE
|
|
20
|
+
* #260's `markErrorHandlerRegion`, so a `GoTo` or a second `On Error GoTo`
|
|
21
|
+
* written inside the handler region is stamped `metadata.inErrorHandler` by
|
|
22
|
+
* that single stamping point like every other edge, instead of quietly
|
|
23
|
+
* becoming the one emitter that opted out of it.
|
|
24
|
+
*/
|
|
25
|
+
export declare function emitLabelNodes(ctx: VbaExtractorContext, state: VbaErrorPolicyState, policy: VbaErrorPolicy, endLine: number): void;
|
|
26
|
+
//# sourceMappingURL=labels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/labels.ts"],"names":[],"mappings":"AAiDA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EAEpB,MAAM,WAAW,CAAC;AAEnB,6EAA6E;AAC7E,eAAO,MAAM,4BAA4B,sBAAsB,CAAC;AAEhE,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,wBAAwB,CAAC;AAEpE;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,mBAAmB,EACxB,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,GACd,IAAI,CA0FN"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GOTO_UNRESOLVED_SYNTHESIZED_BY = exports.GOTO_SYNTHESIZED_BY = exports.ERROR_HANDLER_SYNTHESIZED_BY = void 0;
|
|
4
|
+
exports.emitLabelNodes = emitLabelNodes;
|
|
5
|
+
/**
|
|
6
|
+
* Issue #263 (task E6 of `docs/vba-error-handling-plan.md`): turn the line
|
|
7
|
+
* labels the error-policy classifier has ALREADY found into `label` nodes,
|
|
8
|
+
* plus the edges that bind them to their procedure.
|
|
9
|
+
*
|
|
10
|
+
* This module is EMISSION ONLY, in the same sense `parameters.ts` is. Every
|
|
11
|
+
* fact it publishes was computed by `errors.ts` while the procedure body was
|
|
12
|
+
* open — label definitions, `On Error GoTo` targets, the handler region, the
|
|
13
|
+
* dangling-target resolution, and the handler's behaviour. Nothing here
|
|
14
|
+
* re-reads a source line, and nothing here re-classifies. If a change to this
|
|
15
|
+
* file needs a regex, the fact is missing upstream and belongs there instead:
|
|
16
|
+
* two scanners disagreeing about what a label is, is exactly the failure #259
|
|
17
|
+
* spent a whole file's worth of documentation avoiding.
|
|
18
|
+
*
|
|
19
|
+
* ## Why a node at all — and why it is not a container
|
|
20
|
+
*
|
|
21
|
+
* §4 of the plan rejected this design for #259, and §4.3 named the condition
|
|
22
|
+
* that reopens it: a consumer that needs to address a handler *as a thing*
|
|
23
|
+
* rather than ask a procedure a yes/no question. That is what this is. The
|
|
24
|
+
* label node makes a handler searchable (`kind:label`), linkable by a stable
|
|
25
|
+
* id, and queryable for the defects — dangling targets, duplicate handlers,
|
|
26
|
+
* pure control-flow labels — that `errorPolicy`'s scalar fields flatten away.
|
|
27
|
+
*
|
|
28
|
+
* What it deliberately is NOT is a container. **Calls inside a handler stay
|
|
29
|
+
* attributed to the enclosing procedure.** Re-parenting them onto the label
|
|
30
|
+
* would change `callers` / `callees` for the 3,774 procedures in the
|
|
31
|
+
* reference corpus that have a handler, and silently break every consumer
|
|
32
|
+
* query that assumes a call belongs to the procedure containing it. #260's
|
|
33
|
+
* `metadata.inErrorHandler` already answers "did this call come from the
|
|
34
|
+
* error path"; the label is *addressable*, not a parent.
|
|
35
|
+
*
|
|
36
|
+
* ## The collision trap
|
|
37
|
+
*
|
|
38
|
+
* VBA scopes a line label to its procedure, and this corpus writes the same
|
|
39
|
+
* label everywhere: `errores` is defined 3,735 times. `qualifiedName` is
|
|
40
|
+
* therefore always `<ModuleOrClass>.<Procedure>.<label>` — the same shape
|
|
41
|
+
* `parameters.ts` (#257) and the module-variable sweep (#251) chose, and for
|
|
42
|
+
* the same reason. Drop the procedure segment and every handler in a project
|
|
43
|
+
* becomes one symbol.
|
|
44
|
+
*
|
|
45
|
+
* ## Never fabricate a target
|
|
46
|
+
*
|
|
47
|
+
* `On Error GoTo <label>` where `<label>` is never defined in that procedure
|
|
48
|
+
* is a handler that can never run — the defect `errorPolicy.danglingTarget`
|
|
49
|
+
* reports. It emits an `UnresolvedReference` and **no node**. A graph that
|
|
50
|
+
* invents its own targets cannot be used to find this defect, which is the
|
|
51
|
+
* only reason to look for it.
|
|
52
|
+
*/
|
|
53
|
+
const tree_sitter_helpers_1 = require("../tree-sitter-helpers");
|
|
54
|
+
/** `handles-error` edges and their unresolved twin carry this provenance. */
|
|
55
|
+
exports.ERROR_HANDLER_SYNTHESIZED_BY = 'vba-error-handler';
|
|
56
|
+
/** A plain `GoTo <label>` jump — a generic `references` edge. */
|
|
57
|
+
exports.GOTO_SYNTHESIZED_BY = 'vba-goto';
|
|
58
|
+
/**
|
|
59
|
+
* A `GoTo` (plain or `On Error`) naming a label the procedure never defines.
|
|
60
|
+
* One shared tag for both, because from a consumer's point of view they are
|
|
61
|
+
* the same defect: a jump with no landing site.
|
|
62
|
+
*/
|
|
63
|
+
exports.GOTO_UNRESOLVED_SYNTHESIZED_BY = 'vba-goto-unresolved';
|
|
64
|
+
/**
|
|
65
|
+
* Emit this procedure's `label` nodes and the three edge shapes that reach
|
|
66
|
+
* them, then hand control back to `closeErrorPolicy`.
|
|
67
|
+
*
|
|
68
|
+
* `policy` is the object that was just folded from `state`; it is read, never
|
|
69
|
+
* recomputed. `endLine` is the procedure's terminating `End` line.
|
|
70
|
+
*
|
|
71
|
+
* Ordering matters and is the caller's responsibility: this runs BEFORE
|
|
72
|
+
* #260's `markErrorHandlerRegion`, so a `GoTo` or a second `On Error GoTo`
|
|
73
|
+
* written inside the handler region is stamped `metadata.inErrorHandler` by
|
|
74
|
+
* that single stamping point like every other edge, instead of quietly
|
|
75
|
+
* becoming the one emitter that opted out of it.
|
|
76
|
+
*/
|
|
77
|
+
function emitLabelNodes(ctx, state, policy, endLine) {
|
|
78
|
+
const procedureNode = ctx.functionNodeByStartLine.get(state.startLine);
|
|
79
|
+
// No procedure node means the pre-walk never saw a declaration for this
|
|
80
|
+
// body. There is nothing to attach a label to, and a parentless label node
|
|
81
|
+
// is worse than no node.
|
|
82
|
+
if (!procedureNode)
|
|
83
|
+
return;
|
|
84
|
+
if (state.labelDefs.length === 0 &&
|
|
85
|
+
state.onErrorSites.length === 0 &&
|
|
86
|
+
state.gotoSites.length === 0) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const procedureName = procedureNode.name;
|
|
90
|
+
const qualifiedPrefix = ctx.moduleName
|
|
91
|
+
? `${ctx.moduleName}.${procedureName}`
|
|
92
|
+
: procedureName;
|
|
93
|
+
// The ONE label whose region `errorPolicy` resolved — `openedTarget`, the
|
|
94
|
+
// earliest definition an `On Error GoTo` names. Only it can copy #260's
|
|
95
|
+
// derived `behavior` and region lines, because only it is what #260
|
|
96
|
+
// derived them FOR. A procedure that swaps to a second handler label has a
|
|
97
|
+
// second region nobody has classified, and inventing one here would be the
|
|
98
|
+
// re-classification this module exists to avoid.
|
|
99
|
+
const regionOwner = policy.handlerStartLine === null ? null : state.openedTarget;
|
|
100
|
+
const nodeIdByKey = new Map();
|
|
101
|
+
for (const def of state.labelDefs) {
|
|
102
|
+
const isHandler = state.targets.has(def.key);
|
|
103
|
+
const nodeId = (0, tree_sitter_helpers_1.generateNodeId)(ctx.filePath, 'label', def.name, def.line);
|
|
104
|
+
// `definedLabels` already kept only the first definition per key, so a
|
|
105
|
+
// repeat can only arrive from malformed VBA. Keep the first.
|
|
106
|
+
if (nodeIdByKey.has(def.key))
|
|
107
|
+
continue;
|
|
108
|
+
nodeIdByKey.set(def.key, nodeId);
|
|
109
|
+
const metadata = { isHandler };
|
|
110
|
+
if (isHandler && def.key === regionOwner) {
|
|
111
|
+
metadata.handlerBehavior = policy.behavior;
|
|
112
|
+
metadata.regionStartLine = policy.handlerStartLine;
|
|
113
|
+
metadata.regionEndLine = policy.handlerEndLine;
|
|
114
|
+
}
|
|
115
|
+
ctx.nodes.push({
|
|
116
|
+
id: nodeId,
|
|
117
|
+
kind: 'label',
|
|
118
|
+
name: def.name,
|
|
119
|
+
qualifiedName: `${qualifiedPrefix}.${def.name}`,
|
|
120
|
+
filePath: ctx.filePath,
|
|
121
|
+
language: 'vba',
|
|
122
|
+
startLine: def.line,
|
|
123
|
+
// A handler's body runs from its label to the procedure's end, so the
|
|
124
|
+
// node spans it. A control-flow label is a jump target and nothing
|
|
125
|
+
// more — it owns exactly its own line.
|
|
126
|
+
endLine: isHandler ? endLine : def.line,
|
|
127
|
+
startColumn: def.column,
|
|
128
|
+
endColumn: def.column + def.name.length,
|
|
129
|
+
metadata,
|
|
130
|
+
updatedAt: Date.now(),
|
|
131
|
+
});
|
|
132
|
+
ctx.edges.push({
|
|
133
|
+
source: procedureNode.id,
|
|
134
|
+
target: nodeId,
|
|
135
|
+
kind: 'contains',
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
for (const site of state.onErrorSites) {
|
|
139
|
+
emitJump(ctx, procedureNode.id, nodeIdByKey, site, 'handles-error', exports.ERROR_HANDLER_SYNTHESIZED_BY);
|
|
140
|
+
}
|
|
141
|
+
for (const site of state.gotoSites) {
|
|
142
|
+
emitJump(ctx, procedureNode.id, nodeIdByKey, site, 'references', exports.GOTO_SYNTHESIZED_BY);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* One jump: an edge onto the label's node when the procedure defines it, an
|
|
147
|
+
* `UnresolvedReference` when it does not.
|
|
148
|
+
*
|
|
149
|
+
* The unresolved row keeps `referenceKind: 'references'` for BOTH jump kinds.
|
|
150
|
+
* `handles-error` would be wrong there: the row records a target that does
|
|
151
|
+
* not exist, so nothing routes errors to it, and a resolver that later found
|
|
152
|
+
* a same-named symbol elsewhere in the project would materialise a
|
|
153
|
+
* cross-procedure error edge VBA's own scoping rules forbid.
|
|
154
|
+
*/
|
|
155
|
+
function emitJump(ctx, procedureNodeId, nodeIdByKey, site, edgeKind, synthesizedBy) {
|
|
156
|
+
const targetId = nodeIdByKey.get(site.key);
|
|
157
|
+
if (targetId) {
|
|
158
|
+
ctx.edges.push({
|
|
159
|
+
source: procedureNodeId,
|
|
160
|
+
target: targetId,
|
|
161
|
+
kind: edgeKind,
|
|
162
|
+
provenance: 'heuristic',
|
|
163
|
+
metadata: { synthesizedBy },
|
|
164
|
+
line: site.line,
|
|
165
|
+
column: site.column,
|
|
166
|
+
});
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
ctx.unresolvedReferences.push({
|
|
170
|
+
fromNodeId: procedureNodeId,
|
|
171
|
+
referenceName: site.name,
|
|
172
|
+
referenceKind: 'references',
|
|
173
|
+
line: site.line,
|
|
174
|
+
column: site.column,
|
|
175
|
+
filePath: ctx.filePath,
|
|
176
|
+
language: 'vba',
|
|
177
|
+
metadata: { synthesizedBy: exports.GOTO_UNRESOLVED_SYNTHESIZED_BY },
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.js","sourceRoot":"","sources":["../../../src/extraction/vba/labels.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module-level variable read/write sweep (issue #251).
|
|
3
|
+
*
|
|
4
|
+
* The dims classifier emits one `variable` node per module-level
|
|
5
|
+
* declaration and registers the name on `ctx.moduleVariables`. A node
|
|
6
|
+
* nobody points at answers nothing, so this sweep supplies the other
|
|
7
|
+
* half: for every procedure body line, an identifier that matches one of
|
|
8
|
+
* THIS FILE's module-level variable names becomes an
|
|
9
|
+
* `UnresolvedReference` tagged `synthesizedBy: 'vba-module-var'`, with
|
|
10
|
+
* `referenceKind: 'property-get'` for a read and `'property-set'` for a
|
|
11
|
+
* write.
|
|
12
|
+
*
|
|
13
|
+
* The gate is the whole design. The sweep never looks for "identifiers
|
|
14
|
+
* that might be variables"; it only ever asks whether a name is already
|
|
15
|
+
* registered as a module-level variable of the module being extracted.
|
|
16
|
+
* Any looser rule turns a codebase-wide sweep into thousands of
|
|
17
|
+
* references to names that merely collide.
|
|
18
|
+
*
|
|
19
|
+
* Issue #261 adds ONE field on top: when the matched variable is the project's
|
|
20
|
+
* error channel (`m_Error`, `p_Error`, … — see `./error-channel`), the
|
|
21
|
+
* reference also carries `metadata.errorChannel: true`. No new node kind, no
|
|
22
|
+
* new edge kind and not a single extra row: the propagation chain
|
|
23
|
+
* `inner procedure --property-set--> m_Error --property-get--> caller` is the
|
|
24
|
+
* one this sweep already emits, and the flag is what makes it identifiable as
|
|
25
|
+
* error flow instead of ordinary module state.
|
|
26
|
+
*/
|
|
27
|
+
import { VbaExtractorContext, ProcInfo } from './context';
|
|
28
|
+
/**
|
|
29
|
+
* Scan one procedure-body line for reads and writes of this module's
|
|
30
|
+
* module-level variables.
|
|
31
|
+
*
|
|
32
|
+
* `line` must be the string-literal-masked line: a variable name that
|
|
33
|
+
* appears inside `"…"` is prose, not an access.
|
|
34
|
+
*/
|
|
35
|
+
export declare function scanModuleVariableReferences(ctx: VbaExtractorContext, line: string, from: ProcInfo, lineNum: number): void;
|
|
36
|
+
//# sourceMappingURL=module-vars.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-vars.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/module-vars.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAuE1D;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,GACd,IAAI,CAuEN"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.scanModuleVariableReferences = scanModuleVariableReferences;
|
|
4
|
+
const controls_1 = require("./controls");
|
|
5
|
+
const error_channel_1 = require("./error-channel");
|
|
6
|
+
/**
|
|
7
|
+
* Every bare identifier on the line. The sweep is a membership test
|
|
8
|
+
* against `ctx.moduleVariables`, so the pattern is deliberately generic —
|
|
9
|
+
* the filtering happens on the name, not on the shape around it.
|
|
10
|
+
*/
|
|
11
|
+
const IDENTIFIER_RE = /\p{L}[\p{L}\p{N}_]*/gu;
|
|
12
|
+
/**
|
|
13
|
+
* A `Set` that is the ENTIRE prefix of the matched identifier, i.e. the
|
|
14
|
+
* line reads `Set <var> = …`. Stripping it lets the shared
|
|
15
|
+
* `isDirectAssignment` predicate see the same "nothing before the name,
|
|
16
|
+
* `=` after it" shape it was written for, so `Set gblConn = New …` is
|
|
17
|
+
* classified as the write it is instead of a read.
|
|
18
|
+
*
|
|
19
|
+
* `Set` cannot be stripped unconditionally: in `x = Set` — or in any
|
|
20
|
+
* expression where `Set` is not the leading statement keyword — the
|
|
21
|
+
* prefix is not blank, and `isDirectAssignment` already answers "read"
|
|
22
|
+
* correctly.
|
|
23
|
+
*/
|
|
24
|
+
const LEADING_SET_RE = /^\s*Set\s+$/i;
|
|
25
|
+
/**
|
|
26
|
+
* Per-context de-dup of the emitted references, keyed by
|
|
27
|
+
* `(procedure, variable, direction)`.
|
|
28
|
+
*
|
|
29
|
+
* A procedure that reads `gblConn` on twenty lines couples to it once;
|
|
30
|
+
* twenty identical rows would not make that coupling any more visible,
|
|
31
|
+
* and the volume scales with the size of the corpus rather than with the
|
|
32
|
+
* number of real relationships. Reads and writes are keyed separately, so
|
|
33
|
+
* a procedure that both reads and writes a variable still reports both —
|
|
34
|
+
* which is the distinction the direction is there to make. The first
|
|
35
|
+
* occurrence keeps the line number, mirroring the same trade-off the
|
|
36
|
+
* `Me.<Control>` sweep already makes.
|
|
37
|
+
*/
|
|
38
|
+
const seenModuleVarRefs = new WeakMap();
|
|
39
|
+
/**
|
|
40
|
+
* Issue #292: `On Error` is a statement keyword pair, not a variable read.
|
|
41
|
+
*
|
|
42
|
+
* `Public Error As String` is this codebase's error-channel convention and
|
|
43
|
+
* appears in dozens of classes, so without this mask every
|
|
44
|
+
* `On Error GoTo errores` line reports a `property-get` of a module variable
|
|
45
|
+
* named `Error` — 909 of them across the corpus. On its own that is a stray
|
|
46
|
+
* edge; once E4 labels channel references it becomes a confident claim that
|
|
47
|
+
* the line participates in error propagation, which is the worst failure mode
|
|
48
|
+
* available here.
|
|
49
|
+
*
|
|
50
|
+
* Replaced with spaces of the SAME LENGTH, deliberately: the emitted
|
|
51
|
+
* reference carries `column: m.index`, so a substitution that shifted offsets
|
|
52
|
+
* would corrupt every column on the line.
|
|
53
|
+
*
|
|
54
|
+
* Scoped to the `On Error` pair only. VBA also spells the `Error` statement
|
|
55
|
+
* (`Error 5`) and the `Error$()` function with the same word, and both have
|
|
56
|
+
* zero occurrences in this corpus; telling those from an identically-named
|
|
57
|
+
* variable is a parser problem rather than a masking one, so they are left
|
|
58
|
+
* for a corpus that actually contains them.
|
|
59
|
+
*/
|
|
60
|
+
const ON_ERROR_KEYWORD_RE = /\bOn\s+Error\b/gi;
|
|
61
|
+
/** Blank out the `On Error` keyword pair, preserving every column offset. */
|
|
62
|
+
function maskOnErrorKeyword(line) {
|
|
63
|
+
ON_ERROR_KEYWORD_RE.lastIndex = 0;
|
|
64
|
+
if (!ON_ERROR_KEYWORD_RE.test(line))
|
|
65
|
+
return line;
|
|
66
|
+
ON_ERROR_KEYWORD_RE.lastIndex = 0;
|
|
67
|
+
return line.replace(ON_ERROR_KEYWORD_RE, (match) => ' '.repeat(match.length));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Scan one procedure-body line for reads and writes of this module's
|
|
71
|
+
* module-level variables.
|
|
72
|
+
*
|
|
73
|
+
* `line` must be the string-literal-masked line: a variable name that
|
|
74
|
+
* appears inside `"…"` is prose, not an access.
|
|
75
|
+
*/
|
|
76
|
+
function scanModuleVariableReferences(ctx, line, from, lineNum) {
|
|
77
|
+
if (ctx.moduleVariables.size === 0)
|
|
78
|
+
return;
|
|
79
|
+
// Issue #261: the compiled error channel, hoisted out of the identifier
|
|
80
|
+
// loop. `null` means nobody supplied options (tests, out-of-repo callers),
|
|
81
|
+
// in which case the memoised default channel — the same four names — applies.
|
|
82
|
+
const channel = ctx.errorChannel ?? (0, error_channel_1.defaultErrorChannel)();
|
|
83
|
+
// Issue #205 scoping: names this procedure declares itself — its
|
|
84
|
+
// parameters and its own `Dim` / `Static` declarations — are locals that
|
|
85
|
+
// happen to share a name with module state. Reading one of those is not
|
|
86
|
+
// a read of the module variable.
|
|
87
|
+
const shadowed = ctx.procLocalNames.get(String(from.startLine));
|
|
88
|
+
let seen = seenModuleVarRefs.get(ctx);
|
|
89
|
+
if (!seen) {
|
|
90
|
+
seen = new Set();
|
|
91
|
+
seenModuleVarRefs.set(ctx, seen);
|
|
92
|
+
}
|
|
93
|
+
// Issue #292: mask the `On Error` keyword pair before the identifier walk.
|
|
94
|
+
const scanLine = maskOnErrorKeyword(line);
|
|
95
|
+
IDENTIFIER_RE.lastIndex = 0;
|
|
96
|
+
let m;
|
|
97
|
+
while ((m = IDENTIFIER_RE.exec(scanLine)) !== null) {
|
|
98
|
+
const name = m[0];
|
|
99
|
+
const key = name.toLowerCase();
|
|
100
|
+
if (!ctx.moduleVariables.has(key))
|
|
101
|
+
continue;
|
|
102
|
+
if (shadowed?.has(key))
|
|
103
|
+
continue;
|
|
104
|
+
// `obj.gblConn` / `Me!gblConn` names a member of something else that
|
|
105
|
+
// happens to be spelled like this module's variable. The module
|
|
106
|
+
// variable itself is only ever reached by its bare name.
|
|
107
|
+
const previous = m.index > 0 ? scanLine.charAt(m.index - 1) : '';
|
|
108
|
+
if (previous === '.' || previous === '!')
|
|
109
|
+
continue;
|
|
110
|
+
const before = scanLine.slice(0, m.index);
|
|
111
|
+
const after = scanLine.slice(m.index + name.length);
|
|
112
|
+
const isWrite = (0, controls_1.isDirectAssignment)(before.replace(LEADING_SET_RE, ''), after);
|
|
113
|
+
const referenceKind = isWrite ? 'property-set' : 'property-get';
|
|
114
|
+
const fromNodeId = ctx.findOrCreateFunctionNodeId(from);
|
|
115
|
+
const dedupeKey = `${fromNodeId}\0${key}\0${referenceKind}`;
|
|
116
|
+
if (seen.has(dedupeKey))
|
|
117
|
+
continue;
|
|
118
|
+
seen.add(dedupeKey);
|
|
119
|
+
const declaredName = ctx.moduleVariables.get(key).name;
|
|
120
|
+
ctx.unresolvedReferences.push({
|
|
121
|
+
fromNodeId,
|
|
122
|
+
referenceName: declaredName,
|
|
123
|
+
referenceKind,
|
|
124
|
+
line: lineNum,
|
|
125
|
+
column: m.index,
|
|
126
|
+
filePath: ctx.filePath,
|
|
127
|
+
language: 'vba',
|
|
128
|
+
metadata: {
|
|
129
|
+
synthesizedBy: 'vba-module-var',
|
|
130
|
+
access: isWrite ? 'write' : 'read',
|
|
131
|
+
// Issue #261: this variable IS the error channel, so this reference
|
|
132
|
+
// is a hop of the error-propagation chain rather than ordinary
|
|
133
|
+
// module state. Set on reads and writes alike — the write is where
|
|
134
|
+
// the message enters, the read is where the caller picks it up, and
|
|
135
|
+
// an answer to "how does this error reach the user" needs both.
|
|
136
|
+
//
|
|
137
|
+
// Only ever `true`; its ABSENCE is the "not the channel" encoding, so
|
|
138
|
+
// this adds a key to a minority of rows instead of a `false` to every
|
|
139
|
+
// one of them (the same shape #260 chose for `inErrorHandler`).
|
|
140
|
+
...((0, error_channel_1.isErrorChannelName)(channel, declaredName) ? { errorChannel: true } : {}),
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=module-vars.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-vars.js","sourceRoot":"","sources":["../../../src/extraction/vba/module-vars.ts"],"names":[],"mappings":"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"}
|