codesift-mcp 0.5.30 → 0.8.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 (207) hide show
  1. package/README.md +7 -2
  2. package/dist/cli/commands.d.ts.map +1 -1
  3. package/dist/cli/commands.js +25 -3
  4. package/dist/cli/commands.js.map +1 -1
  5. package/dist/cli/git-hooks-installer.d.ts +2 -0
  6. package/dist/cli/git-hooks-installer.d.ts.map +1 -1
  7. package/dist/cli/git-hooks-installer.js +47 -7
  8. package/dist/cli/git-hooks-installer.js.map +1 -1
  9. package/dist/cli/hooks.d.ts.map +1 -1
  10. package/dist/cli/hooks.js +53 -0
  11. package/dist/cli/hooks.js.map +1 -1
  12. package/dist/cli/setup.d.ts +5 -0
  13. package/dist/cli/setup.d.ts.map +1 -1
  14. package/dist/cli/setup.js +31 -5
  15. package/dist/cli/setup.js.map +1 -1
  16. package/dist/config.d.ts +2 -1
  17. package/dist/config.d.ts.map +1 -1
  18. package/dist/config.js +10 -1
  19. package/dist/config.js.map +1 -1
  20. package/dist/instructions.d.ts +1 -1
  21. package/dist/instructions.d.ts.map +1 -1
  22. package/dist/instructions.js +6 -1
  23. package/dist/instructions.js.map +1 -1
  24. package/dist/parser/extractors/_shared.js +2 -2
  25. package/dist/parser/extractors/_shared.js.map +1 -1
  26. package/dist/parser/extractors/hono.d.ts.map +1 -1
  27. package/dist/parser/extractors/hono.js +60 -15
  28. package/dist/parser/extractors/hono.js.map +1 -1
  29. package/dist/parser/extractors/php.d.ts +12 -0
  30. package/dist/parser/extractors/php.d.ts.map +1 -1
  31. package/dist/parser/extractors/php.js +440 -26
  32. package/dist/parser/extractors/php.js.map +1 -1
  33. package/dist/parser/extractors/python.js +4 -5
  34. package/dist/parser/extractors/python.js.map +1 -1
  35. package/dist/parser/extractors/typescript.d.ts.map +1 -1
  36. package/dist/parser/extractors/typescript.js +70 -22
  37. package/dist/parser/extractors/typescript.js.map +1 -1
  38. package/dist/register-tool-loaders.d.ts +22 -0
  39. package/dist/register-tool-loaders.d.ts.map +1 -1
  40. package/dist/register-tool-loaders.js +38 -0
  41. package/dist/register-tool-loaders.js.map +1 -1
  42. package/dist/register-tools.d.ts +3 -1
  43. package/dist/register-tools.d.ts.map +1 -1
  44. package/dist/register-tools.js +527 -7
  45. package/dist/register-tools.js.map +1 -1
  46. package/dist/retrieval/codebase-retrieval.d.ts.map +1 -1
  47. package/dist/retrieval/codebase-retrieval.js +22 -0
  48. package/dist/retrieval/codebase-retrieval.js.map +1 -1
  49. package/dist/retrieval/retrieval-schemas.d.ts +4 -0
  50. package/dist/retrieval/retrieval-schemas.d.ts.map +1 -1
  51. package/dist/retrieval/semantic-handlers.js +1 -1
  52. package/dist/retrieval/semantic-handlers.js.map +1 -1
  53. package/dist/search/semantic.d.ts +21 -5
  54. package/dist/search/semantic.d.ts.map +1 -1
  55. package/dist/search/semantic.js +129 -4
  56. package/dist/search/semantic.js.map +1 -1
  57. package/dist/search/tool-ranker.js +1 -1
  58. package/dist/search/tool-ranker.js.map +1 -1
  59. package/dist/server-helpers.js +1 -1
  60. package/dist/server-helpers.js.map +1 -1
  61. package/dist/storage/index-store.d.ts +13 -1
  62. package/dist/storage/index-store.d.ts.map +1 -1
  63. package/dist/storage/index-store.js +34 -33
  64. package/dist/storage/index-store.js.map +1 -1
  65. package/dist/storage/registry.d.ts +28 -4
  66. package/dist/storage/registry.d.ts.map +1 -1
  67. package/dist/storage/registry.js +126 -5
  68. package/dist/storage/registry.js.map +1 -1
  69. package/dist/storage/usage-stats.d.ts +2 -0
  70. package/dist/storage/usage-stats.d.ts.map +1 -1
  71. package/dist/storage/usage-stats.js +6 -0
  72. package/dist/storage/usage-stats.js.map +1 -1
  73. package/dist/tools/_helpers.d.ts +2 -0
  74. package/dist/tools/_helpers.d.ts.map +1 -1
  75. package/dist/tools/_helpers.js +16 -1
  76. package/dist/tools/_helpers.js.map +1 -1
  77. package/dist/tools/astro-audit.d.ts +40 -0
  78. package/dist/tools/astro-audit.d.ts.map +1 -1
  79. package/dist/tools/astro-audit.js +94 -5
  80. package/dist/tools/astro-audit.js.map +1 -1
  81. package/dist/tools/astro-env-validator.d.ts +38 -0
  82. package/dist/tools/astro-env-validator.d.ts.map +1 -0
  83. package/dist/tools/astro-env-validator.js +190 -0
  84. package/dist/tools/astro-env-validator.js.map +1 -0
  85. package/dist/tools/astro-helpers.js +2 -2
  86. package/dist/tools/astro-helpers.js.map +1 -1
  87. package/dist/tools/astro-image-audit.d.ts +35 -0
  88. package/dist/tools/astro-image-audit.d.ts.map +1 -0
  89. package/dist/tools/astro-image-audit.js +129 -0
  90. package/dist/tools/astro-image-audit.js.map +1 -0
  91. package/dist/tools/astro-middleware.d.ts.map +1 -1
  92. package/dist/tools/astro-middleware.js +36 -11
  93. package/dist/tools/astro-middleware.js.map +1 -1
  94. package/dist/tools/astro-migration.d.ts.map +1 -1
  95. package/dist/tools/astro-migration.js +66 -0
  96. package/dist/tools/astro-migration.js.map +1 -1
  97. package/dist/tools/astro-svg-components.d.ts +32 -0
  98. package/dist/tools/astro-svg-components.d.ts.map +1 -0
  99. package/dist/tools/astro-svg-components.js +123 -0
  100. package/dist/tools/astro-svg-components.js.map +1 -0
  101. package/dist/tools/context-tools.d.ts.map +1 -1
  102. package/dist/tools/context-tools.js +45 -7
  103. package/dist/tools/context-tools.js.map +1 -1
  104. package/dist/tools/conversation-tools.js +1 -1
  105. package/dist/tools/conversation-tools.js.map +1 -1
  106. package/dist/tools/index-tools.d.ts +12 -0
  107. package/dist/tools/index-tools.d.ts.map +1 -1
  108. package/dist/tools/index-tools.js +54 -6
  109. package/dist/tools/index-tools.js.map +1 -1
  110. package/dist/tools/insights-tools.d.ts +137 -0
  111. package/dist/tools/insights-tools.d.ts.map +1 -0
  112. package/dist/tools/insights-tools.js +438 -0
  113. package/dist/tools/insights-tools.js.map +1 -0
  114. package/dist/tools/pattern-tools.d.ts +7 -0
  115. package/dist/tools/pattern-tools.d.ts.map +1 -1
  116. package/dist/tools/pattern-tools.js +292 -19
  117. package/dist/tools/pattern-tools.js.map +1 -1
  118. package/dist/tools/php-tools.d.ts +78 -4
  119. package/dist/tools/php-tools.d.ts.map +1 -1
  120. package/dist/tools/php-tools.js +824 -42
  121. package/dist/tools/php-tools.js.map +1 -1
  122. package/dist/tools/php8-compat-tools.d.ts +62 -0
  123. package/dist/tools/php8-compat-tools.d.ts.map +1 -0
  124. package/dist/tools/php8-compat-tools.js +287 -0
  125. package/dist/tools/php8-compat-tools.js.map +1 -0
  126. package/dist/tools/php8-migration-candidates-tools.d.ts +68 -0
  127. package/dist/tools/php8-migration-candidates-tools.d.ts.map +1 -0
  128. package/dist/tools/php8-migration-candidates-tools.js +476 -0
  129. package/dist/tools/php8-migration-candidates-tools.js.map +1 -0
  130. package/dist/tools/phpstan-baseline-tools.d.ts +62 -0
  131. package/dist/tools/phpstan-baseline-tools.d.ts.map +1 -0
  132. package/dist/tools/phpstan-baseline-tools.js +263 -0
  133. package/dist/tools/phpstan-baseline-tools.js.map +1 -0
  134. package/dist/tools/project-tools.d.ts +4 -2
  135. package/dist/tools/project-tools.d.ts.map +1 -1
  136. package/dist/tools/project-tools.js +20 -7
  137. package/dist/tools/project-tools.js.map +1 -1
  138. package/dist/tools/react-tools.d.ts +39 -9
  139. package/dist/tools/react-tools.d.ts.map +1 -1
  140. package/dist/tools/react-tools.js +313 -18
  141. package/dist/tools/react-tools.js.map +1 -1
  142. package/dist/tools/search-tools.d.ts.map +1 -1
  143. package/dist/tools/search-tools.js +35 -5
  144. package/dist/tools/search-tools.js.map +1 -1
  145. package/dist/tools/status-tools.d.ts +1 -0
  146. package/dist/tools/status-tools.d.ts.map +1 -1
  147. package/dist/tools/status-tools.js +1 -0
  148. package/dist/tools/status-tools.js.map +1 -1
  149. package/dist/tools/symbol-tools.d.ts +11 -0
  150. package/dist/tools/symbol-tools.d.ts.map +1 -1
  151. package/dist/tools/symbol-tools.js +107 -6
  152. package/dist/tools/symbol-tools.js.map +1 -1
  153. package/dist/tools/yii-console-tools.d.ts +69 -0
  154. package/dist/tools/yii-console-tools.d.ts.map +1 -0
  155. package/dist/tools/yii-console-tools.js +256 -0
  156. package/dist/tools/yii-console-tools.js.map +1 -0
  157. package/dist/tools/yii-migrations-tools.d.ts +79 -0
  158. package/dist/tools/yii-migrations-tools.d.ts.map +1 -0
  159. package/dist/tools/yii-migrations-tools.js +543 -0
  160. package/dist/tools/yii-migrations-tools.js.map +1 -0
  161. package/dist/tools/yii-modules-tools.d.ts +63 -0
  162. package/dist/tools/yii-modules-tools.d.ts.map +1 -0
  163. package/dist/tools/yii-modules-tools.js +201 -0
  164. package/dist/tools/yii-modules-tools.js.map +1 -0
  165. package/dist/tools/yii-rbac-tools.d.ts +89 -0
  166. package/dist/tools/yii-rbac-tools.d.ts.map +1 -0
  167. package/dist/tools/yii-rbac-tools.js +238 -0
  168. package/dist/tools/yii-rbac-tools.js.map +1 -0
  169. package/dist/tools/yii3-attribute-candidates-tools.d.ts +72 -0
  170. package/dist/tools/yii3-attribute-candidates-tools.d.ts.map +1 -0
  171. package/dist/tools/yii3-attribute-candidates-tools.js +301 -0
  172. package/dist/tools/yii3-attribute-candidates-tools.js.map +1 -0
  173. package/dist/tools/yii3-migration-tools.d.ts +74 -0
  174. package/dist/tools/yii3-migration-tools.d.ts.map +1 -0
  175. package/dist/tools/yii3-migration-tools.js +440 -0
  176. package/dist/tools/yii3-migration-tools.js.map +1 -0
  177. package/dist/types.d.ts +5 -1
  178. package/dist/types.d.ts.map +1 -1
  179. package/dist/utils/constant-file-pattern.d.ts +3 -1
  180. package/dist/utils/constant-file-pattern.d.ts.map +1 -1
  181. package/dist/utils/constant-file-pattern.js +6 -4
  182. package/dist/utils/constant-file-pattern.js.map +1 -1
  183. package/dist/utils/heritage-edges.d.ts +29 -0
  184. package/dist/utils/heritage-edges.d.ts.map +1 -0
  185. package/dist/utils/heritage-edges.js +94 -0
  186. package/dist/utils/heritage-edges.js.map +1 -0
  187. package/dist/utils/source-stripper.d.ts +23 -0
  188. package/dist/utils/source-stripper.d.ts.map +1 -0
  189. package/dist/utils/source-stripper.js +239 -0
  190. package/dist/utils/source-stripper.js.map +1 -0
  191. package/dist/utils/ts-imports.d.ts +7 -1
  192. package/dist/utils/ts-imports.d.ts.map +1 -1
  193. package/dist/utils/ts-imports.js +40 -7
  194. package/dist/utils/ts-imports.js.map +1 -1
  195. package/dist/utils/tsconfig-paths.d.ts +6 -5
  196. package/dist/utils/tsconfig-paths.d.ts.map +1 -1
  197. package/dist/utils/tsconfig-paths.js +52 -14
  198. package/dist/utils/tsconfig-paths.js.map +1 -1
  199. package/dist/utils/wall-clock.d.ts +9 -0
  200. package/dist/utils/wall-clock.d.ts.map +1 -0
  201. package/dist/utils/wall-clock.js +19 -0
  202. package/dist/utils/wall-clock.js.map +1 -0
  203. package/package.json +1 -1
  204. package/rules/codesift.md +16 -6
  205. package/rules/codesift.mdc +10 -3
  206. package/rules/codex.md +10 -3
  207. package/rules/gemini.md +10 -3
