@aroman22/codegraph-vba-darwin-arm64 1.15.0 → 1.16.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.
Files changed (213) hide show
  1. package/lib/dist/bin/codegraph.js +13 -7
  2. package/lib/dist/bin/codegraph.js.map +1 -1
  3. package/lib/dist/bin/daemon-release.d.ts +7 -0
  4. package/lib/dist/bin/daemon-release.d.ts.map +1 -0
  5. package/lib/dist/bin/daemon-release.js +18 -0
  6. package/lib/dist/bin/daemon-release.js.map +1 -0
  7. package/lib/dist/db/queries.d.ts +30 -0
  8. package/lib/dist/db/queries.d.ts.map +1 -1
  9. package/lib/dist/db/queries.js +51 -1
  10. package/lib/dist/db/queries.js.map +1 -1
  11. package/lib/dist/extraction/access-erd-extractor.d.ts +57 -0
  12. package/lib/dist/extraction/access-erd-extractor.d.ts.map +1 -0
  13. package/lib/dist/extraction/access-erd-extractor.js +389 -0
  14. package/lib/dist/extraction/access-erd-extractor.js.map +1 -0
  15. package/lib/dist/extraction/extraction-version.d.ts +1 -1
  16. package/lib/dist/extraction/extraction-version.js +1 -1
  17. package/lib/dist/extraction/grammars.d.ts +20 -0
  18. package/lib/dist/extraction/grammars.d.ts.map +1 -1
  19. package/lib/dist/extraction/grammars.js +34 -0
  20. package/lib/dist/extraction/grammars.js.map +1 -1
  21. package/lib/dist/extraction/index.d.ts +1 -0
  22. package/lib/dist/extraction/index.d.ts.map +1 -1
  23. package/lib/dist/extraction/index.js +371 -351
  24. package/lib/dist/extraction/index.js.map +1 -1
  25. package/lib/dist/extraction/parse-pool.d.ts +8 -3
  26. package/lib/dist/extraction/parse-pool.d.ts.map +1 -1
  27. package/lib/dist/extraction/parse-pool.js +1 -2
  28. package/lib/dist/extraction/parse-pool.js.map +1 -1
  29. package/lib/dist/extraction/parse-worker.js +7 -6
  30. package/lib/dist/extraction/parse-worker.js.map +1 -1
  31. package/lib/dist/extraction/sql-query-extractor.d.ts +16 -14
  32. package/lib/dist/extraction/sql-query-extractor.d.ts.map +1 -1
  33. package/lib/dist/extraction/sql-query-extractor.js +43 -31
  34. package/lib/dist/extraction/sql-query-extractor.js.map +1 -1
  35. package/lib/dist/extraction/sql-table-scan.d.ts +184 -0
  36. package/lib/dist/extraction/sql-table-scan.d.ts.map +1 -0
  37. package/lib/dist/extraction/sql-table-scan.js +288 -0
  38. package/lib/dist/extraction/sql-table-scan.js.map +1 -0
  39. package/lib/dist/extraction/tree-sitter.d.ts +10 -1
  40. package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
  41. package/lib/dist/extraction/tree-sitter.js +34 -3
  42. package/lib/dist/extraction/tree-sitter.js.map +1 -1
  43. package/lib/dist/extraction/vba/call-sweep.d.ts +2 -7
  44. package/lib/dist/extraction/vba/call-sweep.d.ts.map +1 -1
  45. package/lib/dist/extraction/vba/call-sweep.js +144 -90
  46. package/lib/dist/extraction/vba/call-sweep.js.map +1 -1
  47. package/lib/dist/extraction/vba/calls.d.ts +24 -4
  48. package/lib/dist/extraction/vba/calls.d.ts.map +1 -1
  49. package/lib/dist/extraction/vba/calls.js +42 -12
  50. package/lib/dist/extraction/vba/calls.js.map +1 -1
  51. package/lib/dist/extraction/vba/constants.d.ts +7 -14
  52. package/lib/dist/extraction/vba/constants.d.ts.map +1 -1
  53. package/lib/dist/extraction/vba/constants.js +8 -36
  54. package/lib/dist/extraction/vba/constants.js.map +1 -1
  55. package/lib/dist/extraction/vba/context.d.ts +443 -7
  56. package/lib/dist/extraction/vba/context.d.ts.map +1 -1
  57. package/lib/dist/extraction/vba/context.js +325 -29
  58. package/lib/dist/extraction/vba/context.js.map +1 -1
  59. package/lib/dist/extraction/vba/controls.d.ts +18 -1
  60. package/lib/dist/extraction/vba/controls.d.ts.map +1 -1
  61. package/lib/dist/extraction/vba/controls.js +99 -27
  62. package/lib/dist/extraction/vba/controls.js.map +1 -1
  63. package/lib/dist/extraction/vba/declarations.d.ts +1 -6
  64. package/lib/dist/extraction/vba/declarations.d.ts.map +1 -1
  65. package/lib/dist/extraction/vba/declarations.js +5 -39
  66. package/lib/dist/extraction/vba/declarations.js.map +1 -1
  67. package/lib/dist/extraction/vba/dims.d.ts +11 -7
  68. package/lib/dist/extraction/vba/dims.d.ts.map +1 -1
  69. package/lib/dist/extraction/vba/dims.js +265 -29
  70. package/lib/dist/extraction/vba/dims.js.map +1 -1
  71. package/lib/dist/extraction/vba/docmd.d.ts +29 -2
  72. package/lib/dist/extraction/vba/docmd.d.ts.map +1 -1
  73. package/lib/dist/extraction/vba/docmd.js +297 -18
  74. package/lib/dist/extraction/vba/docmd.js.map +1 -1
  75. package/lib/dist/extraction/vba/enums-consts.d.ts +7 -14
  76. package/lib/dist/extraction/vba/enums-consts.d.ts.map +1 -1
  77. package/lib/dist/extraction/vba/enums-consts.js +11 -45
  78. package/lib/dist/extraction/vba/enums-consts.js.map +1 -1
  79. package/lib/dist/extraction/vba/error-channel.d.ts +57 -0
  80. package/lib/dist/extraction/vba/error-channel.d.ts.map +1 -0
  81. package/lib/dist/extraction/vba/error-channel.js +128 -0
  82. package/lib/dist/extraction/vba/error-channel.js.map +1 -0
  83. package/lib/dist/extraction/vba/errors.d.ts +64 -0
  84. package/lib/dist/extraction/vba/errors.d.ts.map +1 -0
  85. package/lib/dist/extraction/vba/errors.js +775 -0
  86. package/lib/dist/extraction/vba/errors.js.map +1 -0
  87. package/lib/dist/extraction/vba/filesystem-statements.d.ts +23 -0
  88. package/lib/dist/extraction/vba/filesystem-statements.d.ts.map +1 -0
  89. package/lib/dist/extraction/vba/filesystem-statements.js +70 -0
  90. package/lib/dist/extraction/vba/filesystem-statements.js.map +1 -0
  91. package/lib/dist/extraction/vba/implements.d.ts +1 -6
  92. package/lib/dist/extraction/vba/implements.d.ts.map +1 -1
  93. package/lib/dist/extraction/vba/implements.js +1 -22
  94. package/lib/dist/extraction/vba/implements.js.map +1 -1
  95. package/lib/dist/extraction/vba/labels.d.ts +26 -0
  96. package/lib/dist/extraction/vba/labels.d.ts.map +1 -0
  97. package/lib/dist/extraction/vba/labels.js +180 -0
  98. package/lib/dist/extraction/vba/labels.js.map +1 -0
  99. package/lib/dist/extraction/vba/module-vars.d.ts +36 -0
  100. package/lib/dist/extraction/vba/module-vars.d.ts.map +1 -0
  101. package/lib/dist/extraction/vba/module-vars.js +145 -0
  102. package/lib/dist/extraction/vba/module-vars.js.map +1 -0
  103. package/lib/dist/extraction/vba/options.d.ts +88 -0
  104. package/lib/dist/extraction/vba/options.d.ts.map +1 -0
  105. package/lib/dist/extraction/vba/options.js +39 -0
  106. package/lib/dist/extraction/vba/options.js.map +1 -0
  107. package/lib/dist/extraction/vba/parameters.d.ts +35 -0
  108. package/lib/dist/extraction/vba/parameters.d.ts.map +1 -0
  109. package/lib/dist/extraction/vba/parameters.js +110 -0
  110. package/lib/dist/extraction/vba/parameters.js.map +1 -0
  111. package/lib/dist/extraction/vba/procedures.d.ts +1 -9
  112. package/lib/dist/extraction/vba/procedures.d.ts.map +1 -1
  113. package/lib/dist/extraction/vba/procedures.js +174 -112
  114. package/lib/dist/extraction/vba/procedures.js.map +1 -1
  115. package/lib/dist/extraction/vba/rules.d.ts +10 -5
  116. package/lib/dist/extraction/vba/rules.d.ts.map +1 -1
  117. package/lib/dist/extraction/vba/rules.js +19 -0
  118. package/lib/dist/extraction/vba/rules.js.map +1 -1
  119. package/lib/dist/extraction/vba/runtime-objects.d.ts +59 -0
  120. package/lib/dist/extraction/vba/runtime-objects.d.ts.map +1 -0
  121. package/lib/dist/extraction/vba/runtime-objects.js +106 -0
  122. package/lib/dist/extraction/vba/runtime-objects.js.map +1 -0
  123. package/lib/dist/extraction/vba/signature.d.ts +57 -0
  124. package/lib/dist/extraction/vba/signature.d.ts.map +1 -0
  125. package/lib/dist/extraction/vba/signature.js +164 -0
  126. package/lib/dist/extraction/vba/signature.js.map +1 -0
  127. package/lib/dist/extraction/vba/sql-wrapper.d.ts +76 -3
  128. package/lib/dist/extraction/vba/sql-wrapper.d.ts.map +1 -1
  129. package/lib/dist/extraction/vba/sql-wrapper.js +725 -151
  130. package/lib/dist/extraction/vba/sql-wrapper.js.map +1 -1
  131. package/lib/dist/extraction/vba/tempvars.d.ts.map +1 -1
  132. package/lib/dist/extraction/vba/tempvars.js +4 -0
  133. package/lib/dist/extraction/vba/tempvars.js.map +1 -1
  134. package/lib/dist/extraction/vba/text-utils.d.ts +62 -2
  135. package/lib/dist/extraction/vba/text-utils.d.ts.map +1 -1
  136. package/lib/dist/extraction/vba/text-utils.js +84 -6
  137. package/lib/dist/extraction/vba/text-utils.js.map +1 -1
  138. package/lib/dist/extraction/vba-extractor.d.ts +18 -1
  139. package/lib/dist/extraction/vba-extractor.d.ts.map +1 -1
  140. package/lib/dist/extraction/vba-extractor.js +111 -16
  141. package/lib/dist/extraction/vba-extractor.js.map +1 -1
  142. package/lib/dist/extraction/vba-form-extractor.d.ts +28 -14
  143. package/lib/dist/extraction/vba-form-extractor.d.ts.map +1 -1
  144. package/lib/dist/extraction/vba-form-extractor.js +56 -21
  145. package/lib/dist/extraction/vba-form-extractor.js.map +1 -1
  146. package/lib/dist/extraction/vba-preprocess.d.ts +89 -3
  147. package/lib/dist/extraction/vba-preprocess.d.ts.map +1 -1
  148. package/lib/dist/extraction/vba-preprocess.js +221 -57
  149. package/lib/dist/extraction/vba-preprocess.js.map +1 -1
  150. package/lib/dist/extraction/vba-source.d.ts +0 -10
  151. package/lib/dist/extraction/vba-source.d.ts.map +1 -1
  152. package/lib/dist/extraction/vba-source.js +0 -13
  153. package/lib/dist/extraction/vba-source.js.map +1 -1
  154. package/lib/dist/extraction/vba-test-manifest-extractor.d.ts +0 -6
  155. package/lib/dist/extraction/vba-test-manifest-extractor.d.ts.map +1 -1
  156. package/lib/dist/extraction/vba-test-manifest-extractor.js +0 -1
  157. package/lib/dist/extraction/vba-test-manifest-extractor.js.map +1 -1
  158. package/lib/dist/index.d.ts.map +1 -1
  159. package/lib/dist/index.js +9 -0
  160. package/lib/dist/index.js.map +1 -1
  161. package/lib/dist/mcp/daemon-manager.d.ts.map +1 -1
  162. package/lib/dist/mcp/daemon-manager.js +7 -3
  163. package/lib/dist/mcp/daemon-manager.js.map +1 -1
  164. package/lib/dist/mcp/daemon-paths.d.ts +6 -0
  165. package/lib/dist/mcp/daemon-paths.d.ts.map +1 -1
  166. package/lib/dist/mcp/daemon-paths.js +15 -0
  167. package/lib/dist/mcp/daemon-paths.js.map +1 -1
  168. package/lib/dist/mcp/daemon-registry.d.ts +82 -7
  169. package/lib/dist/mcp/daemon-registry.d.ts.map +1 -1
  170. package/lib/dist/mcp/daemon-registry.js +557 -45
  171. package/lib/dist/mcp/daemon-registry.js.map +1 -1
  172. package/lib/dist/mcp/daemon-watchdog.d.ts +12 -0
  173. package/lib/dist/mcp/daemon-watchdog.d.ts.map +1 -1
  174. package/lib/dist/mcp/daemon-watchdog.js +37 -7
  175. package/lib/dist/mcp/daemon-watchdog.js.map +1 -1
  176. package/lib/dist/mcp/daemon.d.ts +20 -1
  177. package/lib/dist/mcp/daemon.d.ts.map +1 -1
  178. package/lib/dist/mcp/daemon.js +123 -30
  179. package/lib/dist/mcp/daemon.js.map +1 -1
  180. package/lib/dist/mcp/index.d.ts.map +1 -1
  181. package/lib/dist/mcp/index.js +13 -2
  182. package/lib/dist/mcp/index.js.map +1 -1
  183. package/lib/dist/mcp/proxy.d.ts +32 -0
  184. package/lib/dist/mcp/proxy.d.ts.map +1 -1
  185. package/lib/dist/mcp/proxy.js +163 -31
  186. package/lib/dist/mcp/proxy.js.map +1 -1
  187. package/lib/dist/mcp/tools.d.ts.map +1 -1
  188. package/lib/dist/mcp/tools.js +29 -1
  189. package/lib/dist/mcp/tools.js.map +1 -1
  190. package/lib/dist/project-config.d.ts +43 -2
  191. package/lib/dist/project-config.d.ts.map +1 -1
  192. package/lib/dist/project-config.js +86 -2
  193. package/lib/dist/project-config.js.map +1 -1
  194. package/lib/dist/resolution/index.d.ts +47 -2
  195. package/lib/dist/resolution/index.d.ts.map +1 -1
  196. package/lib/dist/resolution/index.js +160 -5
  197. package/lib/dist/resolution/index.js.map +1 -1
  198. package/lib/dist/resolution/name-matcher.d.ts +25 -0
  199. package/lib/dist/resolution/name-matcher.d.ts.map +1 -1
  200. package/lib/dist/resolution/name-matcher.js +59 -0
  201. package/lib/dist/resolution/name-matcher.js.map +1 -1
  202. package/lib/dist/resolution/vba-runtime-objects.d.ts +11 -11
  203. package/lib/dist/resolution/vba-runtime-objects.d.ts.map +1 -1
  204. package/lib/dist/resolution/vba-runtime-objects.js +18 -38
  205. package/lib/dist/resolution/vba-runtime-objects.js.map +1 -1
  206. package/lib/dist/types.d.ts +13 -5
  207. package/lib/dist/types.d.ts.map +1 -1
  208. package/lib/dist/types.js +17 -0
  209. package/lib/dist/types.js.map +1 -1
  210. package/lib/node_modules/.modules.yaml +1 -1
  211. package/lib/node_modules/.pnpm-workspace-state-v1.json +1 -1
  212. package/lib/package.json +2 -1
  213. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { VbaExtractorContext, VbaClassifier } from './context';
