@grafema/core 0.1.1-alpha → 0.2.0-beta
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/Orchestrator.d.ts +7 -0
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +25 -3
- package/dist/config/ConfigLoader.d.ts +18 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -1
- package/dist/config/ConfigLoader.js +65 -3
- package/dist/core/FileExplainer.d.ts +101 -0
- package/dist/core/FileExplainer.d.ts.map +1 -0
- package/dist/core/FileExplainer.js +139 -0
- package/dist/core/NodeFactory.d.ts +44 -5
- package/dist/core/NodeFactory.d.ts.map +1 -1
- package/dist/core/NodeFactory.js +52 -7
- package/dist/core/nodes/ArrayLiteralNode.d.ts.map +1 -1
- package/dist/core/nodes/ArrayLiteralNode.js +4 -2
- package/dist/core/nodes/BranchNode.d.ts +41 -0
- package/dist/core/nodes/BranchNode.d.ts.map +1 -0
- package/dist/core/nodes/BranchNode.js +82 -0
- package/dist/core/nodes/CallSiteNode.d.ts +2 -2
- package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
- package/dist/core/nodes/CallSiteNode.js +9 -5
- package/dist/core/nodes/CaseNode.d.ts +43 -0
- package/dist/core/nodes/CaseNode.d.ts.map +1 -0
- package/dist/core/nodes/CaseNode.js +81 -0
- package/dist/core/nodes/ClassNode.d.ts +2 -2
- package/dist/core/nodes/ClassNode.d.ts.map +1 -1
- package/dist/core/nodes/ClassNode.js +8 -4
- package/dist/core/nodes/ConstantNode.d.ts +2 -2
- package/dist/core/nodes/ConstantNode.d.ts.map +1 -1
- package/dist/core/nodes/ConstantNode.js +6 -4
- package/dist/core/nodes/ConstructorCallNode.d.ts +51 -0
- package/dist/core/nodes/ConstructorCallNode.d.ts.map +1 -0
- package/dist/core/nodes/ConstructorCallNode.js +171 -0
- package/dist/core/nodes/DatabaseQueryNode.d.ts +3 -2
- package/dist/core/nodes/DatabaseQueryNode.d.ts.map +1 -1
- package/dist/core/nodes/DatabaseQueryNode.js +5 -2
- package/dist/core/nodes/DecoratorNode.d.ts +2 -2
- package/dist/core/nodes/DecoratorNode.d.ts.map +1 -1
- package/dist/core/nodes/DecoratorNode.js +5 -3
- package/dist/core/nodes/EnumNode.d.ts +2 -2
- package/dist/core/nodes/EnumNode.d.ts.map +1 -1
- package/dist/core/nodes/EnumNode.js +5 -3
- package/dist/core/nodes/EventListenerNode.d.ts +4 -4
- package/dist/core/nodes/EventListenerNode.d.ts.map +1 -1
- package/dist/core/nodes/EventListenerNode.js +7 -4
- package/dist/core/nodes/ExportNode.d.ts +2 -2
- package/dist/core/nodes/ExportNode.d.ts.map +1 -1
- package/dist/core/nodes/ExportNode.js +8 -4
- package/dist/core/nodes/ExpressionNode.d.ts +2 -2
- package/dist/core/nodes/ExpressionNode.d.ts.map +1 -1
- package/dist/core/nodes/ExpressionNode.js +6 -4
- package/dist/core/nodes/ExternalModuleNode.d.ts +4 -0
- package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -1
- package/dist/core/nodes/ExternalModuleNode.js +10 -2
- package/dist/core/nodes/HttpRequestNode.d.ts +4 -4
- package/dist/core/nodes/HttpRequestNode.d.ts.map +1 -1
- package/dist/core/nodes/HttpRequestNode.js +7 -4
- package/dist/core/nodes/ImportNode.d.ts +10 -2
- package/dist/core/nodes/ImportNode.d.ts.map +1 -1
- package/dist/core/nodes/ImportNode.js +21 -4
- package/dist/core/nodes/InterfaceNode.d.ts +2 -2
- package/dist/core/nodes/InterfaceNode.d.ts.map +1 -1
- package/dist/core/nodes/InterfaceNode.js +5 -3
- package/dist/core/nodes/LiteralNode.d.ts +2 -2
- package/dist/core/nodes/LiteralNode.d.ts.map +1 -1
- package/dist/core/nodes/LiteralNode.js +6 -4
- package/dist/core/nodes/MethodCallNode.d.ts +2 -2
- package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
- package/dist/core/nodes/MethodCallNode.js +9 -5
- package/dist/core/nodes/MethodNode.d.ts +2 -2
- package/dist/core/nodes/MethodNode.d.ts.map +1 -1
- package/dist/core/nodes/MethodNode.js +8 -4
- package/dist/core/nodes/ObjectLiteralNode.d.ts.map +1 -1
- package/dist/core/nodes/ObjectLiteralNode.js +4 -2
- package/dist/core/nodes/ParameterNode.d.ts +2 -2
- package/dist/core/nodes/ParameterNode.d.ts.map +1 -1
- package/dist/core/nodes/ParameterNode.js +5 -3
- package/dist/core/nodes/TypeNode.d.ts +2 -2
- package/dist/core/nodes/TypeNode.d.ts.map +1 -1
- package/dist/core/nodes/TypeNode.js +5 -3
- package/dist/core/nodes/VariableDeclarationNode.d.ts +2 -2
- package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
- package/dist/core/nodes/VariableDeclarationNode.js +9 -5
- package/dist/core/nodes/index.d.ts +3 -0
- package/dist/core/nodes/index.d.ts.map +1 -1
- package/dist/core/nodes/index.js +3 -0
- package/dist/data/builtins/BuiltinRegistry.d.ts +78 -0
- package/dist/data/builtins/BuiltinRegistry.d.ts.map +1 -0
- package/dist/data/builtins/BuiltinRegistry.js +110 -0
- package/dist/data/builtins/definitions.d.ts +28 -0
- package/dist/data/builtins/definitions.d.ts.map +1 -0
- package/dist/data/builtins/definitions.js +250 -0
- package/dist/data/builtins/index.d.ts +10 -0
- package/dist/data/builtins/index.d.ts.map +1 -0
- package/dist/data/builtins/index.js +8 -0
- package/dist/data/builtins/jsGlobals.d.ts +18 -0
- package/dist/data/builtins/jsGlobals.d.ts.map +1 -0
- package/dist/data/builtins/jsGlobals.js +26 -0
- package/dist/data/builtins/types.d.ts +34 -0
- package/dist/data/builtins/types.d.ts.map +1 -0
- package/dist/data/builtins/types.js +7 -0
- package/dist/data/globals/definitions.d.ts +27 -0
- package/dist/data/globals/definitions.d.ts.map +1 -0
- package/dist/data/globals/definitions.js +117 -0
- package/dist/data/globals/index.d.ts +36 -0
- package/dist/data/globals/index.d.ts.map +1 -0
- package/dist/data/globals/index.js +52 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts +23 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -1
- package/dist/diagnostics/DiagnosticReporter.js +88 -0
- package/dist/diagnostics/index.d.ts +1 -1
- package/dist/diagnostics/index.d.ts.map +1 -1
- package/dist/errors/GrafemaError.d.ts +43 -0
- package/dist/errors/GrafemaError.d.ts.map +1 -1
- package/dist/errors/GrafemaError.js +50 -0
- package/dist/index.d.ts +17 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -1
- package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/DatabaseAnalyzer.js +3 -2
- package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressAnalyzer.js +3 -1
- package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts +148 -0
- package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/ExpressResponseAnalyzer.js +495 -0
- package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js +53 -18
- package/dist/plugins/analysis/FetchAnalyzer.d.ts +40 -0
- package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/FetchAnalyzer.js +163 -15
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts +157 -26
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/JSASTAnalyzer.js +2418 -191
- package/dist/plugins/analysis/RustAnalyzer.js +4 -4
- package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SQLiteAnalyzer.js +4 -2
- package/dist/plugins/analysis/SocketIOAnalyzer.d.ts +9 -0
- package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SocketIOAnalyzer.js +91 -7
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts +173 -0
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/GraphBuilder.js +1256 -65
- package/dist/plugins/analysis/ast/types.d.ts +294 -0
- package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +5 -1
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +1 -0
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +12 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +10 -0
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +62 -0
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts +4 -0
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +101 -0
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +16 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +233 -39
- package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/WorkspaceDiscovery.js +9 -4
- package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
- package/dist/plugins/enrichment/AliasTracker.js +16 -1
- package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts +32 -0
- package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -0
- package/dist/plugins/enrichment/ArgumentParameterLinker.js +175 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts +51 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.js +205 -0
- package/dist/plugins/enrichment/ExternalCallResolver.d.ts +42 -0
- package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/ExternalCallResolver.js +213 -0
- package/dist/plugins/enrichment/FunctionCallResolver.d.ts +58 -0
- package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/FunctionCallResolver.js +340 -0
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +16 -3
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js +64 -20
- package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MethodCallResolver.js +15 -1
- package/dist/plugins/enrichment/MountPointResolver.d.ts +14 -12
- package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MountPointResolver.js +172 -151
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts +44 -0
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +271 -0
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +5 -27
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js +62 -139
- package/dist/plugins/indexing/JSModuleIndexer.d.ts +15 -0
- package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/JSModuleIndexer.js +58 -0
- package/dist/plugins/indexing/RustModuleIndexer.d.ts +1 -1
- package/dist/plugins/indexing/RustModuleIndexer.js +4 -4
- package/dist/plugins/validation/BrokenImportValidator.d.ts +31 -0
- package/dist/plugins/validation/BrokenImportValidator.d.ts.map +1 -0
- package/dist/plugins/validation/BrokenImportValidator.js +249 -0
- package/dist/plugins/validation/CallResolverValidator.d.ts +21 -10
- package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
- package/dist/plugins/validation/CallResolverValidator.js +101 -76
- package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
- package/dist/plugins/validation/DataFlowValidator.js +49 -41
- package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
- package/dist/plugins/validation/GraphConnectivityValidator.js +25 -1
- package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
- package/dist/plugins/validation/SQLInjectionValidator.js +2 -3
- package/dist/queries/findCallsInFunction.d.ts +52 -0
- package/dist/queries/findCallsInFunction.d.ts.map +1 -0
- package/dist/queries/findCallsInFunction.js +135 -0
- package/dist/queries/findContainingFunction.d.ts +45 -0
- package/dist/queries/findContainingFunction.d.ts.map +1 -0
- package/dist/queries/findContainingFunction.js +54 -0
- package/dist/queries/index.d.ts +14 -0
- package/dist/queries/index.d.ts.map +1 -0
- package/dist/queries/index.js +11 -0
- package/dist/queries/traceValues.d.ts +70 -0
- package/dist/queries/traceValues.d.ts.map +1 -0
- package/dist/queries/traceValues.js +299 -0
- package/dist/queries/types.d.ts +163 -0
- package/dist/queries/types.d.ts.map +1 -0
- package/dist/queries/types.js +9 -0
- package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
- package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
- package/dist/schema/GraphSchemaExtractor.js +124 -0
- package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
- package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
- package/dist/schema/InterfaceSchemaExtractor.js +112 -0
- package/dist/schema/index.d.ts +5 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +2 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts +12 -18
- package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
- package/dist/storage/backends/RFDBServerBackend.js +41 -52
- package/dist/storage/backends/typeValidation.d.ts.map +1 -1
- package/dist/storage/backends/typeValidation.js +1 -0
- package/package.json +3 -3
- package/src/Orchestrator.ts +35 -3
- package/src/config/ConfigLoader.ts +94 -3
- package/src/core/FileExplainer.ts +179 -0
- package/src/core/NodeFactory.ts +72 -8
- package/src/core/nodes/ArrayLiteralNode.ts +3 -2
- package/src/core/nodes/BranchNode.ts +113 -0
- package/src/core/nodes/CallSiteNode.ts +7 -5
- package/src/core/nodes/CaseNode.ts +123 -0
- package/src/core/nodes/ClassNode.ts +6 -4
- package/src/core/nodes/ConstantNode.ts +5 -4
- package/src/core/nodes/ConstructorCallNode.ts +217 -0
- package/src/core/nodes/DatabaseQueryNode.ts +5 -1
- package/src/core/nodes/DecoratorNode.ts +4 -3
- package/src/core/nodes/EnumNode.ts +4 -3
- package/src/core/nodes/EventListenerNode.ts +7 -4
- package/src/core/nodes/ExportNode.ts +6 -4
- package/src/core/nodes/ExpressionNode.ts +5 -4
- package/src/core/nodes/ExternalModuleNode.ts +11 -2
- package/src/core/nodes/HttpRequestNode.ts +7 -4
- package/src/core/nodes/ImportNode.ts +31 -4
- package/src/core/nodes/InterfaceNode.ts +4 -3
- package/src/core/nodes/LiteralNode.ts +5 -4
- package/src/core/nodes/MethodCallNode.ts +7 -5
- package/src/core/nodes/MethodNode.ts +6 -4
- package/src/core/nodes/ObjectLiteralNode.ts +3 -2
- package/src/core/nodes/ParameterNode.ts +4 -3
- package/src/core/nodes/TypeNode.ts +4 -3
- package/src/core/nodes/VariableDeclarationNode.ts +7 -5
- package/src/core/nodes/index.ts +3 -0
- package/src/data/builtins/BuiltinRegistry.ts +124 -0
- package/src/data/builtins/definitions.ts +267 -0
- package/src/data/builtins/index.ts +10 -0
- package/src/data/builtins/jsGlobals.ts +28 -0
- package/src/data/builtins/types.ts +36 -0
- package/src/data/globals/definitions.ts +156 -0
- package/src/data/globals/index.ts +66 -0
- package/src/diagnostics/DiagnosticReporter.ts +120 -0
- package/src/diagnostics/index.ts +1 -1
- package/src/errors/GrafemaError.ts +65 -0
- package/src/index.ts +45 -0
- package/src/plugins/analysis/DatabaseAnalyzer.ts +4 -2
- package/src/plugins/analysis/ExpressAnalyzer.ts +5 -1
- package/src/plugins/analysis/ExpressResponseAnalyzer.ts +636 -0
- package/src/plugins/analysis/ExpressRouteAnalyzer.ts +57 -18
- package/src/plugins/analysis/FetchAnalyzer.ts +204 -16
- package/src/plugins/analysis/JSASTAnalyzer.ts +2958 -260
- package/src/plugins/analysis/RustAnalyzer.ts +4 -4
- package/src/plugins/analysis/SQLiteAnalyzer.ts +5 -2
- package/src/plugins/analysis/SocketIOAnalyzer.ts +121 -7
- package/src/plugins/analysis/ast/GraphBuilder.ts +1578 -70
- package/src/plugins/analysis/ast/types.ts +387 -0
- package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +8 -0
- package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +16 -1
- package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +77 -2
- package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +112 -1
- package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +272 -47
- package/src/plugins/discovery/WorkspaceDiscovery.ts +11 -4
- package/src/plugins/enrichment/AliasTracker.ts +22 -1
- package/src/plugins/enrichment/ArgumentParameterLinker.ts +240 -0
- package/src/plugins/enrichment/ClosureCaptureEnricher.ts +267 -0
- package/src/plugins/enrichment/ExternalCallResolver.ts +262 -0
- package/src/plugins/enrichment/FunctionCallResolver.ts +456 -0
- package/src/plugins/enrichment/HTTPConnectionEnricher.ts +70 -20
- package/src/plugins/enrichment/MethodCallResolver.ts +21 -1
- package/src/plugins/enrichment/MountPointResolver.ts +206 -198
- package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +365 -0
- package/src/plugins/enrichment/ValueDomainAnalyzer.ts +67 -184
- package/src/plugins/indexing/JSModuleIndexer.ts +66 -0
- package/src/plugins/indexing/RustModuleIndexer.ts +4 -4
- package/src/plugins/validation/BrokenImportValidator.ts +325 -0
- package/src/plugins/validation/CallResolverValidator.ts +129 -109
- package/src/plugins/validation/DataFlowValidator.ts +75 -58
- package/src/plugins/validation/GraphConnectivityValidator.ts +39 -1
- package/src/plugins/validation/SQLInjectionValidator.ts +2 -5
- package/src/queries/README.md +46 -0
- package/src/queries/findCallsInFunction.ts +206 -0
- package/src/queries/findContainingFunction.ts +83 -0
- package/src/queries/index.ts +23 -0
- package/src/queries/traceValues.ts +398 -0
- package/src/queries/types.ts +187 -0
- package/src/schema/GraphSchemaExtractor.ts +177 -0
- package/src/schema/InterfaceSchemaExtractor.ts +173 -0
- package/src/schema/index.ts +5 -0
- package/src/storage/backends/RFDBServerBackend.ts +58 -70
- package/src/storage/backends/typeValidation.ts +1 -0
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { readFileSync, existsSync } from 'fs';
|
|
6
6
|
import { join, resolve, dirname, relative, basename } from 'path';
|
|
7
7
|
import { createHash } from 'crypto';
|
|
8
|
+
import { minimatch } from 'minimatch';
|
|
8
9
|
import { Plugin, createErrorResult } from '../Plugin.js';
|
|
9
10
|
// @ts-expect-error - no type declarations for node-source-walk
|
|
10
11
|
import Walker from 'node-source-walk';
|
|
@@ -25,6 +26,10 @@ export class JSModuleIndexer extends Plugin {
|
|
|
25
26
|
cache;
|
|
26
27
|
testPatterns;
|
|
27
28
|
markTestFiles;
|
|
29
|
+
// Include/exclude pattern filtering (REG-185)
|
|
30
|
+
includePatterns;
|
|
31
|
+
excludePatterns;
|
|
32
|
+
projectPath = '';
|
|
28
33
|
constructor() {
|
|
29
34
|
super();
|
|
30
35
|
this.walker = new Walker({
|
|
@@ -42,6 +47,39 @@ export class JSModuleIndexer extends Plugin {
|
|
|
42
47
|
return false;
|
|
43
48
|
return this.testPatterns.some(pattern => pattern.test(filePath));
|
|
44
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Check if a file should be skipped based on include/exclude patterns.
|
|
52
|
+
*
|
|
53
|
+
* Logic:
|
|
54
|
+
* 1. If file matches any exclude pattern -> SKIP
|
|
55
|
+
* 2. If include patterns specified AND file doesn't match any -> SKIP
|
|
56
|
+
* 3. Otherwise -> PROCESS
|
|
57
|
+
*
|
|
58
|
+
* @param absolutePath - Absolute path to the file
|
|
59
|
+
* @returns true if file should be skipped, false if it should be processed
|
|
60
|
+
*/
|
|
61
|
+
shouldSkipFile(absolutePath) {
|
|
62
|
+
// Normalize to relative path for pattern matching
|
|
63
|
+
const relativePath = relative(this.projectPath, absolutePath).replace(/\\/g, '/');
|
|
64
|
+
// Check exclude patterns first (if any match, skip)
|
|
65
|
+
if (this.excludePatterns && this.excludePatterns.length > 0) {
|
|
66
|
+
for (const pattern of this.excludePatterns) {
|
|
67
|
+
if (minimatch(relativePath, pattern, { dot: true })) {
|
|
68
|
+
return true; // Excluded
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Check include patterns (if specified, file must match at least one)
|
|
73
|
+
if (this.includePatterns && this.includePatterns.length > 0) {
|
|
74
|
+
for (const pattern of this.includePatterns) {
|
|
75
|
+
if (minimatch(relativePath, pattern, { dot: true })) {
|
|
76
|
+
return false; // Included
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return true; // Include specified but file didn't match any
|
|
80
|
+
}
|
|
81
|
+
return false; // No filtering, process file
|
|
82
|
+
}
|
|
45
83
|
get metadata() {
|
|
46
84
|
return {
|
|
47
85
|
name: 'JSModuleIndexer',
|
|
@@ -171,6 +209,19 @@ export class JSModuleIndexer extends Plugin {
|
|
|
171
209
|
const service = manifest?.service ?? { id: '', name: '', path: '' };
|
|
172
210
|
// Collect parse errors to report (REG-147)
|
|
173
211
|
const parseErrors = [];
|
|
212
|
+
// Store projectPath for shouldSkipFile()
|
|
213
|
+
this.projectPath = projectPath;
|
|
214
|
+
// Read include/exclude patterns from config (REG-185)
|
|
215
|
+
const orchConfig = config;
|
|
216
|
+
this.includePatterns = orchConfig?.include;
|
|
217
|
+
this.excludePatterns = orchConfig?.exclude;
|
|
218
|
+
// Log if patterns are configured
|
|
219
|
+
if (this.includePatterns || this.excludePatterns) {
|
|
220
|
+
logger.info('File filtering enabled', {
|
|
221
|
+
include: this.includePatterns?.length ?? 0,
|
|
222
|
+
exclude: this.excludePatterns?.length ?? 0,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
174
225
|
// Check config for test file marking
|
|
175
226
|
if (config?.analysis?.tests?.markTestFiles === false) {
|
|
176
227
|
this.markTestFiles = false;
|
|
@@ -197,6 +248,13 @@ export class JSModuleIndexer extends Plugin {
|
|
|
197
248
|
const PROGRESS_INTERVAL = 10; // Report every N files
|
|
198
249
|
while (stack.length > 0 && visited.size < MAX_MODULES) {
|
|
199
250
|
const { file: currentFile, depth } = stack.pop();
|
|
251
|
+
// Check if file should be skipped based on include/exclude patterns (REG-185)
|
|
252
|
+
if (this.shouldSkipFile(currentFile)) {
|
|
253
|
+
logger.debug('Skipping file (filtered by patterns)', {
|
|
254
|
+
file: currentFile.replace(projectPath, '')
|
|
255
|
+
});
|
|
256
|
+
continue; // Don't process, don't follow imports
|
|
257
|
+
}
|
|
200
258
|
// Report progress every PROGRESS_INTERVAL files
|
|
201
259
|
if (onProgress && visited.size - lastProgressReport >= PROGRESS_INTERVAL) {
|
|
202
260
|
onProgress({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* RustModuleIndexer - plugin for indexing Rust modules
|
|
3
|
-
* Discovers .rs files in
|
|
3
|
+
* Discovers .rs files in packages/rfdb-server/src/ directory
|
|
4
4
|
*/
|
|
5
5
|
import { Plugin } from '../Plugin.js';
|
|
6
6
|
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* RustModuleIndexer - plugin for indexing Rust modules
|
|
3
|
-
* Discovers .rs files in
|
|
3
|
+
* Discovers .rs files in packages/rfdb-server/src/ directory
|
|
4
4
|
*/
|
|
5
5
|
import { readFileSync, existsSync, readdirSync, statSync } from 'fs';
|
|
6
6
|
import { resolve, relative, basename, join } from 'path';
|
|
@@ -89,10 +89,10 @@ export class RustModuleIndexer extends Plugin {
|
|
|
89
89
|
// Cast manifest to expected shape
|
|
90
90
|
const typedManifest = manifest;
|
|
91
91
|
const { projectPath } = typedManifest;
|
|
92
|
-
// Find
|
|
93
|
-
const rustRoot = resolve(projectPath, '
|
|
92
|
+
// Find packages/rfdb-server/src directory
|
|
93
|
+
const rustRoot = resolve(projectPath, 'packages/rfdb-server/src');
|
|
94
94
|
if (!existsSync(rustRoot)) {
|
|
95
|
-
logger.info('
|
|
95
|
+
logger.info('packages/rfdb-server/src not found, skipping');
|
|
96
96
|
return createSuccessResult({ nodes: 0, edges: 0 }, { skipped: true });
|
|
97
97
|
}
|
|
98
98
|
// Discover all .rs files recursively
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BrokenImportValidator - detects broken imports and undefined symbols (REG-261)
|
|
3
|
+
*
|
|
4
|
+
* This VALIDATION plugin queries the graph (built by ANALYSIS and ENRICHMENT phases)
|
|
5
|
+
* to detect:
|
|
6
|
+
*
|
|
7
|
+
* 1. ERR_BROKEN_IMPORT: Named/default import references non-existent export
|
|
8
|
+
* - IMPORT node with relative source but no IMPORTS_FROM edge
|
|
9
|
+
* - Skips: external (npm) imports, namespace imports, type-only imports
|
|
10
|
+
*
|
|
11
|
+
* 2. ERR_UNDEFINED_SYMBOL: Symbol used but not defined, imported, or global
|
|
12
|
+
* - CALL node without CALLS edge
|
|
13
|
+
* - Not a method call (no `object` property)
|
|
14
|
+
* - Not a local definition (FUNCTION/CLASS/VARIABLE in same file)
|
|
15
|
+
* - Not an import (IMPORT with matching local name)
|
|
16
|
+
* - Not a known global (console, setTimeout, etc.)
|
|
17
|
+
*
|
|
18
|
+
* Architecture follows existing validator patterns:
|
|
19
|
+
* - Phase: VALIDATION
|
|
20
|
+
* - Priority: 85 (after enrichment, before general validators)
|
|
21
|
+
* - Returns: ValidationError[] collected via DiagnosticCollector
|
|
22
|
+
*/
|
|
23
|
+
import { Plugin } from '../Plugin.js';
|
|
24
|
+
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
25
|
+
export declare class BrokenImportValidator extends Plugin {
|
|
26
|
+
private globalsRegistry;
|
|
27
|
+
constructor(config?: Record<string, unknown>);
|
|
28
|
+
get metadata(): PluginMetadata;
|
|
29
|
+
execute(context: PluginContext): Promise<PluginResult>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=BrokenImportValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrokenImportValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/BrokenImportValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAqChF,qBAAa,qBAAsB,SAAQ,MAAM;IAC/C,OAAO,CAAC,eAAe,CAAkB;gBAE7B,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAWhD,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CA4O7D"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BrokenImportValidator - detects broken imports and undefined symbols (REG-261)
|
|
3
|
+
*
|
|
4
|
+
* This VALIDATION plugin queries the graph (built by ANALYSIS and ENRICHMENT phases)
|
|
5
|
+
* to detect:
|
|
6
|
+
*
|
|
7
|
+
* 1. ERR_BROKEN_IMPORT: Named/default import references non-existent export
|
|
8
|
+
* - IMPORT node with relative source but no IMPORTS_FROM edge
|
|
9
|
+
* - Skips: external (npm) imports, namespace imports, type-only imports
|
|
10
|
+
*
|
|
11
|
+
* 2. ERR_UNDEFINED_SYMBOL: Symbol used but not defined, imported, or global
|
|
12
|
+
* - CALL node without CALLS edge
|
|
13
|
+
* - Not a method call (no `object` property)
|
|
14
|
+
* - Not a local definition (FUNCTION/CLASS/VARIABLE in same file)
|
|
15
|
+
* - Not an import (IMPORT with matching local name)
|
|
16
|
+
* - Not a known global (console, setTimeout, etc.)
|
|
17
|
+
*
|
|
18
|
+
* Architecture follows existing validator patterns:
|
|
19
|
+
* - Phase: VALIDATION
|
|
20
|
+
* - Priority: 85 (after enrichment, before general validators)
|
|
21
|
+
* - Returns: ValidationError[] collected via DiagnosticCollector
|
|
22
|
+
*/
|
|
23
|
+
import { Plugin, createSuccessResult } from '../Plugin.js';
|
|
24
|
+
import { ValidationError } from '../../errors/GrafemaError.js';
|
|
25
|
+
import { GlobalsRegistry } from '../../data/globals/index.js';
|
|
26
|
+
// === CONSTANTS ===
|
|
27
|
+
const ERROR_CODES = {
|
|
28
|
+
BROKEN_IMPORT: 'ERR_BROKEN_IMPORT',
|
|
29
|
+
UNDEFINED_SYMBOL: 'ERR_UNDEFINED_SYMBOL',
|
|
30
|
+
};
|
|
31
|
+
// Types that represent local definitions
|
|
32
|
+
const DEFINITION_TYPES = new Set([
|
|
33
|
+
'FUNCTION',
|
|
34
|
+
'CLASS',
|
|
35
|
+
'VARIABLE_DECLARATION',
|
|
36
|
+
'CONSTANT',
|
|
37
|
+
'PARAMETER',
|
|
38
|
+
]);
|
|
39
|
+
// === PLUGIN CLASS ===
|
|
40
|
+
export class BrokenImportValidator extends Plugin {
|
|
41
|
+
globalsRegistry;
|
|
42
|
+
constructor(config = {}) {
|
|
43
|
+
super(config);
|
|
44
|
+
this.globalsRegistry = new GlobalsRegistry();
|
|
45
|
+
// Allow custom globals from config
|
|
46
|
+
const customGlobals = config.customGlobals;
|
|
47
|
+
if (customGlobals) {
|
|
48
|
+
this.globalsRegistry.addCustomGlobals(customGlobals);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
get metadata() {
|
|
52
|
+
return {
|
|
53
|
+
name: 'BrokenImportValidator',
|
|
54
|
+
phase: 'VALIDATION',
|
|
55
|
+
priority: 85, // After enrichment plugins, before general validators
|
|
56
|
+
creates: {
|
|
57
|
+
nodes: [],
|
|
58
|
+
edges: []
|
|
59
|
+
},
|
|
60
|
+
dependencies: ['ImportExportLinker', 'FunctionCallResolver']
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
async execute(context) {
|
|
64
|
+
const { graph, onProgress } = context;
|
|
65
|
+
const logger = this.log(context);
|
|
66
|
+
logger.info('Starting broken import validation');
|
|
67
|
+
const startTime = Date.now();
|
|
68
|
+
const errors = [];
|
|
69
|
+
const stats = {
|
|
70
|
+
importsChecked: 0,
|
|
71
|
+
brokenImports: 0,
|
|
72
|
+
callsChecked: 0,
|
|
73
|
+
undefinedSymbols: 0,
|
|
74
|
+
skipped: {
|
|
75
|
+
externalImports: 0,
|
|
76
|
+
namespaceImports: 0,
|
|
77
|
+
typeOnlyImports: 0,
|
|
78
|
+
methodCalls: 0,
|
|
79
|
+
alreadyResolved: 0,
|
|
80
|
+
localDefinitions: 0,
|
|
81
|
+
imports: 0,
|
|
82
|
+
globals: 0,
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
// === Step 1: Build indexes ===
|
|
86
|
+
// Index: file -> Set<name> for local definitions
|
|
87
|
+
const definitionsByFile = new Map();
|
|
88
|
+
for await (const node of graph.queryNodes({})) {
|
|
89
|
+
if (!DEFINITION_TYPES.has(node.type))
|
|
90
|
+
continue;
|
|
91
|
+
if (!node.file || !node.name)
|
|
92
|
+
continue;
|
|
93
|
+
if (!definitionsByFile.has(node.file)) {
|
|
94
|
+
definitionsByFile.set(node.file, new Set());
|
|
95
|
+
}
|
|
96
|
+
definitionsByFile.get(node.file).add(node.name);
|
|
97
|
+
}
|
|
98
|
+
logger.debug('Indexed definitions', { files: definitionsByFile.size });
|
|
99
|
+
// Index: file:local -> ImportNode
|
|
100
|
+
const importsByFile = new Map();
|
|
101
|
+
const allImports = [];
|
|
102
|
+
for await (const node of graph.queryNodes({ nodeType: 'IMPORT' })) {
|
|
103
|
+
const imp = node;
|
|
104
|
+
if (!imp.file)
|
|
105
|
+
continue;
|
|
106
|
+
allImports.push(imp);
|
|
107
|
+
// Index by local name for undefined symbol checking
|
|
108
|
+
const localName = imp.local || imp.name;
|
|
109
|
+
if (localName) {
|
|
110
|
+
if (!importsByFile.has(imp.file)) {
|
|
111
|
+
importsByFile.set(imp.file, new Map());
|
|
112
|
+
}
|
|
113
|
+
importsByFile.get(imp.file).set(localName, imp);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
logger.debug('Indexed imports', { count: allImports.length });
|
|
117
|
+
// === Step 2: Check for broken imports ===
|
|
118
|
+
for (const imp of allImports) {
|
|
119
|
+
stats.importsChecked++;
|
|
120
|
+
// Progress reporting
|
|
121
|
+
if (onProgress && stats.importsChecked % 100 === 0) {
|
|
122
|
+
onProgress({
|
|
123
|
+
phase: 'validation',
|
|
124
|
+
currentPlugin: 'BrokenImportValidator',
|
|
125
|
+
message: `Checking imports ${stats.importsChecked}/${allImports.length}`,
|
|
126
|
+
totalFiles: allImports.length,
|
|
127
|
+
processedFiles: stats.importsChecked
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
// Skip external (npm) imports - only check relative imports
|
|
131
|
+
const isRelative = imp.source &&
|
|
132
|
+
(imp.source.startsWith('./') || imp.source.startsWith('../'));
|
|
133
|
+
if (!isRelative) {
|
|
134
|
+
stats.skipped.externalImports++;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
// Skip namespace imports - they link to MODULE, not EXPORT
|
|
138
|
+
if (imp.importType === 'namespace') {
|
|
139
|
+
stats.skipped.namespaceImports++;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
// Skip type-only imports (TypeScript) - erased at compile time
|
|
143
|
+
if (imp.importBinding === 'type') {
|
|
144
|
+
stats.skipped.typeOnlyImports++;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
// Check for IMPORTS_FROM edge
|
|
148
|
+
const importsFromEdges = await graph.getOutgoingEdges(imp.id, ['IMPORTS_FROM']);
|
|
149
|
+
if (importsFromEdges.length === 0) {
|
|
150
|
+
// No IMPORTS_FROM edge = broken import
|
|
151
|
+
const importedName = imp.imported || imp.local || imp.name;
|
|
152
|
+
errors.push(new ValidationError(`Import "${importedName}" from "${imp.source}" - export doesn't exist`, ERROR_CODES.BROKEN_IMPORT, {
|
|
153
|
+
filePath: imp.file,
|
|
154
|
+
lineNumber: imp.line,
|
|
155
|
+
phase: 'VALIDATION',
|
|
156
|
+
plugin: 'BrokenImportValidator',
|
|
157
|
+
importedName,
|
|
158
|
+
source: imp.source,
|
|
159
|
+
importType: imp.importType,
|
|
160
|
+
}, `Check if "${importedName}" is exported from "${imp.source}"`, 'error'));
|
|
161
|
+
stats.brokenImports++;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
logger.debug('Broken imports found', { count: stats.brokenImports });
|
|
165
|
+
// === Step 3: Check for undefined symbols ===
|
|
166
|
+
const callsToCheck = [];
|
|
167
|
+
for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
|
|
168
|
+
const call = node;
|
|
169
|
+
// Skip method calls (have object attribute)
|
|
170
|
+
if (call.object) {
|
|
171
|
+
stats.skipped.methodCalls++;
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
// Skip if already has CALLS edge (resolved)
|
|
175
|
+
const callsEdges = await graph.getOutgoingEdges(call.id, ['CALLS']);
|
|
176
|
+
if (callsEdges.length > 0) {
|
|
177
|
+
stats.skipped.alreadyResolved++;
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
callsToCheck.push(call);
|
|
181
|
+
}
|
|
182
|
+
logger.debug('Unresolved calls to check', { count: callsToCheck.length });
|
|
183
|
+
for (const call of callsToCheck) {
|
|
184
|
+
stats.callsChecked++;
|
|
185
|
+
const calledName = call.name;
|
|
186
|
+
const file = call.file;
|
|
187
|
+
if (!calledName || !file)
|
|
188
|
+
continue;
|
|
189
|
+
// Check 1: Is it a local definition?
|
|
190
|
+
const fileDefinitions = definitionsByFile.get(file);
|
|
191
|
+
if (fileDefinitions?.has(calledName)) {
|
|
192
|
+
stats.skipped.localDefinitions++;
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
// Check 2: Is it imported? (even if broken, that's a different error)
|
|
196
|
+
const fileImports = importsByFile.get(file);
|
|
197
|
+
if (fileImports?.has(calledName)) {
|
|
198
|
+
stats.skipped.imports++;
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
// Check 3: Is it a global?
|
|
202
|
+
if (this.globalsRegistry.isGlobal(calledName)) {
|
|
203
|
+
stats.skipped.globals++;
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
// Symbol is undefined
|
|
207
|
+
errors.push(new ValidationError(`"${calledName}" is used but not defined or imported`, ERROR_CODES.UNDEFINED_SYMBOL, {
|
|
208
|
+
filePath: file,
|
|
209
|
+
lineNumber: call.line,
|
|
210
|
+
phase: 'VALIDATION',
|
|
211
|
+
plugin: 'BrokenImportValidator',
|
|
212
|
+
symbol: calledName,
|
|
213
|
+
}, `Add an import for "${calledName}" or define it locally`, 'warning' // Warning severity - might be a false positive
|
|
214
|
+
));
|
|
215
|
+
stats.undefinedSymbols++;
|
|
216
|
+
}
|
|
217
|
+
// === Step 4: Summary ===
|
|
218
|
+
const totalTime = ((Date.now() - startTime) / 1000).toFixed(2);
|
|
219
|
+
const summary = {
|
|
220
|
+
importsChecked: stats.importsChecked,
|
|
221
|
+
brokenImports: stats.brokenImports,
|
|
222
|
+
callsChecked: stats.callsChecked,
|
|
223
|
+
undefinedSymbols: stats.undefinedSymbols,
|
|
224
|
+
skipped: stats.skipped,
|
|
225
|
+
totalIssues: stats.brokenImports + stats.undefinedSymbols,
|
|
226
|
+
time: `${totalTime}s`,
|
|
227
|
+
};
|
|
228
|
+
logger.info('Validation complete', summary);
|
|
229
|
+
if (errors.length > 0) {
|
|
230
|
+
logger.warn('Issues found', {
|
|
231
|
+
brokenImports: stats.brokenImports,
|
|
232
|
+
undefinedSymbols: stats.undefinedSymbols,
|
|
233
|
+
});
|
|
234
|
+
// Log first few errors for visibility
|
|
235
|
+
for (const error of errors.slice(0, 5)) {
|
|
236
|
+
if (error.code === ERROR_CODES.BROKEN_IMPORT) {
|
|
237
|
+
logger.error(`[${error.code}] ${error.message}`);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
logger.warn(`[${error.code}] ${error.message}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (errors.length > 5) {
|
|
244
|
+
logger.debug(`... and ${errors.length - 5} more issues`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return createSuccessResult({ nodes: 0, edges: 0 }, { summary }, errors);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* CallResolverValidator -
|
|
2
|
+
* CallResolverValidator - validates function call resolution (REG-227)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Checks that all function calls are properly resolved:
|
|
5
|
+
* - Internal calls: CALLS edge to FUNCTION node
|
|
6
|
+
* - External calls: CALLS edge to EXTERNAL_MODULE node
|
|
7
|
+
* - Builtin calls: recognized by name (no edge needed)
|
|
8
|
+
* - Unresolved: no edge, not builtin -> WARNING
|
|
6
9
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* Это находит CALL узлы без "object" метаданных (т.е. CALL_SITE, не METHOD_CALL),
|
|
11
|
-
* которые не имеют CALLS ребра к определению функции.
|
|
10
|
+
* This validator runs AFTER FunctionCallResolver and ExternalCallResolver
|
|
11
|
+
* to verify resolution quality and report issues.
|
|
12
12
|
*/
|
|
13
13
|
import { Plugin } from '../Plugin.js';
|
|
14
14
|
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
@@ -16,8 +16,19 @@ export declare class CallResolverValidator extends Plugin {
|
|
|
16
16
|
get metadata(): PluginMetadata;
|
|
17
17
|
execute(context: PluginContext): Promise<PluginResult>;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Determine the resolution type for a CALL node.
|
|
20
|
+
*
|
|
21
|
+
* Resolution priority:
|
|
22
|
+
* 1. Method call (has 'object' attribute) -> 'method'
|
|
23
|
+
* 2. Has CALLS edge to FUNCTION -> 'internal'
|
|
24
|
+
* 3. Has CALLS edge to EXTERNAL_MODULE -> 'external'
|
|
25
|
+
* 4. Name in JS_GLOBAL_FUNCTIONS -> 'builtin'
|
|
26
|
+
* 5. Otherwise -> 'unresolved'
|
|
27
|
+
*/
|
|
28
|
+
private determineResolutionType;
|
|
29
|
+
/**
|
|
30
|
+
* Create a warning for an unresolved call.
|
|
20
31
|
*/
|
|
21
|
-
private
|
|
32
|
+
private createWarning;
|
|
22
33
|
}
|
|
23
34
|
//# sourceMappingURL=CallResolverValidator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallResolverValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/CallResolverValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"CallResolverValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/CallResolverValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA8BhF,qBAAa,qBAAsB,SAAQ,MAAM;IAC/C,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAgE5D;;;;;;;;;OASG;YACW,uBAAuB;IAuCrC;;OAEG;IACH,OAAO,CAAC,aAAa;CAgBtB"}
|