code-auditor-mcp 3.4.11 → 3.4.13
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/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +119 -1
- package/dist/analyzers/__verify_self_probe.d.ts +2 -0
- package/dist/analyzers/__verify_self_probe.d.ts.map +1 -0
- package/dist/analyzers/__verify_self_probe.js +5 -0
- package/dist/analyzers/__verify_self_probe.js.map +1 -0
- package/dist/analyzers/analyzerUtils.d.ts +34 -1
- package/dist/analyzers/analyzerUtils.d.ts.map +1 -1
- package/dist/analyzers/analyzerUtils.js +61 -22
- package/dist/analyzers/analyzerUtils.js.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +18 -23
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.js +198 -186
- package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +78 -55
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js +244 -243
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts +27 -37
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.js +314 -275
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +17 -46
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +620 -523
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
- package/dist/analyzers/documentationAnalyzer.d.ts +7 -2
- package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/documentationAnalyzer.js +259 -198
- package/dist/analyzers/documentationAnalyzer.js.map +1 -1
- package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/invariantsAnalyzer.js +59 -46
- package/dist/analyzers/invariantsAnalyzer.js.map +1 -1
- package/dist/analyzers/orm/adapterRegistry.d.ts +10 -0
- package/dist/analyzers/orm/adapterRegistry.d.ts.map +1 -1
- package/dist/analyzers/orm/adapterRegistry.js +10 -0
- package/dist/analyzers/orm/adapterRegistry.js.map +1 -1
- package/dist/analyzers/orm/drizzleAdapter.d.ts +22 -0
- package/dist/analyzers/orm/drizzleAdapter.d.ts.map +1 -1
- package/dist/analyzers/orm/drizzleAdapter.js +42 -44
- package/dist/analyzers/orm/drizzleAdapter.js.map +1 -1
- package/dist/analyzers/orm/prismaAdapter.d.ts +30 -0
- package/dist/analyzers/orm/prismaAdapter.d.ts.map +1 -1
- package/dist/analyzers/orm/prismaAdapter.js +30 -0
- package/dist/analyzers/orm/prismaAdapter.js.map +1 -1
- package/dist/analyzers/provenance.d.ts +72 -2
- package/dist/analyzers/provenance.d.ts.map +1 -1
- package/dist/analyzers/provenance.js +462 -338
- package/dist/analyzers/provenance.js.map +1 -1
- package/dist/analyzers/reactAnalyzer.d.ts +11 -0
- package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/reactAnalyzer.js +188 -125
- package/dist/analyzers/reactAnalyzer.js.map +1 -1
- package/dist/analyzers/ruleRegistry.d.ts +118 -1
- package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
- package/dist/analyzers/ruleRegistry.js +1717 -104
- package/dist/analyzers/ruleRegistry.js.map +1 -1
- package/dist/analyzers/ruleTiming.d.ts +54 -0
- package/dist/analyzers/ruleTiming.d.ts.map +1 -0
- package/dist/analyzers/ruleTiming.js +71 -0
- package/dist/analyzers/ruleTiming.js.map +1 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +13 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +362 -283
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +26 -68
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +430 -391
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +24 -186
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +1081 -1061
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +3 -49
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +414 -340
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +48 -5
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +262 -134
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +23 -212
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +139 -1518
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +78 -79
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js +613 -472
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts +307 -0
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -0
- package/dist/analyzers/universal/schema/codeAnalysis.js +965 -0
- package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -0
- package/dist/analyzers/universal/schema/config.d.ts +31 -0
- package/dist/analyzers/universal/schema/config.d.ts.map +1 -0
- package/dist/analyzers/universal/schema/config.js +57 -0
- package/dist/analyzers/universal/schema/config.js.map +1 -0
- package/dist/analyzers/universal/schema/discovery.d.ts +167 -0
- package/dist/analyzers/universal/schema/discovery.d.ts.map +1 -0
- package/dist/analyzers/universal/schema/discovery.js +616 -0
- package/dist/analyzers/universal/schema/discovery.js.map +1 -0
- package/dist/analyzers/universal/schema/jsonSchema.d.ts +27 -0
- package/dist/analyzers/universal/schema/jsonSchema.d.ts.map +1 -0
- package/dist/analyzers/universal/schema/jsonSchema.js +368 -0
- package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -0
- package/dist/analyzers/universal/schema/migrations.d.ts +90 -0
- package/dist/analyzers/universal/schema/migrations.d.ts.map +1 -0
- package/dist/analyzers/universal/schema/migrations.js +238 -0
- package/dist/analyzers/universal/schema/migrations.js.map +1 -0
- package/dist/analyzers/universal/schema/types.d.ts +131 -0
- package/dist/analyzers/universal/schema/types.d.ts.map +1 -0
- package/dist/analyzers/universal/schema/types.js +10 -0
- package/dist/analyzers/universal/schema/types.js.map +1 -0
- package/dist/analyzers/universal/schema/violations.d.ts +44 -0
- package/dist/analyzers/universal/schema/violations.d.ts.map +1 -0
- package/dist/analyzers/universal/schema/violations.js +54 -0
- package/dist/analyzers/universal/schema/violations.js.map +1 -0
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +101 -39
- package/dist/auditRunner.js.map +1 -1
- package/dist/cli.js +348 -40
- package/dist/cli.js.map +1 -1
- package/dist/config/configLoader.d.ts.map +1 -1
- package/dist/config/configLoader.js +9 -7
- package/dist/config/configLoader.js.map +1 -1
- package/dist/config/defaults.d.ts +12 -3
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +15 -5
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/effectiveConfig.d.ts +75 -0
- package/dist/config/effectiveConfig.d.ts.map +1 -0
- package/dist/config/effectiveConfig.js +213 -0
- package/dist/config/effectiveConfig.js.map +1 -0
- package/dist/config/pathProfiles.d.ts +7 -4
- package/dist/config/pathProfiles.d.ts.map +1 -1
- package/dist/config/pathProfiles.js +8 -10
- package/dist/config/pathProfiles.js.map +1 -1
- package/dist/config/thresholdRationales.d.ts +45 -0
- package/dist/config/thresholdRationales.d.ts.map +1 -0
- package/dist/config/thresholdRationales.js +67 -0
- package/dist/config/thresholdRationales.js.map +1 -0
- package/dist/conventions/conventionMiner.d.ts.map +1 -1
- package/dist/conventions/conventionMiner.js +6 -2
- package/dist/conventions/conventionMiner.js.map +1 -1
- package/dist/enforcement/diffGate.d.ts +55 -0
- package/dist/enforcement/diffGate.d.ts.map +1 -0
- package/dist/enforcement/diffGate.js +136 -0
- package/dist/enforcement/diffGate.js.map +1 -0
- package/dist/enforcement/gate.d.ts +36 -0
- package/dist/enforcement/gate.d.ts.map +1 -0
- package/dist/enforcement/gate.js +72 -0
- package/dist/enforcement/gate.js.map +1 -0
- package/dist/enforcement/suppressions.d.ts +41 -0
- package/dist/enforcement/suppressions.d.ts.map +1 -0
- package/dist/enforcement/suppressions.js +170 -0
- package/dist/enforcement/suppressions.js.map +1 -0
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +4 -1
- package/dist/fingerprint.js.map +1 -1
- package/dist/grammars/tree-sitter-scss.wasm +0 -0
- package/dist/invariants/ruleEngine.d.ts +3 -4
- package/dist/invariants/ruleEngine.d.ts.map +1 -1
- package/dist/invariants/ruleEngine.js +2 -2
- package/dist/invariants/ruleEngine.js.map +1 -1
- package/dist/languages/LanguageOrchestrator.d.ts +14 -0
- package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
- package/dist/languages/LanguageOrchestrator.js +93 -55
- package/dist/languages/LanguageOrchestrator.js.map +1 -1
- package/dist/languages/LanguageRegistry.d.ts +8 -0
- package/dist/languages/LanguageRegistry.d.ts.map +1 -1
- package/dist/languages/LanguageRegistry.js +8 -0
- package/dist/languages/LanguageRegistry.js.map +1 -1
- package/dist/languages/RuntimeManager.d.ts +82 -60
- package/dist/languages/RuntimeManager.d.ts.map +1 -1
- package/dist/languages/RuntimeManager.js +404 -349
- package/dist/languages/RuntimeManager.js.map +1 -1
- package/dist/languages/UniversalAnalyzer.d.ts +51 -6
- package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
- package/dist/languages/UniversalAnalyzer.js +127 -88
- package/dist/languages/UniversalAnalyzer.js.map +1 -1
- package/dist/languages/adapterBridge.d.ts +36 -0
- package/dist/languages/adapterBridge.d.ts.map +1 -1
- package/dist/languages/adapterBridge.js +89 -35
- package/dist/languages/adapterBridge.js.map +1 -1
- package/dist/languages/go/GoAdapter.d.ts +66 -23
- package/dist/languages/go/GoAdapter.d.ts.map +1 -1
- package/dist/languages/go/GoAdapter.js +553 -474
- package/dist/languages/go/GoAdapter.js.map +1 -1
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts +38 -9
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts.map +1 -1
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +111 -74
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -1
- package/dist/languages/tree-sitter/converter.d.ts +18 -0
- package/dist/languages/tree-sitter/converter.d.ts.map +1 -1
- package/dist/languages/tree-sitter/converter.js +18 -0
- package/dist/languages/tree-sitter/converter.js.map +1 -1
- package/dist/languages/tree-sitter/parser.d.ts +39 -2
- package/dist/languages/tree-sitter/parser.d.ts.map +1 -1
- package/dist/languages/tree-sitter/parser.js +95 -12
- package/dist/languages/tree-sitter/parser.js.map +1 -1
- package/dist/languages/types.d.ts +67 -2
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +253 -62
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +1461 -791
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
- package/dist/mcp-tools/whitelistTools.d.ts +1 -1
- package/dist/mcp-tools-shared.d.ts.map +1 -1
- package/dist/mcp-tools-shared.js +1 -0
- package/dist/mcp-tools-shared.js.map +1 -1
- package/dist/mcpAuditJobs.d.ts.map +1 -1
- package/dist/mcpAuditJobs.js +1 -0
- package/dist/mcpAuditJobs.js.map +1 -1
- package/dist/pipeline.d.ts +30 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +527 -203
- package/dist/pipeline.js.map +1 -1
- package/dist/pipelineAdapters.d.ts +5 -12
- package/dist/pipelineAdapters.d.ts.map +1 -1
- package/dist/pipelineAdapters.js +175 -100
- package/dist/pipelineAdapters.js.map +1 -1
- package/dist/presets/presets.d.ts +54 -0
- package/dist/presets/presets.d.ts.map +1 -0
- package/dist/presets/presets.js +181 -0
- package/dist/presets/presets.js.map +1 -0
- package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
- package/dist/reporting/sarifReportGenerator.js +0 -2
- package/dist/reporting/sarifReportGenerator.js.map +1 -1
- package/dist/ruleAliases.d.ts +67 -0
- package/dist/ruleAliases.d.ts.map +1 -0
- package/dist/ruleAliases.js +79 -0
- package/dist/ruleAliases.js.map +1 -0
- package/dist/styles/cssAstExtractor.d.ts +20 -5
- package/dist/styles/cssAstExtractor.d.ts.map +1 -1
- package/dist/styles/cssAstExtractor.js +247 -9
- package/dist/styles/cssAstExtractor.js.map +1 -1
- package/dist/styles/styleIndexer.js +13 -4
- package/dist/styles/styleIndexer.js.map +1 -1
- package/dist/styles/tailwindConfigLoader.d.ts +8 -6
- package/dist/styles/tailwindConfigLoader.d.ts.map +1 -1
- package/dist/styles/tailwindConfigLoader.js +61 -15
- package/dist/styles/tailwindConfigLoader.js.map +1 -1
- package/dist/styles/tailwindUtilityExpander.d.ts.map +1 -1
- package/dist/styles/tailwindUtilityExpander.js +13 -1
- package/dist/styles/tailwindUtilityExpander.js.map +1 -1
- package/dist/types.d.ts +201 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -1
- package/package.json +7 -4
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/hooks/hooks.json +1 -1
- package/plugin/scripts/hook-audit.sh +25 -7
- package/plugin/skills/code-auditor/SKILL.md +5 -5
|
@@ -3,8 +3,15 @@
|
|
|
3
3
|
* Works across multiple programming languages using the adapter pattern
|
|
4
4
|
*/
|
|
5
5
|
import { UniversalAnalyzer } from '../../languages/UniversalAnalyzer.js';
|
|
6
|
+
import { withRuleTiming } from '../ruleTiming.js';
|
|
6
7
|
export const DEFAULT_SOLID_CONFIG = {
|
|
7
8
|
maxMethodsPerClass: 15,
|
|
9
|
+
// Confirmed by the Spec-11 R3 sweep; must match src/config/defaults.ts.
|
|
10
|
+
// Reverted 2026-08-14: a 50→100 / 4→6 calibration (made to clear
|
|
11
|
+
// UniversalSchemaAnalyzer during Spec 33) silently dropped 660
|
|
12
|
+
// single-responsibility findings on recall-protocol. Undone rather than
|
|
13
|
+
// re-baselined — a threshold change must be decided on its own merits with
|
|
14
|
+
// recall's numbers in front of you, not as a side effect of one file passing.
|
|
8
15
|
maxLinesPerMethod: 50,
|
|
9
16
|
maxParametersPerMethod: 4,
|
|
10
17
|
maxClassComplexity: 50, // DEPRECATED — kept for back-compat
|
|
@@ -19,6 +26,33 @@ export const DEFAULT_SOLID_CONFIG = {
|
|
|
19
26
|
checkLiskovSubstitution: true,
|
|
20
27
|
skipTestFiles: true
|
|
21
28
|
};
|
|
29
|
+
/**
|
|
30
|
+
* Builtin / standard-library type names excluded from the open-closed and
|
|
31
|
+
* dependency-inversion checks. These are platform primitives and runtime error
|
|
32
|
+
* types, not application types a class should abstract over. `instanceof` or
|
|
33
|
+
* `new` against one of these is a legitimate runtime concern, not an
|
|
34
|
+
* extensibility (OCP) or coupling (DIP) signal.
|
|
35
|
+
*/
|
|
36
|
+
const BUILTIN_TYPES = new Set([
|
|
37
|
+
// Primitives & boxed types
|
|
38
|
+
'Date', 'Array', 'Object', 'Map', 'Set', 'WeakMap', 'WeakSet',
|
|
39
|
+
'Promise', 'RegExp', 'Number', 'String', 'Boolean', 'Symbol', 'BigInt',
|
|
40
|
+
'Function', 'JSON', 'Math', 'Reflect', 'Proxy',
|
|
41
|
+
// Errors — throwing an error is not "instantiating a dependency"
|
|
42
|
+
'Error', 'TypeError', 'RangeError', 'SyntaxError', 'ReferenceError',
|
|
43
|
+
'EvalError', 'URIError', 'AggregateError',
|
|
44
|
+
// Typed arrays & buffers
|
|
45
|
+
'ArrayBuffer', 'DataView', 'SharedArrayBuffer',
|
|
46
|
+
'Uint8Array', 'Int8Array', 'Uint16Array', 'Int16Array',
|
|
47
|
+
'Uint32Array', 'Int32Array', 'Float32Array', 'Float64Array',
|
|
48
|
+
'BigInt64Array', 'BigUint64Array', 'Uint8ClampedArray',
|
|
49
|
+
// Web / Node platform types
|
|
50
|
+
'URL', 'URLSearchParams', 'TextEncoder', 'TextDecoder', 'Buffer',
|
|
51
|
+
'FormData', 'Blob', 'AbortController', 'AbortSignal',
|
|
52
|
+
]);
|
|
53
|
+
/**
|
|
54
|
+
* Universal solid analyzer.
|
|
55
|
+
*/
|
|
22
56
|
export class UniversalSOLIDAnalyzer extends UniversalAnalyzer {
|
|
23
57
|
name = 'solid';
|
|
24
58
|
description = 'Detects violations of SOLID principles';
|
|
@@ -27,26 +61,27 @@ export class UniversalSOLIDAnalyzer extends UniversalAnalyzer {
|
|
|
27
61
|
const violations = [];
|
|
28
62
|
const finalConfig = { ...DEFAULT_SOLID_CONFIG, ...config };
|
|
29
63
|
// Skip test files if configured
|
|
30
|
-
if (finalConfig.skipTestFiles &&
|
|
64
|
+
if (finalConfig.skipTestFiles && isTestFile(ast.filePath)) {
|
|
31
65
|
return violations;
|
|
32
66
|
}
|
|
67
|
+
const ctx = { ast, adapter, sourceCode, config: finalConfig };
|
|
33
68
|
// Analyze classes
|
|
34
69
|
const classes = adapter.extractClasses(ast);
|
|
35
70
|
for (const cls of classes) {
|
|
36
|
-
violations.push(...this.analyzeClass(cls,
|
|
71
|
+
violations.push(...this.analyzeClass(cls, ctx));
|
|
37
72
|
}
|
|
38
73
|
// Analyze standalone functions
|
|
39
74
|
const functions = adapter.extractFunctions(ast);
|
|
40
75
|
for (const func of functions) {
|
|
41
76
|
if (!func.isMethod) { // Skip methods as they're analyzed with their classes
|
|
42
|
-
violations.push(...this.analyzeFunction(func,
|
|
77
|
+
violations.push(...this.analyzeFunction(func, ctx));
|
|
43
78
|
}
|
|
44
79
|
}
|
|
45
80
|
// Analyze interfaces if supported
|
|
46
81
|
if (adapter.extractInterfaces) {
|
|
47
82
|
const interfaces = adapter.extractInterfaces(ast);
|
|
48
83
|
for (const iface of interfaces) {
|
|
49
|
-
violations.push(...this.analyzeInterface(iface,
|
|
84
|
+
violations.push(...this.analyzeInterface(iface, ctx));
|
|
50
85
|
}
|
|
51
86
|
}
|
|
52
87
|
return violations;
|
|
@@ -54,116 +89,195 @@ export class UniversalSOLIDAnalyzer extends UniversalAnalyzer {
|
|
|
54
89
|
/**
|
|
55
90
|
* Analyze a class for SOLID violations
|
|
56
91
|
*/
|
|
57
|
-
analyzeClass(cls,
|
|
92
|
+
analyzeClass(cls, ctx) {
|
|
58
93
|
const violations = [];
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
94
|
+
this.checkClassSize(cls, ctx, violations);
|
|
95
|
+
this.checkOpenClosed(cls, ctx, violations);
|
|
96
|
+
this.checkLiskov(cls, ctx, violations);
|
|
97
|
+
this.checkDependencyInversion(cls, ctx, violations);
|
|
98
|
+
return violations;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* R5.2: Class size checks (method count + aggregate cyclomatic complexity).
|
|
102
|
+
*/
|
|
103
|
+
checkClassSize(cls, ctx, violations) {
|
|
104
|
+
const { ast, config } = ctx;
|
|
105
|
+
withRuleTiming('solid/class-size', () => {
|
|
106
|
+
const methodsThreshold = config.classMethodsThreshold ?? config.maxMethodsPerClass ?? 15;
|
|
107
|
+
if (cls.methods.length > methodsThreshold) {
|
|
108
|
+
violations.push(this.createViolation(ast.filePath, cls.location.start, `Class "${cls.name}" has ${cls.methods.length} methods, exceeding the maximum of ${methodsThreshold}. Consider splitting responsibilities.`, { severity: 'suggestion', rule: 'solid/class-size', symbol: cls.name, // R7: class-size → suggestion
|
|
109
|
+
resolution: {
|
|
110
|
+
action: 'split-class',
|
|
111
|
+
summary: `Split class "${cls.name}" (${cls.methods.length} methods) into smaller classes by extracting a cohesive subset of its methods.`,
|
|
112
|
+
symbols: cls.methods.map((m) => `${cls.name}.${m.name}`),
|
|
113
|
+
files: [ast.filePath],
|
|
114
|
+
lines: cls.methods.map((m) => m.location.start.line),
|
|
115
|
+
} }));
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
const aggregateComplexity = this.analyzeClassMethods(cls, ctx, violations);
|
|
119
|
+
withRuleTiming('solid/class-size', () => {
|
|
120
|
+
const maxAggregate = config.classAggregateComplexity ?? 100;
|
|
121
|
+
if (aggregateComplexity > maxAggregate) {
|
|
122
|
+
violations.push(this.createViolation(ast.filePath, cls.location.start, `Class "${cls.name}" has aggregate cyclomatic complexity ${aggregateComplexity}, ` +
|
|
123
|
+
`exceeding the maximum of ${maxAggregate}. Consider splitting the class.`, { severity: 'suggestion', rule: 'solid/class-size', symbol: cls.name, // R7: class-size → suggestion
|
|
124
|
+
resolution: {
|
|
125
|
+
action: 'split-class',
|
|
126
|
+
summary: `Split class "${cls.name}" (aggregate complexity ${aggregateComplexity}) to move its most-complex methods into a separate class.`,
|
|
127
|
+
symbols: cls.methods.map((m) => `${cls.name}.${m.name}`),
|
|
128
|
+
files: [ast.filePath],
|
|
129
|
+
lines: cls.methods.map((m) => m.location.start.line),
|
|
130
|
+
} }));
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Analyze each method's complexity + standard size checks, returning the
|
|
136
|
+
* class's aggregate cyclomatic complexity for the R5.2 aggregation check.
|
|
137
|
+
*/
|
|
138
|
+
analyzeClassMethods(cls, ctx, violations) {
|
|
139
|
+
const { ast, adapter, config } = ctx;
|
|
66
140
|
let aggregateComplexity = 0;
|
|
67
141
|
for (const method of cls.methods) {
|
|
68
142
|
// R5.1: Per-method cyclomatic complexity (warning)
|
|
69
|
-
const methodNode =
|
|
143
|
+
const methodNode = findNodeByLocation(ast.root, method.location.start);
|
|
70
144
|
if (methodNode) {
|
|
71
145
|
const methodComplexity = adapter.getComplexity(methodNode);
|
|
72
146
|
aggregateComplexity += methodComplexity;
|
|
73
147
|
const maxMethod = config.maxMethodComplexity ?? 50;
|
|
74
148
|
if (methodComplexity > maxMethod) {
|
|
75
149
|
violations.push(this.createViolation(ast.filePath, method.location.start, `Method "${cls.name}.${method.name}" has cyclomatic complexity ${methodComplexity}, ` +
|
|
76
|
-
`exceeding the maximum of ${maxMethod}. Consider breaking it into smaller methods.`, 'warning', // R7: method-complexity → warning
|
|
77
|
-
|
|
150
|
+
`exceeding the maximum of ${maxMethod}. Consider breaking it into smaller methods.`, { severity: 'warning', rule: 'solid/method-complexity', symbol: `${cls.name}.${method.name}` } // R7: method-complexity → warning
|
|
151
|
+
));
|
|
78
152
|
}
|
|
79
153
|
}
|
|
80
154
|
// Standard function checks (params, line count)
|
|
81
|
-
violations.push(...this.analyzeFunction(method,
|
|
82
|
-
}
|
|
83
|
-
// R5.2: Class aggregate complexity (suggestion)
|
|
84
|
-
const maxAggregate = config.classAggregateComplexity ?? 100;
|
|
85
|
-
if (aggregateComplexity > maxAggregate) {
|
|
86
|
-
violations.push(this.createViolation(ast.filePath, cls.location.start, `Class "${cls.name}" has aggregate cyclomatic complexity ${aggregateComplexity}, ` +
|
|
87
|
-
`exceeding the maximum of ${maxAggregate}. Consider splitting the class.`, 'suggestion', // R7: class-size → suggestion
|
|
88
|
-
'solid/class-size', undefined, cls.name));
|
|
155
|
+
violations.push(...this.analyzeFunction(method, ctx));
|
|
89
156
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
violations.push(
|
|
157
|
+
return aggregateComplexity;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Open/Closed Principle — check for modification patterns.
|
|
161
|
+
*/
|
|
162
|
+
checkOpenClosed(cls, ctx, violations) {
|
|
163
|
+
if (this.hasModificationPatterns(cls, ctx.ast, ctx.adapter, ctx.sourceCode)) {
|
|
164
|
+
violations.push(this.createViolation(ctx.ast.filePath, cls.location.start, `Class "${cls.name}" appears to be frequently modified. Consider using composition or inheritance for extension.`, { severity: 'suggestion', rule: 'open-closed', symbol: cls.name }));
|
|
98
165
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Liskov Substitution Principle.
|
|
169
|
+
*/
|
|
170
|
+
checkLiskov(cls, ctx, violations) {
|
|
171
|
+
if (ctx.config.checkLiskovSubstitution && cls.extends) {
|
|
172
|
+
violations.push(...this.checkLiskovSubstitution(cls, ctx.ast, ctx.adapter));
|
|
103
173
|
}
|
|
104
|
-
return violations;
|
|
105
174
|
}
|
|
106
175
|
/**
|
|
107
176
|
* Analyze a function for SOLID violations
|
|
108
177
|
*/
|
|
109
|
-
analyzeFunction(func,
|
|
178
|
+
analyzeFunction(func, ctx) {
|
|
110
179
|
const violations = [];
|
|
111
|
-
|
|
112
|
-
if (func.parameters.length > (config.maxParametersPerMethod || 4)) {
|
|
113
|
-
violations.push(this.createViolation(ast.filePath, func.location.start, `Function "${func.name}" has ${func.parameters.length} parameters, exceeding the maximum of ${config.maxParametersPerMethod || 4}. Consider using an options object.`, 'warning', 'single-responsibility', undefined, func.name));
|
|
114
|
-
}
|
|
115
|
-
// Function too long
|
|
116
|
-
const lineCount = func.location.end.line - func.location.start.line + 1;
|
|
117
|
-
if (lineCount > (config.maxLinesPerMethod || 50)) {
|
|
118
|
-
violations.push(this.createViolation(ast.filePath, func.location.start, `Function "${func.name}" has ${lineCount} lines, exceeding the maximum of ${config.maxLinesPerMethod || 50}. Consider breaking it down.`, 'warning', 'single-responsibility', undefined, func.name));
|
|
119
|
-
}
|
|
180
|
+
this.checkFunctionSize(func, ctx, violations);
|
|
120
181
|
// R5.1: Cyclomatic complexity for standalone functions (not methods — those are
|
|
121
182
|
// already checked in analyzeClass). Skip methods to avoid double-reporting.
|
|
122
183
|
if (!func.isMethod) {
|
|
123
|
-
|
|
124
|
-
if (funcNode) {
|
|
125
|
-
const cyclomaticComplexity = adapter.getComplexity(funcNode);
|
|
126
|
-
const maxMethod = config.maxMethodComplexity ?? 50;
|
|
127
|
-
if (cyclomaticComplexity > maxMethod) {
|
|
128
|
-
violations.push(this.createViolation(ast.filePath, func.location.start, `Function "${func.name}" has cyclomatic complexity ${cyclomaticComplexity}, ` +
|
|
129
|
-
`exceeding the maximum of ${maxMethod}. Consider breaking it into smaller functions.`, 'warning', // R7: method-complexity → warning
|
|
130
|
-
'solid/method-complexity', undefined, func.name));
|
|
131
|
-
}
|
|
132
|
-
}
|
|
184
|
+
this.checkFunctionComplexity(func, ctx, violations);
|
|
133
185
|
}
|
|
134
186
|
return violations;
|
|
135
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* R5.1/R5.2: Function size checks (parameter count + line count).
|
|
190
|
+
*/
|
|
191
|
+
checkFunctionSize(func, ctx, violations) {
|
|
192
|
+
const { ast, config } = ctx;
|
|
193
|
+
withRuleTiming('single-responsibility', () => {
|
|
194
|
+
if (func.parameters.length > (config.maxParametersPerMethod || 4)) {
|
|
195
|
+
violations.push(this.createViolation(ast.filePath, func.location.start, `Function "${func.name}" has ${func.parameters.length} parameters, exceeding the maximum of ${config.maxParametersPerMethod || 4}. Consider using an options object.`, { severity: 'warning', rule: 'single-responsibility', symbol: func.name,
|
|
196
|
+
resolution: {
|
|
197
|
+
action: 'bundle-params',
|
|
198
|
+
summary: `Bundle the ${func.parameters.length} parameters of "${func.name}" into an options object.`,
|
|
199
|
+
symbols: func.parameters.map((p) => p.name),
|
|
200
|
+
files: [ast.filePath],
|
|
201
|
+
lines: [func.location.start.line],
|
|
202
|
+
} }));
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
withRuleTiming('single-responsibility', () => {
|
|
206
|
+
const lineCount = func.location.end.line - func.location.start.line + 1;
|
|
207
|
+
if (lineCount > (config.maxLinesPerMethod || 50)) {
|
|
208
|
+
violations.push(this.createViolation(ast.filePath, func.location.start, `Function "${func.name}" has ${lineCount} lines, exceeding the maximum of ${config.maxLinesPerMethod || 50}. Consider breaking it down.`, { severity: 'warning', rule: 'single-responsibility', symbol: func.name,
|
|
209
|
+
resolution: {
|
|
210
|
+
action: 'break-down-function',
|
|
211
|
+
summary: `Break "${func.name}" (${lineCount} lines) into smaller functions, extracting named helper blocks.`,
|
|
212
|
+
symbols: [func.name],
|
|
213
|
+
files: [ast.filePath],
|
|
214
|
+
lines: [func.location.start.line],
|
|
215
|
+
} }));
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* R5.1: Cyclomatic complexity for a standalone function.
|
|
221
|
+
*/
|
|
222
|
+
checkFunctionComplexity(func, ctx, violations) {
|
|
223
|
+
const funcNode = findNodeByLocation(ctx.ast.root, func.location.start);
|
|
224
|
+
if (!funcNode)
|
|
225
|
+
return;
|
|
226
|
+
const cyclomaticComplexity = ctx.adapter.getComplexity(funcNode);
|
|
227
|
+
const maxMethod = ctx.config.maxMethodComplexity ?? 50;
|
|
228
|
+
if (cyclomaticComplexity > maxMethod) {
|
|
229
|
+
violations.push(this.createViolation(ctx.ast.filePath, func.location.start, `Function "${func.name}" has cyclomatic complexity ${cyclomaticComplexity}, ` +
|
|
230
|
+
`exceeding the maximum of ${maxMethod}. Consider breaking it into smaller functions.`, { severity: 'warning', rule: 'solid/method-complexity', symbol: func.name } // R7: method-complexity → warning
|
|
231
|
+
));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
136
234
|
/**
|
|
137
235
|
* Analyze an interface for Interface Segregation Principle
|
|
138
236
|
*/
|
|
139
|
-
analyzeInterface(iface,
|
|
237
|
+
analyzeInterface(iface, ctx) {
|
|
238
|
+
const { ast, config } = ctx;
|
|
140
239
|
const violations = [];
|
|
141
240
|
if (!config.checkInterfaceSegregation) {
|
|
142
241
|
return violations;
|
|
143
242
|
}
|
|
144
|
-
const
|
|
243
|
+
const members = iface.members || [];
|
|
244
|
+
const memberCount = members.length;
|
|
145
245
|
const maxMembers = config.maxInterfaceMembers || 20;
|
|
146
|
-
|
|
147
|
-
|
|
246
|
+
// ISP governs *behavior* contracts — "clients should not be forced to
|
|
247
|
+
// depend on methods they do not use." A pure data-shape interface (every
|
|
248
|
+
// member is an optional `property_signature`, e.g. a config/options bag) is
|
|
249
|
+
// a record type, not a fat behavior interface; flagging it is a false
|
|
250
|
+
// positive. Only interfaces that expose methods carry the ISP smell.
|
|
251
|
+
const hasMethodMembers = members.some(member => member.type === 'method');
|
|
252
|
+
if (hasMethodMembers && memberCount > maxMembers) {
|
|
253
|
+
violations.push(this.createViolation(ast.filePath, iface.location.start, `Interface "${iface.name}" has ${memberCount} members, exceeding the maximum of ${maxMembers}. Consider splitting into smaller interfaces.`, { severity: 'warning', rule: 'interface-segregation', symbol: iface.name }));
|
|
148
254
|
}
|
|
149
255
|
return violations;
|
|
150
256
|
}
|
|
151
257
|
/**
|
|
152
258
|
* Check for modification patterns (Open/Closed Principle)
|
|
259
|
+
*
|
|
260
|
+
* The OCP smell is type-checking against *user-defined* concrete types
|
|
261
|
+
* (`x instanceof MyClass`): adding a new subtype then forces editing this
|
|
262
|
+
* branch. `switch` statements are intentionally NOT flagged — a switch on a
|
|
263
|
+
* value (enum/string) is ordinary data dispatch, not extensibility pressure,
|
|
264
|
+
* and a switch on a node type in a tree-sitter adapter is the visitor
|
|
265
|
+
* pattern, which is exactly how OCP is satisfied. `instanceof` against a
|
|
266
|
+
* builtin/error type is a legitimate runtime check, not an extension point.
|
|
153
267
|
*/
|
|
154
268
|
hasModificationPatterns(cls, ast, adapter, sourceCode) {
|
|
155
|
-
|
|
156
|
-
const classNode = this.findNodeByLocation(ast.root, cls.location.start);
|
|
269
|
+
const classNode = findNodeByLocation(ast.root, cls.location.start);
|
|
157
270
|
if (!classNode)
|
|
158
271
|
return false;
|
|
159
272
|
let hasTypeChecking = false;
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
273
|
+
walkAST(classNode, node => {
|
|
274
|
+
if (node.type !== 'binary_expression')
|
|
275
|
+
return;
|
|
276
|
+
const text = adapter.getNodeText(node, sourceCode);
|
|
277
|
+
const m = /\binstanceof\s+([A-Za-z_$][\w$]*)/.exec(text);
|
|
278
|
+
if (!m)
|
|
279
|
+
return;
|
|
280
|
+
if (!BUILTIN_TYPES.has(m[1])) {
|
|
167
281
|
hasTypeChecking = true;
|
|
168
282
|
}
|
|
169
283
|
});
|
|
@@ -181,16 +295,16 @@ export class UniversalSOLIDAnalyzer extends UniversalAnalyzer {
|
|
|
181
295
|
if (method.name === 'constructor')
|
|
182
296
|
continue;
|
|
183
297
|
// Check for methods that throw exceptions when parent doesn't
|
|
184
|
-
const methodNode =
|
|
298
|
+
const methodNode = findNodeByLocation(ast.root, method.location.start);
|
|
185
299
|
if (methodNode) {
|
|
186
300
|
let hasThrow = false;
|
|
187
|
-
|
|
301
|
+
walkAST(methodNode, node => {
|
|
188
302
|
if (node.type === 'throw_statement') {
|
|
189
303
|
hasThrow = true;
|
|
190
304
|
}
|
|
191
305
|
});
|
|
192
306
|
if (hasThrow) {
|
|
193
|
-
violations.push(this.createViolation(ast.filePath, method.location.start, `Method "${cls.name}.${method.name}" throws exceptions. Ensure this doesn't violate parent class contract.`, 'suggestion', 'liskov-substitution',
|
|
307
|
+
violations.push(this.createViolation(ast.filePath, method.location.start, `Method "${cls.name}.${method.name}" throws exceptions. Ensure this doesn't violate parent class contract.`, { severity: 'suggestion', rule: 'liskov-substitution', symbol: `${cls.name}.${method.name}` }));
|
|
194
308
|
}
|
|
195
309
|
}
|
|
196
310
|
}
|
|
@@ -199,77 +313,91 @@ export class UniversalSOLIDAnalyzer extends UniversalAnalyzer {
|
|
|
199
313
|
/**
|
|
200
314
|
* Check Dependency Inversion Principle
|
|
201
315
|
*/
|
|
202
|
-
checkDependencyInversion(cls,
|
|
203
|
-
const
|
|
204
|
-
// Check for direct instantiation of dependencies
|
|
205
|
-
const classNode = this.findNodeByLocation(ast.root, cls.location.start);
|
|
316
|
+
checkDependencyInversion(cls, ctx, violations) {
|
|
317
|
+
const classNode = findNodeByLocation(ctx.ast.root, cls.location.start);
|
|
206
318
|
if (!classNode) {
|
|
207
|
-
return
|
|
208
|
-
}
|
|
209
|
-
let hasDirectInstantiation = false;
|
|
210
|
-
let concreteImports = 0;
|
|
211
|
-
// Count concrete class imports vs interface imports
|
|
212
|
-
const imports = adapter.extractImports(ast);
|
|
213
|
-
for (const imp of imports) {
|
|
214
|
-
if (imp.source.includes('/') && !imp.source.includes('interface') && !imp.source.includes('types')) {
|
|
215
|
-
concreteImports++;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
this.walkAST(classNode, node => {
|
|
219
|
-
// Check for 'new' expressions
|
|
220
|
-
if (node.type === 'new_expression') {
|
|
221
|
-
const text = adapter.getNodeText(node, sourceCode);
|
|
222
|
-
// Ignore primitive constructors like Date, Array, etc.
|
|
223
|
-
if (!this.isPrimitiveConstructor(text)) {
|
|
224
|
-
hasDirectInstantiation = true;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
if (hasDirectInstantiation) {
|
|
229
|
-
violations.push(this.createViolation(ast.filePath, cls.location.start, `Class "${cls.name}" directly instantiates dependencies. Consider dependency injection.`, 'suggestion', 'dependency-inversion', undefined, cls.name));
|
|
319
|
+
return;
|
|
230
320
|
}
|
|
231
|
-
if (
|
|
232
|
-
violations.push(this.createViolation(ast.filePath, cls.location.start, `Class "${cls.name}"
|
|
321
|
+
if (this.hasDirectInstantiation(cls, classNode, ctx)) {
|
|
322
|
+
violations.push(this.createViolation(ctx.ast.filePath, cls.location.start, `Class "${cls.name}" directly instantiates a concrete dependency. Consider depending on abstractions.`, { severity: 'suggestion', rule: 'dependency-inversion', symbol: cls.name }));
|
|
233
323
|
}
|
|
234
|
-
return violations;
|
|
235
324
|
}
|
|
236
325
|
/**
|
|
237
|
-
*
|
|
326
|
+
* True if the class body directly instantiates a concrete type (`new Foo()`),
|
|
327
|
+
* which is the dependency-inversion signal.
|
|
328
|
+
*
|
|
329
|
+
* The signal is a *bare* construction of a PascalCase type name, regardless of
|
|
330
|
+
* where the type comes from — a statically-imported class, a CommonJS
|
|
331
|
+
* `require()` binding, or a class defined locally in the same file. The prior
|
|
332
|
+
* implementation gated on a statically-imported-name table, which made the rule
|
|
333
|
+
* dead on locally-defined classes (the common case — `AppGenerator`,
|
|
334
|
+
* `ResetPasswordError`, …) and on every `require()`-based codebase. Provenance is
|
|
335
|
+
* not a DIP concern: instantiating a concrete type violates the principle whether
|
|
336
|
+
* the type was imported or defined next door.
|
|
238
337
|
*/
|
|
239
|
-
|
|
240
|
-
const
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
338
|
+
hasDirectInstantiation(cls, classNode, ctx) {
|
|
339
|
+
const { adapter, sourceCode } = ctx;
|
|
340
|
+
let hasDirectInstantiation = false;
|
|
341
|
+
walkAST(classNode, node => {
|
|
342
|
+
if (node.type !== 'new_expression')
|
|
343
|
+
return;
|
|
344
|
+
// The constructor is the direct child that is neither the argument list
|
|
345
|
+
// nor a type-argument clause. It must be a bare `identifier`: a member
|
|
346
|
+
// access (`new this.Foo()`, `new ns.Foo()`), a parenthesized expression
|
|
347
|
+
// (`new (ctor())()`), or a call are not a concrete-type signal.
|
|
348
|
+
const ctor = (node.children ?? []).find(c => c.type !== 'arguments' && c.type !== 'type_arguments');
|
|
349
|
+
if (!ctor || ctor.type !== 'identifier')
|
|
350
|
+
return;
|
|
351
|
+
const ctorName = adapter.getNodeText(ctor, sourceCode).trim();
|
|
352
|
+
// A lowercase binding is an instance, not a type; only PascalCase names
|
|
353
|
+
// are treated as concrete classes (the JS/TS naming convention).
|
|
354
|
+
if (!/^[A-Z]/.test(ctorName))
|
|
355
|
+
return;
|
|
356
|
+
// Platform primitives / error types are not application dependencies.
|
|
357
|
+
if (BUILTIN_TYPES.has(ctorName))
|
|
358
|
+
return;
|
|
359
|
+
// A class instantiating itself (singleton `new ThisClass()`) is not a
|
|
360
|
+
// dependency.
|
|
361
|
+
if (ctorName === cls.name)
|
|
362
|
+
return;
|
|
363
|
+
hasDirectInstantiation = true;
|
|
364
|
+
});
|
|
365
|
+
return hasDirectInstantiation;
|
|
252
366
|
}
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
367
|
+
}
|
|
368
|
+
// --- Module-level helpers (pure tree/path utilities, no `this`) ---------------
|
|
369
|
+
/** True when the path is a test/spec file (used by SOLID's skipTestFiles). */
|
|
370
|
+
function isTestFile(filePath) {
|
|
371
|
+
const testPatterns = [
|
|
372
|
+
/\.test\.[jt]sx?$/,
|
|
373
|
+
/\.spec\.[jt]sx?$/,
|
|
374
|
+
/__tests__\//,
|
|
375
|
+
/test\//,
|
|
376
|
+
/tests\//
|
|
377
|
+
];
|
|
378
|
+
return testPatterns.some(pattern => pattern.test(filePath));
|
|
379
|
+
}
|
|
380
|
+
/** Breadth-first search for the node whose start position matches `location`. */
|
|
381
|
+
function findNodeByLocation(root, location) {
|
|
382
|
+
const queue = [root];
|
|
383
|
+
while (queue.length > 0) {
|
|
384
|
+
const node = queue.shift();
|
|
385
|
+
if (node.location.start.line === location.line &&
|
|
386
|
+
node.location.start.column === location.column) {
|
|
387
|
+
return node;
|
|
264
388
|
}
|
|
265
|
-
return null;
|
|
266
|
-
}
|
|
267
|
-
walkAST(node, callback) {
|
|
268
|
-
callback(node);
|
|
269
389
|
if (node.children) {
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
390
|
+
queue.push(...node.children);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
return null;
|
|
394
|
+
}
|
|
395
|
+
/** Depth-first walk over a subtree, invoking `callback` on every node. */
|
|
396
|
+
function walkAST(node, callback) {
|
|
397
|
+
callback(node);
|
|
398
|
+
if (node.children) {
|
|
399
|
+
for (const child of node.children) {
|
|
400
|
+
walkAST(child, callback);
|
|
273
401
|
}
|
|
274
402
|
}
|
|
275
403
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UniversalSOLIDAnalyzer.js","sourceRoot":"","sources":["../../../src/analyzers/universal/UniversalSOLIDAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UniversalSOLIDAnalyzer.js","sourceRoot":"","sources":["../../../src/analyzers/universal/UniversalSOLIDAnalyzer.ts"],"names":[],"mappings":"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"}
|