@@ -43,6 +43,23 @@ export function parsePhpDocTags(docstring) {
43
43
  }
44
44
  return results;
45
45
  }
46
+ /**
47
+ * Extract a `@var T` type annotation from a PHPDoc block. Used for inferring
48
+ * property types in pre-PHP-7.4 codebases that keep typing in docblocks
49
+ * rather than as inline type hints. Returns the raw type string (no further
50
+ * normalization) or undefined if no `@var` is present.
51
+ *
52
+ * Examples:
53
+ * /** @var string *\/ → "string"
54
+ * /** @var User|null *\/ → "User|null"
55
+ * /** @var int[] *\/ → "int[]"
56
+ */
57
+ export function parsePhpDocVar(docstring) {
58
+ if (!docstring)
59
+ return undefined;
60
+ const m = /@var\s+(\S+)/.exec(docstring);
61
+ return m?.[1];
62
+ }
46
63
  // --- Helpers ---
47
64
  /**
48
65
  * PHP docblocks are `comment` nodes starting with `/**` that precede a declaration.
@@ -77,23 +94,213 @@ function getSignature(node, source) {
77
94
  return sig;
78
95
  }
79
96
  /**
80
- * Check if a class extends TestCase (PHPUnit).
97
+ * Test base classes that mark a class as a test suite. Includes PHPUnit
98
+ * (TestCase) and Codeception (Unit, Cest, Cept) — the latter pair are the
99
+ * canonical Codeception base classes used in panels like tgm-panel.
81
100
  */