1
+ import { VbaClassifier } from './context';
2
2
  import { VbaExtractionRule } from './rules';
3
3
  /**
4
4
  * Issue #153: the declarative rule table for the calls/SQL concern.
@@ -7,6 +7,7 @@ import { VbaExtractionRule } from './rules';
7
7
  * fit the declarative shape. The procedural scanners
8
8
  * (`scanRaiseEvents`, `scanCallSites`, `scanMeControlReferences`,
9
9
  * `scanSqlInLine`, `scanDoCmdOpenCalls`, `scanDoCmdOpenQuery`,
10
+ * `scanDoCmdObjectCalls`, `scanDoCmdCloseCalls`,
10
11
  * `scanFormsBang`, `sweepTempVars`, statement/qualified call
11
12
  * detection) walk the masked line scanning for call shapes that
12
13
  * don't reduce to a single regex — they stay inside the factory's
@@ -49,10 +50,4 @@ export declare const RULES: readonly VbaExtractionRule<unknown>[];
49
50
  * single regex.
50
51
  */
51
52
  export declare function createCallsAndSqlClassifier(lines: readonly string[]): VbaClassifier;
52
- /**
53
- * Backward-compat wrapper (see procedures.ts). Returns void — the calls
54
- * sweep never contributed to `hasAnySymbols` directly (every other
55
- * concern's `count` is the signal the orchestrator reads).
56
- */
57
- export declare function sweepCallsAndSql(ctx: VbaExtractorContext, src: string): void;
58
53
  //# 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,aAAa,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAgC,iBAAiB,EAAE,MAAM,SAAS,CAAC;AA0C1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,KAAK,EAAE,SAAS,iBAAiB,CAAC,OAAO,CAAC,EAkFtD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,aAAa,CAwPf;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAO5E"}
