@aroman22/codegraph-vba-darwin-arm64 1.9.0 → 1.11.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 (117) hide show
  1. package/lib/dist/db/queries.d.ts +39 -0
  2. package/lib/dist/db/queries.d.ts.map +1 -1
  3. package/lib/dist/db/queries.js +45 -0
  4. package/lib/dist/db/queries.js.map +1 -1
  5. package/lib/dist/extraction/frameworks/dysflow-export.d.ts +37 -0
  6. package/lib/dist/extraction/frameworks/dysflow-export.d.ts.map +1 -0
  7. package/lib/dist/extraction/frameworks/dysflow-export.js +121 -0
  8. package/lib/dist/extraction/frameworks/dysflow-export.js.map +1 -0
  9. package/lib/dist/extraction/frameworks/index.d.ts +20 -0
  10. package/lib/dist/extraction/frameworks/index.d.ts.map +1 -0
  11. package/lib/dist/extraction/frameworks/index.js +24 -0
  12. package/lib/dist/extraction/frameworks/index.js.map +1 -0
  13. package/lib/dist/extraction/index.d.ts.map +1 -1
  14. package/lib/dist/extraction/index.js +25 -5
  15. package/lib/dist/extraction/index.js.map +1 -1
  16. package/lib/dist/extraction/parse-pool.d.ts +10 -0
  17. package/lib/dist/extraction/parse-pool.d.ts.map +1 -1
  18. package/lib/dist/extraction/parse-pool.js +2 -0
  19. package/lib/dist/extraction/parse-pool.js.map +1 -1
  20. package/lib/dist/extraction/parse-worker.js +6 -2
  21. package/lib/dist/extraction/parse-worker.js.map +1 -1
  22. package/lib/dist/extraction/tree-sitter.d.ts +9 -1
  23. package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
  24. package/lib/dist/extraction/tree-sitter.js +58 -5
  25. package/lib/dist/extraction/tree-sitter.js.map +1 -1
  26. package/lib/dist/extraction/vba/call-sweep.d.ts +43 -0
  27. package/lib/dist/extraction/vba/call-sweep.d.ts.map +1 -1
  28. package/lib/dist/extraction/vba/call-sweep.js +155 -66
  29. package/lib/dist/extraction/vba/call-sweep.js.map +1 -1
  30. package/lib/dist/extraction/vba/calls.d.ts.map +1 -1
  31. package/lib/dist/extraction/vba/calls.js +6 -0
  32. package/lib/dist/extraction/vba/calls.js.map +1 -1
  33. package/lib/dist/extraction/vba/context.d.ts +109 -1
  34. package/lib/dist/extraction/vba/context.d.ts.map +1 -1
  35. package/lib/dist/extraction/vba/context.js +155 -2
  36. package/lib/dist/extraction/vba/context.js.map +1 -1
  37. package/lib/dist/extraction/vba/controls.d.ts.map +1 -1
  38. package/lib/dist/extraction/vba/controls.js +77 -0
  39. package/lib/dist/extraction/vba/controls.js.map +1 -1
  40. package/lib/dist/extraction/vba/declarations.d.ts +38 -2
  41. package/lib/dist/extraction/vba/declarations.d.ts.map +1 -1
  42. package/lib/dist/extraction/vba/declarations.js +217 -129
  43. package/lib/dist/extraction/vba/declarations.js.map +1 -1
  44. package/lib/dist/extraction/vba/dims.d.ts +35 -1
  45. package/lib/dist/extraction/vba/dims.d.ts.map +1 -1
  46. package/lib/dist/extraction/vba/dims.js +185 -109
  47. package/lib/dist/extraction/vba/dims.js.map +1 -1
  48. package/lib/dist/extraction/vba/enums-consts.d.ts +47 -7
  49. package/lib/dist/extraction/vba/enums-consts.d.ts.map +1 -1
  50. package/lib/dist/extraction/vba/enums-consts.js +212 -139
  51. package/lib/dist/extraction/vba/enums-consts.js.map +1 -1
  52. package/lib/dist/extraction/vba/event-synth.d.ts +3 -0
  53. package/lib/dist/extraction/vba/event-synth.d.ts.map +1 -0
  54. package/lib/dist/extraction/vba/event-synth.js +176 -0
  55. package/lib/dist/extraction/vba/event-synth.js.map +1 -0
  56. package/lib/dist/extraction/vba/events.d.ts +16 -0
  57. package/lib/dist/extraction/vba/events.d.ts.map +1 -0
  58. package/lib/dist/extraction/vba/events.js +90 -0
  59. package/lib/dist/extraction/vba/events.js.map +1 -0
  60. package/lib/dist/extraction/vba/implements.d.ts +16 -0
  61. package/lib/dist/extraction/vba/implements.d.ts.map +1 -1
  62. package/lib/dist/extraction/vba/implements.js +43 -12
  63. package/lib/dist/extraction/vba/implements.js.map +1 -1
  64. package/lib/dist/extraction/vba/procedures.d.ts +20 -0
  65. package/lib/dist/extraction/vba/procedures.d.ts.map +1 -1
  66. package/lib/dist/extraction/vba/procedures.js +48 -13
  67. package/lib/dist/extraction/vba/procedures.js.map +1 -1
  68. package/lib/dist/extraction/vba/rules.d.ts +125 -0
  69. package/lib/dist/extraction/vba/rules.d.ts.map +1 -0
  70. package/lib/dist/extraction/vba/rules.js +49 -0
  71. package/lib/dist/extraction/vba/rules.js.map +1 -0
  72. package/lib/dist/extraction/vba/text-utils.d.ts +0 -6
  73. package/lib/dist/extraction/vba/text-utils.d.ts.map +1 -1
  74. package/lib/dist/extraction/vba/text-utils.js +9 -6
  75. package/lib/dist/extraction/vba/text-utils.js.map +1 -1
  76. package/lib/dist/extraction/vba-extractor.d.ts +77 -1
  77. package/lib/dist/extraction/vba-extractor.d.ts.map +1 -1
  78. package/lib/dist/extraction/vba-extractor.js +177 -15
  79. package/lib/dist/extraction/vba-extractor.js.map +1 -1
  80. package/lib/dist/extraction/vba-form-extractor.d.ts +26 -114
  81. package/lib/dist/extraction/vba-form-extractor.d.ts.map +1 -1
  82. package/lib/dist/extraction/vba-form-extractor.js +293 -297
  83. package/lib/dist/extraction/vba-form-extractor.js.map +1 -1
  84. package/lib/dist/extraction/vba-preprocess.d.ts +11 -1
  85. package/lib/dist/extraction/vba-preprocess.d.ts.map +1 -1
  86. package/lib/dist/extraction/vba-preprocess.js +45 -16
  87. package/lib/dist/extraction/vba-preprocess.js.map +1 -1
  88. package/lib/dist/extraction/vba-timing.d.ts +38 -0
  89. package/lib/dist/extraction/vba-timing.d.ts.map +1 -0
  90. package/lib/dist/extraction/vba-timing.js +203 -0
  91. package/lib/dist/extraction/vba-timing.js.map +1 -0
  92. package/lib/dist/index.d.ts.map +1 -1
  93. package/lib/dist/index.js +26 -0
  94. package/lib/dist/index.js.map +1 -1
  95. package/lib/dist/project-config.d.ts +31 -0
  96. package/lib/dist/project-config.d.ts.map +1 -1
  97. package/lib/dist/project-config.js +75 -22
  98. package/lib/dist/project-config.js.map +1 -1
  99. package/lib/dist/resolution/frameworks/index.d.ts.map +1 -1
  100. package/lib/dist/resolution/frameworks/index.js +7 -0
  101. package/lib/dist/resolution/frameworks/index.js.map +1 -1
  102. package/lib/dist/resolution/index.d.ts +7 -0
  103. package/lib/dist/resolution/index.d.ts.map +1 -1
  104. package/lib/dist/resolution/index.js +155 -11
  105. package/lib/dist/resolution/index.js.map +1 -1
  106. package/lib/dist/resolution/name-matcher.d.ts +6 -0
  107. package/lib/dist/resolution/name-matcher.d.ts.map +1 -1
  108. package/lib/dist/resolution/name-matcher.js +81 -0
  109. package/lib/dist/resolution/name-matcher.js.map +1 -1
  110. package/lib/dist/resolution/vba-access-object-name.d.ts +7 -0
  111. package/lib/dist/resolution/vba-access-object-name.d.ts.map +1 -0
  112. package/lib/dist/resolution/vba-access-object-name.js +15 -0
  113. package/lib/dist/resolution/vba-access-object-name.js.map +1 -0
  114. package/lib/node_modules/.modules.yaml +1 -1
  115. package/lib/node_modules/.pnpm-workspace-state-v1.json +1 -1
  116. package/lib/package.json +2 -1
  117. package/package.json +1 -1
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RULES = void 0;
3
4
  exports.createEventsTypesDeclaresClassifier = createEventsTypesDeclaresClassifier;
