mcp-code-context 2.6.0 → 3.0.4

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 (128) hide show
  1. package/CHANGELOG.md +92 -260
  2. package/README.md +304 -298
  3. package/dist/src/core/engine.d.ts +21 -0
  4. package/dist/src/core/engine.js +68 -0
  5. package/dist/src/core/engine.js.map +1 -0
  6. package/dist/src/core/validator.d.ts +15 -0
  7. package/dist/src/core/validator.js +44 -0
  8. package/dist/src/core/validator.js.map +1 -0
  9. package/dist/src/index.d.ts +7 -11
  10. package/dist/src/index.js +182 -397
  11. package/dist/src/index.js.map +1 -1
  12. package/dist/src/operations/write.d.ts +51 -0
  13. package/dist/src/operations/write.js +169 -0
  14. package/dist/src/operations/write.js.map +1 -0
  15. package/dist/src/parsers/base.d.ts +28 -0
  16. package/dist/src/parsers/base.js +27 -0
  17. package/dist/src/parsers/base.js.map +1 -0
  18. package/dist/src/parsers/dartTreeSitter.d.ts +13 -0
  19. package/dist/src/parsers/dartTreeSitter.js +91 -0
  20. package/dist/src/parsers/dartTreeSitter.js.map +1 -0
  21. package/dist/src/parsers/php.d.ts +12 -0
  22. package/dist/src/parsers/php.js +86 -0
  23. package/dist/src/parsers/php.js.map +1 -0
  24. package/dist/src/parsers/python.d.ts +12 -0
  25. package/dist/src/parsers/python.js +86 -0
  26. package/dist/src/parsers/python.js.map +1 -0
  27. package/dist/src/parsers/registry.d.ts +15 -0
  28. package/dist/src/parsers/registry.js +70 -0
  29. package/dist/src/parsers/registry.js.map +1 -0
  30. package/dist/src/parsers/typescript.d.ts +13 -0
  31. package/dist/src/parsers/typescript.js +98 -0
  32. package/dist/src/parsers/typescript.js.map +1 -0
  33. package/llms.txt +246 -236
  34. package/mcp-code-context-3.0.2.tgz +0 -0
  35. package/package.json +59 -57
  36. package/tsconfig.tests.json +27 -0
  37. package/.io/RULES.md +0 -12
  38. package/CONTRIBUTING.md +0 -243
  39. package/TROUBLESHOOTING.md +0 -38
  40. package/dist/src/ast/dartCompressor.d.ts +0 -27
  41. package/dist/src/ast/dartCompressor.js +0 -859
  42. package/dist/src/ast/dartCompressor.js.map +0 -1
  43. package/dist/src/ast/phpCompressor.d.ts +0 -24
  44. package/dist/src/ast/phpCompressor.js +0 -634
  45. package/dist/src/ast/phpCompressor.js.map +0 -1
  46. package/dist/src/ast/semanticCompressor.d.ts +0 -22
  47. package/dist/src/ast/semanticCompressor.js +0 -677
  48. package/dist/src/ast/semanticCompressor.js.map +0 -1
  49. package/dist/src/ast/writers/dartWriter.d.ts +0 -37
  50. package/dist/src/ast/writers/dartWriter.js +0 -544
  51. package/dist/src/ast/writers/dartWriter.js.map +0 -1
  52. package/dist/src/ast/writers/phpWriter.d.ts +0 -37
  53. package/dist/src/ast/writers/phpWriter.js +0 -411
  54. package/dist/src/ast/writers/phpWriter.js.map +0 -1
  55. package/dist/src/ast/writers/pyWriter.d.ts +0 -37
  56. package/dist/src/ast/writers/pyWriter.js +0 -355
  57. package/dist/src/ast/writers/pyWriter.js.map +0 -1
  58. package/dist/src/ast/writers/safeRename.d.ts +0 -14
  59. package/dist/src/ast/writers/safeRename.js +0 -258
  60. package/dist/src/ast/writers/safeRename.js.map +0 -1
  61. package/dist/src/ast/writers/symbolWriter.d.ts +0 -64
  62. package/dist/src/ast/writers/symbolWriter.js +0 -174
  63. package/dist/src/ast/writers/symbolWriter.js.map +0 -1
  64. package/dist/src/ast/writers/tsWriter.d.ts +0 -38
  65. package/dist/src/ast/writers/tsWriter.js +0 -344
  66. package/dist/src/ast/writers/tsWriter.js.map +0 -1
  67. package/dist/src/cache/astCache.d.ts +0 -39
  68. package/dist/src/cache/astCache.js +0 -169
  69. package/dist/src/cache/astCache.js.map +0 -1
  70. package/dist/src/handlers/readHandlers.d.ts +0 -70
  71. package/dist/src/handlers/readHandlers.js +0 -455
  72. package/dist/src/handlers/readHandlers.js.map +0 -1
  73. package/dist/src/handlers/utilHandlers.d.ts +0 -31
  74. package/dist/src/handlers/utilHandlers.js +0 -69
  75. package/dist/src/handlers/utilHandlers.js.map +0 -1
  76. package/dist/src/handlers/writeHandlers.d.ts +0 -57
  77. package/dist/src/handlers/writeHandlers.js +0 -499
  78. package/dist/src/handlers/writeHandlers.js.map +0 -1
  79. package/dist/src/tools/readFileLines.d.ts +0 -26
  80. package/dist/src/tools/readFileLines.js +0 -77
  81. package/dist/src/tools/readFileLines.js.map +0 -1
  82. package/dist/src/tools/searchCodePattern.d.ts +0 -37
  83. package/dist/src/tools/searchCodePattern.js +0 -144
  84. package/dist/src/tools/searchCodePattern.js.map +0 -1
  85. package/dist/src/utils/arrayUtils.d.ts +0 -12
  86. package/dist/src/utils/arrayUtils.js +0 -27
  87. package/dist/src/utils/arrayUtils.js.map +0 -1
  88. package/dist/src/utils/backupManager.d.ts +0 -31
  89. package/dist/src/utils/backupManager.js +0 -124
  90. package/dist/src/utils/backupManager.js.map +0 -1
  91. package/dist/src/utils/confirmationCache.d.ts +0 -16
  92. package/dist/src/utils/confirmationCache.js +0 -40
  93. package/dist/src/utils/confirmationCache.js.map +0 -1
  94. package/dist/src/utils/constants.d.ts +0 -46
  95. package/dist/src/utils/constants.js +0 -112
  96. package/dist/src/utils/constants.js.map +0 -1
  97. package/dist/src/utils/dependencyChecker.d.ts +0 -1
  98. package/dist/src/utils/dependencyChecker.js +0 -55
  99. package/dist/src/utils/dependencyChecker.js.map +0 -1
  100. package/dist/src/utils/diffEngine.d.ts +0 -21
  101. package/dist/src/utils/diffEngine.js +0 -163
  102. package/dist/src/utils/diffEngine.js.map +0 -1
  103. package/dist/src/utils/fuzzyMatch.d.ts +0 -8
  104. package/dist/src/utils/fuzzyMatch.js +0 -70
  105. package/dist/src/utils/fuzzyMatch.js.map +0 -1
  106. package/dist/src/utils/ignoreManager.d.ts +0 -29
  107. package/dist/src/utils/ignoreManager.js +0 -144
  108. package/dist/src/utils/ignoreManager.js.map +0 -1
  109. package/dist/src/utils/normalization.d.ts +0 -49
  110. package/dist/src/utils/normalization.js +0 -173
  111. package/dist/src/utils/normalization.js.map +0 -1
  112. package/dist/src/utils/projectRoot.d.ts +0 -17
  113. package/dist/src/utils/projectRoot.js +0 -42
  114. package/dist/src/utils/projectRoot.js.map +0 -1
  115. package/dist/src/utils/secureValidation.d.ts +0 -15
  116. package/dist/src/utils/secureValidation.js +0 -41
  117. package/dist/src/utils/secureValidation.js.map +0 -1
  118. package/dist/src/utils/syntaxValidator.d.ts +0 -15
  119. package/dist/src/utils/syntaxValidator.js +0 -218
  120. package/dist/src/utils/syntaxValidator.js.map +0 -1
  121. package/dist/src/utils/transactionManager.d.ts +0 -46
  122. package/dist/src/utils/transactionManager.js +0 -123
  123. package/dist/src/utils/transactionManager.js.map +0 -1
  124. package/dist/src/utils/validation.d.ts +0 -87
  125. package/dist/src/utils/validation.js +0 -231
  126. package/dist/src/utils/validation.js.map +0 -1
  127. package/docs/ARCHITECTURE.md +0 -300
  128. package/docs/architecture/ADR-001-modular-handlers.md +0 -119
