driftdetect-core 0.1.3 → 0.4.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 (209) hide show
  1. package/dist/boundaries/boundary-store.d.ts +92 -0
  2. package/dist/boundaries/boundary-store.d.ts.map +1 -0
  3. package/dist/boundaries/boundary-store.js +458 -0
  4. package/dist/boundaries/boundary-store.js.map +1 -0
  5. package/dist/boundaries/index.d.ts +8 -0
  6. package/dist/boundaries/index.d.ts.map +1 -0
  7. package/dist/boundaries/index.js +8 -0
  8. package/dist/boundaries/index.js.map +1 -0
  9. package/dist/boundaries/types.d.ts +237 -0
  10. package/dist/boundaries/types.d.ts.map +1 -0
  11. package/dist/boundaries/types.js +8 -0
  12. package/dist/boundaries/types.js.map +1 -0
  13. package/dist/dna/ai-context.d.ts +10 -0
  14. package/dist/dna/ai-context.d.ts.map +1 -0
  15. package/dist/dna/ai-context.js +46 -0
  16. package/dist/dna/ai-context.js.map +1 -0
  17. package/dist/dna/dna-analyzer.d.ts +34 -0
  18. package/dist/dna/dna-analyzer.d.ts.map +1 -0
  19. package/dist/dna/dna-analyzer.js +110 -0
  20. package/dist/dna/dna-analyzer.js.map +1 -0
  21. package/dist/dna/dna-store.d.ts +13 -0
  22. package/dist/dna/dna-store.d.ts.map +1 -0
  23. package/dist/dna/dna-store.js +43 -0
  24. package/dist/dna/dna-store.js.map +1 -0
  25. package/dist/dna/gene-extractors/animation-approach.d.ts +15 -0
  26. package/dist/dna/gene-extractors/animation-approach.d.ts.map +1 -0
  27. package/dist/dna/gene-extractors/animation-approach.js +97 -0
  28. package/dist/dna/gene-extractors/animation-approach.js.map +1 -0
  29. package/dist/dna/gene-extractors/base-extractor.d.ts +53 -0
  30. package/dist/dna/gene-extractors/base-extractor.d.ts.map +1 -0
  31. package/dist/dna/gene-extractors/base-extractor.js +76 -0
  32. package/dist/dna/gene-extractors/base-extractor.js.map +1 -0
  33. package/dist/dna/gene-extractors/index.d.ts +16 -0
  34. package/dist/dna/gene-extractors/index.d.ts.map +1 -0
  35. package/dist/dna/gene-extractors/index.js +38 -0
  36. package/dist/dna/gene-extractors/index.js.map +1 -0
  37. package/dist/dna/gene-extractors/responsive-approach.d.ts +10 -0
  38. package/dist/dna/gene-extractors/responsive-approach.d.ts.map +1 -0
  39. package/dist/dna/gene-extractors/responsive-approach.js +30 -0
  40. package/dist/dna/gene-extractors/responsive-approach.js.map +1 -0
  41. package/dist/dna/gene-extractors/spacing-philosophy.d.ts +10 -0
  42. package/dist/dna/gene-extractors/spacing-philosophy.d.ts.map +1 -0
  43. package/dist/dna/gene-extractors/spacing-philosophy.js +30 -0
  44. package/dist/dna/gene-extractors/spacing-philosophy.js.map +1 -0
  45. package/dist/dna/gene-extractors/state-styling.d.ts +10 -0
  46. package/dist/dna/gene-extractors/state-styling.d.ts.map +1 -0
  47. package/dist/dna/gene-extractors/state-styling.js +29 -0
  48. package/dist/dna/gene-extractors/state-styling.js.map +1 -0
  49. package/dist/dna/gene-extractors/theming.d.ts +10 -0
  50. package/dist/dna/gene-extractors/theming.d.ts.map +1 -0
  51. package/dist/dna/gene-extractors/theming.js +30 -0
  52. package/dist/dna/gene-extractors/theming.js.map +1 -0
  53. package/dist/dna/gene-extractors/variant-handling.d.ts +13 -0
  54. package/dist/dna/gene-extractors/variant-handling.d.ts.map +1 -0
  55. package/dist/dna/gene-extractors/variant-handling.js +38 -0
  56. package/dist/dna/gene-extractors/variant-handling.js.map +1 -0
  57. package/dist/dna/health-calculator.d.ts +21 -0
  58. package/dist/dna/health-calculator.d.ts.map +1 -0
  59. package/dist/dna/health-calculator.js +113 -0
  60. package/dist/dna/health-calculator.js.map +1 -0
  61. package/dist/dna/index.d.ts +21 -0
  62. package/dist/dna/index.d.ts.map +1 -0
  63. package/dist/dna/index.js +19 -0
  64. package/dist/dna/index.js.map +1 -0
  65. package/dist/dna/mutation-detector.d.ts +10 -0
  66. package/dist/dna/mutation-detector.d.ts.map +1 -0
  67. package/dist/dna/mutation-detector.js +39 -0
  68. package/dist/dna/mutation-detector.js.map +1 -0
  69. package/dist/dna/playbook-generator.d.ts +6 -0
  70. package/dist/dna/playbook-generator.d.ts.map +1 -0
  71. package/dist/dna/playbook-generator.js +53 -0
  72. package/dist/dna/playbook-generator.js.map +1 -0
  73. package/dist/dna/types.d.ts +95 -0
  74. package/dist/dna/types.d.ts.map +1 -0
  75. package/dist/dna/types.js +8 -0
  76. package/dist/dna/types.js.map +1 -0
  77. package/dist/index.d.ts +7 -0
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +10 -0
  80. package/dist/index.js.map +1 -1
  81. package/dist/parsers/parser-manager.d.ts.map +1 -1
  82. package/dist/parsers/parser-manager.js +2 -0
  83. package/dist/parsers/parser-manager.js.map +1 -1
  84. package/dist/parsers/tree-sitter/config.d.ts +82 -0
  85. package/dist/parsers/tree-sitter/config.d.ts.map +1 -0
  86. package/dist/parsers/tree-sitter/config.js +200 -0
  87. package/dist/parsers/tree-sitter/config.js.map +1 -0
  88. package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts +64 -0
  89. package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts.map +1 -0
  90. package/dist/parsers/tree-sitter/csharp-ast-converter.js +271 -0
  91. package/dist/parsers/tree-sitter/csharp-ast-converter.js.map +1 -0
  92. package/dist/parsers/tree-sitter/csharp-loader.d.ts +43 -0
  93. package/dist/parsers/tree-sitter/csharp-loader.d.ts.map +1 -0
  94. package/dist/parsers/tree-sitter/csharp-loader.js +146 -0
  95. package/dist/parsers/tree-sitter/csharp-loader.js.map +1 -0
  96. package/dist/parsers/tree-sitter/index.d.ts +31 -0
  97. package/dist/parsers/tree-sitter/index.d.ts.map +1 -0
  98. package/dist/parsers/tree-sitter/index.js +63 -0
  99. package/dist/parsers/tree-sitter/index.js.map +1 -0
  100. package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts +79 -0
  101. package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts.map +1 -0
  102. package/dist/parsers/tree-sitter/java/annotation-extractor.js +540 -0
  103. package/dist/parsers/tree-sitter/java/annotation-extractor.js.map +1 -0
  104. package/dist/parsers/tree-sitter/java/class-extractor.d.ts +40 -0
  105. package/dist/parsers/tree-sitter/java/class-extractor.d.ts.map +1 -0
  106. package/dist/parsers/tree-sitter/java/class-extractor.js +770 -0
  107. package/dist/parsers/tree-sitter/java/class-extractor.js.map +1 -0
  108. package/dist/parsers/tree-sitter/java/index.d.ts +14 -0
  109. package/dist/parsers/tree-sitter/java/index.d.ts.map +1 -0
  110. package/dist/parsers/tree-sitter/java/index.js +25 -0
  111. package/dist/parsers/tree-sitter/java/index.js.map +1 -0
  112. package/dist/parsers/tree-sitter/java/method-extractor.d.ts +88 -0
  113. package/dist/parsers/tree-sitter/java/method-extractor.d.ts.map +1 -0
  114. package/dist/parsers/tree-sitter/java/method-extractor.js +551 -0
  115. package/dist/parsers/tree-sitter/java/method-extractor.js.map +1 -0
  116. package/dist/parsers/tree-sitter/java/types.d.ts +545 -0
  117. package/dist/parsers/tree-sitter/java/types.d.ts.map +1 -0
  118. package/dist/parsers/tree-sitter/java/types.js +81 -0
  119. package/dist/parsers/tree-sitter/java/types.js.map +1 -0
  120. package/dist/parsers/tree-sitter/java-loader.d.ts +50 -0
  121. package/dist/parsers/tree-sitter/java-loader.d.ts.map +1 -0
  122. package/dist/parsers/tree-sitter/java-loader.js +161 -0
  123. package/dist/parsers/tree-sitter/java-loader.js.map +1 -0
  124. package/dist/parsers/tree-sitter/loader.d.ts +50 -0
  125. package/dist/parsers/tree-sitter/loader.d.ts.map +1 -0
  126. package/dist/parsers/tree-sitter/loader.js +156 -0
  127. package/dist/parsers/tree-sitter/loader.js.map +1 -0
  128. package/dist/parsers/tree-sitter/php-loader.d.ts +50 -0
  129. package/dist/parsers/tree-sitter/php-loader.d.ts.map +1 -0
  130. package/dist/parsers/tree-sitter/php-loader.js +164 -0
  131. package/dist/parsers/tree-sitter/php-loader.js.map +1 -0
  132. package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts +78 -0
  133. package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts.map +1 -0
  134. package/dist/parsers/tree-sitter/pydantic/config-extractor.js +278 -0
  135. package/dist/parsers/tree-sitter/pydantic/config-extractor.js.map +1 -0
  136. package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts +84 -0
  137. package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts.map +1 -0
  138. package/dist/parsers/tree-sitter/pydantic/constraint-parser.js +321 -0
  139. package/dist/parsers/tree-sitter/pydantic/constraint-parser.js.map +1 -0
  140. package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts +74 -0
  141. package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts.map +1 -0
  142. package/dist/parsers/tree-sitter/pydantic/field-extractor.js +285 -0
  143. package/dist/parsers/tree-sitter/pydantic/field-extractor.js.map +1 -0
  144. package/dist/parsers/tree-sitter/pydantic/index.d.ts +18 -0
  145. package/dist/parsers/tree-sitter/pydantic/index.d.ts.map +1 -0
  146. package/dist/parsers/tree-sitter/pydantic/index.js +23 -0
  147. package/dist/parsers/tree-sitter/pydantic/index.js.map +1 -0
  148. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts +70 -0
  149. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts.map +1 -0
  150. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js +251 -0
  151. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js.map +1 -0
  152. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts +102 -0
  153. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts.map +1 -0
  154. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js +399 -0
  155. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js.map +1 -0
  156. package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts +89 -0
  157. package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts.map +1 -0
  158. package/dist/parsers/tree-sitter/pydantic/type-resolver.js +426 -0
  159. package/dist/parsers/tree-sitter/pydantic/type-resolver.js.map +1 -0
  160. package/dist/parsers/tree-sitter/pydantic/types.d.ts +177 -0
  161. package/dist/parsers/tree-sitter/pydantic/types.d.ts.map +1 -0
  162. package/dist/parsers/tree-sitter/pydantic/types.js +139 -0
  163. package/dist/parsers/tree-sitter/pydantic/types.js.map +1 -0
  164. package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts +88 -0
  165. package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts.map +1 -0
  166. package/dist/parsers/tree-sitter/pydantic/validator-extractor.js +315 -0
  167. package/dist/parsers/tree-sitter/pydantic/validator-extractor.js.map +1 -0
  168. package/dist/parsers/tree-sitter/python-ast-converter.d.ts +140 -0
  169. package/dist/parsers/tree-sitter/python-ast-converter.d.ts.map +1 -0
  170. package/dist/parsers/tree-sitter/python-ast-converter.js +360 -0
  171. package/dist/parsers/tree-sitter/python-ast-converter.js.map +1 -0
  172. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts +465 -0
  173. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts.map +1 -0
  174. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js +1146 -0
  175. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js.map +1 -0
  176. package/dist/parsers/tree-sitter/tree-sitter-java-parser.d.ts +90 -0
  177. package/dist/parsers/tree-sitter/tree-sitter-java-parser.d.ts.map +1 -0
  178. package/dist/parsers/tree-sitter/tree-sitter-java-parser.js +298 -0
  179. package/dist/parsers/tree-sitter/tree-sitter-java-parser.js.map +1 -0
  180. package/dist/parsers/tree-sitter/tree-sitter-php-parser.d.ts +177 -0
  181. package/dist/parsers/tree-sitter/tree-sitter-php-parser.d.ts.map +1 -0
  182. package/dist/parsers/tree-sitter/tree-sitter-php-parser.js +585 -0
  183. package/dist/parsers/tree-sitter/tree-sitter-php-parser.js.map +1 -0
  184. package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts +86 -0
  185. package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts.map +1 -0
  186. package/dist/parsers/tree-sitter/tree-sitter-python-parser.js +177 -0
  187. package/dist/parsers/tree-sitter/tree-sitter-python-parser.js.map +1 -0
  188. package/dist/parsers/tree-sitter/types.d.ts +399 -0
  189. package/dist/parsers/tree-sitter/types.d.ts.map +1 -0
  190. package/dist/parsers/tree-sitter/types.js +20 -0
  191. package/dist/parsers/tree-sitter/types.js.map +1 -0
  192. package/dist/parsers/types.d.ts +1 -1
  193. package/dist/parsers/types.d.ts.map +1 -1
  194. package/dist/scanner/file-walker.d.ts.map +1 -1
  195. package/dist/scanner/file-walker.js +5 -0
  196. package/dist/scanner/file-walker.js.map +1 -1
  197. package/dist/store/history-store.d.ts +85 -269
  198. package/dist/store/history-store.d.ts.map +1 -1
  199. package/dist/store/history-store.js +272 -624
  200. package/dist/store/history-store.js.map +1 -1
  201. package/dist/types/index.d.ts +1 -0
  202. package/dist/types/index.d.ts.map +1 -1
  203. package/dist/types/index.js +2 -0
  204. package/dist/types/index.js.map +1 -1
  205. package/dist/types/java-type-mapping.d.ts +79 -0
  206. package/dist/types/java-type-mapping.d.ts.map +1 -0
  207. package/dist/types/java-type-mapping.js +290 -0
  208. package/dist/types/java-type-mapping.js.map +1 -0
  209. package/package.json +9 -2
