@aroman22/codegraph-vba-darwin-arm64 1.6.0 → 1.6.2

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.
Files changed (81) hide show
  1. package/lib/dist/db/migrations.d.ts +1 -1
  2. package/lib/dist/db/migrations.d.ts.map +1 -1
  3. package/lib/dist/db/migrations.js +14 -1
  4. package/lib/dist/db/migrations.js.map +1 -1
  5. package/lib/dist/db/queries.d.ts.map +1 -1
  6. package/lib/dist/db/queries.js +8 -2
  7. package/lib/dist/db/queries.js.map +1 -1
  8. package/lib/dist/db/schema.sql +1 -0
  9. package/lib/dist/extraction/grammars.d.ts +32 -0
  10. package/lib/dist/extraction/grammars.d.ts.map +1 -1
  11. package/lib/dist/extraction/grammars.js +61 -0
  12. package/lib/dist/extraction/grammars.js.map +1 -1
  13. package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
  14. package/lib/dist/extraction/tree-sitter.js +24 -0
  15. package/lib/dist/extraction/tree-sitter.js.map +1 -1
  16. package/lib/dist/extraction/vba/call-sweep.d.ts +13 -1
  17. package/lib/dist/extraction/vba/call-sweep.d.ts.map +1 -1
  18. package/lib/dist/extraction/vba/call-sweep.js +229 -151
  19. package/lib/dist/extraction/vba/call-sweep.js.map +1 -1
  20. package/lib/dist/extraction/vba/context.d.ts +52 -2
  21. package/lib/dist/extraction/vba/context.d.ts.map +1 -1
  22. package/lib/dist/extraction/vba/context.js +29 -2
  23. package/lib/dist/extraction/vba/context.js.map +1 -1
  24. package/lib/dist/extraction/vba/declarations.d.ts +10 -1
  25. package/lib/dist/extraction/vba/declarations.d.ts.map +1 -1
  26. package/lib/dist/extraction/vba/declarations.js +141 -123
  27. package/lib/dist/extraction/vba/declarations.js.map +1 -1
  28. package/lib/dist/extraction/vba/dims.d.ts +9 -1
  29. package/lib/dist/extraction/vba/dims.d.ts.map +1 -1
  30. package/lib/dist/extraction/vba/dims.js +125 -109
  31. package/lib/dist/extraction/vba/dims.js.map +1 -1
  32. package/lib/dist/extraction/vba/enums-consts.d.ts +13 -10
  33. package/lib/dist/extraction/vba/enums-consts.d.ts.map +1 -1
  34. package/lib/dist/extraction/vba/enums-consts.js +153 -131
  35. package/lib/dist/extraction/vba/enums-consts.js.map +1 -1
  36. package/lib/dist/extraction/vba/implements.d.ts +9 -1
  37. package/lib/dist/extraction/vba/implements.d.ts.map +1 -1
  38. package/lib/dist/extraction/vba/implements.js +56 -40
  39. package/lib/dist/extraction/vba/implements.js.map +1 -1
  40. package/lib/dist/extraction/vba/procedures.d.ts +13 -1
  41. package/lib/dist/extraction/vba/procedures.d.ts.map +1 -1
  42. package/lib/dist/extraction/vba/procedures.js +238 -186
  43. package/lib/dist/extraction/vba/procedures.js.map +1 -1
  44. package/lib/dist/extraction/vba/sql-wrapper.d.ts.map +1 -1
  45. package/lib/dist/extraction/vba/sql-wrapper.js +20 -3
  46. package/lib/dist/extraction/vba/sql-wrapper.js.map +1 -1
  47. package/lib/dist/extraction/vba-extractor.d.ts.map +1 -1
  48. package/lib/dist/extraction/vba-extractor.js +47 -38
  49. package/lib/dist/extraction/vba-extractor.js.map +1 -1
  50. package/lib/dist/extraction/vba-form-extractor.d.ts.map +1 -1
  51. package/lib/dist/extraction/vba-form-extractor.js +6 -1
  52. package/lib/dist/extraction/vba-form-extractor.js.map +1 -1
  53. package/lib/dist/extraction/vba-preprocess.d.ts.map +1 -1
  54. package/lib/dist/extraction/vba-preprocess.js +23 -2
  55. package/lib/dist/extraction/vba-preprocess.js.map +1 -1
  56. package/lib/dist/extraction/vba-test-manifest-extractor.d.ts +26 -0
  57. package/lib/dist/extraction/vba-test-manifest-extractor.d.ts.map +1 -0
  58. package/lib/dist/extraction/vba-test-manifest-extractor.js +173 -0
  59. package/lib/dist/extraction/vba-test-manifest-extractor.js.map +1 -0
  60. package/lib/dist/extraction/vba-test-sequence-extractor.d.ts +29 -0
  61. package/lib/dist/extraction/vba-test-sequence-extractor.d.ts.map +1 -0
  62. package/lib/dist/extraction/vba-test-sequence-extractor.js +180 -0
  63. package/lib/dist/extraction/vba-test-sequence-extractor.js.map +1 -0
  64. package/lib/dist/mcp/server-instructions.d.ts +1 -1
  65. package/lib/dist/mcp/server-instructions.d.ts.map +1 -1
  66. package/lib/dist/mcp/server-instructions.js +5 -0
  67. package/lib/dist/mcp/server-instructions.js.map +1 -1
  68. package/lib/dist/resolution/index.d.ts.map +1 -1
  69. package/lib/dist/resolution/index.js +30 -0
  70. package/lib/dist/resolution/index.js.map +1 -1
  71. package/lib/dist/resolution/types.d.ts +7 -0
  72. package/lib/dist/resolution/types.d.ts.map +1 -1
  73. package/lib/dist/upgrade/index.d.ts +2 -2
  74. package/lib/dist/upgrade/index.d.ts.map +1 -1
  75. package/lib/dist/upgrade/index.js +1 -1
  76. package/lib/dist/upgrade/index.js.map +1 -1
  77. package/lib/node_modules/.modules.yaml +1 -1
  78. package/lib/node_modules/.pnpm/lock.yaml +4 -0
  79. package/lib/node_modules/.pnpm-workspace-state-v1.json +1 -1
  80. package/lib/package.json +8 -2
  81. package/package.json +1 -1
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createProceduresClassifier = createProceduresClassifier;
36
37
  exports.sweepProcedures = sweepProcedures;