@@ -1,634 +0,0 @@
1
- /**
2
- * phpCompressor — AST-based PHP semantic compressor.
3
- *
4
- * Uses the `php-parser` npm package (Glayzzle) to parse PHP source code
5
- * into a real Abstract Syntax Tree, then extracts only structural
6
- * signatures: namespaces, use statements, classes, interfaces, traits,
7
- * enums, functions, methods, properties, and constants — stripping all
8
- * implementation bodies.
9
- *
10
- * This gives PHP the same first-class treatment that TypeScript gets
11
- * via ts-morph: true AST parsing, not regex hacks.
12
- */
13
- import { createRequire } from "node:module";
14
- // php-parser is a CJS package — use createRequire for ESM compatibility
15
- const require = createRequire(import.meta.url);
16
- const Engine = require("php-parser");
17
- // ─── Singleton Parser ──────────────────────────────────────────────
18
- let _parser = null;
19
- function getParser() {
20
- if (!_parser) {
21
- _parser = new Engine({
22
- parser: {
23
- extractDoc: true,
24
- php7: true,
25
- php8: true,
26
- suppressErrors: true,
27
- },
28
- ast: {
29
- withPositions: true,
30
- withSource: false,
31
- },
32
- });
33
- }
34
- return _parser;
35
- }
36
- // ─── Public API ────────────────────────────────────────────────────
37
- /**
38
- * Compress a PHP file into its semantic skeleton.
39
- * Returns only structural signatures — no function/method bodies.
40
- */
41
- export function compressPHP(content) {
42
- const parser = getParser();
43
- let ast;
44
- try {
45
- ast = parser.parseCode(content, "file.php");
46
- }
47
- catch {
48
- // If parsing fails, return a truncated preview
49
- const lines = content.split("\n");
50
- if (lines.length > 80) {
51
- return [
52
- "// ⚠️ PHP AST parsing failed — showing first 60 lines",
53
- "",
54
- ...lines.slice(0, 60),
55
- "",
56
- `// ... (${lines.length - 60} more lines truncated)`,
57
- ].join("\n");
58
- }
59
- return content;
60
- }
61
- const result = [];
62
- processNode(ast, result, 0);
63
- return result.join("\n");
64
- }
65
- /**
66
- * Extract the full source code of a named symbol from a PHP file.
67
- * Supports classes, interfaces, traits, enums, functions, and methods.
68
- * When className is provided, scopes method search to within that class only.
69
- * Returns null if the symbol is not found.
70
- */
71
- export function extractPHPSymbol(content, symbolName, className) {
72
- const parser = getParser();
73
- let ast;
74
- try {
75
- ast = parser.parseCode(content, "file.php");
76
- }
77
- catch {
78
- return null;
79
- }
80
- const lines = content.split("\n");
81
- const node = findSymbolNode(ast, symbolName, className);
82
- if (!node || !node.loc) {
83
- return null;
84
- }
85
- // Extract lines from source using the node's location
86
- const startLine = node.loc.start.line - 1; // 0-indexed
87
- const endLine = node.loc.end.line; // exclusive
88
- // For class-level symbols, also capture leading docblock
89
- let actualStart = startLine;
90
- if (node.leadingComments && node.leadingComments.length > 0) {
91
- // Walk backward from startLine to find the docblock
92
- for (let i = startLine - 1; i >= 0; i--) {
93
- const trimmed = lines[i].trim();
94
- if (trimmed.startsWith("/**") ||
95
- trimmed.startsWith("*") ||
96
- trimmed.startsWith("*/") ||
97
- trimmed.startsWith("//") ||
98
- trimmed.startsWith("#[")) {
99
- actualStart = i;
100
- }
101
- else if (trimmed === "") {
102
- continue;
103
- }
104
- else {
105
- break;
106
- }
107
- }
108
- }
109
- const extracted = lines.slice(actualStart, endLine);
110
- // Trim trailing empty lines
111
- while (extracted.length > 0 && extracted[extracted.length - 1].trim() === "") {
112
- extracted.pop();
113
- }
114
- return extracted.join("\n");
115
- }
116
- // ─── AST Traversal & Compression ───────────────────────────────────
117
- function processNode(node, result, depth) {
118
- if (!node)
119
- return;
120
- switch (node.kind) {
121
- case "program":
122
- processChildren(node, result, depth);
123
- break;
124
- case "namespace":
125
- processNamespace(node, result, depth);
126
- break;
127
- case "usegroup":
128
- processUseGroup(node, result, depth);
129
- break;
130
- case "class":
131
- processClass(node, result, depth);
132
- break;
133
- case "interface":
134
- processInterface(node, result, depth);
135
- break;
136
- case "trait":
137
- processTrait(node, result, depth);
138
- break;
139
- case "enum":
140
- processEnum(node, result, depth);
141
- break;
142
- case "function":
143
- processFunction(node, result, depth);
144
- break;
145
- case "expressionstatement":
146
- // Top-level expressions (e.g., define('CONST', value))
147
- processExpression(node, result, depth);
148
- break;
149
- case "if":
150
- // Top-level guards like: if (!defined('ABSPATH')) exit;
151
- // Skip these — they're boilerplate
152
- break;
153
- default:
154
- // Other top-level nodes we don't care about for compression
155
- break;
156
- }
157
- }
158
- function processChildren(node, result, depth) {
159
- const children = node.children || node.body;
160
- if (Array.isArray(children)) {
161
- for (const child of children) {
162
- processNode(child, result, depth);
163
- }
164
- }
165
- }
166
- // ─── Namespace ─────────────────────────────────────────────────────
167
- function processNamespace(node, result, depth) {
168
- const name = getNodeName(node);
169
- if (name) {
170
- result.push(`namespace ${name};`);
171
- result.push("");
172
- }
173
- // Process use statements first, then other declarations
174
- const children = node.children || [];
175
- const useGroups = [];
176
- const declarations = [];
177
- for (const child of children) {
178
- if (child.kind === "usegroup") {
179
- useGroups.push(child);
180
- }
181
- else {
182
- declarations.push(child);
183
- }
184
- }
185
- // Emit use statements
186
- if (useGroups.length > 0) {
187
- for (const ug of useGroups) {
188
- processUseGroup(ug, result, depth);
189
- }
190
- result.push("");
191
- }
192
- // Emit declarations
193
- for (const decl of declarations) {
194
- processNode(decl, result, depth);
195
- }
196
- }
197
- // ─── Use Statements ────────────────────────────────────────────────
198
- function processUseGroup(node, result, _depth) {
199
- const items = node.items || [];
200
- for (const item of items) {
201
- const name = getNodeName(item);
202
- if (name) {
203
- const alias = item.aliases && item.aliases.length > 0
204
- ? ` as ${getNodeName(item.aliases[0])}`
205
- : "";
206
- result.push(`use ${name}${alias};`);
207
- }
208
- }
209
- }
210
- // ─── Class ─────────────────────────────────────────────────────────
211
- function processClass(node, result, depth) {
212
- const indent = makeIndent(depth);
213
- // Emit docblock
214
- emitDocBlock(node, result, indent);
215
- // Build class header
216
- const parts = [];
217
- if (node.isAbstract)
218
- parts.push("abstract");
219
- if (node.isFinal)
220
- parts.push("final");
221
- if (node.isReadonly)
222
- parts.push("readonly");
223
- parts.push("class");
224
- parts.push(getNodeName(node));
225
- if (node.extends) {
226
- const extName = getNodeName(node.extends);
227
- if (extName)
228
- parts.push(`extends ${extName}`);
229
- }
230
- if (node.implements && node.implements.length > 0) {
231
- const impls = node.implements.map((i) => getNodeName(i)).filter(Boolean);
232
- if (impls.length > 0)
233
- parts.push(`implements ${impls.join(", ")}`);
234
- }
235
- result.push(`${indent}${parts.join(" ")} {`);
236
- // Process class body
237
- const body = Array.isArray(node.body) ? node.body : [];
238
- processClassBody(body, result, depth + 1);
239
- result.push(`${indent}}`);
240
- result.push("");
241
- }
242
- // ─── Interface ─────────────────────────────────────────────────────
243
- function processInterface(node, result, depth) {
244
- const indent = makeIndent(depth);
245
- emitDocBlock(node, result, indent);
246
- const parts = ["interface", getNodeName(node)];
247
- if (node.extends && Array.isArray(node.extends) && node.extends.length > 0) {
248
- const exts = node.extends.map((e) => getNodeName(e)).filter(Boolean);
249
- if (exts.length > 0)
250
- parts.push(`extends ${exts.join(", ")}`);
251
- }
252
- result.push(`${indent}${parts.join(" ")} {`);
253
- const body = Array.isArray(node.body) ? node.body : [];
254
- processClassBody(body, result, depth + 1);
255
- result.push(`${indent}}`);
256
- result.push("");
257
- }
258
- // ─── Trait ─────────────────────────────────────────────────────────
259
- function processTrait(node, result, depth) {
260
- const indent = makeIndent(depth);
261
- emitDocBlock(node, result, indent);
262
- result.push(`${indent}trait ${getNodeName(node)} {`);
263
- const body = Array.isArray(node.body) ? node.body : [];
264
- processClassBody(body, result, depth + 1);
265
- result.push(`${indent}}`);
266
- result.push("");
267
- }
268
- // ─── Enum ──────────────────────────────────────────────────────────
269
- function processEnum(node, result, depth) {
270
- const indent = makeIndent(depth);
271
- const innerIndent = makeIndent(depth + 1);
272
- emitDocBlock(node, result, indent);
273
- let header = `enum ${getNodeName(node)}`;
274
- // Backing type (e.g., enum Color: string)
275
- if (node.valueType) {
276
- const backingType = typeof node.valueType === "string"
277
- ? node.valueType
278
- : getNodeName(node.valueType);
279
- if (backingType)
280
- header += `: ${backingType}`;
281
- }
282
- if (node.implements && node.implements.length > 0) {
283
- const impls = node.implements.map((i) => getNodeName(i)).filter(Boolean);
284
- if (impls.length > 0)
285
- header += ` implements ${impls.join(", ")}`;
286
- }
287
- result.push(`${indent}${header} {`);
288
- // Emit cases
289
- const body = Array.isArray(node.body) ? node.body : [];
290
- for (const member of body) {
291
- if (member.kind === "enumcase") {
292
- const caseName = getNodeName(member);
293
- if (member.value) {
294
- const val = extractLiteralValue(member.value);
295
- result.push(`${innerIndent}case ${caseName} = ${val};`);
296
- }
297
- else {
298
- result.push(`${innerIndent}case ${caseName};`);
299
- }
300
- }
301
- else if (member.kind === "method") {
302
- processMethod(member, result, depth + 1);
303
- }
304
- else if (member.kind === "classconstant") {
305
- processClassConstant(member, result, depth + 1);
306
- }
307
- else if (member.kind === "traituse") {
308
- processTraitUse(member, result, depth + 1);
309
- }
310
- }
311
- result.push(`${indent}}`);
312
- result.push("");
313
- }
314
- // ─── Class Body (shared by class, interface, trait) ────────────────
315
- function processClassBody(body, result, depth) {
316
- // Group members by type for clean output
317
- const traitUses = [];
318
- const constants = [];
319
- const properties = [];
320
- const methods = [];
321
- for (const member of body) {
322
- switch (member.kind) {
323
- case "traituse":
324
- traitUses.push(member);
325
- break;
326
- case "classconstant":
327
- constants.push(member);
328
- break;
329
- case "propertystatement":
330
- properties.push(member);
331
- break;
332
- case "method":
333
- methods.push(member);
334
- break;
335
- default:
336
- // Other node types we might encounter
337
- break;
338
- }
339
- }
340
- // Emit trait uses first
341
- for (const tu of traitUses) {
342
- processTraitUse(tu, result, depth);
343
- }
344
- // Then constants
345
- for (const c of constants) {
346
- processClassConstant(c, result, depth);
347
- }
348
- // Then properties
349
- for (const p of properties) {
350
- processProperty(p, result, depth);
351
- }
352
- // Then methods (signature only)
353
- for (const m of methods) {
354
- processMethod(m, result, depth);
355
- }
356
- }
357
- // ─── Trait Use ──────────────────────────────────────────────────────
358
- function processTraitUse(node, result, depth) {
359
- const indent = makeIndent(depth);
360
- const traits = node.traits || [];
361
- const names = traits.map((t) => getNodeName(t)).filter(Boolean);
362
- if (names.length > 0) {
363
- result.push(`${indent}use ${names.join(", ")};`);
364
- }
365
- }
366
- // ─── Class Constants ───────────────────────────────────────────────
367
- function processClassConstant(node, result, depth) {
368
- const indent = makeIndent(depth);
369
- const vis = node.visibility ? `${node.visibility} ` : "";
370
- const constants = node.constants || [];
371
- for (const c of constants) {
372
- const name = getNodeName(c);
373
- const val = c.value ? extractLiteralValue(c.value) : "/* ... */";
374
- emitDocBlock(node, result, indent);
375
- result.push(`${indent}${vis}const ${name} = ${val};`);
376
- }
377
- }
378
- // ─── Properties ────────────────────────────────────────────────────
379
- function processProperty(node, result, depth) {
380
- const indent = makeIndent(depth);
381
- const vis = node.visibility ? `${node.visibility} ` : "";
382
- const isStatic = node.isStatic ? "static " : "";
383
- const isReadonly = node.isReadonly ? "readonly " : "";
384
- emitDocBlock(node, result, indent);
385
- const properties = node.properties || [];
386
- for (const prop of properties) {
387
- const name = getNodeName(prop);
388
- const typeName = node.type ? buildTypeString(node.type) + " " : "";
389
- const nullable = node.nullable ? "?" : "";
390
- const defaultVal = prop.value ? ` = ${extractLiteralValue(prop.value)}` : "";
391
- result.push(`${indent}${vis}${isStatic}${isReadonly}${nullable}${typeName}$${name}${defaultVal};`);
392
- }
393
- }
394
- // ─── Methods ───────────────────────────────────────────────────────
395
- function processMethod(node, result, depth) {
396
- const indent = makeIndent(depth);
397
- emitDocBlock(node, result, indent);
398
- const parts = [];
399
- if (node.isAbstract)
400
- parts.push("abstract");
401
- if (node.visibility)
402
- parts.push(node.visibility);
403
- if (node.isStatic)
404
- parts.push("static");
405
- parts.push("function");
406
- const name = getNodeName(node);
407
- const params = buildParameterList(node);
408
- const returnType = buildReturnType(node);
409
- if (node.isAbstract) {
410
- result.push(`${indent}${parts.join(" ")} ${name}(${params})${returnType};`);
411
- }
412
- else {
413
- result.push(`${indent}${parts.join(" ")} ${name}(${params})${returnType} { /* ... */ }`);
414
- }
415
- }
416
- // ─── Top-level Functions ───────────────────────────────────────────
417
- function processFunction(node, result, depth) {
418
- const indent = makeIndent(depth);
419
- emitDocBlock(node, result, indent);
420
- const name = getNodeName(node);
421
- const params = buildParameterList(node);
422
- const returnType = buildReturnType(node);
423
- result.push(`${indent}function ${name}(${params})${returnType} { /* ... */ }`);
424
- result.push("");
425
- }
426
- // ─── Expressions (define, etc.) ────────────────────────────────────
427
- function processExpression(node, result, _depth) {
428
- // Look for define() calls
429
- const expr = node.expression;
430
- if (!expr)
431
- return;
432
- if (expr.kind === "call") {
433
- const callName = getNodeName(expr);
434
- if (callName === "define" && expr.arguments && expr.arguments.length >= 2) {
435
- const constName = extractLiteralValue(expr.arguments[0]);
436
- const constVal = extractLiteralValue(expr.arguments[1]);
437
- result.push(`define(${constName}, ${constVal});`);
438
- }
439
- }
440
- }
441
- // ─── Parameter List Builder ────────────────────────────────────────
442
- function buildParameterList(node) {
443
- const args = node.arguments || [];
444
- return args
445
- .filter((a) => a.kind === "parameter")
446
- .map((param) => {
447
- const parts = [];
448
- // Visibility for promoted properties (PHP 8.0+)
449
- if (param.visibility)
450
- parts.push(param.visibility);
451
- if (param.isReadonly)
452
- parts.push("readonly");
453
- // Type
454
- if (param.type) {
455
- const nullable = param.nullable ? "?" : "";
456
- parts.push(nullable + buildTypeString(param.type));
457
- }
458
- // Variadic
459
- const variadic = param.variadic ? "..." : "";
460
- const byref = param.byref ? "&" : "";
461
- parts.push(`${byref}${variadic}$${getNodeName(param)}`);
462
- // Default value
463
- if (param.value) {
464
- const val = extractLiteralValue(param.value);
465
- parts.push(`= ${val}`);
466
- }
467
- return parts.join(" ");
468
- })
469
- .join(", ");
470
- }
471
- // ─── Return Type Builder ───────────────────────────────────────────
472
- function buildReturnType(node) {
473
- if (!node.type)
474
- return "";
475
- const nullable = node.nullable ? "?" : "";
476
- return `: ${nullable}${buildTypeString(node.type)}`;
477
- }
478
- // ─── Type String Builder ───────────────────────────────────────────
479
- function buildTypeString(type) {
480
- if (!type)
481
- return "";
482
- if (typeof type === "string")
483
- return type;
484
- switch (type.kind) {
485
- case "typereference":
486
- case "name":
487
- case "selfreference":
488
- case "staticreference":
489
- case "parentreference":
490
- return getNodeName(type) || type.kind;
491
- case "uniontype":
492
- return (type.types || [])
493
- .map((t) => buildTypeString(t))
494
- .join("|");
495
- case "intersectiontype":
496
- return (type.types || [])
497
- .map((t) => buildTypeString(t))
498
- .join("&");
499
- case "nullabletype":
500
- return `?${buildTypeString(type.type)}`;
501
- default:
502
- return getNodeName(type) || "";
503
- }
504
- }
505
- // ─── Symbol Finder (for extractPHPSymbol) ──────────────────────────
506
- // ─── Symbol Finder (for extractPHPSymbol) ──────────────────────────
507
- /**
508
- * Find a class/interface/trait/enum node by name in the AST tree.
509
- * Used to scope symbol searches to a specific container.
510
- */
511
- function findClassNode(node, className) {
512
- if (!node)
513
- return null;
514
- if (["class", "interface", "trait", "enum"].includes(node.kind) &&
515
- getNodeName(node) === className) {
516
- return node;
517
- }
518
- const allChildren = [
519
- ...(node.children || []),
520
- ...(Array.isArray(node.body) ? node.body : []),
521
- ];
522
- for (const child of allChildren) {
523
- const found = findClassNode(child, className);
524
- if (found)
525
- return found;
526
- }
527
- return null;
528
- }
529
- function findSymbolNode(node, symbolName, className) {
530
- if (!node)
531
- return null;
532
- // If className is provided, first find the class, then search within it
533
- if (className) {
534
- const classNode = findClassNode(node, className);
535
- if (!classNode)
536
- return null;
537
- // Search only within this class's body
538
- const body = Array.isArray(classNode.body) ? classNode.body : [];
539
- for (const member of body) {
540
- if (member.kind === "method" && getNodeName(member) === symbolName) {
541
- return member;
542
- }
543
- }
544
- return null;
545
- }
546
- const nodeName = getNodeName(node);
547
- // Direct match on class, interface, trait, enum, function
548
- if (["class", "interface", "trait", "enum", "function"].includes(node.kind) &&
549
- nodeName === symbolName) {
550
- return node;
551
- }
552
- // Search methods inside classes/interfaces/traits/enums
553
- if (["class", "interface", "trait", "enum"].includes(node.kind)) {
554
- const body = Array.isArray(node.body) ? node.body : [];
555
- for (const member of body) {
556
- if (member.kind === "method" && getNodeName(member) === symbolName) {
557
- return member;
558
- }
559
- }
560
- }
561
- // Recursive search through children
562
- const allChildren = [
563
- ...(node.children || []),
564
- ...(Array.isArray(node.body) ? node.body : []),
565
- ];
566
- for (const child of allChildren) {
567
- const found = findSymbolNode(child, symbolName);
568
- if (found)
569
- return found;
570
- }
571
- return null;
572
- }
573
- // ─── Utility Functions ─────────────────────────────────────────────
574
- function getNodeName(node) {
575
- if (!node)
576
- return "";
577
- if (typeof node.name === "string")
578
- return node.name;
579
- if (node.name && typeof node.name === "object" && "name" in node.name) {
580
- return node.name.name;
581
- }
582
- // For typereference, name might be at the node level directly
583
- if (node.kind === "typereference" || node.kind === "name") {
584
- return node.name || node.resolution || "";
585
- }
586
- if (node.kind === "selfreference")
587
- return "self";
588
- if (node.kind === "staticreference")
589
- return "static";
590
- if (node.kind === "parentreference")
591
- return "parent";
592
- return "";
593
- }
594
- function extractLiteralValue(node) {
595
- if (!node)
596
- return "/* ... */";
597
- switch (node.kind) {
598
- case "string":
599
- return `'${node.value || ""}'`;
600
- case "number":
601
- return String(node.value || 0);
602
- case "boolean":
603
- return node.value ? "true" : "false";
604
- case "nullkeyword":
605
- return "null";
606
- case "nowdoc":
607
- case "encapsed":
608
- return "'...'";
609
- case "array":
610
- return "[/* ... */]";
611
- case "staticlookup":
612
- case "propertylookup":
613
- return "/* ... */";
614
- default:
615
- return "/* ... */";
616
- }
617
- }
618
- function emitDocBlock(node, result, indent) {
619
- if (!node.leadingComments || node.leadingComments.length === 0)
620
- return;
621
- for (const comment of node.leadingComments) {
622
- if (comment.kind === "commentblock" && comment.value.startsWith("/**")) {
623
- // This is a PHPDoc block — emit it
624
- const docLines = comment.value.split("\n");
625
- for (const line of docLines) {
626
- result.push(`${indent}${line.trim()}`);
627
- }
628
- }
629
- }
630
- }
631
- function makeIndent(depth) {
632
- return " ".repeat(depth);
633
- }
634
- //# sourceMappingURL=phpCompressor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"phpCompressor.js","sourceRoot":"","sources":["../../../src/ast/phpCompressor.ts"],"names":[],"mappings":"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"}