@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
@@ -1,3 +1,15 @@
1
- import { VbaExtractorContext } from './context';
1
+ import { VbaExtractorContext, VbaClassifier } from './context';
2
+ /**
3
+ * Issue #83: factory for the calls/SQL classifier. The factory takes the
4
+ * pre-split `lines` array (so `trackSqlVariableAssignment` can do its
5
+ * multi-line look-ahead for `&`-accumulate semantics) and closes over the
6
+ * per-file state the legacy `sweepCallsAndSql` declared locally.
7
+ */
8
+ export declare function createCallsAndSqlClassifier(lines: readonly string[]): VbaClassifier;
9
+ /**
10
+ * Backward-compat wrapper (see procedures.ts). Returns void — the calls
11
+ * sweep never contributed to `hasAnySymbols` directly (every other
12
+ * concern's `count` is the signal the orchestrator reads).
13
+ */
2
14
  export declare function sweepCallsAndSql(ctx: VbaExtractorContext, src: string): void;
3
15
  //# sourceMappingURL=call-sweep.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"call-sweep.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/call-sweep.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAY,MAAM,WAAW,CAAC;AA8B1D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CA8L5E"}
1
+ {"version":3,"file":"call-sweep.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/call-sweep.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAY,aAAa,EAAE,MAAM,WAAW,CAAC;AA0CzE;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,aAAa,CA4Of;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAO5E"}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCallsAndSqlClassifier = createCallsAndSqlClassifier;
3
4
  exports.sweepCallsAndSql = sweepCallsAndSql;
4
5
  /**
5
6
  * Call/SQL sweep orchestrator (REQ-CODE-4, REQ-CODE-8). Walks the
@@ -22,21 +23,28 @@ const sql_wrapper_1 = require("./sql-wrapper");
22
23
  * never matches.
23
24
  */
24
25
  const SET_NEW_RE = /\bSet\s+(\p{L}[\p{L}\p{N}_]*)\s*=\s*New\s+(\p{L}[\p{L}\p{N}_]*)(?:\.(\p{L}[\p{L}\p{N}_]*))?/iu;