37
38
  /**
38
39
  * Procedure sweep: emit one `function` node per `Sub` / `Function` /
@@ -44,196 +45,247 @@ const path = __importStar(require("path"));
44
45
  const tree_sitter_helpers_1 = require("../tree-sitter-helpers");
45
46
  const constants_1 = require("./constants");
46
47
  const text_utils_1 = require("./text-utils");
47
- function sweepProcedures(ctx, src) {
48
- const procs = [];
49
- const lines = src.split('\n');
50
- for (let i = 0; i < lines.length; i++) {
51
- const line = lines[i] ?? '';
52
- const m = constants_1.PROC_RE.exec(line);
53
- if (!m)
54
- continue;
55
- const visibilityRaw = (m[1] ?? '').trim();
56
- const kindRaw = (m[2] ?? '').trim().toLowerCase();
57
- const name = m[3] ?? '';
58
- if (!name)
59
- continue;
60
- const lineNum = i + 1;
61
- // Normalize the visibility. VBA's "Static" keyword is a storage
62
- // specifier, not visibility, so we treat bare-static declarations as
63
- // 'Public' (the default) per spec R1. "Friend" is not in the Node
64
- // visibility enum; treat it as 'Public' since it's the closest
65
- // broader-than-private modifier.
66
- let visibility;
67
- switch (visibilityRaw.toLowerCase()) {
68
- case 'private':
69
- visibility = 'private';
70
- break;
71
- case 'public':
72
- case 'static':
73
- case 'friend':
74
- case '':
75
- default:
76
- visibility = 'public';
77
- break;
78
- }
79
- const kind = kindRaw.startsWith('sub')
80
- ? 'sub'
81
- : kindRaw.startsWith('function')
82
- ? 'function'
83
- : 'property';
84
- const proc = {
85
- name,
86
- // B3 (hueco 5): when this file is a `.cls`, prefix the
87
- // qualifiedName with the resolved class name so cross-class
88
- // queries (e.g. `Form_Load`) match only the owning class.
89
- // `.bas` files leave `qualifiedName === name`.
90
- qualifiedName: ctx.classNamePrefix
91
- ? `${ctx.classNamePrefix}.${name}`
92
- : name,
93
- kind,
94
- visibility,
95
- startLine: lineNum,
96
- };
97
- procs.push(proc);
98
- const bucket = ctx.localProcs.get(name);
99
- if (bucket)
100
- bucket.push(proc);
101
- else
102
- ctx.localProcs.set(name, [proc]);
103
- const nodeId = (0, tree_sitter_helpers_1.generateNodeId)(ctx.filePath, 'function', name, lineNum);
104
- const fnNode = {
105
- id: nodeId,
106
- kind: 'function',
107
- name,
108
- // B3 (hueco 5): same prefix rule as the ProcInfo above — class
109
- // methods get `${className}.${name}`, module-level Subs keep
110
- // their bare name.
111
- qualifiedName: ctx.classNamePrefix
112
- ? `${ctx.classNamePrefix}.${name}`
113
- : name,
114
- filePath: ctx.filePath,
115
- language: 'vba',
116
- startLine: lineNum,
117
- endLine: lineNum,
118
- startColumn: 0,
119
- endColumn: line.length,
120
- visibility,
121
- updatedAt: Date.now(),
122
- };
123
- ctx.nodes.push(fnNode);
124
- // Cache the first node emitted for this name — `findFunctionNodeByName`
125
- // (audit S2) becomes O(1) instead of O(n) per call site.
126
- if (!ctx.functionNodeByName.has(name)) {
127
- ctx.functionNodeByName.set(name, fnNode);
128
- }
129
- // Fix 1: also index by startLine so Property Get/Let/Set with the same
130
- // name can each be found by their exact declaration line.
131
- ctx.functionNodeByStartLine.set(lineNum, fnNode);
132
- // Hueco 3: synthesize the event-handler edge for Access naming
133
- // convention `<ControlName>_<EventName>` (e.g. `ComandoAltaPM_Click`,
134
- // `MotivoBorrado_AfterUpdate`). The `<X>_<Y>` shape is split on the
135
- // LAST underscore so multi-word events like `BeforeDelConfirm` parse
136
- // correctly. Form-level events (`Form_Load`, `Form_Open`,
137
- // `Form_Unload`, …) are NOT control handlers — they fire on the
138
- // form object itself, not on a control — so they are skipped here
139
- // (the form module node is the conceptual source for those).
140
- //
141
- // Scope guard: only emit when this .cls looks like a form code-
142
- // behind (`Form_*.cls`). Without this guard, regular service classes
143
- // whose methods happen to have underscores in their names
144
- // (e.g. `InformeRiesgoPDFServicio.cls` declares
145
- // `GenerarHTML_Principal`, `GetEstilosCSS_PDF`,
146
- // `Class_Initialize`) would synthesize ~550 spurious
147
- // `form-instance-control` stubs in real Dysflow projects. The
148
- // `Form_` prefix is the canonical Access code-behind naming
149
- // convention and matches the .form.txt siblings' basename.
150
- //
151
- // Cross-file synthesis caveat: the edge's source is a
152
- // `form-instance-control` node that lives in the sibling .form.txt,
153
- // not this .cls file. Two consequences:
154
- // 1. We also emit a STUB form-instance-control node locally with
155
- // the deterministic id so the per-file edge filter
156
- // (`insertedIds.has(source)`) accepts the edge. When the
157
- // sibling .form.txt is later indexed, VbaFormExtractor emits
158
- // the real form-instance-control node with the same id; the
159
- // `INSERT OR REPLACE` semantics in queries.ts:insertNode
160
- // overwrite the stub with the real one (preserving the
161
- // metadata.controlType, filePath, line range, etc.).
162
- // 2. When the .form.txt is processed FIRST (alphabetically
163
- // unlikely but possible), the real node exists in the DB
164
- // before this edge is committed; insertEdges's DB-level
165
- // endpoint check passes the edge naturally without the stub.
166
- // Either order converges on the same final state.
167
- // See vba-form-extractor.ts:findControlName for the matching real
168
- // form-instance-control node emission.
169
- const handler = (0, text_utils_1.parseEventHandlerName)(name);
170
- // Prefix-driven sibling binding (issue #41). Both `Form_*.cls` and
171
- // `Report_*.cls` Dysflow code-behind files share the same code path;
172
- // only the sibling extension differs (`.form.txt` vs `.report.txt`).
173
- // The check is on the BASENAME prefix so a class called
174
- // `FormularioVentas.cls` or `ReportingHelper.cls` (no trailing
175
- // underscore) does not match — the trailing `_` is the discriminator.
176
- // Any other `.cls` (e.g. `InformeRiesgoPDFServicio.cls` with methods
177
- // like `GenerarHTML_Principal`) gets `codeBehindExt === null` and is
178
- // skipped, preserving the original Form_-only guard's behaviour for
179
- // non-form classes.
180
- const basename = path.basename(ctx.filePath).toLowerCase();
181
- const codeBehindExt = basename.startsWith('report_')
182
- ? '.report.txt'
183
- : basename.startsWith('form_')
184
- ? '.form.txt'
185
- : null;
186
- const isFormCodeBehind = codeBehindExt !== null;
187
- if (handler && isFormCodeBehind) {
188
- const siblingPath = ctx.filePath.replace(/\.cls$/i, codeBehindExt);
189
- const controlNodeId = (0, tree_sitter_helpers_1.generateNodeId)(siblingPath, 'form-instance-control', handler.controlName, 0);
190
- // Stub form-instance-control: local so the per-file edge filter
191
- // passes the event-handler edge. Overwritten by the real node
192
- // emitted from the sibling .form.txt (or .report.txt) at index time
193
- // (same id, same schema, INSERT OR REPLACE). No metadata.controlType
194
- // here — the sibling side carries the real control type.
195
- ctx.nodes.push({
196
- id: controlNodeId,
197
- kind: 'form-instance-control',
198
- name: handler.controlName,
199
- qualifiedName: `${siblingPath}::${handler.controlName}`,
200
- filePath: siblingPath,
48
+ /**
49
+ * Parse a `Function`/`Property Get` declaration's return type — the `As
50
+ * <Type>` that follows the parameter list (or the name, for a paren-less
51
+ * declaration). Parameters can carry their own `As <Type>`, so we anchor on
52
+ * the text AFTER the last `)` when parens are present; the bracketed form
53
+ * `As [Type With Spaces]` is unwrapped. Returns null when there is no return
54
+ * type (a `Sub`, or a function with an implicit `Variant` return).
55
+ */
56
+ function parseReturnType(line) {
57
+ const afterParams = line.includes(')')
58
+ ? line.slice(line.lastIndexOf(')') + 1)
59
+ : line;
60
+ const m = /\bAs\s+(?:New\s+)?(?:\[([^\]]+)\]|(\p{L}[\p{L}\p{N}_]*))/iu.exec(afterParams);
61
+ if (!m)
62
+ return null;
63
+ return m[1] ?? m[2] ?? null;
64
+ }
65
+ /**
66
+ * Issue #83: factory for the procedures classifier. Closure state: none
67
+ * beyond `count` (the per-concern accumulators live on `ctx`).
68
+ */
69
+ function createProceduresClassifier() {
70
+ return {
71
+ name: 'procedures',
72
+ count: 0,
73
+ classifyLine(line, i, ctx) {
74
+ const m = constants_1.PROC_RE.exec(line);
75
+ if (!m)
76
+ return;
77
+ const visibilityRaw = (m[1] ?? '').trim();
78
+ const kindRaw = (m[2] ?? '').trim().toLowerCase();
79
+ const name = m[3] ?? '';
80
+ if (!name)
81
+ return;
82
+ const lineNum = i + 1;
83
+ // Normalize the visibility. VBA's "Static" keyword is a storage
84
+ // specifier, not visibility, so we treat bare-static declarations as
85
+ // 'Public' (the default) per spec R1. "Friend" is not in the Node
86
+ // visibility enum; treat it as 'Public' since it's the closest
87
+ // broader-than-private modifier.
88
+ let visibility;
89
+ switch (visibilityRaw.toLowerCase()) {
90
+ case 'private':
91
+ visibility = 'private';
92
+ break;
93
+ case 'public':
94
+ case 'static':
95
+ case 'friend':
96
+ case '':
97
+ default:
98
+ visibility = 'public';
99
+ break;
100
+ }
101
+ const kind = kindRaw.startsWith('sub')
102
+ ? 'sub'
103
+ : kindRaw.startsWith('function')
104
+ ? 'function'
105
+ : 'property';
106
+ // Factory-return inference: record a function's project-class return type
107
+ // so the call sweep can type `Set x = <name>(...)`. Restricted to `Sub`'s
108
+ // sibling `Function` (a `Property Let/Set` has no return type and a
109
+ // `Property Get`'s `As <Type>` is rarely a factory target). Primitives are
110
+ // skipped `x.Method` on a primitive is never a project call.
111
+ if (kind === 'function') {
112
+ const retType = parseReturnType(line);
113
+ if (retType && !constants_1.PRIMITIVE_TYPES.has(retType.toLowerCase())) {
114
+ const key = name.toLowerCase();
115
+ if (!ctx.functionReturnTypes.has(key)) {
116
+ ctx.functionReturnTypes.set(key, retType);
117
+ }
118
+ }
119
+ }
120
+ const proc = {
121
+ name,
122
+ // B3 (hueco 5): when this file is a `.cls`, prefix the
123
+ // qualifiedName with the resolved class name so cross-class
124
+ // queries (e.g. `Form_Load`) match only the owning class.
125
+ // `.bas` files leave `qualifiedName === name`.
126
+ qualifiedName: ctx.classNamePrefix
127
+ ? `${ctx.classNamePrefix}.${name}`
128
+ : name,
129
+ kind,
130
+ visibility,
131
+ startLine: lineNum,
132
+ };
133
+ ctx.procedures.push(proc);
134
+ const bucket = ctx.localProcs.get(name);
135
+ if (bucket)
136
+ bucket.push(proc);
137
+ else
138
+ ctx.localProcs.set(name, [proc]);
139
+ const nodeId = (0, tree_sitter_helpers_1.generateNodeId)(ctx.filePath, 'function', name, lineNum);
140
+ const fnNode = {
141
+ id: nodeId,
142
+ kind: 'function',
143
+ name,
144
+ // B3 (hueco 5): same prefix rule as the ProcInfo above — class
145
+ // methods get `${className}.${name}`, module-level Subs keep
146
+ // their bare-name qualifiedName.
147
+ qualifiedName: ctx.classNamePrefix
148
+ ? `${ctx.classNamePrefix}.${name}`
149
+ : name,
150
+ filePath: ctx.filePath,
201
151
  language: 'vba',
202
- startLine: 0,
203
- endLine: 0,
152
+ startLine: lineNum,
153
+ endLine: lineNum,
204
154
  startColumn: 0,
205
- endColumn: 0,
155
+ endColumn: line.length,
156
+ visibility,
206
157
  updatedAt: Date.now(),
207
- });
208
- ctx.edges.push({
209
- source: nodeId,
210
- target: controlNodeId,
211
- kind: 'event-handler',
212
- provenance: 'heuristic',
213
- metadata: { eventName: handler.eventName },
214
- line: lineNum,
215
- column: 0,
216
- });
217
- }
218
- if (ctx.moduleOrClassNode) {
219
- ctx.edges.push({
220
- source: ctx.moduleOrClassNode.id,
221
- target: nodeId,
222
- kind: 'contains',
223
- });
224
- }
225
- else {
226
- // Module/class node is created lazily (see extract). Hold the edge in
227
- // pending so its source can be rewritten once the module exists.
228
- const edge = {
229
- source: '',
230
- target: nodeId,
231
- kind: 'contains',
232
158
  };
233
- ctx.edges.push(edge);
234
- ctx.pendingModuleOrClassSource.push(edge);
235
- }
159
+ ctx.nodes.push(fnNode);
160
+ // Cache the first node emitted for this name — `findFunctionNodeByName`
161
+ // (audit S2) becomes O(1) instead of O(n) per call site.
162
+ if (!ctx.functionNodeByName.has(name)) {
163
+ ctx.functionNodeByName.set(name, fnNode);
164
+ }
165
+ // Fix 1: also index by startLine so Property Get/Let/Set with the same
166
+ // name can each be found by their exact declaration line.
167
+ ctx.functionNodeByStartLine.set(lineNum, fnNode);
168
+ // Hueco 3: synthesize the event-handler edge for Access naming
169
+ // convention `<ControlName>_<EventName>` (e.g. `ComandoAltaPM_Click`,
170
+ // `MotivoBorrado_AfterUpdate`). The `<X>_<Y>` shape is split on the
171
+ // LAST underscore so multi-word events like `BeforeDelConfirm` parse
172
+ // correctly. Form-level events (`Form_Load`, `Form_Open`,
173
+ // `Form_Unload`, …) are NOT control handlers — they fire on the
174
+ // form object itself, not on a control — so they are skipped here
175
+ // (the form module node is the conceptual source for those).
176
+ //
177
+ // Scope guard: only emit when this .cls looks like a form code-
178
+ // behind (`Form_*.cls`). Without this guard, regular service classes
179
+ // whose methods happen to have underscores in their names
180
+ // (e.g. `InformeRiesgoPDFServicio.cls` declares
181
+ // `GenerarHTML_Principal`, `GetEstilosCSS_PDF`,
182
+ // `Class_Initialize`) would synthesize ~550 spurious
183
+ // `form-instance-control` stubs in real Dysflow projects. The
184
+ // `Form_` prefix is the canonical Access code-behind naming
185
+ // convention and matches the .form.txt siblings' basename.
186
+ //
187
+ // Cross-file synthesis caveat: the edge's source is a
188
+ // `form-instance-control` node that lives in the sibling .form.txt,
189
+ // not this .cls file. Two consequences:
190
+ // 1. We also emit a STUB form-instance-control node locally with
191
+ // the deterministic id so the per-file edge filter
192
+ // (`insertedIds.has(source)`) accepts the edge. When the
193
+ // sibling .form.txt is later indexed, VbaFormExtractor emits
194
+ // the real form-instance-control node with the same id; the
195
+ // `INSERT OR REPLACE` semantics in queries.ts:insertNode
196
+ // overwrite the stub with the real one (preserving the
197
+ // metadata.controlType, filePath, line range, etc.).
198
+ // 2. When the .form.txt is processed FIRST (alphabetically
199
+ // unlikely but possible), the real node exists in the DB
200
+ // before this edge is committed; insertEdges's DB-level
201
+ // endpoint check passes the edge naturally without the stub.
202
+ // Either order converges on the same final state.
203
+ // See vba-form-extractor.ts:findControlName for the matching real
204
+ // form-instance-control node emission.
205
+ const handler = (0, text_utils_1.parseEventHandlerName)(name);
206
+ // Prefix-driven sibling binding (issue #41). Both `Form_*.cls` and
207
+ // `Report_*.cls` Dysflow code-behind files share the same code path;
208
+ // only the sibling extension differs (`.form.txt` vs `.report.txt`).
209
+ // The check is on the BASENAME prefix so a class called
210
+ // `FormularioVentas.cls` or `ReportingHelper.cls` (no trailing
211
+ // underscore) does not match — the trailing `_` is the discriminator.
212
+ // Any other `.cls` (e.g. `InformeRiesgoPDFServicio.cls` with methods
213
+ // like `GenerarHTML_Principal`) gets `codeBehindExt === null` and is
214
+ // skipped, preserving the original Form_-only guard's behaviour for
215
+ // non-form classes.
216
+ const basename = path.basename(ctx.filePath).toLowerCase();
217
+ const codeBehindExt = basename.startsWith('report_')
218
+ ? '.report.txt'
219
+ : basename.startsWith('form_')
220
+ ? '.form.txt'
221
+ : null;
222
+ const isFormCodeBehind = codeBehindExt !== null;
223
+ if (handler && isFormCodeBehind) {
224
+ const siblingPath = ctx.filePath.replace(/\.cls$/i, codeBehindExt);
225
+ const controlNodeId = (0, tree_sitter_helpers_1.generateNodeId)(siblingPath, 'form-instance-control', handler.controlName, 0);
226
+ // Stub form-instance-control: local so the per-file edge filter
227
+ // passes the event-handler edge. Overwritten by the real node
228
+ // emitted from the sibling .form.txt (or .report.txt) at index time
229
+ // (same id, same schema, INSERT OR REPLACE). No metadata.controlType
230
+ // here — the sibling side carries the real control type.
231
+ ctx.nodes.push({
232
+ id: controlNodeId,
233
+ kind: 'form-instance-control',
234
+ name: handler.controlName,
235
+ qualifiedName: `${siblingPath}::${handler.controlName}`,
236
+ filePath: siblingPath,
237
+ language: 'vba',
238
+ startLine: 0,
239
+ endLine: 0,
240
+ startColumn: 0,
241
+ endColumn: 0,
242
+ updatedAt: Date.now(),
243
+ });
244
+ ctx.edges.push({
245
+ source: nodeId,
246
+ target: controlNodeId,
247
+ kind: 'event-handler',
248
+ provenance: 'heuristic',
249
+ metadata: { eventName: handler.eventName },
250
+ line: lineNum,
251
+ column: 0,
252
+ });
253
+ }
254
+ if (ctx.moduleOrClassNode) {
255
+ ctx.edges.push({
256
+ source: ctx.moduleOrClassNode.id,
257
+ target: nodeId,
258
+ kind: 'contains',
259
+ });
260
+ }
261
+ else {
262
+ // Module/class node is created lazily (see extract). Hold the edge in
263
+ // pending so its source can be rewritten once the module exists.
264
+ const edge = {
265
+ source: '',
266
+ target: nodeId,
267
+ kind: 'contains',
268
+ };
269
+ ctx.edges.push(edge);
270
+ ctx.pendingModuleOrClassSource.push(edge);
271
+ }
272
+ this.count++;
273
+ },
274
+ };
275
+ }
276
+ /**
277
+ * Backward-compat wrapper: pre-#83 callers (e.g. legacy test fixtures)
278
+ * used `sweepProcedures(ctx, src)` and got back the ProcInfo[].
279
+ * Now it returns `ctx.procedures` (the same flat list the factory
280
+ * appends to). The implementation still calls the classifier once per
281
+ * pre-split line, so the count is identical to the new walker path.
282
+ */
283
+ function sweepProcedures(ctx, src) {
284
+ const cls = createProceduresClassifier();
285
+ const lines = src.split('\n');
286
+ for (let i = 0; i < lines.length; i++) {
287
+ cls.classifyLine(lines[i] ?? '', i, ctx);
236
288
  }
237
- return procs;
289
+ return ctx.procedures;
238
290
  }