82
- function isTestCaseClass(node) {
83
- const baseClause = node.childForFieldName("base_clause");
84
- if (baseClause) {
85
- const text = baseClause.text;
86
- if (text.includes("TestCase"))
87
- return true;
101
+ const TEST_BASE_NAMES = new Set([
102
+ "TestCase",
103
+ "Unit",
104
+ "Cest",
105
+ "Cept",
106
+ ]);
107
+ /**
108
+ * Extract the list of base class names from a `base_clause` node. Returns
109
+ * fully-qualified names exactly as written in source (e.g. ["BaseUser",
110
+ * "\\yii\\db\\ActiveRecord", "Codeception\\Test\\Unit"]). Aliases stay as
111
+ * source-side names — namespace resolution is the resolver's job, not the
112
+ * extractor's.
113
+ */
114
+ function parseBaseClause(baseClause) {
115
+ if (!baseClause)
116
+ return [];
117
+ const names = [];
118
+ for (const child of baseClause.namedChildren) {
119
+ if (child.type === "name" || child.type === "qualified_name") {
120
+ const text = child.text.trim();
121
+ if (text)
122
+ names.push(text);
123
+ }
88
124
  }
89
- // Also check named children for "base_clause" node type
125
+ // Fallback: tree-sitter-php sometimes flattens children. Strip the keyword
126
+ // prefix and split on commas if no structured children were found.
127
+ if (names.length === 0) {
128
+ const stripped = baseClause.text.replace(/^extends\s+/, "").trim();
129
+ if (stripped) {
130
+ for (const n of stripped.split(/\s*,\s*/)) {
131
+ if (n)
132
+ names.push(n);
133
+ }
134
+ }
135
+ }
136
+ return names;
137
+ }
138
+ /**
139
+ * Extract the list of interface names from a `class_interface_clause` node.
140
+ * Mirrors `parseBaseClause` but strips the `implements` keyword.
141
+ */
142
+ function parseInterfaceClause(clause) {
143
+ if (!clause)
144
+ return [];
145
+ const names = [];
146
+ for (const child of clause.namedChildren) {
147
+ if (child.type === "name" || child.type === "qualified_name") {
148
+ const text = child.text.trim();
149
+ if (text)
150
+ names.push(text);
151
+ }
152
+ }
153
+ if (names.length === 0) {
154
+ const stripped = clause.text.replace(/^implements\s+/, "").trim();
155
+ if (stripped) {
156
+ for (const n of stripped.split(/\s*,\s*/)) {
157
+ if (n)
158
+ names.push(n);
159
+ }
160
+ }
161
+ }
162
+ return names;
163
+ }
164
+ /**
165
+ * Walk a class/trait body and collect the names of traits used via
166
+ * `use TraitName;` declarations. Returns FQ names as written.
167
+ */
168
+ function collectTraitUses(body) {
169
+ if (!body)
170
+ return [];
171
+ const traits = [];
172
+ for (const child of body.namedChildren) {
173
+ if (child.type !== "use_declaration")
174
+ continue;
175
+ for (const grand of child.namedChildren) {
176
+ if (grand.type === "name" || grand.type === "qualified_name") {
177
+ const t = grand.text.trim();
178
+ if (t)
179
+ traits.push(t);
180
+ }
181
+ }
182
+ }
183
+ return traits;
184
+ }
185
+ /**
186
+ * Look at a class/method/property declaration's children for modifier nodes.
187
+ * tree-sitter-php emits these as siblings of the name, with types like
188
+ * `abstract_modifier`, `final_modifier`, `readonly_modifier`, `static_modifier`,
189
+ * and `visibility_modifier`. Returns a set of plain string flags.
190
+ */
191
+ function collectModifiers(node) {
192
+ const out = {};
90
193
  for (const child of node.namedChildren) {
91
- if (child.type === "base_clause" && child.text.includes("TestCase")) {
92
- return true;
194
+ const t = child.type;
195
+ if (t === "visibility_modifier") {
196
+ const txt = child.text.trim();
197
+ if (txt === "public" || txt === "private" || txt === "protected") {
198
+ out.visibility = txt;
199
+ }
200
+ }
201
+ else if (t === "static_modifier" || (t === "modifier" && child.text === "static")) {
202
+ out.is_static = true;
203
+ }
204
+ else if (t === "abstract_modifier" || (t === "modifier" && child.text === "abstract")) {
205
+ out.is_abstract = true;
206
+ }
207
+ else if (t === "final_modifier" || (t === "modifier" && child.text === "final")) {
208
+ out.is_final = true;
209
+ }
210
+ else if (t === "readonly_modifier" || (t === "modifier" && child.text === "readonly")) {
211
+ out.is_readonly = true;
212
+ }
213
+ }
214
+ return out;
215
+ }
216
+ /**
217
+ * Extract PHP 8.0+ attribute list from a declaration. Attributes appear as
218
+ * an `attribute_list` named child preceding the declaration; each contains
219
+ * one or more `attribute_group` → `attribute` nodes.
220
+ *
221
+ * Returns shape suitable for storing in `meta.attributes`:
222
+ * #[Route('/api', methods: ['GET'])] → { name: "Route", args: "'/api', methods: ['GET']" }
223
+ */
224
+ function parseAttributes(node) {
225
+ const attrs = [];
226
+ // Attributes precede the decl as a sibling; we walk the immediate previous
227
+ // siblings until we hit something that is not an attribute_list.
228
+ let prev = node.previousNamedSibling;
229
+ while (prev && prev.type === "attribute_list") {
230
+ walkAttributeList(prev, attrs);
231
+ prev = prev.previousNamedSibling;
232
+ }
233
+ // tree-sitter-php sometimes nests attribute_list as a named child of the
234
+ // declaration itself. Collect those too.
235
+ for (const child of node.namedChildren) {
236
+ if (child.type === "attribute_list") {
237
+ walkAttributeList(child, attrs);
238
+ }
239
+ }
240
+ return attrs;
241
+ }
242
+ function walkAttributeList(list, out) {
243
+ for (const group of list.namedChildren) {
244
+ if (group.type !== "attribute_group" && group.type !== "attribute")
245
+ continue;
246
+ const attrNodes = group.type === "attribute_group"
247
+ ? group.namedChildren.filter((c) => c.type === "attribute")
248
+ : [group];
249
+ for (const attr of attrNodes) {
250
+ // attribute → name + optional arguments
251
+ const nameNode = attr.namedChildren.find((c) => c.type === "name" || c.type === "qualified_name");
252
+ if (!nameNode)
253
+ continue;
254
+ const argsNode = attr.namedChildren.find((c) => c.type === "arguments");
255
+ const entry = { name: nameNode.text };
256
+ if (argsNode) {
257
+ // Strip outer parens, trim — keep raw arg list as a string for cheap
258
+ // pattern matching downstream (no need to AST-walk every literal).
259
+ entry.args = argsNode.text.replace(/^\(/, "").replace(/\)$/, "").trim();
260
+ }
261
+ out.push(entry);
93
262
  }
94
263
  }
264
+ }
265
+ /**
266
+ * Check if a class extends a known test-runner base class. Covers both
267
+ * PHPUnit (`TestCase`) and Codeception (`Unit`, `Cest`, `Cept`). Match is
268
+ * substring-based on the last name segment so namespace prefixes don't
269
+ * matter (e.g. `Codeception\\Test\\Unit` ends with `Unit`).
270
+ */
271
+ function isTestCaseClass(node) {
272
+ const bases = collectClassExtends(node);
273
+ for (const b of bases) {
274
+ const last = b.split(/[\\\\]+/).pop() ?? "";
275
+ if (TEST_BASE_NAMES.has(last))
276
+ return true;
277
+ }
95
278
  return false;
96
279
  }
280
+ /**
281
+ * Helper: read the `extends` list from a class_declaration node, regardless
282
+ * of whether the parser exposes it via `childForFieldName("base_clause")`
283
+ * or as a named child of type `base_clause`.
284
+ */
285
+ function collectClassExtends(node) {
286
+ let baseClause = node.childForFieldName("base_clause");
287
+ if (!baseClause) {
288
+ baseClause = node.namedChildren.find((c) => c.type === "base_clause") ?? null;
289
+ }
290
+ return parseBaseClause(baseClause);
291
+ }
292
+ /**
293
+ * Helper: read the `implements` list from a class_declaration node.
294
+ */
295
+ function collectClassImplements(node) {
296
+ let clause = node.childForFieldName("class_interface_clause");
297
+ if (!clause) {
298
+ clause =
299
+ node.namedChildren.find((c) => c.type === "class_interface_clause") ??
300
+ null;
301
+ }
302
+ return parseInterfaceClause(clause);
303
+ }
97
304
  /**
98
305
  * Classify a method declaration based on PHPUnit patterns.
99
306
  */
@@ -129,6 +336,65 @@ function getPropertyName(node) {
129
336
  }
130
337
  return null;
131
338
  }
339
+ /**
340
+ * Pull a type annotation off a property_declaration / parameter / promoted
341
+ * parameter node. Walks named children looking for the first type-bearing
342
+ * node. Returns the raw source text exactly as written.
343
+ *
344
+ * Type-bearing node types in tree-sitter-php:
345
+ * primitive_type (string, int, bool, float, array, mixed, void, ...)
346
+ * named_type (User, \\App\\Model)
347
+ * optional_type (?T) — wraps the inner type
348
+ * union_type (PHP 8.0+: A|B)
349
+ * intersection_type (PHP 8.1+: A&B)
350
+ * disjunctive_normal_form_type (PHP 8.2+: (A&B)|C)
351
+ */
352
+ function getInlineType(node) {
353
+ const TYPE_NODES = new Set([
354
+ "primitive_type",
355
+ "named_type",
356
+ "optional_type",
357
+ "union_type",
358
+ "intersection_type",
359
+ "disjunctive_normal_form_type",
360
+ ]);
361
+ for (const child of node.namedChildren) {
362
+ if (TYPE_NODES.has(child.type)) {
363
+ return child.text.trim();
364
+ }
365
+ }
366
+ return undefined;
367
+ }
368
+ /**
369
+ * Build a Property metadata object from a property_declaration node.
370
+ * Combines inline type (PHP 7.4+ typed property) with `@var T` from a
371
+ * leading PHPDoc block. Inline type takes precedence; `@var` is used when
372
+ * inline type is absent (legacy 7.2/7.3 code).
373
+ */
374
+ function buildPropertyMeta(node, docstring) {
375
+ const meta = {};
376
+ const modifiers = collectModifiers(node);
377
+ if (modifiers.visibility)
378
+ meta.visibility = modifiers.visibility;
379
+ if (modifiers.is_static)
380
+ meta.is_static = true;
381
+ if (modifiers.is_readonly)
382
+ meta.is_readonly = true;
383
+ const inlineType = getInlineType(node);
384
+ const docVar = parsePhpDocVar(docstring);
385
+ if (inlineType) {
386
+ meta.type = inlineType;
387
+ meta.type_source = "inline";
388
+ }
389
+ else if (docVar) {
390
+ meta.type = docVar;
391
+ meta.type_source = "phpdoc";
392
+ }
393
+ const attrs = parseAttributes(node);
394
+ if (attrs.length > 0)
395
+ meta.attributes = attrs;
396
+ return meta;
397
+ }
132
398
  // --- Main extractor ---
133
399
  export function extractPhpSymbols(tree, filePath, source, repo) {
134
400
  const symbols = [];
@@ -160,6 +426,54 @@ export function extractPhpSymbols(tree, filePath, source, repo) {
160
426
  symbols.push(synthetic);
161
427
  }
162
428
  }
429
+ /**
430
+ * Emit synthetic `field` symbols for PHP 8.0+ promoted constructor params.
431
+ *
432
+ * Promoted ctor params (`public readonly string $name` inside a __construct
433
+ * signature) are real properties at runtime, but the property has no
434
+ * separate `property_declaration` in the class body — only the parameter
435
+ * inside `formal_parameters`. Without this, downstream tools see a class
436
+ * with N parameters in its ctor and think the class has 0 properties.
437
+ *
438
+ * Each emitted symbol carries `meta.from_constructor: true` so callers
439
+ * (e.g. analyzeActiveRecord, find_php_god_model) can distinguish promoted
440
+ * fields from declared ones if they need to.
441
+ */
442
+ function emitPromotedCtorFields(methodNode, classId) {
443
+ const params = methodNode.childForFieldName("parameters")
444
+ ?? methodNode.namedChildren.find((c) => c.type === "formal_parameters");
445
+ if (!params)
446
+ return;
447
+ for (const child of params.namedChildren) {
448
+ if (child.type !== "property_promotion_parameter")
449
+ continue;
450
+ const varName = child.namedChildren.find((c) => c.type === "variable_name");
451
+ if (!varName)
452
+ continue;
453
+ const nameNode = varName.namedChildren.find((c) => c.type === "name");
454
+ if (!nameNode)
455
+ continue;
456
+ const propName = "$" + nameNode.text;
457
+ const modifiers = collectModifiers(child);
458
+ const inlineType = getInlineType(child);
459
+ const attrs = parseAttributes(child);
460
+ const meta = { from_constructor: true };
461
+ if (modifiers.visibility)
462
+ meta.visibility = modifiers.visibility;
463
+ if (modifiers.is_readonly)
464
+ meta.is_readonly = true;
465
+ if (inlineType) {
466
+ meta.type = inlineType;
467
+ meta.type_source = "inline";
468
+ }
469
+ if (attrs.length > 0)
470
+ meta.attributes = attrs;
471
+ symbols.push(makeSymbol(child, propName, "field", filePath, source, repo, {
472
+ parentId: classId,
473
+ meta,
474
+ }));
475
+ }
476
+ }
163
477
  function walk(node, parentId, parentIsTest = false) {
164
478
  switch (node.type) {
165
479
  case "namespace_definition": {
@@ -189,14 +503,37 @@ export function extractPhpSymbols(tree, filePath, source, repo) {
189
503
  const isTest = isTestCaseClass(node);
190
504
  const kind = isTest ? "test_suite" : "class";
191
505
  const docstring = getDocstring(node, source);
192
- const sym = makeSymbol(node, name, kind, filePath, source, repo, {
506
+ const extendsList = collectClassExtends(node);
507
+ const implementsList = collectClassImplements(node);
508
+ const body = node.childForFieldName("body");
509
+ const traitUses = collectTraitUses(body);
510
+ const modifiers = collectModifiers(node);
511
+ const attributes = parseAttributes(node);
512
+ const meta = {};
513
+ if (modifiers.is_abstract)
514
+ meta.is_abstract = true;
515
+ if (modifiers.is_final)
516
+ meta.is_final = true;
517
+ if (modifiers.is_readonly)
518
+ meta.is_readonly = true;
519
+ if (traitUses.length > 0)
520
+ meta.uses_traits = traitUses;
521
+ if (attributes.length > 0)
522
+ meta.attributes = attributes;
523
+ const opts = {
193
524
  parentId,
194
525
  docstring,
195
- });
526
+ };
527
+ if (extendsList.length > 0)
528
+ opts.extends = extendsList;
529
+ if (implementsList.length > 0)
530
+ opts.implements = implementsList;
531
+ if (Object.keys(meta).length > 0)
532
+ opts.meta = meta;
533
+ const sym = makeSymbol(node, name, kind, filePath, source, repo, opts);
196
534
  symbols.push(sym);
197
535
  // Walk class body FIRST so real methods/fields are in `symbols`
198
536
  // before dedup runs for synthetic @property/@method tags.
199
- const body = node.childForFieldName("body");
200
537
  if (body) {
201
538
  for (const child of body.namedChildren) {
202
539
  walk(child, sym.id, isTest);
@@ -208,10 +545,20 @@ export function extractPhpSymbols(tree, filePath, source, repo) {
208
545
  case "interface_declaration": {
209
546
  const name = getNodeName(node) ?? "<anonymous>";
210
547
  const docstring = getDocstring(node, source);
211
- const sym = makeSymbol(node, name, "interface", filePath, source, repo, {
548
+ const extendsList = collectClassExtends(node);
549
+ const attributes = parseAttributes(node);
550
+ const meta = {};
551
+ if (attributes.length > 0)
552
+ meta.attributes = attributes;
553
+ const opts = {
212
554
  parentId,
213
555
  docstring,
214
- });
556
+ };
557
+ if (extendsList.length > 0)
558
+ opts.extends = extendsList;
559
+ if (Object.keys(meta).length > 0)
560
+ opts.meta = meta;
561
+ const sym = makeSymbol(node, name, "interface", filePath, source, repo, opts);
215
562
  symbols.push(sym);
216
563
  const body = node.childForFieldName("body");
217
564
  if (body) {
@@ -225,12 +572,22 @@ export function extractPhpSymbols(tree, filePath, source, repo) {
225
572
  case "trait_declaration": {
226
573
  const name = getNodeName(node) ?? "<anonymous>";
227
574
  const docstring = getDocstring(node, source);
228
- const sym = makeSymbol(node, name, "type", filePath, source, repo, {
575
+ const body = node.childForFieldName("body");
576
+ const traitUses = collectTraitUses(body);
577
+ const attributes = parseAttributes(node);
578
+ const meta = {};
579
+ if (traitUses.length > 0)
580
+ meta.uses_traits = traitUses;
581
+ if (attributes.length > 0)
582
+ meta.attributes = attributes;
583
+ const opts = {
229
584
  parentId,
230
585
  docstring,
231
- });
586
+ };
587
+ if (Object.keys(meta).length > 0)
588
+ opts.meta = meta;
589
+ const sym = makeSymbol(node, name, "type", filePath, source, repo, opts);
232
590
  symbols.push(sym);
233
- const body = node.childForFieldName("body");
234
591
  if (body) {
235
592
  for (const child of body.namedChildren) {
236
593
  walk(child, sym.id, false);
@@ -241,12 +598,42 @@ export function extractPhpSymbols(tree, filePath, source, repo) {
241
598
  }
242
599
  case "enum_declaration": {
243
600
  const name = getNodeName(node) ?? "<anonymous>";
244
- const sym = makeSymbol(node, name, "enum", filePath, source, repo, {
601
+ // PHP 8.1 backed enum: `enum Status: string {…}`. The backing type
602
+ // appears as a `primitive_type` direct child of enum_declaration,
603
+ // sitting between the name and the body. Capture it so downstream
604
+ // tools (e.g. M1 enum-from-class-consts migration assist) can tell
605
+ // backed from pure enums.
606
+ let backedType;
607
+ for (const child of node.namedChildren) {
608
+ if (child.type === "primitive_type") {
609
+ backedType = child.text.trim();
610
+ break;
611
+ }
612
+ }
613
+ // PHP 8.1 enums can implement interfaces too.
614
+ const implementsList = collectClassImplements(node);
615
+ const attributes = parseAttributes(node);
616
+ const meta = {};
617
+ if (backedType)
618
+ meta.backed_type = backedType;
619
+ if (attributes.length > 0)
620
+ meta.attributes = attributes;
621
+ const opts = {
245
622
  parentId,
246
623
  docstring: getDocstring(node, source),
247
- });
624
+ };
625
+ if (implementsList.length > 0)
626
+ opts.implements = implementsList;
627
+ if (Object.keys(meta).length > 0)
628
+ opts.meta = meta;
629
+ const sym = makeSymbol(node, name, "enum", filePath, source, repo, opts);
248
630
  symbols.push(sym);
249
- const body = node.childForFieldName("body");
631
+ // tree-sitter-php uses `enum_declaration_list` for the body container,
632
+ // not `body`. Try field name first for forward-compat, fall back to
633
+ // the named child lookup.
634
+ const body = node.childForFieldName("body") ??
635
+ node.namedChildren.find((c) => c.type === "enum_declaration_list") ??
636
+ null;
250
637
  if (body) {
251
638
  for (const child of body.namedChildren) {
252
639
  walk(child, sym.id, false);
@@ -271,22 +658,49 @@ export function extractPhpSymbols(tree, filePath, source, repo) {
271
658
  if (name) {
272
659
  const docstring = getDocstring(node, source);
273
660
  const kind = classifyMethod(name, parentIsTest, docstring);
274
- const sym = makeSymbol(node, name, kind, filePath, source, repo, {
661
+ const modifiers = collectModifiers(node);
662
+ const attributes = parseAttributes(node);
663
+ const meta = {};
664
+ if (modifiers.visibility)
665
+ meta.visibility = modifiers.visibility;
666
+ if (modifiers.is_static)
667
+ meta.is_static = true;
668
+ if (modifiers.is_abstract)
669
+ meta.is_abstract = true;
670
+ if (modifiers.is_final)
671
+ meta.is_final = true;
672
+ if (attributes.length > 0)
673
+ meta.attributes = attributes;
674
+ const opts = {
275
675
  parentId,
276
676
  docstring,
277
677
  signature: getSignature(node, source),
278
- });
678
+ };
679
+ if (Object.keys(meta).length > 0)
680
+ opts.meta = meta;
681
+ const sym = makeSymbol(node, name, kind, filePath, source, repo, opts);
279
682
  symbols.push(sym);
683
+ // Promoted constructor params (PHP 8.0+): the body has no field
684
+ // declarations for these, so synthesize them as `field` symbols
685
+ // attached to the parent class. Only fires for __construct.
686
+ if (name === "__construct" && parentId) {
687
+ emitPromotedCtorFields(node, parentId);
688
+ }
280
689
  }
281
690
  return;
282
691
  }
283
692
  case "property_declaration": {
284
693
  const propName = getPropertyName(node);
285
694
  if (propName) {
286
- const sym = makeSymbol(node, propName, "field", filePath, source, repo, {
695
+ const docstring = getDocstring(node, source);
696
+ const meta = buildPropertyMeta(node, docstring);
697
+ const opts = {
287
698
  parentId,
288
- docstring: getDocstring(node, source),
289
- });
699
+ docstring,
700
+ };
701
+ if (Object.keys(meta).length > 0)
702
+ opts.meta = meta;
703
+ const sym = makeSymbol(node, propName, "field", filePath, source, repo, opts);
290
704
  symbols.push(sym);
291
705
  }
292
706
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"php.js","sourceRoot":"","sources":["../../../src/parser/extractors/php.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEvD,4BAA4B;AAE5B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAC7B,SAAkB;IAElB,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAuE,EAAE,CAAC;IAEvF,MAAM,MAAM,GAAG,+CAA+C,CAAC;IAC/D,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAqD;YAC9D,GAAG,EAAE,UAAU;YACf,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE;SACZ,CAAC;QACF,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,kCAAkC;IAClC,gEAAgE;IAChE,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,oCAAoC,CAAC;IACtD,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAmD;YAC5D,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE;SACZ,CAAC;QACF,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,kBAAkB;AAElB;;;GAGG;AACH,SAAS,YAAY,CACnB,IAAuB,EACvB,MAAc;IAEd,IAAI,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC;IAErC,qEAAqE;IACrE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,qBAAqB,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,EAAE,CAAC;QACvF,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAEvD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE9C,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CACnB,IAAuB,EACvB,MAAc;IAEd,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE3D,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACzD,IAAI,UAAU,EAAE,CAAC;QACf,GAAG,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAuB;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACzD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;IAC7C,CAAC;IAED,wDAAwD;IACxD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,IAAY,EACZ,YAAqB,EACrB,SAA6B;IAE7B,aAAa;IACb,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;IAC9E,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,WAAW,CAAC;IAE7C,+DAA+D;IAC/D,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,WAAW,CAAC;QAChD,IAAI,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,WAAW,CAAC;IACvD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,IAAuB;IAC9C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACtC,uBAAuB;YACvB,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;YAC1E,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;gBACpE,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yBAAyB;AAEzB,MAAM,UAAU,iBAAiB,CAC/B,IAAiB,EACjB,QAAgB,EAChB,MAAc,EACd,IAAY;IAEZ,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,yEAAyE;IACzE,2EAA2E;IAC3E,6DAA6D;IAC7D,uEAAuE;IACvE,2EAA2E;IAC3E,qEAAqE;IACrE,SAAS,uBAAuB,CAC9B,IAAuB,EACvB,MAAkB,EAClB,SAA6B;QAE7B,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QACxC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,UAAU,GAAe,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC3E,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE;gBACtB,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI;gBACnB,CAAC,CAAC,IAAI,KAAK,UAAU;gBACrB,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CACrB,CAAC;YACF,IAAI,UAAU;gBAAE,SAAS;YACzB,MAAM,OAAO,GAIT;gBACF,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;aAC1B,CAAC;YACF,IAAI,GAAG,CAAC,IAAI;gBAAE,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC;YAC3C,MAAM,SAAS,GAAG,UAAU,CAC1B,IAAI,EACJ,GAAG,CAAC,IAAI,EACR,UAAU,EACV,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,OAAO,CACR,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,SAAS,IAAI,CAAC,IAAuB,EAAE,QAAiB,EAAE,YAAY,GAAG,KAAK;QAC5E,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAChD,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,IAAI,aAAa,CAAC;gBAC7C,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;oBACtE,QAAQ;iBACT,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAElB,qCAAqC;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;wBACvC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,6DAA6D;oBAC7D,iEAAiE;oBACjE,wEAAwE;oBACxE,kEAAkE;gBACpE,CAAC;gBACD,OAAO;YACT,CAAC;YAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC;gBAChD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;gBACrC,MAAM,IAAI,GAAe,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;gBACzD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC7C,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;oBAC/D,QAAQ;oBACR,SAAS;iBACV,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAElB,gEAAgE;gBAChE,0DAA0D;gBAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;wBACvC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC;gBAED,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YAED,KAAK,uBAAuB,CAAC,CAAC,CAAC;gBAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC;gBAChD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC7C,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;oBACtE,QAAQ;oBACR,SAAS;iBACV,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAElB,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;wBACvC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;gBAED,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC;gBAChD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC7C,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;oBACjE,QAAQ;oBACR,SAAS;iBACV,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAElB,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;wBACvC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;gBAED,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC;gBAChD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;oBACjE,QAAQ;oBACR,SAAS,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;iBACtC,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAElB,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;wBACvC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;gBACD,OAAO;YACT,CAAC;YAED,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;wBACrE,QAAQ;wBACR,SAAS,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;wBACrC,SAAS,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;qBACtC,CAAC,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;gBACD,OAAO;YACT,CAAC;YAED,KAAK,oBAAoB,CAAC,CAAC,CAAC;gBAC1B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBAC7C,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;oBAC3D,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;wBAC/D,QAAQ;wBACR,SAAS;wBACT,SAAS,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;qBACtC,CAAC,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;gBACD,OAAO;YACT,CAAC;YAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;wBACtE,QAAQ;wBACR,SAAS,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;qBACtC,CAAC,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;gBACD,OAAO;YACT,CAAC;YAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,0DAA0D;gBAC1D,2CAA2C;gBAC3C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvC,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;wBACnC,8EAA8E;wBAC9E,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;wBAClE,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,CAAC;wBAC5B,IAAI,IAAI,EAAE,CAAC;4BACT,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;gCACtE,QAAQ;gCACR,SAAS,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;6BACtC,CAAC,CAAC;4BACH,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACpB,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAO;YACT,CAAC;YAED,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;wBACrE,QAAQ;qBACT,CAAC,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;gBACD,OAAO;YACT,CAAC;YAED;gBACE,MAAM;QACV,CAAC;QAED,yBAAyB;QACzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpB,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"php.js","sourceRoot":"","sources":["../../../src/parser/extractors/php.ts"],"names":[],"mappings":"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"}
@@ -383,12 +383,11 @@ export function extractPythonSymbols(tree, filePath, source, repo) {
383
383
  const message = err instanceof Error ? err.message : String(err);
384
384
  console.warn(`[python-extractor] walk failed for ${filePath} (${symbols.length} symbols collected, partial): ${message}`);
385
385
  }
386
- // Tag partial results so callers can detect incomplete extraction
386
+ // Tag partial results on every symbol so metadata is not arbitrary (first-row only)
387
387
  if (partial && symbols.length > 0) {
388
- const first = symbols[0];
389
- if (!first.meta)
390
- first.meta = {};
391
- first.meta.partial_extraction = true;
388
+ for (const sym of symbols) {
389
+ sym.meta = { ...(sym.meta ?? {}), partial_extraction: true };
390
+ }
392
391
  }
393
392
  return symbols;
394
393
  }