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.
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/parsers/tree-sitter/index.d.ts +5 -0
- package/dist/parsers/tree-sitter/index.d.ts.map +1 -1
- package/dist/parsers/tree-sitter/index.js +16 -0
- package/dist/parsers/tree-sitter/index.js.map +1 -1
- package/dist/parsers/tree-sitter/java-loader.d.ts +50 -0
- package/dist/parsers/tree-sitter/java-loader.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java-loader.js +161 -0
- package/dist/parsers/tree-sitter/java-loader.js.map +1 -0
- package/dist/parsers/tree-sitter/php-loader.d.ts +50 -0
- package/dist/parsers/tree-sitter/php-loader.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/php-loader.js +164 -0
- package/dist/parsers/tree-sitter/php-loader.js.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-java-parser.d.ts +90 -0
- package/dist/parsers/tree-sitter/tree-sitter-java-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-java-parser.js +298 -0
- package/dist/parsers/tree-sitter/tree-sitter-java-parser.js.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-php-parser.d.ts +177 -0
- package/dist/parsers/tree-sitter/tree-sitter-php-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-php-parser.js +585 -0
- package/dist/parsers/tree-sitter/tree-sitter-php-parser.js.map +1 -0
- package/package.json +7 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-sitter-java-parser.d.ts","sourceRoot":"","sources":["../../../src/parsers/tree-sitter/tree-sitter-java-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAkBzB;;;;;;;;;GASG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,SAAS,CAAuB;IAExC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;;OAGG;IACH,UAAU,IAAI,OAAO;IAmBrB;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,eAAe;IAsDzD;;OAEG;IACH,OAAO,CAAC,cAAc;IA0BtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;IACH,OAAO,CAAC,WAAW;IAgCnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAgBnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAgCnB;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAoB1B;AAMD,YAAY,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tree-sitter Java Parser
|
|
3
|
+
*
|
|
4
|
+
* Full Java parser using tree-sitter-java for semantic extraction.
|
|
5
|
+
* Extracts packages, imports, classes, interfaces, enums, records,
|
|
6
|
+
* methods, fields, and annotations from Java source files.
|
|
7
|
+
*
|
|
8
|
+
* Annotations are FIRST-CLASS CITIZENS - they're the primary signal
|
|
9
|
+
* for Spring pattern detection.
|
|
10
|
+
*
|
|
11
|
+
* @requirements Java/Spring Boot Language Support
|
|
12
|
+
*/
|
|
13
|
+
import { isJavaTreeSitterAvailable, createJavaParser, getJavaLoadingError, } from './java-loader.js';
|
|
14
|
+
import { extractClasses, extractInterfaces, extractEnums, extractRecords, extractAnnotationDefinitions, } from './java/class-extractor.js';
|
|
15
|
+
// ============================================
|
|
16
|
+
// Parser Class
|
|
17
|
+
// ============================================
|
|
18
|
+
/**
|
|
19
|
+
* Java parser using tree-sitter-java.
|
|
20
|
+
*
|
|
21
|
+
* Provides full semantic extraction for Java source files including:
|
|
22
|
+
* - Package declarations
|
|
23
|
+
* - Import statements
|
|
24
|
+
* - Class, interface, enum, and record declarations
|
|
25
|
+
* - Method and field declarations with annotations
|
|
26
|
+
* - Annotation definitions (@interface)
|
|
27
|
+
*/
|
|
28
|
+
export class TreeSitterJavaParser {
|
|
29
|
+
parser = null;
|
|
30
|
+
initError = null;
|
|
31
|
+
/**
|
|
32
|
+
* Check if the parser is available.
|
|
33
|
+
*/
|
|
34
|
+
isAvailable() {
|
|
35
|
+
return isJavaTreeSitterAvailable();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get the initialization error if parser is not available.
|
|
39
|
+
*/
|
|
40
|
+
getError() {
|
|
41
|
+
return this.initError ?? getJavaLoadingError();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Initialize the parser.
|
|
45
|
+
* Call this before parsing or check isAvailable() first.
|
|
46
|
+
*/
|
|
47
|
+
initialize() {
|
|
48
|
+
if (this.parser) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
if (!isJavaTreeSitterAvailable()) {
|
|
52
|
+
this.initError = getJavaLoadingError() ?? 'tree-sitter-java not available';
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
this.parser = createJavaParser();
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
this.initError = error instanceof Error ? error.message : 'Failed to create Java parser';
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Parse Java source code and extract semantic information.
|
|
66
|
+
*
|
|
67
|
+
* @param source - Java source code
|
|
68
|
+
* @param filePath - Optional file path for error reporting
|
|
69
|
+
* @returns JavaParseResult with full semantic information
|
|
70
|
+
*/
|
|
71
|
+
parse(source, filePath) {
|
|
72
|
+
// Ensure parser is initialized
|
|
73
|
+
if (!this.parser && !this.initialize()) {
|
|
74
|
+
return this.createErrorResult(this.initError ?? 'Parser not initialized', filePath);
|
|
75
|
+
}
|
|
76
|
+
if (!this.parser) {
|
|
77
|
+
return this.createErrorResult('Parser not available', filePath);
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
// Parse the source
|
|
81
|
+
const tree = this.parser.parse(source);
|
|
82
|
+
const rootNode = tree.rootNode;
|
|
83
|
+
// Extract semantic information
|
|
84
|
+
const packageInfo = this.extractPackage(rootNode);
|
|
85
|
+
const imports = this.extractImports(rootNode);
|
|
86
|
+
const packageName = packageInfo?.name ?? null;
|
|
87
|
+
// Extract type declarations
|
|
88
|
+
const classes = extractClasses(rootNode, packageName, imports);
|
|
89
|
+
const interfaces = extractInterfaces(rootNode, packageName, imports);
|
|
90
|
+
const enums = extractEnums(rootNode, packageName, imports);
|
|
91
|
+
const records = extractRecords(rootNode, packageName, imports);
|
|
92
|
+
const annotationDefinitions = extractAnnotationDefinitions(rootNode, packageName, imports);
|
|
93
|
+
// Convert to AST for base result
|
|
94
|
+
const ast = this.convertToAST(rootNode, source);
|
|
95
|
+
return {
|
|
96
|
+
success: true,
|
|
97
|
+
language: 'java',
|
|
98
|
+
ast,
|
|
99
|
+
errors: [],
|
|
100
|
+
package: packageInfo,
|
|
101
|
+
imports,
|
|
102
|
+
classes,
|
|
103
|
+
interfaces,
|
|
104
|
+
enums,
|
|
105
|
+
records,
|
|
106
|
+
annotationDefinitions,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
return this.createErrorResult(error instanceof Error ? error.message : 'Parse error', filePath);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Extract package declaration from the AST.
|
|
115
|
+
*/
|
|
116
|
+
extractPackage(root) {
|
|
117
|
+
const packageNode = this.findChildByType(root, 'package_declaration');
|
|
118
|
+
if (!packageNode) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
// Find the scoped identifier (package name)
|
|
122
|
+
let name = '';
|
|
123
|
+
for (const child of packageNode.children) {
|
|
124
|
+
if (child.type === 'scoped_identifier' || child.type === 'identifier') {
|
|
125
|
+
name = child.text;
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (!name) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
name,
|
|
134
|
+
startPosition: this.toPosition(packageNode.startPosition),
|
|
135
|
+
endPosition: this.toPosition(packageNode.endPosition),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Extract import statements from the AST.
|
|
140
|
+
*/
|
|
141
|
+
extractImports(root) {
|
|
142
|
+
const imports = [];
|
|
143
|
+
this.findNodesOfType(root, 'import_declaration', (node) => {
|
|
144
|
+
const importInfo = this.parseImport(node);
|
|
145
|
+
if (importInfo) {
|
|
146
|
+
imports.push(importInfo);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
return imports;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Parse a single import declaration.
|
|
153
|
+
*/
|
|
154
|
+
parseImport(node) {
|
|
155
|
+
let path = '';
|
|
156
|
+
let isStatic = false;
|
|
157
|
+
let isWildcard = false;
|
|
158
|
+
for (const child of node.children) {
|
|
159
|
+
if (child.type === 'static') {
|
|
160
|
+
isStatic = true;
|
|
161
|
+
}
|
|
162
|
+
else if (child.type === 'scoped_identifier' || child.type === 'identifier') {
|
|
163
|
+
path = child.text;
|
|
164
|
+
}
|
|
165
|
+
else if (child.type === 'asterisk') {
|
|
166
|
+
isWildcard = true;
|
|
167
|
+
// Append .* to path if not already there
|
|
168
|
+
if (!path.endsWith('.*')) {
|
|
169
|
+
path = path ? `${path}.*` : '*';
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (!path) {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
path,
|
|
178
|
+
isStatic,
|
|
179
|
+
isWildcard,
|
|
180
|
+
startPosition: this.toPosition(node.startPosition),
|
|
181
|
+
endPosition: this.toPosition(node.endPosition),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Convert tree-sitter AST to drift AST format.
|
|
186
|
+
*/
|
|
187
|
+
convertToAST(node, source) {
|
|
188
|
+
const rootNode = this.convertNode(node, source);
|
|
189
|
+
return {
|
|
190
|
+
rootNode,
|
|
191
|
+
text: source,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Convert a single tree-sitter node to drift ASTNode.
|
|
196
|
+
*/
|
|
197
|
+
convertNode(node, source) {
|
|
198
|
+
const children = [];
|
|
199
|
+
for (const child of node.children) {
|
|
200
|
+
children.push(this.convertNode(child, source));
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
type: this.mapNodeType(node.type),
|
|
204
|
+
text: node.text,
|
|
205
|
+
children,
|
|
206
|
+
startPosition: this.toPosition(node.startPosition),
|
|
207
|
+
endPosition: this.toPosition(node.endPosition),
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Map tree-sitter node types to drift node types.
|
|
212
|
+
*/
|
|
213
|
+
mapNodeType(type) {
|
|
214
|
+
const typeMap = {
|
|
215
|
+
program: 'Program',
|
|
216
|
+
package_declaration: 'PackageDeclaration',
|
|
217
|
+
import_declaration: 'ImportDeclaration',
|
|
218
|
+
class_declaration: 'ClassDeclaration',
|
|
219
|
+
interface_declaration: 'InterfaceDeclaration',
|
|
220
|
+
enum_declaration: 'EnumDeclaration',
|
|
221
|
+
record_declaration: 'RecordDeclaration',
|
|
222
|
+
annotation_type_declaration: 'AnnotationTypeDeclaration',
|
|
223
|
+
method_declaration: 'MethodDeclaration',
|
|
224
|
+
constructor_declaration: 'ConstructorDeclaration',
|
|
225
|
+
field_declaration: 'FieldDeclaration',
|
|
226
|
+
annotation: 'Annotation',
|
|
227
|
+
marker_annotation: 'Annotation',
|
|
228
|
+
identifier: 'Identifier',
|
|
229
|
+
type_identifier: 'TypeIdentifier',
|
|
230
|
+
scoped_identifier: 'ScopedIdentifier',
|
|
231
|
+
formal_parameter: 'Parameter',
|
|
232
|
+
block: 'Block',
|
|
233
|
+
expression_statement: 'ExpressionStatement',
|
|
234
|
+
return_statement: 'ReturnStatement',
|
|
235
|
+
if_statement: 'IfStatement',
|
|
236
|
+
for_statement: 'ForStatement',
|
|
237
|
+
while_statement: 'WhileStatement',
|
|
238
|
+
try_statement: 'TryStatement',
|
|
239
|
+
throw_statement: 'ThrowStatement',
|
|
240
|
+
};
|
|
241
|
+
return typeMap[type] ?? type;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Convert tree-sitter position to drift Position.
|
|
245
|
+
*/
|
|
246
|
+
toPosition(point) {
|
|
247
|
+
return {
|
|
248
|
+
row: point.row,
|
|
249
|
+
column: point.column,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Find a child node by type.
|
|
254
|
+
*/
|
|
255
|
+
findChildByType(node, type) {
|
|
256
|
+
for (const child of node.children) {
|
|
257
|
+
if (child.type === type) {
|
|
258
|
+
return child;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return null;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Find all nodes of a specific type in the tree.
|
|
265
|
+
*/
|
|
266
|
+
findNodesOfType(node, type, callback) {
|
|
267
|
+
if (node.type === type) {
|
|
268
|
+
callback(node);
|
|
269
|
+
}
|
|
270
|
+
for (const child of node.children) {
|
|
271
|
+
this.findNodesOfType(child, type, callback);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Create an error result.
|
|
276
|
+
*/
|
|
277
|
+
createErrorResult(message, _filePath) {
|
|
278
|
+
return {
|
|
279
|
+
success: false,
|
|
280
|
+
language: 'java',
|
|
281
|
+
ast: null,
|
|
282
|
+
errors: [
|
|
283
|
+
{
|
|
284
|
+
message,
|
|
285
|
+
position: { row: 0, column: 0 },
|
|
286
|
+
},
|
|
287
|
+
],
|
|
288
|
+
package: null,
|
|
289
|
+
imports: [],
|
|
290
|
+
classes: [],
|
|
291
|
+
interfaces: [],
|
|
292
|
+
enums: [],
|
|
293
|
+
records: [],
|
|
294
|
+
annotationDefinitions: [],
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=tree-sitter-java-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-sitter-java-parser.js","sourceRoot":"","sources":["../../../src/parsers/tree-sitter/tree-sitter-java-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
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 type { Position, ParseResult } from '../types.js';
|
|
13
|
+
/** PHP namespace information */
|
|
14
|
+
export interface PhpNamespaceInfo {
|
|
15
|
+
name: string;
|
|
16
|
+
startPosition: Position;
|
|
17
|
+
endPosition: Position;
|
|
18
|
+
}
|
|
19
|
+
/** PHP use statement */
|
|
20
|
+
export interface PhpUseStatementInfo {
|
|
21
|
+
fqn: string;
|
|
22
|
+
alias: string | null;
|
|
23
|
+
type: 'class' | 'function' | 'const';
|
|
24
|
+
startPosition: Position;
|
|
25
|
+
endPosition: Position;
|
|
26
|
+
}
|
|
27
|
+
/** PHP attribute (PHP 8+) */
|
|
28
|
+
export interface PhpAttributeInfo {
|
|
29
|
+
name: string;
|
|
30
|
+
fqn: string | null;
|
|
31
|
+
arguments: string[];
|
|
32
|
+
startPosition: Position;
|
|
33
|
+
endPosition: Position;
|
|
34
|
+
}
|
|
35
|
+
/** PHP parameter */
|
|
36
|
+
export interface PhpParameterInfo {
|
|
37
|
+
name: string;
|
|
38
|
+
type: string | null;
|
|
39
|
+
defaultValue: string | null;
|
|
40
|
+
isVariadic: boolean;
|
|
41
|
+
isByReference: boolean;
|
|
42
|
+
isPromoted: boolean;
|
|
43
|
+
visibility: 'public' | 'protected' | 'private' | null;
|
|
44
|
+
attributes: PhpAttributeInfo[];
|
|
45
|
+
}
|
|
46
|
+
/** PHP method */
|
|
47
|
+
export interface PhpMethodInfo {
|
|
48
|
+
name: string;
|
|
49
|
+
visibility: 'public' | 'protected' | 'private';
|
|
50
|
+
isStatic: boolean;
|
|
51
|
+
isAbstract: boolean;
|
|
52
|
+
isFinal: boolean;
|
|
53
|
+
parameters: PhpParameterInfo[];
|
|
54
|
+
returnType: string | null;
|
|
55
|
+
attributes: PhpAttributeInfo[];
|
|
56
|
+
startPosition: Position;
|
|
57
|
+
endPosition: Position;
|
|
58
|
+
}
|
|
59
|
+
/** PHP property */
|
|
60
|
+
export interface PhpPropertyInfo {
|
|
61
|
+
name: string;
|
|
62
|
+
visibility: 'public' | 'protected' | 'private';
|
|
63
|
+
isStatic: boolean;
|
|
64
|
+
isReadonly: boolean;
|
|
65
|
+
type: string | null;
|
|
66
|
+
defaultValue: string | null;
|
|
67
|
+
attributes: PhpAttributeInfo[];
|
|
68
|
+
startPosition: Position;
|
|
69
|
+
endPosition: Position;
|
|
70
|
+
}
|
|
71
|
+
/** PHP class */
|
|
72
|
+
export interface PhpClassInfo {
|
|
73
|
+
name: string;
|
|
74
|
+
fqn: string;
|
|
75
|
+
namespace: string | null;
|
|
76
|
+
extends: string | null;
|
|
77
|
+
implements: string[];
|
|
78
|
+
traits: string[];
|
|
79
|
+
isAbstract: boolean;
|
|
80
|
+
isFinal: boolean;
|
|
81
|
+
isReadonly: boolean;
|
|
82
|
+
properties: PhpPropertyInfo[];
|
|
83
|
+
methods: PhpMethodInfo[];
|
|
84
|
+
attributes: PhpAttributeInfo[];
|
|
85
|
+
startPosition: Position;
|
|
86
|
+
endPosition: Position;
|
|
87
|
+
}
|
|
88
|
+
/** PHP interface */
|
|
89
|
+
export interface PhpInterfaceInfo {
|
|
90
|
+
name: string;
|
|
91
|
+
fqn: string;
|
|
92
|
+
namespace: string | null;
|
|
93
|
+
extends: string[];
|
|
94
|
+
methods: PhpMethodInfo[];
|
|
95
|
+
attributes: PhpAttributeInfo[];
|
|
96
|
+
startPosition: Position;
|
|
97
|
+
endPosition: Position;
|
|
98
|
+
}
|
|
99
|
+
/** PHP trait */
|
|
100
|
+
export interface PhpTraitInfo {
|
|
101
|
+
name: string;
|
|
102
|
+
fqn: string;
|
|
103
|
+
namespace: string | null;
|
|
104
|
+
properties: PhpPropertyInfo[];
|
|
105
|
+
methods: PhpMethodInfo[];
|
|
106
|
+
attributes: PhpAttributeInfo[];
|
|
107
|
+
startPosition: Position;
|
|
108
|
+
endPosition: Position;
|
|
109
|
+
}
|
|
110
|
+
/** PHP enum (PHP 8.1+) */
|
|
111
|
+
export interface PhpEnumInfo {
|
|
112
|
+
name: string;
|
|
113
|
+
fqn: string;
|
|
114
|
+
namespace: string | null;
|
|
115
|
+
backingType: 'string' | 'int' | null;
|
|
116
|
+
implements: string[];
|
|
117
|
+
cases: {
|
|
118
|
+
name: string;
|
|
119
|
+
value: string | null;
|
|
120
|
+
}[];
|
|
121
|
+
methods: PhpMethodInfo[];
|
|
122
|
+
attributes: PhpAttributeInfo[];
|
|
123
|
+
startPosition: Position;
|
|
124
|
+
endPosition: Position;
|
|
125
|
+
}
|
|
126
|
+
/** PHP parse result */
|
|
127
|
+
export interface PhpParseResult extends ParseResult {
|
|
128
|
+
namespace: PhpNamespaceInfo | null;
|
|
129
|
+
useStatements: PhpUseStatementInfo[];
|
|
130
|
+
classes: PhpClassInfo[];
|
|
131
|
+
interfaces: PhpInterfaceInfo[];
|
|
132
|
+
traits: PhpTraitInfo[];
|
|
133
|
+
enums: PhpEnumInfo[];
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* PHP parser using tree-sitter-php.
|
|
137
|
+
*/
|
|
138
|
+
export declare class TreeSitterPhpParser {
|
|
139
|
+
private parser;
|
|
140
|
+
private initError;
|
|
141
|
+
/**
|
|
142
|
+
* Check if the parser is available.
|
|
143
|
+
*/
|
|
144
|
+
isAvailable(): boolean;
|
|
145
|
+
/**
|
|
146
|
+
* Get the initialization error if parser is not available.
|
|
147
|
+
*/
|
|
148
|
+
getError(): string | null;
|
|
149
|
+
/**
|
|
150
|
+
* Initialize the parser.
|
|
151
|
+
*/
|
|
152
|
+
initialize(): boolean;
|
|
153
|
+
/**
|
|
154
|
+
* Parse PHP source code and extract semantic information.
|
|
155
|
+
*/
|
|
156
|
+
parse(source: string, _filePath?: string): PhpParseResult;
|
|
157
|
+
private extractNamespace;
|
|
158
|
+
private extractUseStatements;
|
|
159
|
+
private extractClasses;
|
|
160
|
+
private parseClass;
|
|
161
|
+
private extractClassBody;
|
|
162
|
+
private parseProperty;
|
|
163
|
+
private parseMethod;
|
|
164
|
+
private extractParameters;
|
|
165
|
+
private parseParameter;
|
|
166
|
+
private extractInterfaces;
|
|
167
|
+
private extractTraits;
|
|
168
|
+
private extractEnums;
|
|
169
|
+
private extractAttributes;
|
|
170
|
+
private convertToAST;
|
|
171
|
+
private convertNode;
|
|
172
|
+
private toPosition;
|
|
173
|
+
private findChildByType;
|
|
174
|
+
private findNodesOfType;
|
|
175
|
+
private createErrorResult;
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=tree-sitter-php-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-sitter-php-parser.d.ts","sourceRoot":"","sources":["../../../src/parsers/tree-sitter/tree-sitter-php-parser.ts"],"names":[],"mappings":"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"}
|