4
5
  exports.sweepEventsTypesAndDeclares = sweepEventsTypesAndDeclares;
5
6
  const tree_sitter_helpers_1 = require("../tree-sitter-helpers");
6
7
  const text_utils_1 = require("./text-utils");
8
+ const rules_1 = require("./rules");
7
9
  /** `[visibility] Event <Name>(...)` custom event declaration. */
8
10
  const EVENT_DECL_RE = /^\s*((?:Public|Private|Friend)\s+)?Event\s+(\p{L}[\p{L}\p{N}_]*)\b/iu;
9
11
  /** `[visibility] Type <Name>` user-defined type block start. */
@@ -15,143 +17,229 @@ const TYPE_MEMBER_RE = /^\s*(\p{L}[\p{L}\p{N}_]*)\s*(?:\([^)]*\))?\s+As\s+(.+?)\
15
17
  /** `[visibility] Declare [PtrSafe] Sub|Function <Name> Lib "dll" [Alias "x"] ...` */
16
18
  const DLL_DECLARE_RE = /^\s*((?:Public|Private)\s+)?Declare\s+(PtrSafe\s+)?(Sub|Function)\s+(\p{L}[\p{L}\p{N}_]*)\s+Lib\s+"([^"]+)"(?:\s+Alias\s+"([^"]+)")?/iu;
17
19
  /**
18
- * Issue #83: factory for the events/types/declares classifier. Closure
19
- * state: `currentType` (the open `Type ... End Type` block).
20
+ * Issue #153: the declarative rule table for the events/types/declares
21
+ * concern. Five rules, partitioned by where they fire:
22
+ *
23
+ * - `event-decl` (outside-type-block) — match an `Event <Name>` decl
24
+ * - `type-start` (outside-type-block) — match a `Type <Name>` header;
25
+ * sets `ctx.vbaDeclTypeBlock` on a successful match
26
+ * - `type-end` (inside-type-block) — match `End Type`; clears
27
+ * `ctx.vbaDeclTypeBlock` on a successful match
28
+ * - `type-member` (inside-type-block) — match `<Member> As <Type>`
29
+ * inside an open type block
30
+ * - `dll-declare` (outside-type-block) — match a `[Private|Public]
31
+ * Declare [PtrSafe] Sub|Function <Name> Lib "<dll>"
32
+ * [Alias "<x>"]` Win32 API declaration
33
+ *
34
+ * The `requires` field encodes the type-block precondition. The
35
+ * dispatcher (the factory's `classifyLine`) filters rules whose
36
+ * precondition does not hold, so an `End Type` line never
37
+ * accidentally re-enters the `event-decl` / `dll-declare` paths.
38
+ *
39
+ * Inter-line state lives on `ctx.vbaDeclTypeBlock` (replaces the
40
+ * pre-#153 factory closure variable) so the emit functions can
41
+ * read/write it without taking a mutable closure reference.
42
+ */
43
+ exports.RULES = [
44
+ (0, rules_1.defineRule)({
45
+ id: 'event-decl',
46
+ description: 'Match an `[Public|Private|Friend] Event <Name>(...)` custom event declaration; emit an `event` node + `contains` edge from the module/class.',
47
+ pattern: EVENT_DECL_RE,
48
+ requires: 'outside-type-block',
49
+ emit: (m, ctx, line, lineNum) => {
50
+ const visibility = (0, text_utils_1.foldVisibility)(m[1] ?? '');
51
+ const name = m[2] ?? '';
52
+ if (!name)
53
+ return null;
54
+ const eventId = (0, tree_sitter_helpers_1.generateNodeId)(ctx.filePath, 'event', name, lineNum);
55
+ const eventNode = {
56
+ id: eventId,
57
+ kind: 'event',
58
+ name,
59
+ signature: line.trim(),
60
+ qualifiedName: ctx.classNamePrefix ? `${ctx.classNamePrefix}.${name}` : name,
61
+ filePath: ctx.filePath,
62
+ language: 'vba',
63
+ startLine: lineNum,
64
+ endLine: lineNum,
65
+ startColumn: 0,
66
+ endColumn: line.length,
67
+ visibility,
68
+ updatedAt: Date.now(),
69
+ };
70
+ ctx.nodes.push(eventNode);
71
+ ctx.localEvents.set(name.toLowerCase(), eventNode);
72
+ ctx.pushContainsFromModule(eventId);
73
+ return { name };
74
+ },
75
+ }),
76
+ (0, rules_1.defineRule)({
77
+ id: 'type-start',
78
+ description: 'Match a `[Public|Private|Friend] Type <Name>` UDT block header; emit a `type` node + `contains` edge and mark `ctx.vbaDeclTypeBlock` so subsequent member lines route to `type-member` / `End Type` lines route to `type-end`.',
79
+ pattern: TYPE_START_RE,
80
+ requires: 'outside-type-block',
81
+ emit: (m, ctx, line, lineNum) => {
82
+ const visibility = (0, text_utils_1.foldVisibility)(m[1] ?? '');
83
+ const name = m[2] ?? '';
84
+ if (!name)
85
+ return null;
86
+ const typeId = (0, tree_sitter_helpers_1.generateNodeId)(ctx.filePath, 'type', name, lineNum);
87
+ ctx.nodes.push({
88
+ id: typeId,
89
+ kind: 'type',
90
+ name,
91
+ qualifiedName: ctx.classNamePrefix ? `${ctx.classNamePrefix}.${name}` : name,
92
+ filePath: ctx.filePath,
93
+ language: 'vba',
94
+ startLine: lineNum,
95
+ endLine: lineNum,
96
+ startColumn: 0,
97
+ endColumn: line.length,
98
+ visibility,
99
+ updatedAt: Date.now(),
100
+ });
101
+ ctx.pushContainsFromModule(typeId);
102
+ // Mark the open type block on ctx so the next non-End line is
103
+ // dispatched to `type-member` / `type-end` instead of the
104
+ // outside-type-block rules.
105
+ ctx.vbaDeclTypeBlock = { id: typeId, name };
106
+ return { name, typeId };
107
+ },
108
+ }),
109
+ (0, rules_1.defineRule)({
110
+ id: 'type-end',
111
+ description: 'Match `End Type` while inside a type block; emit nothing and clear `ctx.vbaDeclTypeBlock` so subsequent lines route back to the outside-type-block rules.',
112
+ pattern: TYPE_END_RE,
113
+ requires: 'inside-type-block',
114
+ emit: (_m, ctx) => {
115
+ ctx.vbaDeclTypeBlock = null;
116
+ return { kind: 'end-type-block' };
117
+ },
118
+ }),
119
+ (0, rules_1.defineRule)({
120
+ id: 'type-member',
121
+ description: 'Match `<MemberName> [As <Type>]` inside an open type block; emit a `type_member` node + a `type-member` edge from the open type to the member.',
122
+ pattern: TYPE_MEMBER_RE,
123
+ requires: 'inside-type-block',
124
+ emit: (m, ctx, line, lineNum) => {
125
+ const memberName = m[1] ?? '';
126
+ const memberType = (m[2] ?? '').trim();
127
+ if (!memberName || !ctx.vbaDeclTypeBlock)
128
+ return null;
129
+ const memberId = (0, tree_sitter_helpers_1.generateNodeId)(ctx.filePath, 'type_member', memberName, lineNum);
130
+ ctx.nodes.push({
131
+ id: memberId,
132
+ kind: 'type_member',
133
+ name: memberName,
134
+ qualifiedName: `${ctx.vbaDeclTypeBlock.name}.${memberName}`,
135
+ filePath: ctx.filePath,
136
+ language: 'vba',
137
+ startLine: lineNum,
138
+ endLine: lineNum,
139
+ startColumn: 0,
140
+ endColumn: line.length,
141
+ metadata: { memberType },
142
+ updatedAt: Date.now(),
143
+ });
144
+ ctx.edges.push({
145
+ source: ctx.vbaDeclTypeBlock.id,
146
+ target: memberId,
147
+ kind: 'type-member',
148
+ provenance: 'parser',
149
+ });
150
+ return { name: memberName };
151
+ },
152
+ }),
153
+ (0, rules_1.defineRule)({
154
+ id: 'dll-declare',
155
+ description: 'Match a `[Public|Private] Declare [PtrSafe] Sub|Function <Name> Lib "<dll>" [Alias "<x>"]` Win32 API declaration; emit a `declare` node + `contains` edge and register the name in `functionNodeByName` so call-site scanning can resolve it.',
156
+ pattern: DLL_DECLARE_RE,
157
+ requires: 'outside-type-block',
158
+ emit: (m, ctx, line, lineNum) => {
159
+ const visibility = (0, text_utils_1.foldVisibility)(m[1] ?? '');
160
+ const ptrSafe = !!m[2];
161
+ const declareKind = (m[3] ?? '').toLowerCase();
162
+ const name = m[4] ?? '';
163
+ const dll = m[5] ?? '';
164
+ const aliasName = m[6] ?? undefined;
165
+ if (!name)
166
+ return null;
167
+ const declareId = (0, tree_sitter_helpers_1.generateNodeId)(ctx.filePath, 'declare', name, lineNum);
168
+ const declareNode = {
169
+ id: declareId,
170
+ kind: 'declare',
171
+ name,
172
+ qualifiedName: ctx.classNamePrefix ? `${ctx.classNamePrefix}.${name}` : name,
173
+ filePath: ctx.filePath,
174
+ language: 'vba',
175
+ startLine: lineNum,
176
+ endLine: lineNum,
177
+ startColumn: 0,
178
+ endColumn: line.length,
179
+ visibility,
180
+ metadata: {
181
+ isDeclare: true,
182
+ dll,
183
+ declareKind,
184
+ ptrSafe,
185
+ ...(aliasName ? { aliasName } : {}),
186
+ },
187
+ updatedAt: Date.now(),
188
+ };
189
+ ctx.nodes.push(declareNode);
190
+ if (!ctx.functionNodeByName.has(name)) {
191
+ ctx.functionNodeByName.set(name, declareNode);
192
+ }
193
+ ctx.pushContainsFromModule(declareId);
194
+ return { name };
195
+ },
196
+ }),
197
+ ];
198
+ /**
199
+ * Issue #83: factory for the events/types/declares classifier.
200
+ *
201
+ * Inter-line state (`ctx.vbaDeclTypeBlock`) lives on `ctx` — the
202
+ * declarative RULES table's `emit` functions read/write it directly.
203
+ * The dispatcher below honours each rule's `requires` precondition
204
+ * so the per-line dispatch mirrors the legacy cascade exactly:
205
+ *
206
+ * if (currentType) {
207
+ * try type-end, then type-member; return early
208
+ * } else {
209
+ * try event-decl, type-start, dll-declare
210
+ * }
20
211
  */
21
212
  function createEventsTypesDeclaresClassifier() {
22
- let currentType = null;
23
213
  const cls = {
24
214
  name: 'eventsTypesDeclares',
25
215
  count: 0,
26
216
  classifyLine(line, i, ctx) {
27
217
  const lineNum = i + 1;
28
- if (currentType) {
29
- if (TYPE_END_RE.test(line)) {
30
- currentType = null;
31
- return;
32
- }
33
- const member = TYPE_MEMBER_RE.exec(line);
34
- if (member) {
35
- const memberName = member[1] ?? '';
36
- const memberType = (member[2] ?? '').trim();
37
- if (!memberName)
38
- return;
39
- const memberId = (0, tree_sitter_helpers_1.generateNodeId)(ctx.filePath, 'type_member', memberName, lineNum);
40
- ctx.nodes.push({
41
- id: memberId,
42
- kind: 'type_member',
43
- name: memberName,
44
- qualifiedName: `${currentType.name}.${memberName}`,
45
- filePath: ctx.filePath,
46
- language: 'vba',
47
- startLine: lineNum,
48
- endLine: lineNum,
49
- startColumn: 0,
50
- endColumn: line.length,
51
- metadata: { memberType },
52
- updatedAt: Date.now(),
53
- });
54
- ctx.edges.push({
55
- source: currentType.id,
56
- target: memberId,
57
- kind: 'type-member',
58
- provenance: 'parser',
59
- });
60
- }
61
- return;
62
- }
63
- const eventDecl = EVENT_DECL_RE.exec(line);
64
- if (eventDecl) {
65
- const visibility = (0, text_utils_1.foldVisibility)(eventDecl[1] ?? '');
66
- const name = eventDecl[2] ?? '';
67
- if (!name)
68
- return;
69
- const eventId = (0, tree_sitter_helpers_1.generateNodeId)(ctx.filePath, 'event', name, lineNum);
70
- const eventNode = {
71
- id: eventId,
72
- kind: 'event',
73
- name,
74
- signature: line.trim(),
75
- qualifiedName: ctx.classNamePrefix ? `${ctx.classNamePrefix}.${name}` : name,
76
- filePath: ctx.filePath,
77
- language: 'vba',
78
- startLine: lineNum,
79
- endLine: lineNum,
80
- startColumn: 0,
81
- endColumn: line.length,
82
- visibility,
83
- updatedAt: Date.now(),
84
- };
85
- ctx.nodes.push(eventNode);
86
- ctx.localEvents.set(name.toLowerCase(), eventNode);
87
- ctx.pushContainsFromModule(eventId);
88
- this.count++;
89
- return;
90
- }
91
- const typeStart = TYPE_START_RE.exec(line);
92
- if (typeStart) {
93
- const visibility = (0, text_utils_1.foldVisibility)(typeStart[1] ?? '');
94
- const name = typeStart[2] ?? '';
95
- if (!name)
96
- return;
97
- const typeId = (0, tree_sitter_helpers_1.generateNodeId)(ctx.filePath, 'type', name, lineNum);
98
- ctx.nodes.push({
99
- id: typeId,
100
- kind: 'type',
101
- name,
102
- qualifiedName: ctx.classNamePrefix ? `${ctx.classNamePrefix}.${name}` : name,
103
- filePath: ctx.filePath,
104
- language: 'vba',
105
- startLine: lineNum,
106
- endLine: lineNum,
107
- startColumn: 0,
108
- endColumn: line.length,
109
- visibility,
110
- updatedAt: Date.now(),
111
- });
112
- ctx.pushContainsFromModule(typeId);
113
- currentType = { id: typeId, name };
114
- this.count++;
115
- return;
116
- }
117
- const declaration = DLL_DECLARE_RE.exec(line);
118
- if (declaration) {
119
- const visibility = (0, text_utils_1.foldVisibility)(declaration[1] ?? '');
120
- const ptrSafe = !!declaration[2];
121
- const declareKind = (declaration[3] ?? '').toLowerCase();
122
- const name = declaration[4] ?? '';
123
- const dll = declaration[5] ?? '';
124
- const aliasName = declaration[6] ?? undefined;
125
- if (!name)
126
- return;
127
- const declareId = (0, tree_sitter_helpers_1.generateNodeId)(ctx.filePath, 'declare', name, lineNum);
128
- const declareNode = {
129
- id: declareId,
130
- kind: 'declare',
131
- name,
132
- qualifiedName: ctx.classNamePrefix ? `${ctx.classNamePrefix}.${name}` : name,
133
- filePath: ctx.filePath,
134
- language: 'vba',
135
- startLine: lineNum,
136
- endLine: lineNum,
137
- startColumn: 0,
138
- endColumn: line.length,
139
- visibility,
140
- metadata: {
141
- isDeclare: true,
142
- dll,
143
- declareKind,
144
- ptrSafe,
145
- ...(aliasName ? { aliasName } : {}),
146
- },
147
- updatedAt: Date.now(),
148
- };
149
- ctx.nodes.push(declareNode);
150
- if (!ctx.functionNodeByName.has(name)) {
151
- ctx.functionNodeByName.set(name, declareNode);
218
+ for (const rule of exports.RULES) {
219
+ // Gate by the rule's `requires` precondition. The
220
+ // `outside-type-block` / `inside-type-block` values are the
221
+ // concrete preconditions the dispatcher knows about today;
222
+ // unknown strings are treated as "always" so adding new
223
+ // preconditions does not require touching this loop.
224
+ if (rule.requires === 'inside-type-block' && !ctx.vbaDeclTypeBlock)
225
+ continue;
226
+ if (rule.requires === 'outside-type-block' && ctx.vbaDeclTypeBlock)
227
+ continue;
228
+ const m = (0, rules_1.matchRule)(rule.pattern, line);
229
+ if (!m)
230
+ continue;
231
+ const result = rule.emit(m, ctx, line, lineNum);
232
+ if (result !== null && result !== undefined) {
233
+ this.count += rule.count ? rule.count(result) : 1;
152
234
  }
153
- ctx.pushContainsFromModule(declareId);
154
- this.count++;
235
+ // `type-end` cleared the type block — nothing else on this
236
+ // line can apply (a VBA `End Type` line cannot also be an
237
+ // `Event <Name>` declaration). The legacy cascade did the
238
+ // same short-circuit via `return`. Break out of the loop
239
+ // explicitly so a later refactor cannot accidentally let an
240
+ // outside-type-block rule fire on the same line.
241
+ if (rule.id === 'type-end')
242
+ break;
155
243
  }
156
244
  },
157
245
  };
@@ -1 +1 @@
1
- {"version":3,"file":"declarations.js","sourceRoot":"","sources":["../../../src/extraction/vba/declarations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"declarations.js","sourceRoot":"","sources":["../../../src/extraction/vba/declarations.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,40 @@
1
1
  import { VbaExtractorContext, VbaClassifier } from './context';
2
+ import { VbaExtractionRule } from './rules';
2
3
  /**
3
- * Issue #83: factory for the Dim / WithEvents classifier. Stateless per-line.
4
+ * Issue #153: the declarative rule table for the Dim / WithEvents
5
+ * concern. Two rules:
6
+ *
7
+ * - `dim-decl` — match a `Dim|Private|Public|Global|Static
8
+ * <var> [As [New] <TypePart>[.<TypePart>]][, …]`
9
+ * declaration; populate `localVarTypeMap` and
10
+ * emit one `references` edge per non-primitive
11
+ * type (or per qualified outer type).
12
+ * - `withevents-decl`— match a `[Dim|Private|Public|Global|Static]
13
+ * WithEvents <var> As <FormType>` declaration;
14
+ * populate `localVarTypeMap` with `withEvents: true`,
15
+ * emit a `references` edge (synthesizedBy:
16
+ * `vba-withevents`) and a `subscribes-event` edge.
17
+ *
18
+ * The two rules are dispatched independently and BOTH can fire on the
19
+ * same line in principle (a `WithEvents` line does NOT match the
20
+ * `Dim|Private|...` prefix because the negative lookahead excludes it).
21
+ * The `dim-decl` rule's `count` hook reports the number of
22
+ * non-primitive `references` edges it emitted, so a multi-variable
23
+ * `Dim a As Foo, b As Bar` line adds 2 to the classifier count, and a
24
+ * bare `Dim x` line adds 0 (the bare-Dim path is a `localVarTypeMap`
25
+ * only side effect, no graph edges).
26
+ *
27
+ * No inter-line state — each rule is self-contained.
28
+ */
29
+ export declare const RULES: readonly VbaExtractionRule<unknown>[];
30
+ /**
31
+ * Issue #83: factory for the Dim / WithEvents classifier.
32
+ *
33
+ * The body walks the declarative `RULES` table (Issue #153). The two
34
+ * rules are independent: `dim-decl` handles typed declarations
35
+ * (REJECTED if the line is a `WithEvents` because the prefix
36
+ * negative-lookahead excludes `WithEvents`), `withevents-decl`
37
+ * handles WithEvents. No inter-line state.
4
38
  */
5
39
  export declare function createDimsClassifier(): VbaClassifier;
6
40
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"dims.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/dims.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAqE/D;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,aAAa,CA4HpD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAOpF"}
1
+ {"version":3,"file":"dims.d.ts","sourceRoot":"","sources":["../../../src/extraction/vba/dims.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAyB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAiFnE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,KAAK,EAAE,SAAS,iBAAiB,CAAC,OAAO,CAAC,EAyItD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,IAAI,aAAa,CAgBpD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAOpF"}