1
+ {"version":3,"file":"call-sweep.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/call-sweep.ts"],"names":[],"mappings":"AASA,OAAO,EAAY,aAAa,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAwB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAiDlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,KAAK,EAAE,SAAS,iBAAiB,CAAC,OAAO,CAAC,EAgGtD,CAAC;AAyBF;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,aAAa,CA0Sf"}
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RULES = void 0;
4
4
  exports.createCallsAndSqlClassifier = createCallsAndSqlClassifier;
5
- exports.sweepCallsAndSql = sweepCallsAndSql;
6
5
  /**
7
6
  * Call/SQL sweep orchestrator (REQ-CODE-4, REQ-CODE-8). Walks the
8
7
  * (uncommented) source once, maintaining the procedure stack and `With`
@@ -15,9 +14,11 @@ const text_utils_1 = require("./text-utils");
15
14
  const rules_1 = require("./rules");
16
15
  const calls_1 = require("./calls");
17
16
  const controls_1 = require("./controls");
17
+ const module_vars_1 = require("./module-vars");
18
18
  const docmd_1 = require("./docmd");
19
19
  const tempvars_1 = require("./tempvars");
20
20
  const sql_wrapper_1 = require("./sql-wrapper");
21
+ const filesystem_statements_1 = require("./filesystem-statements");
21
22
  /**
22
23
  * Issue #46: `Set <var> = New <Type>[.<Inner>]` late-instantiation.
23
24
  * Groups: (1) variable name, (2) outer type, (3) optional inner type.
@@ -45,6 +46,7 @@ const WITH_END_RE = /^\s*End\s+With\b/iu;
45
46
  * fit the declarative shape. The procedural scanners
46
47
  * (`scanRaiseEvents`, `scanCallSites`, `scanMeControlReferences`,
47
48
  * `scanSqlInLine`, `scanDoCmdOpenCalls`, `scanDoCmdOpenQuery`,
49
+ * `scanDoCmdObjectCalls`, `scanDoCmdCloseCalls`,
48
50
  * `scanFormsBang`, `sweepTempVars`, statement/qualified call
49
51
  * detection) walk the masked line scanning for call shapes that
50
52
  * don't reduce to a single regex — they stay inside the factory's
@@ -89,7 +91,13 @@ exports.RULES = [
89
91
  // Skip primitives defensively — consistent with the Dim sweep guard.
90
92
  if (constants_1.PRIMITIVE_TYPES.has(outerType.toLowerCase()))
91
93
  return null;
92
- ctx.localVarTypeMap.set(varName.toLowerCase(), {
94
+ // Issue #205: write to the current procedure's bucket so a
95
+ // `Set x = New Foo` inside `Sub Bar` does not silently
96
+ // overwrite a `Dim x As Whatever` declaration in `Sub Baz`
97
+ // (or a module-level `Dim x As ModuleThing`). `currentProcKey`
98
+ // is maintained by the enum/const classifier, the sole writer of
99
+ // the shared scope stack during the main walk.
100
+ ctx.setLocalVarTypeInScope(ctx.currentProcKey, varName, {
93
101
  outer: outerType,
94
102
  // Mirror `Dim x As Foo.Bar`: qualified `Set rs = New
95
103
  // DAO.Recordset` registers `qualified: true` so the PR #61
@@ -114,13 +122,20 @@ exports.RULES = [
114
122
  const retType = factory ? ctx.functionReturnTypes.get(factory) : undefined;
115
123
  if (!varName || !retType)
116
124
  return null;
117
- const existing = ctx.localVarTypeMap.get(varName.toLowerCase());
125
+ // Issue #205: the existing-key check uses the two-tier
126
+ // lookup (current proc → module) so a `Set x = Factory()`
127
+ // inside `Sub Bar` correctly yields to a `Dim x As Class`
128
+ // declared in `Sub Bar` (proc bucket) AND to a module-level
129
+ // `Dim x As ModuleClass` (module bucket). A proc-local
130
+ // `Dim x As Class` declared in `Sub Baz` (a different
131
+ // procedure) does NOT suppress this `set-call`.
132
+ const existing = ctx.lookupLocalVarType(varName);
118
133
  const existingIsProjectClass = !!existing &&
119
134
  !existing.qualified &&
120
135
  !constants_1.PRIMITIVE_TYPES.has(existing.outer.toLowerCase());
121
136
  if (existingIsProjectClass)
122
137
  return null;
123
- ctx.localVarTypeMap.set(varName.toLowerCase(), {
138
+ ctx.setLocalVarTypeInScope(ctx.currentProcKey, varName, {
124
139
  outer: retType,
125
140
  qualified: false,
126
141
  assignedWithSet: true,
@@ -150,12 +165,33 @@ exports.RULES = [
150
165
  pattern: WITH_END_RE,
151
166
  scan: 'masked',
152
167
  requires: 'inside-procedure',
168
+ terminal: true,
153
169
  emit: (_m, ctx) => {
154
170
  ctx.vbaWithStack.pop();
155
171
  return { kind: 'with-end' };
156
172
  },
157
173
  }),
158
174
  ];
175
+ /**
176
+ * A colon-separated single-line procedure (`Sub Foo(): Bar 1: End Sub`)
177
+ * carries its body on the declaration line. Split everything after the first
178
+ * `:` into statement clauses so the per-line scanners see the body instead of
179
+ * the `Sub Foo()` signature. `scanLine` must already be string-masked.
180
+ *
181
+ * Issue #265: extracted from the classifier body so it can be applied to both
182
+ * masks (spaces for the column-sensitive scanners, `_` for the statement-call
183
+ * detectors) without duplicating the split.
184
+ */
185
+ function splitProcStartBodyClauses(scanLine) {
186
+ const colon = scanLine.indexOf(':');
187
+ if (colon < 0)
188
+ return [];
189
+ return scanLine
190
+ .slice(colon + 1)
191
+ .split(':')
192
+ .map((clause) => clause.trim())
193
+ .filter((clause) => clause.length > 0 && !/^End\s+(?:Sub|Function|Property)\b/i.test(clause));
194
+ }
159
195
  /**
160
196
  * Issue #83: factory for the calls/SQL classifier. The factory takes the
161
197
  * pre-split `lines` array (so `trackSqlVariableAssignment` can do its
@@ -174,6 +210,7 @@ function createCallsAndSqlClassifier(lines) {
174
210
  // Walk the source once, emitting call edges and SQL edges per line and
175
211
  // tracking the current procedure stack.
176
212
  const stack = [];
213
+ const moduleSqlVariables = new Map();
177
214
  const sqlVariables = new Map();
178
215
  // C2 fix: track each procedure's `endLine` (the line containing the
179
216
  // matching `End Sub`/`End Function`/`End Property`) keyed by its
@@ -188,13 +225,13 @@ function createCallsAndSqlClassifier(lines) {
188
225
  const lineNum = i + 1;
189
226
  const procStart = constants_1.PROC_RE.exec(line);
190
227
  if (procStart) {
191
- // Issue #52: mirror the proc push into the shared
192
- // `procStack` + `currentProcKey` so Const reads in this same
193
- // sweep see the same scope as the const writes did (during
194
- // `sweepEnumsAndConsts`).
195
- const procStartLine = lineNum;
196
- ctx.procStack.push(procStartLine);
197
- ctx.currentProcKey = String(procStartLine);
228
+ // SQL variables are procedure-scoped, with module assignments as a
229
+ // fallback. Seed a fresh procedure bucket so common names such as
230
+ // `strSQL` cannot leak from the preceding procedure.
231
+ sqlVariables.clear();
232
+ for (const [name, value] of moduleSqlVariables) {
233
+ sqlVariables.set(name, value);
234
+ }
198
235
  const name = procStart[3] ?? '';
199
236
  const bucket = ctx.localProcs.get(name);
200
237
  if (bucket) {
@@ -213,22 +250,31 @@ function createCallsAndSqlClassifier(lines) {
213
250
  // procedure (a real bug — `Sub Foo()\n Bar 1\n` would never see
214
251
  // the `Bar 1` call).
215
252
  }
216
- else if (constants_1.PROCEDURE_END_RE.test(line) && stack.length > 0) {
217
- const ending = stack.pop();
218
- // Issue #52: mirror the pop into the shared scope state.
219
- ctx.procStack.pop();
220
- ctx.currentProcKey =
221
- ctx.procStack.length > 0
222
- ? String(ctx.procStack[ctx.procStack.length - 1])
223
- : 'module';
224
- procEndLines.set(ending.startLine, lineNum);
225
- return;
226
- }
253
+ // This is deliberately independent of the proc-start branch: a
254
+ // colon-separated single-line procedure contains both markers.
255
+ // Keep the frame alive until after scanners process its body.
256
+ const endsProcedure = constants_1.PROCEDURE_END_RE.test(line) && stack.length > 0;
227
257
  // Fix 2 (Issue #2): mask string-literal content before call scanning so
228
258
  // patterns like `modHelper.BuildQuery(` inside a string argument are not
229
259
  // mistakenly treated as call sites. SQL scanning still uses the original
230
260
  // line because SQL lives INSIDE string literals.
231
261
  const callScanLine = (0, text_utils_1.maskStringContent)(line);
262
+ // Issue #265: the statement-form detectors run on a SECOND mask that
263
+ // fills string literals with `_` instead of spaces. The two lines are
264
+ // character-for-character the same length and differ only inside
265
+ // literals, but the space mask reduces `MsgBox "x"` to `MsgBox` plus
266
+ // trailing blanks — indistinguishable from a bare identifier read, and
267
+ // therefore from a possible `Const` read. The `_` mask keeps the
268
+ // argument list visible so the detector can tell a syntactically
269
+ // unambiguous call from an ambiguous bare identifier, while still
270
+ // hiding every literal's contents from the parser.
271
+ const stmtScanLine = (0, text_utils_1.maskStringContent)(line, '_');
272
+ const procStartBodyClauses = procStart
273
+ ? splitProcStartBodyClauses(callScanLine)
274
+ : null;
275
+ const stmtProcStartBodyClauses = procStart
276
+ ? splitProcStartBodyClauses(stmtScanLine)
277
+ : null;
232
278
  // Issue #153: dispatch the declarative RULES table on the
233
279
  // masked line. The four per-line patterns (set-new, set-call,
234
280
  // with-start, with-end) all need the masked line because their
@@ -239,69 +285,93 @@ function createCallsAndSqlClassifier(lines) {
239
285
  // rules only fire when the call-sweep's per-instance proc stack
240
286
  // is non-empty (matching the legacy cascade's `if (stack.length
241
287
  // > 0)` gate).
242
- for (const rule of exports.RULES) {
243
- if (rule.requires === 'inside-procedure' && stack.length === 0)
244
- continue;
245
- const matched = (0, rules_1.matchRuleForScan)(rule, line, callScanLine);
246
- if (!matched)
247
- continue;
248
- const result = rule.emit(matched.match, ctx, matched.line, lineNum);
249
- if (result !== null && result !== undefined) {
250
- this.count += rule.count ? rule.count(result) : 1;
251
- }
252
- // `with-end` is short-circuited: a line that's `End With` is
253
- // not also a `Set x = New ...`, so break the loop.
254
- if (rule.id === 'with-end')
255
- break;
256
- }
288
+ this.count += (0, rules_1.runRules)(exports.RULES, ctx, line, callScanLine, lineNum, {
289
+ 'inside-procedure': stack.length > 0,
290
+ });
257
291
  // Don't scan call sites on the line that declares the procedure — it
258
292
  // would match the proc name itself in `Sub Outer()`.
259
- if (!procedureStartLines.has(lineNum) && stack.length > 0) {
293
+ if (stack.length > 0) {
260
294
  const currentProc = stack[stack.length - 1];
261
- (0, calls_1.scanRaiseEvents)(ctx, callScanLine, currentProc, lineNum);
262
- (0, calls_1.scanCallSites)(ctx, callScanLine, currentProc, lineNum);
295
+ const scanLines = procStartBodyClauses ?? [callScanLine];
296
+ for (const scanLine of scanLines) {
297
+ (0, calls_1.scanRaiseEvents)(ctx, scanLine, currentProc, lineNum);
298
+ (0, calls_1.scanCallSites)(ctx, scanLine, currentProc, lineNum);
299
+ }
263
300
  }
264
301
  // Hueco 1: capture `Me.<Control>` references. Only inside procedures
265
302
  // because `Me` is only meaningful inside a form's class module.
266
- if (!procedureStartLines.has(lineNum) && stack.length > 0) {
267
- (0, controls_1.scanMeControlReferences)(ctx, callScanLine, stack[stack.length - 1], lineNum);
303
+ //
304
+ // Issue #251: the module-level variable read/write scan rides the
305
+ // same masked line and the same "inside a procedure body" gate. It
306
+ // must not run on the signature line of a procedure — the empty
307
+ // `procStartBodyClauses` array supplies that, exactly as it does for
308
+ // the control scan.
309
+ if (stack.length > 0) {
310
+ const scanLines = procStartBodyClauses ?? [callScanLine];
311
+ for (const scanLine of scanLines) {
312
+ (0, controls_1.scanMeControlReferences)(ctx, scanLine, stack[stack.length - 1], lineNum);
313
+ (0, module_vars_1.scanModuleVariableReferences)(ctx, scanLine, stack[stack.length - 1], lineNum);
314
+ }
268
315
  }
269
316
  // SQL wrappers — only inside a procedure. Use the ORIGINAL line — SQL is
270
317
  // inside string literals, so the masked line would strip the SQL content.
271
318
  if (stack.length > 0) {
272
319
  (0, sql_wrapper_1.trackSqlVariableAssignment)(lines, i, sqlVariables);
273
- (0, sql_wrapper_1.scanSqlInLine)(ctx, line, lineNum, sqlTargetsThisFile, sqlVariables);
320
+ // Issue #253: the calling procedure is passed so a wrapper handed a
321
+ // bare saved-query name can emit `procedure -> query`, the hop that
322
+ // makes `procedure -> query -> table` traversable end to end.
323
+ (0, sql_wrapper_1.scanSqlInLine)(ctx, line, lineNum, sqlTargetsThisFile, sqlVariables, stack[stack.length - 1]);
324
+ }
325
+ else {
326
+ // Preserve file/module-level assignments for use as the fallback in
327
+ // every procedure without mixing one procedure's locals into another.
328
+ (0, sql_wrapper_1.trackSqlVariableAssignment)(lines, i, moduleSqlVariables);
274
329
  }
275
330
  // H1 fix: detect statement-form Sub calls (no parens, no `Call` keyword).
276
331
  // Issue #45: split single-line `If … Then <body>` clauses first so the
277
332
  // actual call after `Then`/`Else`/`:` is not shadowed by the leading
278
333
  // keyword.
279
- if (stack.length > 0 && !procedureStartLines.has(lineNum)) {
334
+ if (stack.length > 0 && (!procedureStartLines.has(lineNum) || procStartBodyClauses?.length)) {
280
335
  // Note: `Set x = New ...` and `Set x = <Factory>(...)` are now
281
336
  // dispatched by the RULES table above. The factory body below
282
337
  // focuses on the procedural call-site scans that don't
283
338
  // reduce to a single regex.
284
- const clauseLines = (0, calls_1.splitSingleLineIfClauses)(callScanLine);
339
+ // Issue #265: the statement/qualified/`With` detectors read the `_`
340
+ // mask so an argument list made only of string literals stays visible.
341
+ const clauseLines = stmtProcStartBodyClauses ?? (0, calls_1.splitSingleLineIfClauses)(stmtScanLine);
285
342
  for (const clauseLine of clauseLines) {
343
+ const caller = stack[stack.length - 1];
344
+ // Issue #262: intrinsic filesystem STATEMENTS have reserved grammar,
345
+ // not user-call grammar. Claim their exact shapes before the generic
346
+ // statement-call detector can bind Kill/Open/Close to project code.
347
+ if ((0, filesystem_statements_1.emitVbaFilesystemStatementReference)(ctx, caller, clauseLine, lineNum)) {
348
+ continue;
349
+ }
286
350
  const stmtCall = (0, calls_1.detectStatementCall)(clauseLine);
287
351
  if (stmtCall) {
288
- const caller = stack[stack.length - 1];
289
352
  // Returns true when a same-file calls edge was emitted; false
290
353
  // when the call was silenced (blacklist / runtime receiver /
291
354
  // unresolvable same-file target).
292
- const emitted = (0, calls_1.emitStatementCallEdge)(ctx, caller, stmtCall, lineNum);
355
+ const emitted = (0, calls_1.emitStatementCallEdge)(ctx, caller, stmtCall.name, lineNum);
293
356
  // Round-3 (issue #108): if the statement-form Sub call did
294
- // NOT resolve, surface it as an `unqualified-ident` unresolved
295
- // reference. The const-first disambiguation rule (FR-3.1)
296
- // ensures Const reads do not pollute the call bucket — when
297
- // `stmtCall` resolves to a known Const, we still surface it as
298
- // `unqualified-ident` (NOT `call`) because that's the
299
- // unambiguous shape of a bare-ident read.
300
- if (!emitted && stmtCall !== caller.name && !(0, constants_1.isVbaKeyword)(stmtCall)) {
357
+ // NOT resolve, surface it as an unresolved reference. The
358
+ // const-first disambiguation rule (FR-3.1) keeps ambiguous
359
+ // bare-identifier reads out of the call bucket — a lone
360
+ // `HayErrorEnRiesgo` is equally a `Const` read, so it stays
361
+ // `unqualified-ident`.
362
+ //
363
+ // Issue #265: the two shapes that CANNOT be a Const read —
364
+ // `Call Escribir` (the keyword is only valid on a procedure)
365
+ // and `Escribir 1, 2` (a constant takes no argument list) —
366
+ // are syntactically unambiguous calls and carry the canonical
367
+ // `calls` kind instead, the same literal a resolved call edge
368
+ // uses. The row itself is unchanged in every other respect, so
369
+ // the two kinds only trade rows between them.
370
+ if (!emitted && stmtCall.name !== caller.name && !(0, constants_1.isVbaKeyword)(stmtCall.name)) {
301
371
  ctx.unresolvedReferences.push({
302
372
  fromNodeId: ctx.findOrCreateFunctionNodeId(caller),
303
- referenceName: stmtCall,
304
- referenceKind: 'unqualified-ident',
373
+ referenceName: stmtCall.name,
374
+ referenceKind: stmtCall.unambiguous ? 'calls' : 'unqualified-ident',
305
375
  line: lineNum,
306
376
  column: 0,
307
377
  filePath: ctx.filePath,
@@ -360,16 +430,31 @@ function createCallsAndSqlClassifier(lines) {
360
430
  const caller2 = stack[stack.length - 1];
361
431
  // Issue #48: shared OpenForm/OpenReport dispatch; OpenQuery emits an
362
432
  // `UnresolvedReference` and stays separate.
363
- (0, docmd_1.scanDoCmdOpenCalls)(ctx, line, caller2, lineNum);
364
- (0, docmd_1.scanDoCmdOpenQuery)(ctx, line, caller2, lineNum);
433
+ (0, docmd_1.scanDoCmdOpenCalls)(ctx, line, callScanLine, caller2, lineNum);
434
+ (0, docmd_1.scanDoCmdOpenQuery)(ctx, line, callScanLine, caller2, lineNum);
435
+ // Issue #254: every remaining DoCmd verb that names an Access object
436
+ // in a positional argument (RunMacro, TransferSpreadsheet, OutputTo,
437
+ // ...). One table-driven dispatch; emits references only, never nodes.
438
+ (0, docmd_1.scanDoCmdObjectCalls)(ctx, line, callScanLine, caller2, lineNum);
439
+ // Issue #246: `DoCmd.Close acForm|acReport, "X"` closes the lifecycle
440
+ // loop `opens-form` opens — a `references` edge to the SAME stub.
441
+ (0, docmd_1.scanDoCmdCloseCalls)(ctx, line, callScanLine, caller2, lineNum);
365
442
  // Issue #44: cross-form bang references (`Forms!X` / `Forms("X")!Y`) —
366
443
  // scan the unmasked line (form name lives in a string literal in the
367
444
  // paren form).
368
- (0, controls_1.scanFormsBang)(ctx, line, caller2, lineNum);
445
+ (0, controls_1.scanFormsBang)(ctx, line, callScanLine, caller2, lineNum);
369
446
  // Issue #50: cross-form TempVars key accesses. Bang form scans the
370
447
  // masked line, paren + Add forms scan the original.
371
448
  (0, tempvars_1.sweepTempVars)(ctx, callScanLine, line, lineNum, caller2);
372
449
  }
450
+ if (endsProcedure) {
451
+ const ending = stack.pop();
452
+ procEndLines.set(ending.startLine, lineNum);
453
+ sqlVariables.clear();
454
+ for (const [name, value] of moduleSqlVariables) {
455
+ sqlVariables.set(name, value);
456
+ }
457
+ }
373
458
  },
374
459
  finalize(ctx) {
375
460
  // Apply endLine to every emitted function node keyed by its startLine.
@@ -385,37 +470,6 @@ function createCallsAndSqlClassifier(lines) {
385
470
  }
386
471
  },
387
472
  };
388
- // Issue #52: reset the shared scope state on the first call so leftover
389
- // state from a previous extract() (impossible in production but possible
390
- // in unit tests that construct a fresh extractor and run twice) never
391
- // leaks across sweeps. The walker here updates the scope every iteration
392
- // AFTER the enums-consts classifier runs (it runs first per line); on the
393
- // first call we also reset, so the initial state matches the legacy
394
- // pre-loop setup.
395
- let initialized = false;
396
- const originalClassify = cls.classifyLine;
397
- cls.classifyLine = function (line, i, ctx) {
398
- if (!initialized) {
399
- ctx.procStack.length = 0;
400
- ctx.currentProcKey = 'module';
401
- ctx.vbaWithStack.length = 0;
402
- initialized = true;
403
- }
404
- return originalClassify.call(this, line, i, ctx);
405
- };
406
473
  return cls;
407
474
  }
408
- /**
409
- * Backward-compat wrapper (see procedures.ts). Returns void — the calls
410
- * sweep never contributed to `hasAnySymbols` directly (every other
411
- * concern's `count` is the signal the orchestrator reads).
412
- */
413
- function sweepCallsAndSql(ctx, src) {
414
- const lines = src.split('\n');
415
- const cls = createCallsAndSqlClassifier(lines);
416
- for (let i = 0; i < lines.length; i++) {
417
- cls.classifyLine(lines[i] ?? '', i, ctx);
418
- }
419
- cls.finalize?.(ctx);
420
- }
421
475
  //# 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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"}
