@defai.digital/ax-cli 3.15.21 → 3.15.24
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/README.md +22 -2
- package/dist/agent/agent-executor.d.ts +1 -1
- package/dist/agent/agent-executor.js +15 -17
- package/dist/agent/agent-executor.js.map +1 -1
- package/dist/agent/execution/tool-executor.d.ts +6 -0
- package/dist/agent/execution/tool-executor.js +16 -1
- package/dist/agent/execution/tool-executor.js.map +1 -1
- package/dist/agent/llm-agent.js +91 -22
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/agent/parallel-tools.d.ts +65 -0
- package/dist/agent/parallel-tools.js +146 -0
- package/dist/agent/parallel-tools.js.map +1 -0
- package/dist/llm/tools.js +1 -1
- package/dist/llm/tools.js.map +1 -1
- package/dist/ui/components/chat-interface.js +14 -0
- package/dist/ui/components/chat-interface.js.map +1 -1
- package/dist/ui/hooks/use-input-handler.js +2 -2
- package/dist/ui/hooks/use-input-handler.js.map +1 -1
- package/dist/ui/utils/image-handler.js +8 -5
- package/dist/ui/utils/image-handler.js.map +1 -1
- package/package.json +1 -1
- package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.d.ts +0 -29
- package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.js +0 -103
- package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.js.map +0 -1
- package/dist/analyzers/architecture/architecture-analyzer.d.ts +0 -58
- package/dist/analyzers/architecture/architecture-analyzer.js +0 -276
- package/dist/analyzers/architecture/architecture-analyzer.js.map +0 -1
- package/dist/analyzers/architecture/index.d.ts +0 -12
- package/dist/analyzers/architecture/index.js +0 -14
- package/dist/analyzers/architecture/index.js.map +0 -1
- package/dist/analyzers/architecture/pattern-detectors/base-detector.d.ts +0 -27
- package/dist/analyzers/architecture/pattern-detectors/base-detector.js +0 -31
- package/dist/analyzers/architecture/pattern-detectors/base-detector.js.map +0 -1
- package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.d.ts +0 -11
- package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.js +0 -57
- package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.js.map +0 -1
- package/dist/analyzers/architecture/pattern-detectors/mvc-detector.d.ts +0 -11
- package/dist/analyzers/architecture/pattern-detectors/mvc-detector.js +0 -43
- package/dist/analyzers/architecture/pattern-detectors/mvc-detector.js.map +0 -1
- package/dist/analyzers/architecture/pattern-detectors/repository-detector.d.ts +0 -11
- package/dist/analyzers/architecture/pattern-detectors/repository-detector.js +0 -49
- package/dist/analyzers/architecture/pattern-detectors/repository-detector.js.map +0 -1
- package/dist/analyzers/architecture/project-structure-scanner.d.ts +0 -54
- package/dist/analyzers/architecture/project-structure-scanner.js +0 -204
- package/dist/analyzers/architecture/project-structure-scanner.js.map +0 -1
- package/dist/analyzers/ast/index.d.ts +0 -13
- package/dist/analyzers/ast/index.js +0 -16
- package/dist/analyzers/ast/index.js.map +0 -1
- package/dist/analyzers/ast/language-parser.d.ts +0 -59
- package/dist/analyzers/ast/language-parser.js +0 -107
- package/dist/analyzers/ast/language-parser.js.map +0 -1
- package/dist/analyzers/ast/multi-language-parser.d.ts +0 -79
- package/dist/analyzers/ast/multi-language-parser.js +0 -157
- package/dist/analyzers/ast/multi-language-parser.js.map +0 -1
- package/dist/analyzers/ast/node-helpers.d.ts +0 -81
- package/dist/analyzers/ast/node-helpers.js +0 -128
- package/dist/analyzers/ast/node-helpers.js.map +0 -1
- package/dist/analyzers/ast/parser.d.ts +0 -60
- package/dist/analyzers/ast/parser.js +0 -305
- package/dist/analyzers/ast/parser.js.map +0 -1
- package/dist/analyzers/ast/traverser.d.ts +0 -67
- package/dist/analyzers/ast/traverser.js +0 -156
- package/dist/analyzers/ast/traverser.js.map +0 -1
- package/dist/analyzers/ast/types.d.ts +0 -107
- package/dist/analyzers/ast/types.js +0 -7
- package/dist/analyzers/ast/types.js.map +0 -1
- package/dist/analyzers/best-practices/base-rule.d.ts +0 -45
- package/dist/analyzers/best-practices/base-rule.js +0 -45
- package/dist/analyzers/best-practices/base-rule.js.map +0 -1
- package/dist/analyzers/best-practices/best-practice-validator.d.ts +0 -35
- package/dist/analyzers/best-practices/best-practice-validator.js +0 -181
- package/dist/analyzers/best-practices/best-practice-validator.js.map +0 -1
- package/dist/analyzers/best-practices/index.d.ts +0 -10
- package/dist/analyzers/best-practices/index.js +0 -11
- package/dist/analyzers/best-practices/index.js.map +0 -1
- package/dist/analyzers/best-practices/rules/index.d.ts +0 -7
- package/dist/analyzers/best-practices/rules/index.js +0 -56
- package/dist/analyzers/best-practices/rules/index.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/consistent-naming.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/consistent-naming.js +0 -41
- package/dist/analyzers/best-practices/rules/typescript/consistent-naming.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/function-complexity.d.ts +0 -27
- package/dist/analyzers/best-practices/rules/typescript/function-complexity.js +0 -76
- package/dist/analyzers/best-practices/rules/typescript/function-complexity.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/index.d.ts +0 -15
- package/dist/analyzers/best-practices/rules/typescript/index.js +0 -16
- package/dist/analyzers/best-practices/rules/typescript/index.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/max-file-length.d.ts +0 -18
- package/dist/analyzers/best-practices/rules/typescript/max-file-length.js +0 -25
- package/dist/analyzers/best-practices/rules/typescript/max-file-length.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/no-any-type.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/no-any-type.js +0 -27
- package/dist/analyzers/best-practices/rules/typescript/no-any-type.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.d.ts +0 -18
- package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.js +0 -39
- package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js +0 -38
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js +0 -38
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.js +0 -35
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js +0 -36
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.js +0 -27
- package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.js.map +0 -1
- package/dist/analyzers/best-practices/types.d.ts +0 -86
- package/dist/analyzers/best-practices/types.js +0 -7
- package/dist/analyzers/best-practices/types.js.map +0 -1
- package/dist/analyzers/cache/analysis-cache.d.ts +0 -41
- package/dist/analyzers/cache/analysis-cache.js +0 -84
- package/dist/analyzers/cache/analysis-cache.js.map +0 -1
- package/dist/analyzers/code-smells/base-smell-detector.d.ts +0 -30
- package/dist/analyzers/code-smells/base-smell-detector.js +0 -44
- package/dist/analyzers/code-smells/base-smell-detector.js.map +0 -1
- package/dist/analyzers/code-smells/code-smell-analyzer.d.ts +0 -30
- package/dist/analyzers/code-smells/code-smell-analyzer.js +0 -167
- package/dist/analyzers/code-smells/code-smell-analyzer.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/data-clumps-detector.d.ts +0 -11
- package/dist/analyzers/code-smells/detectors/data-clumps-detector.js +0 -64
- package/dist/analyzers/code-smells/detectors/data-clumps-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/dead-code-detector.d.ts +0 -11
- package/dist/analyzers/code-smells/detectors/dead-code-detector.js +0 -58
- package/dist/analyzers/code-smells/detectors/dead-code-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/duplicate-code-detector.d.ts +0 -11
- package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js +0 -69
- package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/feature-envy-detector.d.ts +0 -11
- package/dist/analyzers/code-smells/detectors/feature-envy-detector.js +0 -70
- package/dist/analyzers/code-smells/detectors/feature-envy-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.d.ts +0 -11
- package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.js +0 -59
- package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/large-class-detector.d.ts +0 -13
- package/dist/analyzers/code-smells/detectors/large-class-detector.js +0 -61
- package/dist/analyzers/code-smells/detectors/large-class-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/long-method-detector.d.ts +0 -12
- package/dist/analyzers/code-smells/detectors/long-method-detector.js +0 -55
- package/dist/analyzers/code-smells/detectors/long-method-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.d.ts +0 -12
- package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.js +0 -53
- package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/magic-numbers-detector.d.ts +0 -12
- package/dist/analyzers/code-smells/detectors/magic-numbers-detector.js +0 -56
- package/dist/analyzers/code-smells/detectors/magic-numbers-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.d.ts +0 -13
- package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.js +0 -77
- package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.js.map +0 -1
- package/dist/analyzers/code-smells/index.d.ts +0 -16
- package/dist/analyzers/code-smells/index.js +0 -19
- package/dist/analyzers/code-smells/index.js.map +0 -1
- package/dist/analyzers/code-smells/types.d.ts +0 -82
- package/dist/analyzers/code-smells/types.js +0 -30
- package/dist/analyzers/code-smells/types.js.map +0 -1
- package/dist/analyzers/dependency/circular-detector.d.ts +0 -17
- package/dist/analyzers/dependency/circular-detector.js +0 -73
- package/dist/analyzers/dependency/circular-detector.js.map +0 -1
- package/dist/analyzers/dependency/coupling-calculator.d.ts +0 -24
- package/dist/analyzers/dependency/coupling-calculator.js +0 -86
- package/dist/analyzers/dependency/coupling-calculator.js.map +0 -1
- package/dist/analyzers/dependency/dependency-analyzer.d.ts +0 -44
- package/dist/analyzers/dependency/dependency-analyzer.js +0 -218
- package/dist/analyzers/dependency/dependency-analyzer.js.map +0 -1
- package/dist/analyzers/dependency/dependency-graph.d.ts +0 -57
- package/dist/analyzers/dependency/dependency-graph.js +0 -198
- package/dist/analyzers/dependency/dependency-graph.js.map +0 -1
- package/dist/analyzers/dependency/index.d.ts +0 -8
- package/dist/analyzers/dependency/index.js +0 -8
- package/dist/analyzers/dependency/index.js.map +0 -1
- package/dist/analyzers/dependency/types.d.ts +0 -105
- package/dist/analyzers/dependency/types.js +0 -5
- package/dist/analyzers/dependency/types.js.map +0 -1
- package/dist/analyzers/errors.d.ts +0 -51
- package/dist/analyzers/errors.js +0 -79
- package/dist/analyzers/errors.js.map +0 -1
- package/dist/analyzers/git/churn-calculator.d.ts +0 -36
- package/dist/analyzers/git/churn-calculator.js +0 -257
- package/dist/analyzers/git/churn-calculator.js.map +0 -1
- package/dist/analyzers/git/git-analyzer.d.ts +0 -19
- package/dist/analyzers/git/git-analyzer.js +0 -79
- package/dist/analyzers/git/git-analyzer.js.map +0 -1
- package/dist/analyzers/git/hotspot-detector.d.ts +0 -34
- package/dist/analyzers/git/hotspot-detector.js +0 -173
- package/dist/analyzers/git/hotspot-detector.js.map +0 -1
- package/dist/analyzers/git/index.d.ts +0 -7
- package/dist/analyzers/git/index.js +0 -7
- package/dist/analyzers/git/index.js.map +0 -1
- package/dist/analyzers/git/types.d.ts +0 -88
- package/dist/analyzers/git/types.js +0 -5
- package/dist/analyzers/git/types.js.map +0 -1
- package/dist/analyzers/metrics/halstead-calculator.d.ts +0 -30
- package/dist/analyzers/metrics/halstead-calculator.js +0 -150
- package/dist/analyzers/metrics/halstead-calculator.js.map +0 -1
- package/dist/analyzers/metrics/index.d.ts +0 -9
- package/dist/analyzers/metrics/index.js +0 -9
- package/dist/analyzers/metrics/index.js.map +0 -1
- package/dist/analyzers/metrics/maintainability-calculator.d.ts +0 -17
- package/dist/analyzers/metrics/maintainability-calculator.js +0 -46
- package/dist/analyzers/metrics/maintainability-calculator.js.map +0 -1
- package/dist/analyzers/metrics/metrics-analyzer.d.ts +0 -32
- package/dist/analyzers/metrics/metrics-analyzer.js +0 -144
- package/dist/analyzers/metrics/metrics-analyzer.js.map +0 -1
- package/dist/analyzers/metrics/types.d.ts +0 -67
- package/dist/analyzers/metrics/types.js +0 -5
- package/dist/analyzers/metrics/types.js.map +0 -1
- package/dist/analyzers/security/base-detector.d.ts +0 -58
- package/dist/analyzers/security/base-detector.js +0 -104
- package/dist/analyzers/security/base-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/command-injection-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/command-injection-detector.js +0 -84
- package/dist/analyzers/security/detectors/command-injection-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/hardcoded-secrets-detector.d.ts +0 -16
- package/dist/analyzers/security/detectors/hardcoded-secrets-detector.js +0 -140
- package/dist/analyzers/security/detectors/hardcoded-secrets-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/insecure-deserialization-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/insecure-deserialization-detector.js +0 -109
- package/dist/analyzers/security/detectors/insecure-deserialization-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/insecure-random-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/insecure-random-detector.js +0 -61
- package/dist/analyzers/security/detectors/insecure-random-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/path-traversal-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/path-traversal-detector.js +0 -82
- package/dist/analyzers/security/detectors/path-traversal-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/sql-injection-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/sql-injection-detector.js +0 -88
- package/dist/analyzers/security/detectors/sql-injection-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/weak-crypto-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/weak-crypto-detector.js +0 -104
- package/dist/analyzers/security/detectors/weak-crypto-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/xss-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/xss-detector.js +0 -90
- package/dist/analyzers/security/detectors/xss-detector.js.map +0 -1
- package/dist/analyzers/security/index.d.ts +0 -16
- package/dist/analyzers/security/index.js +0 -18
- package/dist/analyzers/security/index.js.map +0 -1
- package/dist/analyzers/security/security-analyzer.d.ts +0 -38
- package/dist/analyzers/security/security-analyzer.js +0 -215
- package/dist/analyzers/security/security-analyzer.js.map +0 -1
- package/dist/analyzers/security/types.d.ts +0 -95
- package/dist/analyzers/security/types.js +0 -7
- package/dist/analyzers/security/types.js.map +0 -1
- package/dist/tools/analysis-tools/architecture-tool.d.ts +0 -46
- package/dist/tools/analysis-tools/architecture-tool.js +0 -124
- package/dist/tools/analysis-tools/architecture-tool.js.map +0 -1
- package/dist/tools/analysis-tools/validation-tool.d.ts +0 -51
- package/dist/tools/analysis-tools/validation-tool.js +0 -121
- package/dist/tools/analysis-tools/validation-tool.js.map +0 -1
- package/dist/tools/analysis-tools.d.ts +0 -73
- package/dist/tools/analysis-tools.js +0 -422
- package/dist/tools/analysis-tools.js.map +0 -1
- package/dist/types/analysis.d.ts +0 -177
- package/dist/types/analysis.js +0 -8
- package/dist/types/analysis.js.map +0 -1
- package/dist/utils/analysis-logger.d.ts +0 -50
- package/dist/utils/analysis-logger.js +0 -73
- package/dist/utils/analysis-logger.js.map +0 -1
|
@@ -1,305 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AST Parser
|
|
3
|
-
*
|
|
4
|
-
* Provides TypeScript/JavaScript AST parsing using ts-morph
|
|
5
|
-
*/
|
|
6
|
-
import { Project, ScriptTarget, ModuleKind, SyntaxKind } from 'ts-morph';
|
|
7
|
-
export class ASTParser {
|
|
8
|
-
project;
|
|
9
|
-
constructor() {
|
|
10
|
-
this.project = new Project({
|
|
11
|
-
compilerOptions: {
|
|
12
|
-
target: ScriptTarget.Latest,
|
|
13
|
-
module: ModuleKind.CommonJS,
|
|
14
|
-
allowJs: true,
|
|
15
|
-
skipLibCheck: true,
|
|
16
|
-
},
|
|
17
|
-
skipAddingFilesFromTsConfig: true,
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Parse a TypeScript/JavaScript file
|
|
22
|
-
*/
|
|
23
|
-
parseFile(filePath) {
|
|
24
|
-
// Check if file was already added (by getSourceFile for semantic analysis)
|
|
25
|
-
const existingFile = this.project.getSourceFile(filePath);
|
|
26
|
-
const sourceFile = existingFile || this.project.addSourceFileAtPath(filePath);
|
|
27
|
-
const shouldRemove = !existingFile; // Only remove if we just added it
|
|
28
|
-
try {
|
|
29
|
-
const functions = this.extractFunctions(sourceFile);
|
|
30
|
-
const classes = this.extractClasses(sourceFile);
|
|
31
|
-
const imports = this.extractImports(sourceFile);
|
|
32
|
-
const exports = this.extractExports(sourceFile);
|
|
33
|
-
return Object.freeze({
|
|
34
|
-
filePath,
|
|
35
|
-
functions: Object.freeze(functions),
|
|
36
|
-
classes: Object.freeze(classes),
|
|
37
|
-
imports: Object.freeze(imports),
|
|
38
|
-
exports: Object.freeze(exports),
|
|
39
|
-
totalLines: sourceFile.getEndLineNumber(),
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
finally {
|
|
43
|
-
// Clean up to prevent memory leaks, but preserve files needed for semantic analysis
|
|
44
|
-
if (shouldRemove) {
|
|
45
|
-
this.project.removeSourceFile(sourceFile);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Parse file content directly
|
|
51
|
-
*/
|
|
52
|
-
parseContent(content, filePath = 'temp.ts') {
|
|
53
|
-
const sourceFile = this.project.createSourceFile(filePath, content, { overwrite: true });
|
|
54
|
-
try {
|
|
55
|
-
const functions = this.extractFunctions(sourceFile);
|
|
56
|
-
const classes = this.extractClasses(sourceFile);
|
|
57
|
-
const imports = this.extractImports(sourceFile);
|
|
58
|
-
const exports = this.extractExports(sourceFile);
|
|
59
|
-
return Object.freeze({
|
|
60
|
-
filePath,
|
|
61
|
-
functions: Object.freeze(functions),
|
|
62
|
-
classes: Object.freeze(classes),
|
|
63
|
-
imports: Object.freeze(imports),
|
|
64
|
-
exports: Object.freeze(exports),
|
|
65
|
-
totalLines: sourceFile.getEndLineNumber(),
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
finally {
|
|
69
|
-
this.project.removeSourceFile(sourceFile);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Extract all functions from source file
|
|
74
|
-
*/
|
|
75
|
-
extractFunctions(sourceFile) {
|
|
76
|
-
const functions = [];
|
|
77
|
-
sourceFile.getFunctions().forEach(func => {
|
|
78
|
-
const name = func.getName() || '<anonymous>';
|
|
79
|
-
const parameters = this.extractParameters(func);
|
|
80
|
-
const startLine = func.getStartLineNumber();
|
|
81
|
-
const endLine = func.getEndLineNumber();
|
|
82
|
-
functions.push(Object.freeze({
|
|
83
|
-
name,
|
|
84
|
-
parameters: Object.freeze(parameters),
|
|
85
|
-
returnType: func.getReturnType().getText(),
|
|
86
|
-
startLine,
|
|
87
|
-
endLine,
|
|
88
|
-
complexity: this.calculateCyclomaticComplexity(func.getBody()?.getText() || ''),
|
|
89
|
-
length: endLine - startLine + 1,
|
|
90
|
-
isAsync: func.isAsync(),
|
|
91
|
-
isExported: func.isExported(),
|
|
92
|
-
}));
|
|
93
|
-
});
|
|
94
|
-
return functions;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Extract all classes from source file
|
|
98
|
-
*/
|
|
99
|
-
extractClasses(sourceFile) {
|
|
100
|
-
const classes = [];
|
|
101
|
-
sourceFile.getClasses().forEach(cls => {
|
|
102
|
-
const name = cls.getName() || '<anonymous>';
|
|
103
|
-
const methods = this.extractMethods(cls);
|
|
104
|
-
const properties = this.extractProperties(cls);
|
|
105
|
-
const startLine = cls.getStartLineNumber();
|
|
106
|
-
const endLine = cls.getEndLineNumber();
|
|
107
|
-
classes.push(Object.freeze({
|
|
108
|
-
name,
|
|
109
|
-
methods: Object.freeze(methods),
|
|
110
|
-
properties: Object.freeze(properties),
|
|
111
|
-
startLine,
|
|
112
|
-
endLine,
|
|
113
|
-
length: endLine - startLine + 1,
|
|
114
|
-
isExported: cls.isExported(),
|
|
115
|
-
extendsClass: cls.getExtends()?.getText(),
|
|
116
|
-
implementsInterfaces: Object.freeze(cls.getImplements().map(i => i.getText())),
|
|
117
|
-
}));
|
|
118
|
-
});
|
|
119
|
-
return classes;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Extract methods from a class
|
|
123
|
-
*/
|
|
124
|
-
extractMethods(cls) {
|
|
125
|
-
const methods = [];
|
|
126
|
-
cls.getMethods().forEach((method) => {
|
|
127
|
-
const name = method.getName();
|
|
128
|
-
const parameters = this.extractParameters(method);
|
|
129
|
-
const startLine = method.getStartLineNumber();
|
|
130
|
-
const endLine = method.getEndLineNumber();
|
|
131
|
-
// Determine visibility
|
|
132
|
-
let visibility = 'public';
|
|
133
|
-
if (method.hasModifier(SyntaxKind.PrivateKeyword)) {
|
|
134
|
-
visibility = 'private';
|
|
135
|
-
}
|
|
136
|
-
else if (method.hasModifier(SyntaxKind.ProtectedKeyword)) {
|
|
137
|
-
visibility = 'protected';
|
|
138
|
-
}
|
|
139
|
-
methods.push(Object.freeze({
|
|
140
|
-
name,
|
|
141
|
-
parameters: Object.freeze(parameters),
|
|
142
|
-
returnType: method.getReturnType().getText(),
|
|
143
|
-
visibility,
|
|
144
|
-
isStatic: method.isStatic(),
|
|
145
|
-
isAsync: method.isAsync(),
|
|
146
|
-
complexity: this.calculateCyclomaticComplexity(method.getBody()?.getText() || ''),
|
|
147
|
-
length: endLine - startLine + 1,
|
|
148
|
-
startLine,
|
|
149
|
-
endLine,
|
|
150
|
-
}));
|
|
151
|
-
});
|
|
152
|
-
return methods;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Extract properties from a class
|
|
156
|
-
*/
|
|
157
|
-
extractProperties(cls) {
|
|
158
|
-
const properties = [];
|
|
159
|
-
cls.getProperties().forEach((prop) => {
|
|
160
|
-
const name = prop.getName();
|
|
161
|
-
// Determine visibility
|
|
162
|
-
let visibility = 'public';
|
|
163
|
-
if (prop.hasModifier(SyntaxKind.PrivateKeyword)) {
|
|
164
|
-
visibility = 'private';
|
|
165
|
-
}
|
|
166
|
-
else if (prop.hasModifier(SyntaxKind.ProtectedKeyword)) {
|
|
167
|
-
visibility = 'protected';
|
|
168
|
-
}
|
|
169
|
-
properties.push(Object.freeze({
|
|
170
|
-
name,
|
|
171
|
-
type: prop.getType().getText(),
|
|
172
|
-
visibility,
|
|
173
|
-
isReadonly: prop.isReadonly(),
|
|
174
|
-
isStatic: prop.isStatic(),
|
|
175
|
-
hasInitializer: prop.hasInitializer(),
|
|
176
|
-
}));
|
|
177
|
-
});
|
|
178
|
-
return properties;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Extract parameters from a function or method
|
|
182
|
-
*/
|
|
183
|
-
extractParameters(func) {
|
|
184
|
-
const parameters = [];
|
|
185
|
-
func.getParameters().forEach((param) => {
|
|
186
|
-
parameters.push(Object.freeze({
|
|
187
|
-
name: param.getName(),
|
|
188
|
-
type: param.getType().getText(),
|
|
189
|
-
isOptional: param.isOptional(),
|
|
190
|
-
hasDefault: param.hasInitializer(),
|
|
191
|
-
}));
|
|
192
|
-
});
|
|
193
|
-
return parameters;
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Extract imports from source file
|
|
197
|
-
*/
|
|
198
|
-
extractImports(sourceFile) {
|
|
199
|
-
const imports = [];
|
|
200
|
-
sourceFile.getImportDeclarations().forEach(imp => {
|
|
201
|
-
const moduleSpecifier = imp.getModuleSpecifierValue();
|
|
202
|
-
const namedImports = imp.getNamedImports().map(n => n.getName());
|
|
203
|
-
const defaultImport = imp.getDefaultImport()?.getText();
|
|
204
|
-
const namespaceImport = imp.getNamespaceImport()?.getText();
|
|
205
|
-
// Determine if external (starts with letter, not './' or '../')
|
|
206
|
-
const isExternal = !moduleSpecifier.startsWith('.') && !moduleSpecifier.startsWith('/');
|
|
207
|
-
// Check if type-only import
|
|
208
|
-
const isTypeOnly = imp.isTypeOnly();
|
|
209
|
-
imports.push(Object.freeze({
|
|
210
|
-
moduleSpecifier,
|
|
211
|
-
namedImports: Object.freeze(namedImports),
|
|
212
|
-
defaultImport,
|
|
213
|
-
namespaceImport,
|
|
214
|
-
isExternal,
|
|
215
|
-
isTypeOnly,
|
|
216
|
-
}));
|
|
217
|
-
});
|
|
218
|
-
return imports;
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Extract exports from source file
|
|
222
|
-
*/
|
|
223
|
-
extractExports(sourceFile) {
|
|
224
|
-
const exports = [];
|
|
225
|
-
// Named exports
|
|
226
|
-
sourceFile.getExportDeclarations().forEach(exp => {
|
|
227
|
-
exp.getNamedExports().forEach(named => {
|
|
228
|
-
exports.push(Object.freeze({
|
|
229
|
-
name: named.getName(),
|
|
230
|
-
isDefault: false,
|
|
231
|
-
type: 'variable',
|
|
232
|
-
}));
|
|
233
|
-
});
|
|
234
|
-
});
|
|
235
|
-
// Exported functions
|
|
236
|
-
sourceFile.getFunctions().forEach(func => {
|
|
237
|
-
if (func.isExported()) {
|
|
238
|
-
exports.push(Object.freeze({
|
|
239
|
-
name: func.getName() || '<anonymous>',
|
|
240
|
-
isDefault: func.isDefaultExport(),
|
|
241
|
-
type: 'function',
|
|
242
|
-
}));
|
|
243
|
-
}
|
|
244
|
-
});
|
|
245
|
-
// Exported classes
|
|
246
|
-
sourceFile.getClasses().forEach(cls => {
|
|
247
|
-
if (cls.isExported()) {
|
|
248
|
-
exports.push(Object.freeze({
|
|
249
|
-
name: cls.getName() || '<anonymous>',
|
|
250
|
-
isDefault: cls.isDefaultExport(),
|
|
251
|
-
type: 'class',
|
|
252
|
-
}));
|
|
253
|
-
}
|
|
254
|
-
});
|
|
255
|
-
return exports;
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Calculate cyclomatic complexity (simplified)
|
|
259
|
-
*/
|
|
260
|
-
calculateCyclomaticComplexity(code) {
|
|
261
|
-
let complexity = 1;
|
|
262
|
-
// Count decision points
|
|
263
|
-
const patterns = [
|
|
264
|
-
/\bif\b/g,
|
|
265
|
-
/\belse\s+if\b/g,
|
|
266
|
-
/\bfor\b/g,
|
|
267
|
-
/\bwhile\b/g,
|
|
268
|
-
/\bcase\b/g,
|
|
269
|
-
/\bcatch\b/g,
|
|
270
|
-
/&&/g,
|
|
271
|
-
/\|\|/g,
|
|
272
|
-
/\?/g,
|
|
273
|
-
];
|
|
274
|
-
for (const pattern of patterns) {
|
|
275
|
-
const matches = code.match(pattern);
|
|
276
|
-
if (matches) {
|
|
277
|
-
complexity += matches.length;
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
return complexity;
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* Get raw source file for advanced operations
|
|
284
|
-
* Note: This keeps the file in the project for semantic analysis (findReferences, etc.)
|
|
285
|
-
*/
|
|
286
|
-
getSourceFile(filePath) {
|
|
287
|
-
// Check if file is already in project
|
|
288
|
-
const existing = this.project.getSourceFile(filePath);
|
|
289
|
-
if (existing) {
|
|
290
|
-
return existing;
|
|
291
|
-
}
|
|
292
|
-
// Add new file and keep it in project for semantic operations
|
|
293
|
-
return this.project.addSourceFileAtPath(filePath);
|
|
294
|
-
}
|
|
295
|
-
/**
|
|
296
|
-
* Clear project cache
|
|
297
|
-
*/
|
|
298
|
-
clear() {
|
|
299
|
-
const sourceFiles = this.project.getSourceFiles();
|
|
300
|
-
for (const sourceFile of sourceFiles) {
|
|
301
|
-
this.project.removeSourceFile(sourceFile);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
//# sourceMappingURL=parser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/analyzers/ast/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AST Traverser
|
|
3
|
-
*
|
|
4
|
-
* Utilities for traversing and visiting AST nodes
|
|
5
|
-
*/
|
|
6
|
-
import type { FileASTInfo, FunctionInfo, ClassInfo, MethodInfo, NodeVisitor } from './types.js';
|
|
7
|
-
/**
|
|
8
|
-
* Visit all functions in a file AST
|
|
9
|
-
*/
|
|
10
|
-
export declare function visitFunctions(ast: FileASTInfo, visitor: NodeVisitor<FunctionInfo>): void;
|
|
11
|
-
/**
|
|
12
|
-
* Visit all classes in a file AST
|
|
13
|
-
*/
|
|
14
|
-
export declare function visitClasses(ast: FileASTInfo, visitor: NodeVisitor<ClassInfo>): void;
|
|
15
|
-
/**
|
|
16
|
-
* Visit all methods in all classes
|
|
17
|
-
*/
|
|
18
|
-
export declare function visitMethods(ast: FileASTInfo, visitor: NodeVisitor<MethodInfo>): void;
|
|
19
|
-
/**
|
|
20
|
-
* Find first function matching predicate
|
|
21
|
-
*/
|
|
22
|
-
export declare function findFunction(ast: FileASTInfo, predicate: (func: FunctionInfo) => boolean): FunctionInfo | undefined;
|
|
23
|
-
/**
|
|
24
|
-
* Find all functions matching predicate
|
|
25
|
-
*/
|
|
26
|
-
export declare function findFunctions(ast: FileASTInfo, predicate: (func: FunctionInfo) => boolean): FunctionInfo[];
|
|
27
|
-
/**
|
|
28
|
-
* Find first class matching predicate
|
|
29
|
-
*/
|
|
30
|
-
export declare function findClass(ast: FileASTInfo, predicate: (cls: ClassInfo) => boolean): ClassInfo | undefined;
|
|
31
|
-
/**
|
|
32
|
-
* Find all classes matching predicate
|
|
33
|
-
*/
|
|
34
|
-
export declare function findClasses(ast: FileASTInfo, predicate: (cls: ClassInfo) => boolean): ClassInfo[];
|
|
35
|
-
/**
|
|
36
|
-
* Find method by name in a specific class
|
|
37
|
-
*/
|
|
38
|
-
export declare function findMethodInClass(cls: ClassInfo, methodName: string): MethodInfo | undefined;
|
|
39
|
-
/**
|
|
40
|
-
* Collect all items matching a condition
|
|
41
|
-
*/
|
|
42
|
-
export declare function collect<T>(items: readonly T[], predicate: (item: T) => boolean): T[];
|
|
43
|
-
/**
|
|
44
|
-
* Map over all functions and classes
|
|
45
|
-
*/
|
|
46
|
-
export declare function mapAllCallables<T>(ast: FileASTInfo, funcMapper: (func: FunctionInfo) => T, methodMapper: (method: MethodInfo, className: string) => T): T[];
|
|
47
|
-
/**
|
|
48
|
-
* Count total callables (functions + methods)
|
|
49
|
-
*/
|
|
50
|
-
export declare function countCallables(ast: FileASTInfo): number;
|
|
51
|
-
/**
|
|
52
|
-
* Get all callable names (functions and methods)
|
|
53
|
-
*/
|
|
54
|
-
export declare function getAllCallableNames(ast: FileASTInfo): string[];
|
|
55
|
-
/**
|
|
56
|
-
* Check if file has any high-complexity functions/methods
|
|
57
|
-
*/
|
|
58
|
-
export declare function hasHighComplexity(ast: FileASTInfo, threshold?: number): boolean;
|
|
59
|
-
/**
|
|
60
|
-
* Get complexity statistics
|
|
61
|
-
*/
|
|
62
|
-
export declare function getComplexityStats(ast: FileASTInfo): {
|
|
63
|
-
min: number;
|
|
64
|
-
max: number;
|
|
65
|
-
average: number;
|
|
66
|
-
total: number;
|
|
67
|
-
};
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AST Traverser
|
|
3
|
-
*
|
|
4
|
-
* Utilities for traversing and visiting AST nodes
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Visit all functions in a file AST
|
|
8
|
-
*/
|
|
9
|
-
export function visitFunctions(ast, visitor) {
|
|
10
|
-
for (const func of ast.functions) {
|
|
11
|
-
const result = visitor(func);
|
|
12
|
-
if (result === false)
|
|
13
|
-
break; // Early exit if visitor returns false
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Visit all classes in a file AST
|
|
18
|
-
*/
|
|
19
|
-
export function visitClasses(ast, visitor) {
|
|
20
|
-
for (const cls of ast.classes) {
|
|
21
|
-
const result = visitor(cls);
|
|
22
|
-
if (result === false)
|
|
23
|
-
break;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Visit all methods in all classes
|
|
28
|
-
*/
|
|
29
|
-
export function visitMethods(ast, visitor) {
|
|
30
|
-
for (const cls of ast.classes) {
|
|
31
|
-
for (const method of cls.methods) {
|
|
32
|
-
const result = visitor(method);
|
|
33
|
-
if (result === false)
|
|
34
|
-
return; // Early exit
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Find first function matching predicate
|
|
40
|
-
*/
|
|
41
|
-
export function findFunction(ast, predicate) {
|
|
42
|
-
return ast.functions.find(predicate);
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Find all functions matching predicate
|
|
46
|
-
*/
|
|
47
|
-
export function findFunctions(ast, predicate) {
|
|
48
|
-
return ast.functions.filter(predicate);
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Find first class matching predicate
|
|
52
|
-
*/
|
|
53
|
-
export function findClass(ast, predicate) {
|
|
54
|
-
return ast.classes.find(predicate);
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Find all classes matching predicate
|
|
58
|
-
*/
|
|
59
|
-
export function findClasses(ast, predicate) {
|
|
60
|
-
return ast.classes.filter(predicate);
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Find method by name in a specific class
|
|
64
|
-
*/
|
|
65
|
-
export function findMethodInClass(cls, methodName) {
|
|
66
|
-
return cls.methods.find(m => m.name === methodName);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Collect all items matching a condition
|
|
70
|
-
*/
|
|
71
|
-
export function collect(items, predicate) {
|
|
72
|
-
return items.filter(predicate);
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Map over all functions and classes
|
|
76
|
-
*/
|
|
77
|
-
export function mapAllCallables(ast, funcMapper, methodMapper) {
|
|
78
|
-
const results = [];
|
|
79
|
-
// Map functions
|
|
80
|
-
for (const func of ast.functions) {
|
|
81
|
-
results.push(funcMapper(func));
|
|
82
|
-
}
|
|
83
|
-
// Map methods
|
|
84
|
-
for (const cls of ast.classes) {
|
|
85
|
-
for (const method of cls.methods) {
|
|
86
|
-
results.push(methodMapper(method, cls.name));
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return results;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Count total callables (functions + methods)
|
|
93
|
-
*/
|
|
94
|
-
export function countCallables(ast) {
|
|
95
|
-
const functionCount = ast.functions.length;
|
|
96
|
-
const methodCount = ast.classes.reduce((sum, cls) => sum + cls.methods.length, 0);
|
|
97
|
-
return functionCount + methodCount;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Get all callable names (functions and methods)
|
|
101
|
-
*/
|
|
102
|
-
export function getAllCallableNames(ast) {
|
|
103
|
-
const names = [];
|
|
104
|
-
for (const func of ast.functions) {
|
|
105
|
-
names.push(func.name);
|
|
106
|
-
}
|
|
107
|
-
for (const cls of ast.classes) {
|
|
108
|
-
for (const method of cls.methods) {
|
|
109
|
-
names.push(`${cls.name}.${method.name}`);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
return names;
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Check if file has any high-complexity functions/methods
|
|
116
|
-
*/
|
|
117
|
-
export function hasHighComplexity(ast, threshold = 10) {
|
|
118
|
-
// Check functions
|
|
119
|
-
for (const func of ast.functions) {
|
|
120
|
-
if (func.complexity > threshold)
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
// Check methods
|
|
124
|
-
for (const cls of ast.classes) {
|
|
125
|
-
for (const method of cls.methods) {
|
|
126
|
-
if (method.complexity > threshold)
|
|
127
|
-
return true;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Get complexity statistics
|
|
134
|
-
*/
|
|
135
|
-
export function getComplexityStats(ast) {
|
|
136
|
-
const complexities = [];
|
|
137
|
-
// Collect function complexities
|
|
138
|
-
for (const func of ast.functions) {
|
|
139
|
-
complexities.push(func.complexity);
|
|
140
|
-
}
|
|
141
|
-
// Collect method complexities
|
|
142
|
-
for (const cls of ast.classes) {
|
|
143
|
-
for (const method of cls.methods) {
|
|
144
|
-
complexities.push(method.complexity);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
if (complexities.length === 0) {
|
|
148
|
-
return { min: 0, max: 0, average: 0, total: 0 };
|
|
149
|
-
}
|
|
150
|
-
const total = complexities.reduce((sum, c) => sum + c, 0);
|
|
151
|
-
const min = Math.min(...complexities);
|
|
152
|
-
const max = Math.max(...complexities);
|
|
153
|
-
const average = total / complexities.length;
|
|
154
|
-
return { min, max, average, total };
|
|
155
|
-
}
|
|
156
|
-
//# sourceMappingURL=traverser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"traverser.js","sourceRoot":"","sources":["../../../src/analyzers/ast/traverser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AST Parser Types
|
|
3
|
-
*
|
|
4
|
-
* Type definitions for AST-based analysis
|
|
5
|
-
*/
|
|
6
|
-
import type { SourceFile, FunctionDeclaration, ClassDeclaration, MethodDeclaration, ImportDeclaration, ExportDeclaration } from 'ts-morph';
|
|
7
|
-
/**
|
|
8
|
-
* Function information extracted from AST
|
|
9
|
-
*/
|
|
10
|
-
export interface FunctionInfo {
|
|
11
|
-
readonly name: string;
|
|
12
|
-
readonly parameters: ReadonlyArray<ParameterInfo>;
|
|
13
|
-
readonly returnType?: string;
|
|
14
|
-
readonly startLine: number;
|
|
15
|
-
readonly endLine: number;
|
|
16
|
-
readonly complexity: number;
|
|
17
|
-
readonly length: number;
|
|
18
|
-
readonly isAsync: boolean;
|
|
19
|
-
readonly isExported: boolean;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Parameter information
|
|
23
|
-
*/
|
|
24
|
-
export interface ParameterInfo {
|
|
25
|
-
readonly name: string;
|
|
26
|
-
readonly type?: string;
|
|
27
|
-
readonly isOptional: boolean;
|
|
28
|
-
readonly hasDefault: boolean;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Class information extracted from AST
|
|
32
|
-
*/
|
|
33
|
-
export interface ClassInfo {
|
|
34
|
-
readonly name: string;
|
|
35
|
-
readonly methods: ReadonlyArray<MethodInfo>;
|
|
36
|
-
readonly properties: ReadonlyArray<PropertyInfo>;
|
|
37
|
-
readonly startLine: number;
|
|
38
|
-
readonly endLine: number;
|
|
39
|
-
readonly length: number;
|
|
40
|
-
readonly isExported: boolean;
|
|
41
|
-
readonly extendsClass?: string;
|
|
42
|
-
readonly implementsInterfaces: ReadonlyArray<string>;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Method information
|
|
46
|
-
*/
|
|
47
|
-
export interface MethodInfo {
|
|
48
|
-
readonly name: string;
|
|
49
|
-
readonly parameters: ReadonlyArray<ParameterInfo>;
|
|
50
|
-
readonly returnType?: string;
|
|
51
|
-
readonly visibility: 'public' | 'private' | 'protected';
|
|
52
|
-
readonly isStatic: boolean;
|
|
53
|
-
readonly isAsync: boolean;
|
|
54
|
-
readonly complexity: number;
|
|
55
|
-
readonly length: number;
|
|
56
|
-
readonly startLine: number;
|
|
57
|
-
readonly endLine: number;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Property information
|
|
61
|
-
*/
|
|
62
|
-
export interface PropertyInfo {
|
|
63
|
-
readonly name: string;
|
|
64
|
-
readonly type?: string;
|
|
65
|
-
readonly visibility: 'public' | 'private' | 'protected';
|
|
66
|
-
readonly isReadonly: boolean;
|
|
67
|
-
readonly isStatic: boolean;
|
|
68
|
-
readonly hasInitializer: boolean;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Import information
|
|
72
|
-
*/
|
|
73
|
-
export interface ImportInfo {
|
|
74
|
-
readonly moduleSpecifier: string;
|
|
75
|
-
readonly namedImports: ReadonlyArray<string>;
|
|
76
|
-
readonly defaultImport?: string;
|
|
77
|
-
readonly namespaceImport?: string;
|
|
78
|
-
readonly isExternal: boolean;
|
|
79
|
-
readonly isTypeOnly: boolean;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Export information
|
|
83
|
-
*/
|
|
84
|
-
export interface ExportInfo {
|
|
85
|
-
readonly name: string;
|
|
86
|
-
readonly isDefault: boolean;
|
|
87
|
-
readonly type: 'function' | 'class' | 'variable' | 'type';
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* File AST information
|
|
91
|
-
*/
|
|
92
|
-
export interface FileASTInfo {
|
|
93
|
-
readonly filePath: string;
|
|
94
|
-
readonly functions: ReadonlyArray<FunctionInfo>;
|
|
95
|
-
readonly classes: ReadonlyArray<ClassInfo>;
|
|
96
|
-
readonly imports: ReadonlyArray<ImportInfo>;
|
|
97
|
-
readonly exports: ReadonlyArray<ExportInfo>;
|
|
98
|
-
readonly totalLines: number;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* AST node visitor callback
|
|
102
|
-
*/
|
|
103
|
-
export type NodeVisitor<T> = (node: T) => void | boolean;
|
|
104
|
-
/**
|
|
105
|
-
* Re-export ts-morph types for convenience
|
|
106
|
-
*/
|
|
107
|
-
export type { SourceFile, FunctionDeclaration, ClassDeclaration, MethodDeclaration, ImportDeclaration, ExportDeclaration };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/analyzers/ast/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|