driftdetect-core 0.3.0 → 0.4.1

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.
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "driftdetect-core",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "description": "Core pattern detection and analysis engine for Drift",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -40,18 +40,18 @@
40
40
  "dependencies": {
41
41
  "ignore": "^5.3.1",
42
42
  "minimatch": "^9.0.3",
43
- "typescript": "^5.3.0"
44
- },
45
- "optionalDependencies": {
46
- "tree-sitter-python": "^0.21.0"
43
+ "typescript": "^5.3.0",
44
+ "tree-sitter": "^0.21.1",
45
+ "tree-sitter-python": "^0.21.0",
46
+ "tree-sitter-java": "^0.21.0",
47
+ "tree-sitter-php": "^0.22.0",
48
+ "tree-sitter-c-sharp": "^0.21.3"
47
49
  },
48
50
  "devDependencies": {
49
51
  "@types/minimatch": "^5.1.2",
50
52
  "@types/node": "^20.10.0",
51
53
  "@vitest/coverage-v8": "^1.0.0",
52
54
  "fast-check": "^3.15.0",
53
- "tree-sitter": "^0.21.1",
54
- "tree-sitter-c-sharp": "^0.21.3",
55
55
  "typescript": "^5.3.0",
56
56
  "vitest": "^1.0.0"
57
57
  }