@@ -11,13 +11,33 @@ export declare function scanCallSites(ctx: VbaExtractorContext, line: string, fr
11
11
  * scan line, which makes global `:`/`Else` splitting safe.
12
12
  */
13
13
  export declare function splitSingleLineIfClauses(line: string): string[];
14
+ /**
15
+ * Issue #265: the outcome of `detectStatementCall`.
16
+ *
17
+ * `unambiguous` records whether the *syntax* of the statement can only be a
18
+ * procedure call:
19
+ *
20
+ * - `Call MySub` — the `Call` keyword is only valid on a procedure.
21
+ * - `MySub 1, 2` — a constant cannot take an argument list.
22
+ * - `MySub` — AMBIGUOUS: a bare identifier is equally a `Const` read.
23
+ *
24
+ * The call sweep uses this to pick the unresolved-reference kind: `calls` for
25
+ * the two unambiguous shapes, `unqualified-ident` for the bare read (the
26
+ * bucket the const-first disambiguation rule of issue #108 / FR-3.1 needs).
27
+ */
28
+ export interface StatementCall {
29
+ /** The called procedure name (the leading identifier). */
30
+ name: string;
31
+ /** True when the `Call` keyword or an argument list rules out a Const read. */
32
+ unambiguous: boolean;
33
+ }
14
34
  /**
15
35
  * H1: detect a statement-form Sub call (`MySub`, `MySub arg1, x`,
16
- * `Call MySub arg1`). Returns the called proc name, or null for
17
- * declarations, assignments, comments, keyword lines, and the paren form
18
- * (handled by CALL_RE).
36
+ * `Call MySub arg1`). Returns the called proc name plus its syntactic
37
+ * unambiguity (issue #265), or null for declarations, assignments,
38
+ * comments, keyword lines, and the paren form (handled by CALL_RE).
19
39
  */
20
- export declare function detectStatementCall(line: string): string | null;
40
+ export declare function detectStatementCall(line: string): StatementCall | null;
21
41
  /**
22
42
  * H1: emit a same-file `calls` edge for a statement-form Sub call to the
23
43
  * already-emitted function node named `procName`. Returns `true` when a
@@ -1 +1 @@
1
- {"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/calls.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAe1D,wBAAgB,eAAe,CAC7B,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,GACd,IAAI,CA0BN;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,GACd,IAAI,CAuKN;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAgC/D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA4B/D;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,mBAAmB,EACxB,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAcT;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,GACX;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAuC7C;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,mBAAmB,EACxB,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,IAAI,CA2CN;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBjE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoB5E"}
1
+ {"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/calls.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAe1D,wBAAgB,eAAe,CAC7B,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,GACd,IAAI,CA0BN;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,GACd,IAAI,CAyLN;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAgC/D;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAgCtE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,mBAAmB,EACxB,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAcT;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,GACX;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAuC7C;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,mBAAmB,EACxB,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,IAAI,CAgDN;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBjE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoB5E"}
@@ -18,6 +18,7 @@ exports.detectWithMemberCall = detectWithMemberCall;
18
18
  */
19
19
  const tree_sitter_helpers_1 = require("../tree-sitter-helpers");
20
20
  const constants_1 = require("./constants");
21
+ const runtime_objects_1 = require("./runtime-objects");
21
22
  /**
22
23
  * Call-site regex — captures either `Name(...)` (same-file candidate) or
23
24
  * `Receiver.Member(...)` (qualified). The receiver AND member alternatives
@@ -56,9 +57,13 @@ function scanRaiseEvents(ctx, line, from, lineNum) {
56
57
  function scanCallSites(ctx, line, from, lineNum) {
57
58
  const arrayAssignment = /^\s*(\p{L}[\p{L}\p{N}_]*)\s*=\s*Array\s*\(/iu.exec(line);
58
59
  if (arrayAssignment?.[1]) {
59
- const entry = ctx.localVarTypeMap.get(arrayAssignment[1].toLowerCase());
60
- if (entry)
61
- entry.isArray = true;
60
+ // Issue #205: scope the `isArray` mutation to the current proc
61
+ // bucket so a `x = Array(...)` inside `Sub Foo` does not flip
62
+ // the `isArray` flag on a `Dim x As String` declared in
63
+ // `Sub Bar` (or at module level).
64
+ const existing = ctx.lookupLocalVarType(arrayAssignment[1]);
65
+ if (existing)
66
+ existing.isArray = true;
62
67
  }
63
68
  CALL_RE.lastIndex = 0;
64
69
  let m;
@@ -71,7 +76,7 @@ function scanCallSites(ctx, line, from, lineNum) {
71
76
  const member = m[3] ?? m[4] ?? '';
72
77
  if (!receiver)
73
78
  continue;
74
- if (!member && ctx.localVarTypeMap.get(receiver.toLowerCase())?.isArray)
79
+ if (!member && ctx.lookupLocalVarType(receiver)?.isArray)
75
80
  continue;
76
81
  // Issue #190: procedure-scoped param-array recognition. A
77
82
  // `ByRef name() As Type` (or `ByVal name() As Type`) on this
@@ -158,7 +163,11 @@ function scanCallSites(ctx, line, from, lineNum) {
158
163
  // stub `<receiver>.<member>` would be dead-end graph pollution no
159
164
  // resolver could ever repoint. Cross-module qualified calls like
160
165
  // `modUtils.Foo(1)` are unaffected (`modUtils` is not a local var).
161
- const recvEntry = ctx.localVarTypeMap.get(receiver.toLowerCase());
166
+ // Issue #205: lookup is two-tier (current proc → module) so the
167
+ // primitive-gate fires on the type declared IN this procedure,
168
+ // not the type declared in whichever procedure happened to write
169
+ // to `localVarTypeMap` last.
170
+ const recvEntry = ctx.lookupLocalVarType(receiver);
162
171
  if (recvEntry && constants_1.PRIMITIVE_TYPES.has(recvEntry.outer.toLowerCase())) {
163
172
  // Match the round-3 surfaced row so the SQL filter has the
164
173
  // receiver/member string even when the stub emission was
@@ -176,6 +185,17 @@ function scanCallSites(ctx, line, from, lineNum) {
176
185
  continue;
177
186
  }
178
187
  const receiverType = ctx.resolveReceiverType(receiver);
188
+ // Issue #245: a call whose RESOLVED receiver type is a VBA/Access
189
+ // runtime object (`Dim c As New Collection` → `Collection.Add`,
190
+ // `VBA.DoEvents`, `fso.FileExists`) can never name user code. The
191
+ // resolver already declines to repoint these edges
192
+ // (`repointDecision: 'declined-runtime'`), but the stub NODE was
193
+ // created anyway and leaked into symbol search and node counts.
194
+ // Gate BEFORE `generateNodeId` so no node and no `calls` edge is
195
+ // born. Nothing else changes: this branch never pushed an
196
+ // `UnresolvedReference`, so `unresolvedByKind` is untouched.
197
+ if ((0, runtime_objects_1.isRuntimeObject)(receiverType))
198
+ continue;
179
199
  const qualified = `${receiverType}.${member}`;
180
200
  // Avoid emitting duplicate edges for the same call (within a line).
181
201
  const dedupeKey = `${from.name}->${qualified}@${lineNum}`;
@@ -268,16 +288,18 @@ function splitSingleLineIfClauses(line) {
268
288
  }
269
289
  /**
270
290
  * H1: detect a statement-form Sub call (`MySub`, `MySub arg1, x`,
271
- * `Call MySub arg1`). Returns the called proc name, or null for
272
- * declarations, assignments, comments, keyword lines, and the paren form
273
- * (handled by CALL_RE).
291
+ * `Call MySub arg1`). Returns the called proc name plus its syntactic
292
+ * unambiguity (issue #265), or null for declarations, assignments,
293
+ * comments, keyword lines, and the paren form (handled by CALL_RE).
274
294
  */
275
295
  function detectStatementCall(line) {
276
296
  let trimmed = line.trimStart();
277
297
  if (!trimmed)
278
298
  return null;
279
- // Strip `Call ` keyword if present — same call shape after.
280
- if (/^Call\s/i.test(trimmed)) {
299
+ // Strip `Call ` keyword if present — same call shape after. Issue #265:
300
+ // remember that it was there; `Call X` cannot be a Const read.
301
+ const hasCallKeyword = /^Call\s/i.test(trimmed);
302
+ if (hasCallKeyword) {
281
303
  trimmed = trimmed.replace(/^Call\s+/i, '');
282
304
  }
283
305
  // Skip comment lines.
@@ -297,7 +319,7 @@ function detectStatementCall(line) {
297
319
  return null;
298
320
  // Bare `MySub` is a valid no-argument statement-form Sub call.
299
321
  if (rest.length === 0)
300
- return procName;
322
+ return { name: procName, unambiguous: hasCallKeyword };
301
323
  const nextCh = trimmed.charAt(procName.length);
302
324
  if (nextCh !== ' ' && nextCh !== '\t')
303
325
  return null;
@@ -307,7 +329,9 @@ function detectStatementCall(line) {
307
329
  // appear in expressions.
308
330
  if (args.startsWith('='))
309
331
  return null;
310
- return procName;
332
+ // Issue #265: `args` is measured AFTER trimming, so `MySub ` (trailing
333
+ // whitespace only) stays the ambiguous bare-identifier shape.
334
+ return { name: procName, unambiguous: hasCallKeyword || args.length > 0 };
311
335
  }
312
336
  /**
313
337
  * H1: emit a same-file `calls` edge for a statement-form Sub call to the
@@ -407,6 +431,12 @@ function emitQualifiedStatementCallEdge(ctx, caller, receiver, member, lineNum)
407
431
  // resolve to their class name; undeclared receivers stay as raw module-name
408
432
  // candidates.
409
433
  const receiverType = ctx.resolveReceiverType(receiver);
434
+ // Issue #245 — same runtime-object node gate as the paren-form path in
435
+ // `scanCallSites`. Statement-form `Call VBA.DoEvents` / `col.Add x` must
436
+ // not synthesize a stub node either. No `UnresolvedReference` was emitted
437
+ // on this path before, and none is emitted now.
438
+ if ((0, runtime_objects_1.isRuntimeObject)(receiverType))
439
+ return;
410
440
  const qualified = `${receiverType}.${member}`;
411
441
  const dedupeKey = `${caller.name}->${qualified}@${lineNum}`;
412
442
  if (ctx.callDedupe.has(dedupeKey))