@@ -0,0 +1,585 @@
1
+ /**
2
+ * Tree-sitter PHP Parser
3
+ *
4
+ * Full PHP parser using tree-sitter-php for semantic extraction.
5
+ * Extracts namespaces, use statements, classes, interfaces, traits,
6
+ * enums, methods, properties, and attributes from PHP source files.
7
+ *
8
+ * Supports PHP 8+ features including attributes, enums, and readonly properties.
9
+ *
10
+ * @requirements PHP/Laravel Language Support
11
+ */
12
+ import { isPhpTreeSitterAvailable, createPhpParser, getPhpLoadingError, } from './php-loader.js';
13
+ // ============================================
14
+ // Parser Class
15
+ // ============================================
16
+ /**
17
+ * PHP parser using tree-sitter-php.
18
+ */
19
+ export class TreeSitterPhpParser {
20
+ parser = null;
21
+ initError = null;
22
+ /**
23
+ * Check if the parser is available.
24
+ */
25
+ isAvailable() {
26
+ return isPhpTreeSitterAvailable();
27
+ }
28
+ /**
29
+ * Get the initialization error if parser is not available.
30
+ */
31
+ getError() {
32
+ return this.initError ?? getPhpLoadingError();
33
+ }
34
+ /**
35
+ * Initialize the parser.
36
+ */
37
+ initialize() {
38
+ if (this.parser) {
39
+ return true;
40
+ }
41
+ if (!isPhpTreeSitterAvailable()) {
42
+ this.initError = getPhpLoadingError() ?? 'tree-sitter-php not available';
43
+ return false;
44
+ }
45
+ try {
46
+ this.parser = createPhpParser();
47
+ return true;
48
+ }
49
+ catch (error) {
50
+ this.initError = error instanceof Error ? error.message : 'Failed to create PHP parser';
51
+ return false;
52
+ }
53
+ }
54
+ /**
55
+ * Parse PHP source code and extract semantic information.
56
+ */
57
+ parse(source, _filePath) {
58
+ if (!this.parser && !this.initialize()) {
59
+ return this.createErrorResult(this.initError ?? 'Parser not initialized');
60
+ }
61
+ if (!this.parser) {
62
+ return this.createErrorResult('Parser not available');
63
+ }
64
+ try {
65
+ const tree = this.parser.parse(source);
66
+ const rootNode = tree.rootNode;
67
+ // Extract semantic information
68
+ const namespace = this.extractNamespace(rootNode);
69
+ const useStatements = this.extractUseStatements(rootNode);
70
+ const namespaceName = namespace?.name ?? null;
71
+ const classes = this.extractClasses(rootNode, namespaceName);
72
+ const interfaces = this.extractInterfaces(rootNode, namespaceName);
73
+ const traits = this.extractTraits(rootNode, namespaceName);
74
+ const enums = this.extractEnums(rootNode, namespaceName);
75
+ const ast = this.convertToAST(rootNode, source);
76
+ return {
77
+ success: true,
78
+ language: 'php',
79
+ ast,
80
+ errors: [],
81
+ namespace,
82
+ useStatements,
83
+ classes,
84
+ interfaces,
85
+ traits,
86
+ enums,
87
+ };
88
+ }
89
+ catch (error) {
90
+ return this.createErrorResult(error instanceof Error ? error.message : 'Parse error');
91
+ }
92
+ }
93
+ // ============================================
94
+ // Extraction Methods
95
+ // ============================================
96
+ extractNamespace(root) {
97
+ const nsNode = this.findChildByType(root, 'namespace_definition');
98
+ if (!nsNode)
99
+ return null;
100
+ const nameNode = this.findChildByType(nsNode, 'namespace_name') ??
101
+ this.findChildByType(nsNode, 'qualified_name');
102
+ if (!nameNode)
103
+ return null;
104
+ return {
105
+ name: nameNode.text,
106
+ startPosition: this.toPosition(nsNode.startPosition),
107
+ endPosition: this.toPosition(nsNode.endPosition),
108
+ };
109
+ }
110
+ extractUseStatements(root) {
111
+ const statements = [];
112
+ this.findNodesOfType(root, 'namespace_use_declaration', (node) => {
113
+ const useClause = this.findChildByType(node, 'namespace_use_clause');
114
+ if (!useClause)
115
+ return;
116
+ const nameNode = this.findChildByType(useClause, 'qualified_name') ??
117
+ this.findChildByType(useClause, 'namespace_name');
118
+ if (!nameNode)
119
+ return;
120
+ const aliasNode = this.findChildByType(useClause, 'namespace_aliasing_clause');
121
+ const alias = aliasNode ? this.findChildByType(aliasNode, 'name')?.text ?? null : null;
122
+ // Determine type (class, function, const)
123
+ let type = 'class';
124
+ for (const child of node.children) {
125
+ if (child.text === 'function')
126
+ type = 'function';
127
+ else if (child.text === 'const')
128
+ type = 'const';
129
+ }
130
+ statements.push({
131
+ fqn: nameNode.text,
132
+ alias,
133
+ type,
134
+ startPosition: this.toPosition(node.startPosition),
135
+ endPosition: this.toPosition(node.endPosition),
136
+ });
137
+ });
138
+ return statements;
139
+ }
140
+ extractClasses(root, namespace) {
141
+ const classes = [];
142
+ this.findNodesOfType(root, 'class_declaration', (node) => {
143
+ const classInfo = this.parseClass(node, namespace);
144
+ if (classInfo)
145
+ classes.push(classInfo);
146
+ });
147
+ return classes;
148
+ }
149
+ parseClass(node, namespace) {
150
+ const nameNode = this.findChildByType(node, 'name');
151
+ if (!nameNode)
152
+ return null;
153
+ const name = nameNode.text;
154
+ const fqn = namespace ? `${namespace}\\${name}` : name;
155
+ // Extract modifiers
156
+ let isAbstract = false;
157
+ let isFinal = false;
158
+ let isReadonly = false;
159
+ for (const child of node.children) {
160
+ if (child.type === 'abstract_modifier')
161
+ isAbstract = true;
162
+ if (child.type === 'final_modifier')
163
+ isFinal = true;
164
+ if (child.type === 'readonly_modifier')
165
+ isReadonly = true;
166
+ }
167
+ // Extract extends
168
+ let extendsClass = null;
169
+ const extendsNode = this.findChildByType(node, 'base_clause');
170
+ if (extendsNode) {
171
+ const extName = this.findChildByType(extendsNode, 'qualified_name') ??
172
+ this.findChildByType(extendsNode, 'name');
173
+ extendsClass = extName?.text ?? null;
174
+ }
175
+ // Extract implements
176
+ const implementsList = [];
177
+ const implementsNode = this.findChildByType(node, 'class_interface_clause');
178
+ if (implementsNode) {
179
+ this.findNodesOfType(implementsNode, 'qualified_name', (n) => {
180
+ implementsList.push(n.text);
181
+ });
182
+ this.findNodesOfType(implementsNode, 'name', (n) => {
183
+ if (!implementsList.includes(n.text)) {
184
+ implementsList.push(n.text);
185
+ }
186
+ });
187
+ }
188
+ // Extract body
189
+ const bodyNode = this.findChildByType(node, 'declaration_list');
190
+ const { properties, methods, traits } = bodyNode
191
+ ? this.extractClassBody(bodyNode)
192
+ : { properties: [], methods: [], traits: [] };
193
+ // Extract attributes
194
+ const attributes = this.extractAttributes(node);
195
+ return {
196
+ name,
197
+ fqn,
198
+ namespace,
199
+ extends: extendsClass,
200
+ implements: implementsList,
201
+ traits,
202
+ isAbstract,
203
+ isFinal,
204
+ isReadonly,
205
+ properties,
206
+ methods,
207
+ attributes,
208
+ startPosition: this.toPosition(node.startPosition),
209
+ endPosition: this.toPosition(node.endPosition),
210
+ };
211
+ }
212
+ extractClassBody(bodyNode) {
213
+ const properties = [];
214
+ const methods = [];
215
+ const traits = [];
216
+ for (const child of bodyNode.children) {
217
+ if (child.type === 'property_declaration') {
218
+ const prop = this.parseProperty(child);
219
+ if (prop)
220
+ properties.push(prop);
221
+ }
222
+ else if (child.type === 'method_declaration') {
223
+ const method = this.parseMethod(child);
224
+ if (method)
225
+ methods.push(method);
226
+ }
227
+ else if (child.type === 'use_declaration') {
228
+ // Trait use
229
+ this.findNodesOfType(child, 'qualified_name', (n) => traits.push(n.text));
230
+ this.findNodesOfType(child, 'name', (n) => {
231
+ if (!traits.includes(n.text))
232
+ traits.push(n.text);
233
+ });
234
+ }
235
+ }
236
+ return { properties, methods, traits };
237
+ }
238
+ parseProperty(node) {
239
+ // Extract visibility and modifiers
240
+ let visibility = 'public';
241
+ let isStatic = false;
242
+ let isReadonly = false;
243
+ for (const child of node.children) {
244
+ if (child.type === 'visibility_modifier') {
245
+ visibility = child.text;
246
+ }
247
+ if (child.type === 'static_modifier')
248
+ isStatic = true;
249
+ if (child.type === 'readonly_modifier')
250
+ isReadonly = true;
251
+ }
252
+ // Extract type
253
+ const typeNode = this.findChildByType(node, 'type');
254
+ const type = typeNode?.text ?? null;
255
+ // Extract property element
256
+ const propElement = this.findChildByType(node, 'property_element');
257
+ if (!propElement)
258
+ return null;
259
+ const varNode = this.findChildByType(propElement, 'variable_name');
260
+ if (!varNode)
261
+ return null;
262
+ const name = varNode.text.replace(/^\$/, '');
263
+ // Extract default value
264
+ const initNode = this.findChildByType(propElement, 'property_initializer');
265
+ const defaultValue = initNode?.text ?? null;
266
+ const attributes = this.extractAttributes(node);
267
+ return {
268
+ name,
269
+ visibility,
270
+ isStatic,
271
+ isReadonly,
272
+ type,
273
+ defaultValue,
274
+ attributes,
275
+ startPosition: this.toPosition(node.startPosition),
276
+ endPosition: this.toPosition(node.endPosition),
277
+ };
278
+ }
279
+ parseMethod(node) {
280
+ const nameNode = this.findChildByType(node, 'name');
281
+ if (!nameNode)
282
+ return null;
283
+ let visibility = 'public';
284
+ let isStatic = false;
285
+ let isAbstract = false;
286
+ let isFinal = false;
287
+ for (const child of node.children) {
288
+ if (child.type === 'visibility_modifier') {
289
+ visibility = child.text;
290
+ }
291
+ if (child.type === 'static_modifier')
292
+ isStatic = true;
293
+ if (child.type === 'abstract_modifier')
294
+ isAbstract = true;
295
+ if (child.type === 'final_modifier')
296
+ isFinal = true;
297
+ }
298
+ // Extract parameters
299
+ const paramsNode = this.findChildByType(node, 'formal_parameters');
300
+ const parameters = paramsNode ? this.extractParameters(paramsNode) : [];
301
+ // Extract return type
302
+ const returnTypeNode = this.findChildByType(node, 'return_type');
303
+ const returnType = returnTypeNode?.text?.replace(/^:\s*/, '') ?? null;
304
+ const attributes = this.extractAttributes(node);
305
+ return {
306
+ name: nameNode.text,
307
+ visibility,
308
+ isStatic,
309
+ isAbstract,
310
+ isFinal,
311
+ parameters,
312
+ returnType,
313
+ attributes,
314
+ startPosition: this.toPosition(node.startPosition),
315
+ endPosition: this.toPosition(node.endPosition),
316
+ };
317
+ }
318
+ extractParameters(paramsNode) {
319
+ const params = [];
320
+ for (const child of paramsNode.children) {
321
+ if (child.type === 'simple_parameter' || child.type === 'property_promotion_parameter') {
322
+ const param = this.parseParameter(child);
323
+ if (param)
324
+ params.push(param);
325
+ }
326
+ }
327
+ return params;
328
+ }
329
+ parseParameter(node) {
330
+ const varNode = this.findChildByType(node, 'variable_name');
331
+ if (!varNode)
332
+ return null;
333
+ const name = varNode.text.replace(/^\$/, '');
334
+ // Type
335
+ const typeNode = this.findChildByType(node, 'type');
336
+ const type = typeNode?.text ?? null;
337
+ // Default value
338
+ const defaultNode = this.findChildByType(node, 'default_value');
339
+ const defaultValue = defaultNode?.text?.replace(/^=\s*/, '') ?? null;
340
+ // Modifiers
341
+ let isVariadic = false;
342
+ let isByReference = false;
343
+ let isPromoted = node.type === 'property_promotion_parameter';
344
+ let visibility = null;
345
+ for (const child of node.children) {
346
+ if (child.type === 'variadic_parameter')
347
+ isVariadic = true;
348
+ if (child.type === 'reference_modifier')
349
+ isByReference = true;
350
+ if (child.type === 'visibility_modifier') {
351
+ visibility = child.text;
352
+ isPromoted = true;
353
+ }
354
+ }
355
+ const attributes = this.extractAttributes(node);
356
+ return {
357
+ name,
358
+ type,
359
+ defaultValue,
360
+ isVariadic,
361
+ isByReference,
362
+ isPromoted,
363
+ visibility,
364
+ attributes,
365
+ };
366
+ }
367
+ extractInterfaces(root, namespace) {
368
+ const interfaces = [];
369
+ this.findNodesOfType(root, 'interface_declaration', (node) => {
370
+ const nameNode = this.findChildByType(node, 'name');
371
+ if (!nameNode)
372
+ return;
373
+ const name = nameNode.text;
374
+ const fqn = namespace ? `${namespace}\\${name}` : name;
375
+ // Extract extends
376
+ const extendsList = [];
377
+ const extendsNode = this.findChildByType(node, 'base_clause');
378
+ if (extendsNode) {
379
+ this.findNodesOfType(extendsNode, 'qualified_name', (n) => extendsList.push(n.text));
380
+ this.findNodesOfType(extendsNode, 'name', (n) => {
381
+ if (!extendsList.includes(n.text))
382
+ extendsList.push(n.text);
383
+ });
384
+ }
385
+ // Extract methods
386
+ const bodyNode = this.findChildByType(node, 'declaration_list');
387
+ const methods = [];
388
+ if (bodyNode) {
389
+ for (const child of bodyNode.children) {
390
+ if (child.type === 'method_declaration') {
391
+ const method = this.parseMethod(child);
392
+ if (method)
393
+ methods.push(method);
394
+ }
395
+ }
396
+ }
397
+ interfaces.push({
398
+ name,
399
+ fqn,
400
+ namespace,
401
+ extends: extendsList,
402
+ methods,
403
+ attributes: this.extractAttributes(node),
404
+ startPosition: this.toPosition(node.startPosition),
405
+ endPosition: this.toPosition(node.endPosition),
406
+ });
407
+ });
408
+ return interfaces;
409
+ }
410
+ extractTraits(root, namespace) {
411
+ const traits = [];
412
+ this.findNodesOfType(root, 'trait_declaration', (node) => {
413
+ const nameNode = this.findChildByType(node, 'name');
414
+ if (!nameNode)
415
+ return;
416
+ const name = nameNode.text;
417
+ const fqn = namespace ? `${namespace}\\${name}` : name;
418
+ const bodyNode = this.findChildByType(node, 'declaration_list');
419
+ const bodyResult = bodyNode
420
+ ? this.extractClassBody(bodyNode)
421
+ : { properties: [], methods: [], traits: [] };
422
+ traits.push({
423
+ name,
424
+ fqn,
425
+ namespace,
426
+ properties: bodyResult.properties,
427
+ methods: bodyResult.methods,
428
+ attributes: this.extractAttributes(node),
429
+ startPosition: this.toPosition(node.startPosition),
430
+ endPosition: this.toPosition(node.endPosition),
431
+ });
432
+ });
433
+ return traits;
434
+ }
435
+ extractEnums(root, namespace) {
436
+ const enums = [];
437
+ this.findNodesOfType(root, 'enum_declaration', (node) => {
438
+ const nameNode = this.findChildByType(node, 'name');
439
+ if (!nameNode)
440
+ return;
441
+ const name = nameNode.text;
442
+ const fqn = namespace ? `${namespace}\\${name}` : name;
443
+ // Backing type
444
+ let backingType = null;
445
+ const backingNode = this.findChildByType(node, 'enum_declaration_list');
446
+ if (backingNode) {
447
+ const typeNode = this.findChildByType(backingNode, 'primitive_type');
448
+ if (typeNode?.text === 'string')
449
+ backingType = 'string';
450
+ else if (typeNode?.text === 'int')
451
+ backingType = 'int';
452
+ }
453
+ // Implements
454
+ const implementsList = [];
455
+ const implementsNode = this.findChildByType(node, 'class_interface_clause');
456
+ if (implementsNode) {
457
+ this.findNodesOfType(implementsNode, 'qualified_name', (n) => implementsList.push(n.text));
458
+ }
459
+ // Cases and methods
460
+ const cases = [];
461
+ const methods = [];
462
+ const bodyNode = this.findChildByType(node, 'enum_declaration_list') ??
463
+ this.findChildByType(node, 'declaration_list');
464
+ if (bodyNode) {
465
+ for (const child of bodyNode.children) {
466
+ if (child.type === 'enum_case') {
467
+ const caseNameNode = this.findChildByType(child, 'name');
468
+ const caseValueNode = this.findChildByType(child, 'integer') ??
469
+ this.findChildByType(child, 'string');
470
+ if (caseNameNode) {
471
+ cases.push({
472
+ name: caseNameNode.text,
473
+ value: caseValueNode?.text ?? null,
474
+ });
475
+ }
476
+ }
477
+ else if (child.type === 'method_declaration') {
478
+ const method = this.parseMethod(child);
479
+ if (method)
480
+ methods.push(method);
481
+ }
482
+ }
483
+ }
484
+ enums.push({
485
+ name,
486
+ fqn,
487
+ namespace,
488
+ backingType,
489
+ implements: implementsList,
490
+ cases,
491
+ methods,
492
+ attributes: this.extractAttributes(node),
493
+ startPosition: this.toPosition(node.startPosition),
494
+ endPosition: this.toPosition(node.endPosition),
495
+ });
496
+ });
497
+ return enums;
498
+ }
499
+ extractAttributes(node) {
500
+ const attributes = [];
501
+ // Look for attribute_list nodes before the declaration
502
+ for (const child of node.children) {
503
+ if (child.type === 'attribute_list' || child.type === 'attribute_group') {
504
+ this.findNodesOfType(child, 'attribute', (attrNode) => {
505
+ const nameNode = this.findChildByType(attrNode, 'qualified_name') ??
506
+ this.findChildByType(attrNode, 'name');
507
+ if (!nameNode)
508
+ return;
509
+ const args = [];
510
+ const argsNode = this.findChildByType(attrNode, 'arguments');
511
+ if (argsNode) {
512
+ for (const argChild of argsNode.children) {
513
+ if (argChild.type === 'argument') {
514
+ args.push(argChild.text);
515
+ }
516
+ }
517
+ }
518
+ attributes.push({
519
+ name: nameNode.text.split('\\').pop() ?? nameNode.text,
520
+ fqn: nameNode.text.includes('\\') ? nameNode.text : null,
521
+ arguments: args,
522
+ startPosition: this.toPosition(attrNode.startPosition),
523
+ endPosition: this.toPosition(attrNode.endPosition),
524
+ });
525
+ });
526
+ }
527
+ }
528
+ return attributes;
529
+ }
530
+ // ============================================
531
+ // Utility Methods
532
+ // ============================================
533
+ convertToAST(node, source) {
534
+ const rootNode = this.convertNode(node);
535
+ return {
536
+ rootNode,
537
+ text: source,
538
+ };
539
+ }
540
+ convertNode(node) {
541
+ const children = [];
542
+ for (const child of node.children) {
543
+ children.push(this.convertNode(child));
544
+ }
545
+ return {
546
+ type: node.type,
547
+ text: node.text,
548
+ children,
549
+ startPosition: this.toPosition(node.startPosition),
550
+ endPosition: this.toPosition(node.endPosition),
551
+ };
552
+ }
553
+ toPosition(point) {
554
+ return { row: point.row, column: point.column };
555
+ }
556
+ findChildByType(node, type) {
557
+ for (const child of node.children) {
558
+ if (child.type === type)
559
+ return child;
560
+ }
561
+ return null;
562
+ }
563
+ findNodesOfType(node, type, callback) {
564
+ if (node.type === type)
565
+ callback(node);
566
+ for (const child of node.children) {
567
+ this.findNodesOfType(child, type, callback);
568
+ }
569
+ }
570
+ createErrorResult(message) {
571
+ return {
572
+ success: false,
573
+ language: 'php',
574
+ ast: null,
575
+ errors: [{ message, position: { row: 0, column: 0 } }],
576
+ namespace: null,
577
+ useStatements: [],
578
+ classes: [],
579
+ interfaces: [],
580
+ traits: [],
581
+ enums: [],
582
+ };
583
+ }
584
+ }
585
+ //# sourceMappingURL=tree-sitter-php-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-sitter-php-parser.js","sourceRoot":"","sources":["../../../src/parsers/tree-sitter/tree-sitter-php-parser.ts"],"names":[],"mappings":"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"}