239
291
  //# sourceMappingURL=procedures.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"procedures.js","sourceRoot":"","sources":["../../../src/extraction/vba/procedures.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"procedures.js","sourceRoot":"","sources":["../../../src/extraction/vba/procedures.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sql-wrapper.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/sql-wrapper.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAwGhD,wBAAgB,aAAa,CAC3B,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EACnB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,IAAI,CA+CN;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,IAAI,CAiBN"}
1
+ {"version":3,"file":"sql-wrapper.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/sql-wrapper.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAuHhD,wBAAgB,aAAa,CAC3B,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EACnB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,IAAI,CA+CN;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,IAAI,CAiBN"}
@@ -72,7 +72,23 @@ const SQL_VAR_DOCMD_RUNSQL_RE = /\bDoCmd\.RunSQL\s*\(?\s*(\p{L}[\p{L}\p{N}_]*)\s
72
72
  * with spaces — `[Order Details]`, `[My Schema]`, `[My Table]` —
73
73
  * are captured whole.
74
74
  */
75
- const SQL_TABLE_RE = /\b(?:FROM|JOIN|INTO|UPDATE)\s+((?:(?:\[[^\]]+\]|\p{L}[\p{L}\p{N}_]*)\.)?(?:\[[^\]]+\]|\p{L}[\p{L}\p{N}_]*))/giu;
75
+ const SQL_TABLE_RE = /\b(FROM|JOIN|INTO|UPDATE)\s+((?:(?:\[[^\]]+\]|\p{L}[\p{L}\p{N}_]*)\.)?(?:\[[^\]]+\]|\p{L}[\p{L}\p{N}_]*))/giu;
76
+ /**
77
+ * Classify a table reference as a data `read` or `write` from the SQL verb,
78
+ * so `metadata.access` lets consumers answer "who WRITES table X" vs "who
79
+ * READS table X". The mutating targets are writes: `INSERT INTO <t>`,
80
+ * `UPDATE <t>`, and the `FROM <t>` of a `DELETE` (Access's `DELETE FROM x`
81
+ * makes that FROM the delete target). Every other `FROM`/`JOIN` source table
82
+ * — including the source of an `INSERT ... SELECT` — is a read.
83
+ */
84
+ function classifySqlAccess(sqlString, clause) {
85
+ const kw = clause.toUpperCase();
86
+ if (kw === 'INTO' || kw === 'UPDATE')
87
+ return 'write';
88
+ if (kw === 'FROM' && /^\s*DELETE\b/i.test(sqlString))
89
+ return 'write';
90
+ return 'read';
91
+ }
76
92
  /**
77
93
  * Regex matching the chained `& "..."` literals that may follow a
78
94
  * wrapper's first literal on the same physical line. Captures the
@@ -199,14 +215,15 @@ function emitSqlTableReferences(ctx, sqlString, lineNum, dedupe) {
199
215
  const tableRe = new RegExp(SQL_TABLE_RE.source, SQL_TABLE_RE.flags);
200
216
  let tm;
201
217
  while ((tm = tableRe.exec(sqlString)) !== null) {
202
- const table = (tm[1] ?? '').replace(/[\[\]]/g, '');
218
+ const clause = tm[1] ?? '';
219
+ const table = (tm[2] ?? '').replace(/[\[\]]/g, '');
203
220
  if (!table)
204
221
  continue;
205
222
  const key = `${lineNum}:${table}`;
206
223
  if (dedupe.has(key))
207
224
  continue;
208
225
  dedupe.add(key);
209
- ctx.emitReference(table, lineNum, 0, 'vba-sql-table');
226
+ ctx.emitReference(table, lineNum, 0, 'vba-sql-table', classifySqlAccess(sqlString, clause));
210
227
  }
211
228
  }
212
229
  //# sourceMappingURL=sql-wrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sql-wrapper.js","sourceRoot":"","sources":["../../../src/extraction/vba/sql-wrapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sql-wrapper.js","sourceRoot":"","sources":["../../../src/extraction/vba/sql-wrapper.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"vba-extractor.d.ts","sourceRoot":"","sources":["../../src/extraction/vba-extractor.ts"],"names":[],"mappings":"AAmCA,OAAO,EAAQ,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAelD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAAC,CAA0B;gBAEjC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAOlF,OAAO,IAAI,gBAAgB;IAwH3B,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,uBAAuB;CAkBhC"}
1
+ {"version":3,"file":"vba-extractor.d.ts","sourceRoot":"","sources":["../../src/extraction/vba-extractor.ts"],"names":[],"mappings":"AAuCA,OAAO,EAAQ,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAelD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAAC,CAA0B;gBAEjC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAOlF,OAAO,IAAI,gBAAgB;IAgI3B,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,uBAAuB;CAkBhC"}