26
+ /**
27
+ * Factory-return inference: `Set <var> = <Factory>(...)` or `Set <var> =
28
+ * <Factory>` where <Factory> is a bare same-file function. Groups: (1)
29
+ * variable, (2) factory name. The trailing `(?:\(|$)` requires the factory
30
+ * name to be followed by `(` or end-of-expression, so a qualified
31
+ * `Set x = obj.Member` (the `.` breaks the match) and the `New` form
32
+ * (`New Foo` — `New` is followed by a space + type, not `(`/end) never match.
33
+ * Runs on the MASKED line so a string literal never triggers it.
34
+ */
35
+ const SET_CALL_RE = /\bSet\s+(\p{L}[\p{L}\p{N}_]*)\s*=\s*(\p{L}[\p{L}\p{N}_]*)\s*(?:\(|$)/iu;
25
36
  /** Issue #43: track the receiver for `With <expr>` / `End With` blocks. */
26
37
  const WITH_START_RE = /^\s*With\b\s+(.+?)\s*$/iu;
27
38
  const WITH_END_RE = /^\s*End\s+With\b/iu;
28
- function sweepCallsAndSql(ctx, src) {
29
- const lines = src.split('\n');
39
+ /**
40
+ * Issue #83: factory for the calls/SQL classifier. The factory takes the
41
+ * pre-split `lines` array (so `trackSqlVariableAssignment` can do its
42
+ * multi-line look-ahead for `&`-accumulate semantics) and closes over the
43
+ * per-file state the legacy `sweepCallsAndSql` declared locally.
44
+ */
45
+ function createCallsAndSqlClassifier(lines) {
30
46
  const procedureStartLines = new Set();
31
47
  const sqlTargetsThisFile = new Set();
32
- // Issue #52: reset the shared scope state before the per-line walk
33
- // begins. `sweepEnumsAndConsts` already populated `procStack` /
34
- // `currentProcKey` during its own walk; clearing here guarantees the
35
- // `scanDoCmdOpenCalls` / `scanDoCmdOpenQuery` reads (which consult
36
- // `currentProcKey` per call-site) start in module scope and follow
37
- // the same push/pop discipline as the existing `stack` array below.
38
- ctx.procStack.length = 0;
39
- ctx.currentProcKey = 'module';
40
48
  // Walk the source once, emitting call edges and SQL edges per line and
41
49
  // tracking the current procedure stack.
42
50
  const stack = [];
@@ -48,159 +56,229 @@ function sweepCallsAndSql(ctx, src) {
48
56
  // `endLine` so `codegraph_explore` returns the full body span —
49
57
  // not just the signature line.
50
58
  const procEndLines = new Map();
51
- for (let i = 0; i < lines.length; i++) {
52
- const line = lines[i] ?? '';
53
- const lineNum = i + 1;
54
- const procStart = constants_1.PROC_RE.exec(line);
55
- if (procStart) {
56
- // Issue #52: mirror the proc push into the shared
57
- // `procStack` + `currentProcKey` so Const reads in this same
58
- // sweep see the same scope as the const writes did (during
59
- // `sweepEnumsAndConsts`).
60
- const procStartLine = lineNum;
61
- ctx.procStack.push(procStartLine);
62
- ctx.currentProcKey = String(procStartLine);
63
- const name = procStart[3] ?? '';
64
- const bucket = ctx.localProcs.get(name);
65
- if (bucket) {
66
- // Fix 1: select the ProcInfo whose startLine matches the current
67
- // line, not always bucket[0]. When Property Get/Let/Set share a
68
- // name, all three exist in the bucket; pushing bucket[0] every time
69
- // meant Let/Set bodies erroneously attributed to the Get's ProcInfo.
70
- const proc = bucket.find((p) => p.startLine === lineNum) ?? bucket[0];
71
- if (proc)
72
- stack.push(proc);
59
+ const cls = {
60
+ name: 'callsAndSql',
61
+ count: 0,
62
+ classifyLine(line, i, ctx) {
63
+ const lineNum = i + 1;
64
+ const procStart = constants_1.PROC_RE.exec(line);
65
+ if (procStart) {
66
+ // Issue #52: mirror the proc push into the shared
67
+ // `procStack` + `currentProcKey` so Const reads in this same
68
+ // sweep see the same scope as the const writes did (during
69
+ // `sweepEnumsAndConsts`).
70
+ const procStartLine = lineNum;
71
+ ctx.procStack.push(procStartLine);
72
+ ctx.currentProcKey = String(procStartLine);
73
+ const name = procStart[3] ?? '';
74
+ const bucket = ctx.localProcs.get(name);
75
+ if (bucket) {
76
+ // Fix 1: select the ProcInfo whose startLine matches the current
77
+ // line, not always bucket[0]. When Property Get/Let/Set share a
78
+ // name, all three exist in the bucket; pushing bucket[0] every time
79
+ // meant Let/Set bodies erroneously attributed to the Get's ProcInfo.
80
+ const proc = bucket.find((p) => p.startLine === lineNum) ?? bucket[0];
81
+ if (proc)
82
+ stack.push(proc);
83
+ }
84
+ procedureStartLines.add(lineNum);
85
+ // FALL THROUGH — on a proc-start line the legacy sweep ALSO ran
86
+ // the masked-line / with-receiver / call-scan / SQL-scan body.
87
+ // A `return` here would silently drop the first body line of every
88
+ // procedure (a real bug — `Sub Foo()\n Bar 1\n` would never see
89
+ // the `Bar 1` call).
73
90
  }
74
- procedureStartLines.add(lineNum);
75
- }
76
- else if (constants_1.PROCEDURE_END_RE.test(line) && stack.length > 0) {
77
- const ending = stack.pop();
78
- // Issue #52: mirror the pop into the shared scope state.
79
- ctx.procStack.pop();
80
- ctx.currentProcKey =
81
- ctx.procStack.length > 0
82
- ? String(ctx.procStack[ctx.procStack.length - 1])
83
- : 'module';
84
- procEndLines.set(ending.startLine, lineNum);
85
- continue;
86
- }
87
- // Fix 2 (Issue #2): mask string-literal content before call scanning so
88
- // patterns like `modHelper.BuildQuery(` inside a string argument are not
89
- // mistakenly treated as call sites. SQL scanning still uses the original
90
- // line because SQL lives INSIDE string literals.
91
- const callScanLine = (0, text_utils_1.maskStringContent)(line);
92
- if (stack.length > 0 && WITH_END_RE.test(callScanLine)) {
93
- withReceiverStack.pop();
94
- continue;
95
- }
96
- if (stack.length > 0 && !procedureStartLines.has(lineNum)) {
97
- const withStart = WITH_START_RE.exec(callScanLine);
98
- if (withStart) {
99
- const receiver = (0, calls_1.normalizeWithReceiver)(withStart[1] ?? '');
100
- if (receiver)
101
- withReceiverStack.push(receiver);
102
- continue;
91
+ else if (constants_1.PROCEDURE_END_RE.test(line) && stack.length > 0) {
92
+ const ending = stack.pop();
93
+ // Issue #52: mirror the pop into the shared scope state.
94
+ ctx.procStack.pop();
95
+ ctx.currentProcKey =
96
+ ctx.procStack.length > 0
97
+ ? String(ctx.procStack[ctx.procStack.length - 1])
98
+ : 'module';
99
+ procEndLines.set(ending.startLine, lineNum);
100
+ return;
103
101
  }
104
- }
105
- // Don't scan call sites on the line that declares the procedure — it
106
- // would match the proc name itself in `Sub Outer()`.
107
- if (!procedureStartLines.has(lineNum) && stack.length > 0) {
108
- const currentProc = stack[stack.length - 1];
109
- (0, calls_1.scanRaiseEvents)(ctx, callScanLine, currentProc, lineNum);
110
- (0, calls_1.scanCallSites)(ctx, callScanLine, currentProc, lineNum);
111
- }
112
- // Hueco 1: capture `Me.<Control>` references. Only inside procedures
113
- // because `Me` is only meaningful inside a form's class module.
114
- if (!procedureStartLines.has(lineNum) && stack.length > 0) {
115
- (0, controls_1.scanMeControlReferences)(ctx, callScanLine, stack[stack.length - 1], lineNum);
116
- }
117
- // SQL wrappers — only inside a procedure. Use the ORIGINAL line — SQL is
118
- // inside string literals, so the masked line would strip the SQL content.
119
- if (stack.length > 0) {
120
- (0, sql_wrapper_1.trackSqlVariableAssignment)(lines, i, sqlVariables);
121
- (0, sql_wrapper_1.scanSqlInLine)(ctx, line, lineNum, sqlTargetsThisFile, sqlVariables);
122
- }
123
- // H1 fix: detect statement-form Sub calls (no parens, no `Call` keyword).
124
- // Issue #45: split single-line `If … Then <body>` clauses first so the
125
- // actual call after `Then`/`Else`/`:` is not shadowed by the leading
126
- // keyword.
127
- if (stack.length > 0 && !procedureStartLines.has(lineNum)) {
128
- // Issue #46: `Set x = New <Type>[.<Inner>]` late-instantiation.
129
- // Run BEFORE the call-site scan so a later `<x>.Member ...` line
130
- // finds `x` already registered in `localVarTypeMap`.
131
- const setNew = SET_NEW_RE.exec(callScanLine);
132
- if (setNew) {
133
- const varName = setNew[1] ?? '';
134
- const outerType = setNew[2] ?? '';
135
- const innerType = setNew[3] ?? '';
136
- if (varName && outerType) {
137
- // Skip primitives defensively — consistent with the Dim sweep guard.
138
- if (!constants_1.PRIMITIVE_TYPES.has(outerType.toLowerCase())) {
139
- ctx.localVarTypeMap.set(varName.toLowerCase(), {
140
- outer: outerType,
141
- // Mirror `Dim x As Foo.Bar`: qualified `Set rs = New
142
- // DAO.Recordset` registers `qualified: true` so the PR #61
143
- // gate keeps downstream `rs.Method` calls silent.
144
- qualified: !!innerType,
145
- assignedWithSet: true,
146
- variableName: varName,
147
- });
148
- ctx.emitReference(outerType, lineNum, 0, 'vba-set-new');
149
- }
102
+ // Fix 2 (Issue #2): mask string-literal content before call scanning so
103
+ // patterns like `modHelper.BuildQuery(` inside a string argument are not
104
+ // mistakenly treated as call sites. SQL scanning still uses the original
105
+ // line because SQL lives INSIDE string literals.
106
+ const callScanLine = (0, text_utils_1.maskStringContent)(line);
107
+ if (stack.length > 0 && WITH_END_RE.test(callScanLine)) {
108
+ withReceiverStack.pop();
109
+ return;
110
+ }
111
+ if (stack.length > 0 && !procedureStartLines.has(lineNum)) {
112
+ const withStart = WITH_START_RE.exec(callScanLine);
113
+ if (withStart) {
114
+ const receiver = (0, calls_1.normalizeWithReceiver)(withStart[1] ?? '');
115
+ if (receiver)
116
+ withReceiverStack.push(receiver);
117
+ return;
150
118
  }
151
119
  }
152
- const clauseLines = (0, calls_1.splitSingleLineIfClauses)(callScanLine);
153
- for (const clauseLine of clauseLines) {
154
- const stmtCall = (0, calls_1.detectStatementCall)(clauseLine);
155
- if (stmtCall) {
156
- const caller = stack[stack.length - 1];
157
- (0, calls_1.emitStatementCallEdge)(ctx, caller, stmtCall, lineNum);
120
+ // Don't scan call sites on the line that declares the procedure — it
121
+ // would match the proc name itself in `Sub Outer()`.
122
+ if (!procedureStartLines.has(lineNum) && stack.length > 0) {
123
+ const currentProc = stack[stack.length - 1];
124
+ (0, calls_1.scanRaiseEvents)(ctx, callScanLine, currentProc, lineNum);
125
+ (0, calls_1.scanCallSites)(ctx, callScanLine, currentProc, lineNum);
126
+ }
127
+ // Hueco 1: capture `Me.<Control>` references. Only inside procedures
128
+ // because `Me` is only meaningful inside a form's class module.
129
+ if (!procedureStartLines.has(lineNum) && stack.length > 0) {
130
+ (0, controls_1.scanMeControlReferences)(ctx, callScanLine, stack[stack.length - 1], lineNum);
131
+ }
132
+ // SQL wrappers — only inside a procedure. Use the ORIGINAL line — SQL is
133
+ // inside string literals, so the masked line would strip the SQL content.
134
+ if (stack.length > 0) {
135
+ (0, sql_wrapper_1.trackSqlVariableAssignment)(lines, i, sqlVariables);
136
+ (0, sql_wrapper_1.scanSqlInLine)(ctx, line, lineNum, sqlTargetsThisFile, sqlVariables);
137
+ }
138
+ // H1 fix: detect statement-form Sub calls (no parens, no `Call` keyword).
139
+ // Issue #45: split single-line `If … Then <body>` clauses first so the
140
+ // actual call after `Then`/`Else`/`:` is not shadowed by the leading
141
+ // keyword.
142
+ if (stack.length > 0 && !procedureStartLines.has(lineNum)) {
143
+ // Issue #46: `Set x = New <Type>[.<Inner>]` late-instantiation.
144
+ // Run BEFORE the call-site scan so a later `<x>.Member ...` line
145
+ // finds `x` already registered in `localVarTypeMap`.
146
+ const setNew = SET_NEW_RE.exec(callScanLine);
147
+ if (setNew) {
148
+ const varName = setNew[1] ?? '';
149
+ const outerType = setNew[2] ?? '';
150
+ const innerType = setNew[3] ?? '';
151
+ if (varName && outerType) {
152
+ // Skip primitives defensively — consistent with the Dim sweep guard.
153
+ if (!constants_1.PRIMITIVE_TYPES.has(outerType.toLowerCase())) {
154
+ ctx.localVarTypeMap.set(varName.toLowerCase(), {
155
+ outer: outerType,
156
+ // Mirror `Dim x As Foo.Bar`: qualified `Set rs = New
157
+ // DAO.Recordset` registers `qualified: true` so the PR #61
158
+ // gate keeps downstream `rs.Method` calls silent.
159
+ qualified: !!innerType,
160
+ assignedWithSet: true,
161
+ variableName: varName,
162
+ });
163
+ ctx.emitReference(outerType, lineNum, 0, 'vba-set-new');
164
+ }
165
+ }
158
166
  }
159
- // Fix 7 + Fix 2 + Issue #40: qualified statement-form calls
160
- // (`Receiver.Member args`) the dominant cross-object call shape.
161
- const qualStmt = (0, calls_1.detectQualifiedStatementCall)(clauseLine);
162
- if (qualStmt) {
163
- const caller = stack[stack.length - 1];
164
- if (ctx.shouldProcessQualifiedCall(qualStmt.receiver)) {
165
- (0, calls_1.emitQualifiedStatementCallEdge)(ctx, caller, qualStmt.receiver, qualStmt.member, lineNum);
167
+ else {
168
+ // Factory-return inference: `Set x = <Factory>(...)`. Type x from a
169
+ // same-file function's project-class return type so a later
170
+ // `x.Method` resolves to the factory's class. Overrides a generic
171
+ // `Dim x As Object/Variant` (or an untyped x), but yields to an
172
+ // explicit `Dim x As <ProjectClass>` — the declaration is the
173
+ // authoritative type. Runs after SET_NEW (which owns the `New` form).
174
+ const setCall = SET_CALL_RE.exec(callScanLine);
175
+ if (setCall) {
176
+ const varName = setCall[1] ?? '';
177
+ const factory = (setCall[2] ?? '').toLowerCase();
178
+ const retType = factory ? ctx.functionReturnTypes.get(factory) : undefined;
179
+ if (varName && retType) {
180
+ const existing = ctx.localVarTypeMap.get(varName.toLowerCase());
181
+ const existingIsProjectClass = !!existing &&
182
+ !existing.qualified &&
183
+ !constants_1.PRIMITIVE_TYPES.has(existing.outer.toLowerCase());
184
+ if (!existingIsProjectClass) {
185
+ ctx.localVarTypeMap.set(varName.toLowerCase(), {
186
+ outer: retType,
187
+ qualified: false,
188
+ assignedWithSet: true,
189
+ variableName: varName,
190
+ });
191
+ ctx.emitReference(retType, lineNum, 0, 'vba-factory-return');
192
+ }
193
+ }
166
194
  }
167
195
  }
168
- const withReceiver = withReceiverStack[withReceiverStack.length - 1];
169
- if (withReceiver) {
170
- const withCall = (0, calls_1.detectWithMemberCall)(clauseLine);
171
- if (withCall && ctx.isLocalProjectClassVar(withReceiver)) {
196
+ const clauseLines = (0, calls_1.splitSingleLineIfClauses)(callScanLine);
197
+ for (const clauseLine of clauseLines) {
198
+ const stmtCall = (0, calls_1.detectStatementCall)(clauseLine);
199
+ if (stmtCall) {
200
+ const caller = stack[stack.length - 1];
201
+ (0, calls_1.emitStatementCallEdge)(ctx, caller, stmtCall, lineNum);
202
+ }
203
+ // Fix 7 + Fix 2 + Issue #40: qualified statement-form calls
204
+ // (`Receiver.Member args`) — the dominant cross-object call shape.
205
+ const qualStmt = (0, calls_1.detectQualifiedStatementCall)(clauseLine);
206
+ if (qualStmt) {
172
207
  const caller = stack[stack.length - 1];
173
- (0, calls_1.emitQualifiedStatementCallEdge)(ctx, caller, withReceiver, withCall.member, lineNum);
208
+ if (ctx.shouldProcessQualifiedCall(qualStmt.receiver)) {
209
+ (0, calls_1.emitQualifiedStatementCallEdge)(ctx, caller, qualStmt.receiver, qualStmt.member, lineNum);
210
+ }
211
+ }
212
+ const withReceiver = withReceiverStack[withReceiverStack.length - 1];
213
+ if (withReceiver) {
214
+ const withCall = (0, calls_1.detectWithMemberCall)(clauseLine);
215
+ if (withCall && ctx.isLocalProjectClassVar(withReceiver)) {
216
+ const caller = stack[stack.length - 1];
217
+ (0, calls_1.emitQualifiedStatementCallEdge)(ctx, caller, withReceiver, withCall.member, lineNum);
218
+ }
174
219
  }
175
220
  }
221
+ // B4 (hueco 6): `DoCmd.OpenForm "FormName"` modelling — the literal
222
+ // form name lives INSIDE a string literal, so scan the ORIGINAL
223
+ // (unmasked) line. The receiver is the same proc-stack frame.
224
+ const caller2 = stack[stack.length - 1];
225
+ // Issue #48: shared OpenForm/OpenReport dispatch; OpenQuery emits an
226
+ // `UnresolvedReference` and stays separate.
227
+ (0, docmd_1.scanDoCmdOpenCalls)(ctx, line, caller2, lineNum);
228
+ (0, docmd_1.scanDoCmdOpenQuery)(ctx, line, caller2, lineNum);
229
+ // Issue #44: cross-form bang references (`Forms!X` / `Forms("X")!Y`) —
230
+ // scan the unmasked line (form name lives in a string literal in the
231
+ // paren form).
232
+ (0, controls_1.scanFormsBang)(ctx, line, caller2, lineNum);
233
+ // Issue #50: cross-form TempVars key accesses. Bang form scans the
234
+ // masked line, paren + Add forms scan the original.
235
+ (0, tempvars_1.sweepTempVars)(ctx, callScanLine, line, lineNum, caller2);
176
236
  }
177
- // B4 (hueco 6): `DoCmd.OpenForm "FormName"` modelling — the literal
178
- // form name lives INSIDE a string literal, so scan the ORIGINAL
179
- // (unmasked) line. The receiver is the same proc-stack frame.
180
- const caller2 = stack[stack.length - 1];
181
- // Issue #48: shared OpenForm/OpenReport dispatch; OpenQuery emits an
182
- // `UnresolvedReference` and stays separate.
183
- (0, docmd_1.scanDoCmdOpenCalls)(ctx, line, caller2, lineNum);
184
- (0, docmd_1.scanDoCmdOpenQuery)(ctx, line, caller2, lineNum);
185
- // Issue #44: cross-form bang references (`Forms!X` / `Forms("X")!Y`) —
186
- // scan the unmasked line (form name lives in a string literal in the
187
- // paren form).
188
- (0, controls_1.scanFormsBang)(ctx, line, caller2, lineNum);
189
- // Issue #50: cross-form TempVars key accesses. Bang form scans the
190
- // masked line, paren + Add forms scan the original.
191
- (0, tempvars_1.sweepTempVars)(ctx, callScanLine, line, lineNum, caller2);
237
+ },
238
+ finalize(ctx) {
239
+ // Apply endLine to every emitted function node keyed by its startLine.
240
+ // Functions without a recorded endLine (e.g. malformed VBA without an
241
+ // `End`) keep their `endLine = startLine` from sweepProcedures —
242
+ // which is the correct "single line" representation.
243
+ for (const n of ctx.nodes) {
244
+ if (n.kind !== 'function')
245
+ continue;
246
+ const end = procEndLines.get(n.startLine);
247
+ if (end !== undefined)
248
+ n.endLine = end;
249
+ }
250
+ },
251
+ };
252
+ // Issue #52: reset the shared scope state on the first call so leftover
253
+ // state from a previous extract() (impossible in production but possible
254
+ // in unit tests that construct a fresh extractor and run twice) never
255
+ // leaks across sweeps. The walker here updates the scope every iteration
256
+ // AFTER the enums-consts classifier runs (it runs first per line); on the
257
+ // first call we also reset, so the initial state matches the legacy
258
+ // pre-loop setup.
259
+ let initialized = false;
260
+ const originalClassify = cls.classifyLine;
261
+ cls.classifyLine = function (line, i, ctx) {
262
+ if (!initialized) {
263
+ ctx.procStack.length = 0;
264
+ ctx.currentProcKey = 'module';
265
+ initialized = true;
192
266
  }
267
+ return originalClassify.call(this, line, i, ctx);
268
+ };
269
+ return cls;
270
+ }
271
+ /**
272
+ * Backward-compat wrapper (see procedures.ts). Returns void — the calls
273
+ * sweep never contributed to `hasAnySymbols` directly (every other
274
+ * concern's `count` is the signal the orchestrator reads).
275
+ */
276
+ function sweepCallsAndSql(ctx, src) {
277
+ const lines = src.split('\n');
278
+ const cls = createCallsAndSqlClassifier(lines);
279
+ for (let i = 0; i < lines.length; i++) {
280
+ cls.classifyLine(lines[i] ?? '', i, ctx);
193
281
  }
194
- // Apply endLine to every emitted function node keyed by its startLine.
195
- // Functions without a recorded endLine (e.g. malformed VBA without an
196
- // `End`) keep their `endLine = startLine` from sweepProcedures —
197
- // which is the correct "single line" representation.
198
- for (const n of ctx.nodes) {
199
- if (n.kind !== 'function')
200
- continue;
201
- const end = procEndLines.get(n.startLine);
202
- if (end !== undefined)
203
- n.endLine = end;
204
- }
282
+ cls.finalize?.(ctx);
205
283
  }
206
284
  //# sourceMappingURL=call-sweep.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"call-sweep.js","sourceRoot":"","sources":["../../../src/extraction/vba/call-sweep.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"call-sweep.js","sourceRoot":"","sources":["../../../src/extraction/vba/call-sweep.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,29 @@ export interface ProcInfo {
19
19
  visibility: 'public' | 'private' | 'protected' | 'internal';
20
20
  startLine: number;
21
21
  }
22
+ /**
23
+ * Issue #83: the per-concern classifier shape. The single walker in
24
+ * `vba-extractor.ts` calls `classifyLine(line, index, ctx)` once per
25
+ * pre-split line, in a stable order across all six concerns. No internal
26
+ * `.split('\n')` — the split happens once in the walker.
27
+ */
28
+ export interface VbaClassifier {
29
+ /** Stable, human-readable name for logs/metrics. */
30
+ readonly name: string;
31
+ /**
32
+ * Number of top-level symbols this classifier emitted. Read by the
33
+ * orchestrator to compute `hasAnySymbols` (skip module-node creation
34
+ * for files with NO symbols per REQ-CODE-10).
35
+ */
36
+ count: number;
37
+ /** Classify one pre-split line. May mutate `ctx` and bump `count`. */
38
+ classifyLine(line: string, index: number, ctx: VbaExtractorContext): void;
39
+ /**
40
+ * Optional end-of-file hook. Used by the calls-and-sql classifier to
41
+ * flush `procEndLines` → function node `endLine`.
42
+ */
43
+ finalize?(ctx: VbaExtractorContext): void;
44
+ }
22
45
  export declare class VbaExtractorContext {
23
46
  filePath: string;
24
47
  nodes: Node[];
@@ -44,6 +67,14 @@ export declare class VbaExtractorContext {
44
67
  * Let Foo`, and `Property Set Foo` all share the name `Foo`.
45
68
  */
46
69
  localProcs: Map<string, ProcInfo[]>;
70
+ /**
71
+ * Issue #83: flat list of every `ProcInfo` produced by the procedures
72
+ * classifier, in declaration order. Mirrors the array the legacy
73
+ * `sweepProcedures` returned; the orchestrator reads it after the single
74
+ * walker pass to (a) decide `hasAnySymbols`, and (b) check for a
75
+ * `New` initializer to set `hasClassInitializer` on the class node.
76
+ */
77
+ procedures: ProcInfo[];
47
78
  /**
48
79
  * Cache: procedure name → first matching function node emitted for that
49
80
  * name (audit S2 — O(1) same-file call resolution).
@@ -114,6 +145,17 @@ export declare class VbaExtractorContext {
114
145
  procStack: number[];
115
146
  /** Local event name (lowercase) → event node for `RaiseEvent` edge emission. */
116
147
  localEvents: Map<string, Node>;
148
+ /**
149
+ * Same-file function/property return types, keyed by lowercase proc name →
150
+ * declared return type. ONLY non-primitive (project-class) return types are
151
+ * stored. Populated by `sweepProcedures` (which runs before the call sweep);
152
+ * consumed by the call sweep's `Set x = Factory(...)` handling to type the
153
+ * assigned local var so a later `x.Method` qualified call resolves to the
154
+ * factory's class instead of a dead-end `x.Method` stub. Cross-file
155
+ * factories are not covered here (no return type is visible at extraction
156
+ * time) — that stays the resolver's frontier.
157
+ */
158
+ functionReturnTypes: Map<string, string>;
117
159
  constructor(filePath: string);
118
160
  /**
119
161
  * Emit a `contains` edge from the (lazily-created) module/class node to
@@ -156,8 +198,16 @@ export declare class VbaExtractorContext {
156
198
  * node named `targetName`. Used by Dim, WithEvents, Set-New, and SQL sweeps.
157
199
  * Fix 5: the synthetic node id is keyed on (filePath, kind, name) WITHOUT
158
200
  * lineNum so the same type/table referenced on N lines produces ONE node.
159
- */
160
- emitReference(targetName: string, lineNum: number, column: number, synthesizedBy: string): void;
201
+ *
202
+ * `access` (optional): when a caller can classify the reference as a data
203
+ * read or write — SQL table references derive it from the statement verb —
204
+ * it is stamped onto `edge.metadata.access` so consumers can answer "who
205
+ * WRITES table X" vs "who READS table X". Mirrors the read/write tagging the
206
+ * TempVars sweep already emits (`emitTempVarReference`). Omitted for
207
+ * structural references (Dim/WithEvents/Set-New) where the direction is not
208
+ * meaningful.
209
+ */
210
+ emitReference(targetName: string, lineNum: number, column: number, synthesizedBy: string, access?: 'read' | 'write'): void;
161
211
  /**
162
212
  * Issue #52: shared lookup helper for `scanDoCmdOpenCalls` and
163
213
  * `scanDoCmdOpenQuery`. The current scope is the procedure whose
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;IACtC,UAAU,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;IAC5D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,mBAAmB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,IAAI,EAAE,CAAM;IACnB,KAAK,EAAE,IAAI,EAAE,CAAM;IACnB,MAAM,EAAE,eAAe,EAAE,CAAM;IAC/B,oBAAoB,EAAE,mBAAmB,EAAE,CAAM;IACjD,iBAAiB,EAAE,IAAI,GAAG,IAAI,CAAQ;IAE7C;;;;;;;;;OASG;IACI,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE7C;;;;;OAKG;IACI,UAAU,0BAAiC;IAElD;;;OAGG;IACI,kBAAkB,oBAA2B;IAEpD;;;;OAIG;IACI,uBAAuB,oBAA2B;IAEzD,gFAAgF;IACzE,0BAA0B,EAAE,IAAI,EAAE,CAAM;IAE/C,2EAA2E;IACpE,eAAe,sBAA6B;IAC5C,UAAU,cAAqB;IAC/B,oBAAoB,cAAqB;IAEhD;;;;;OAKG;IACI,iBAAiB,sBAA6B;IAE9C,iBAAiB,cAAqB;IAE7C;;;;;OAKG;IACI,mBAAmB,cAAqB;IAE/C;;;;;;OAMG;IACI,eAAe;eACb,MAAM;mBACF,OAAO;qBACL,OAAO;uBACL,MAAM;0BACH,OAAO;OACtB;IAEL;;;;;;OAMG;IACI,cAAc,EAAE,GAAG,CAAC,QAAQ,GAAG,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAa;IAE/E;;;;;OAKG;IACI,cAAc,EAAE,QAAQ,GAAG,MAAM,CAAY;IAEpD;;;;;OAKG;IACI,SAAS,EAAE,MAAM,EAAE,CAAM;IAEhC,gFAAgF;IACzE,WAAW,oBAA2B;gBAEjC,QAAQ,EAAE,MAAM;IAI5B;;;;;OAKG;IACI,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAcrD;;;;;;;OAOG;IACI,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAU5D;;;;;;OAMG;IACI,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAKhE;;;;;;;;OAQG;IACI,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IASjD,0BAA0B,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;IAsBlD,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAM7D;;;;;OAKG;IACI,aAAa,CAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GACpB,IAAI;IAuCP;;;;;OAKG;IACI,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAW1D;;;;OAIG;IACI,oBAAoB,CACzB,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;CASvB"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;IACtC,UAAU,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;IAC5D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC1E;;;OAGG;IACH,QAAQ,CAAC,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAC3C;AAED,qBAAa,mBAAmB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,IAAI,EAAE,CAAM;IACnB,KAAK,EAAE,IAAI,EAAE,CAAM;IACnB,MAAM,EAAE,eAAe,EAAE,CAAM;IAC/B,oBAAoB,EAAE,mBAAmB,EAAE,CAAM;IACjD,iBAAiB,EAAE,IAAI,GAAG,IAAI,CAAQ;IAE7C;;;;;;;;;OASG;IACI,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE7C;;;;;OAKG;IACI,UAAU,0BAAiC;IAElD;;;;;;OAMG;IACI,UAAU,EAAE,QAAQ,EAAE,CAAM;IAEnC;;;OAGG;IACI,kBAAkB,oBAA2B;IAEpD;;;;OAIG;IACI,uBAAuB,oBAA2B;IAEzD,gFAAgF;IACzE,0BAA0B,EAAE,IAAI,EAAE,CAAM;IAE/C,2EAA2E;IACpE,eAAe,sBAA6B;IAC5C,UAAU,cAAqB;IAC/B,oBAAoB,cAAqB;IAEhD;;;;;OAKG;IACI,iBAAiB,sBAA6B;IAE9C,iBAAiB,cAAqB;IAE7C;;;;;OAKG;IACI,mBAAmB,cAAqB;IAE/C;;;;;;OAMG;IACI,eAAe;eACb,MAAM;mBACF,OAAO;qBACL,OAAO;uBACL,MAAM;0BACH,OAAO;OACtB;IAEL;;;;;;OAMG;IACI,cAAc,EAAE,GAAG,CAAC,QAAQ,GAAG,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAa;IAE/E;;;;;OAKG;IACI,cAAc,EAAE,QAAQ,GAAG,MAAM,CAAY;IAEpD;;;;;OAKG;IACI,SAAS,EAAE,MAAM,EAAE,CAAM;IAEhC,gFAAgF;IACzE,WAAW,oBAA2B;IAE7C;;;;;;;;;OASG;IACI,mBAAmB,sBAA6B;gBAE3C,QAAQ,EAAE,MAAM;IAI5B;;;;;OAKG;IACI,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAcrD;;;;;;;OAOG;IACI,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAU5D;;;;;;OAMG;IACI,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAKhE;;;;;;;;OAQG;IACI,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IASjD,0BAA0B,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;IAsBlD,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAM7D;;;;;;;;;;;;;OAaG;IACI,aAAa,CAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GACxB,IAAI;IAuCP;;;;;OAKG;IACI,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAW1D;;;;OAIG;IACI,oBAAoB,CACzB,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;CASvB"}