code-auditor-mcp 1.21.0 → 2.0.0
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/adapters/GoAdapter.d.ts +53 -0
- package/dist/adapters/GoAdapter.d.ts.map +1 -0
- package/dist/adapters/GoAdapter.js +602 -0
- package/dist/adapters/GoAdapter.js.map +1 -0
- package/dist/adapters/GoConfig.d.ts +35 -0
- package/dist/adapters/GoConfig.d.ts.map +1 -0
- package/dist/adapters/GoConfig.js +155 -0
- package/dist/adapters/GoConfig.js.map +1 -0
- package/dist/adapters/LanguageAdapter.d.ts +135 -0
- package/dist/adapters/LanguageAdapter.d.ts.map +1 -0
- package/dist/adapters/LanguageAdapter.js +47 -0
- package/dist/adapters/LanguageAdapter.js.map +1 -0
- package/dist/adapters/TypeScriptAdapter.d.ts +43 -0
- package/dist/adapters/TypeScriptAdapter.d.ts.map +1 -0
- package/dist/adapters/TypeScriptAdapter.js +386 -0
- package/dist/adapters/TypeScriptAdapter.js.map +1 -0
- package/dist/adapters/UniversalAnalyzer.d.ts +42 -0
- package/dist/adapters/UniversalAnalyzer.d.ts.map +1 -0
- package/dist/adapters/UniversalAnalyzer.js +103 -0
- package/dist/adapters/UniversalAnalyzer.js.map +1 -0
- package/dist/adapters/UniversalSOLIDAnalyzer.d.ts +48 -0
- package/dist/adapters/UniversalSOLIDAnalyzer.d.ts.map +1 -0
- package/dist/adapters/UniversalSOLIDAnalyzer.js +178 -0
- package/dist/adapters/UniversalSOLIDAnalyzer.js.map +1 -0
- package/dist/adapters/solidAnalyzerCompat.d.ts +21 -0
- package/dist/adapters/solidAnalyzerCompat.d.ts.map +1 -0
- package/dist/adapters/solidAnalyzerCompat.js +78 -0
- package/dist/adapters/solidAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +103 -0
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/cross-language/APIContractAnalyzer.js +425 -0
- package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -0
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts +117 -0
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js +618 -0
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js.map +1 -0
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +129 -0
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -0
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js +473 -0
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -0
- package/dist/analyzers/cross-language/SchemaValidator.d.ts +126 -0
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -0
- package/dist/analyzers/cross-language/SchemaValidator.js +522 -0
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -0
- package/dist/analyzers/dataAccessAnalyzerCompat.d.ts +20 -0
- package/dist/analyzers/dataAccessAnalyzerCompat.d.ts.map +1 -0
- package/dist/analyzers/dataAccessAnalyzerCompat.js +59 -0
- package/dist/analyzers/dataAccessAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/documentationAnalyzerCompat.d.ts +20 -0
- package/dist/analyzers/documentationAnalyzerCompat.d.ts.map +1 -0
- package/dist/analyzers/documentationAnalyzerCompat.js +52 -0
- package/dist/analyzers/documentationAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/dryAnalyzerCompat.d.ts +20 -0
- package/dist/analyzers/dryAnalyzerCompat.d.ts.map +1 -0
- package/dist/analyzers/dryAnalyzerCompat.js +44 -0
- package/dist/analyzers/dryAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/schemaAnalyzerCompat.d.ts +20 -0
- package/dist/analyzers/schemaAnalyzerCompat.d.ts.map +1 -0
- package/dist/analyzers/schemaAnalyzerCompat.js +69 -0
- package/dist/analyzers/schemaAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/solidAnalyzerCompat.d.ts +20 -0
- package/dist/analyzers/solidAnalyzerCompat.d.ts.map +1 -0
- package/dist/analyzers/solidAnalyzerCompat.js +78 -0
- package/dist/analyzers/solidAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +71 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +276 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -0
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +82 -0
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +489 -0
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -0
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +48 -0
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +175 -0
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -0
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +64 -0
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +286 -0
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +119 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +812 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -0
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +20 -8
- package/dist/auditRunner.js.map +1 -1
- package/dist/codeIndexDB-enhanced.d.ts +80 -0
- package/dist/codeIndexDB-enhanced.d.ts.map +1 -0
- package/dist/codeIndexDB-enhanced.js +488 -0
- package/dist/codeIndexDB-enhanced.js.map +1 -0
- package/dist/codeIndexDb.js +2 -2
- package/dist/codeIndexDb.js.map +1 -1
- package/dist/config/defaults.js +1 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/languages/LanguageOrchestrator.d.ts +181 -0
- package/dist/languages/LanguageOrchestrator.d.ts.map +1 -0
- package/dist/languages/LanguageOrchestrator.js +365 -0
- package/dist/languages/LanguageOrchestrator.js.map +1 -0
- package/dist/languages/LanguageRegistry.d.ts +43 -0
- package/dist/languages/LanguageRegistry.d.ts.map +1 -0
- package/dist/languages/LanguageRegistry.js +86 -0
- package/dist/languages/LanguageRegistry.js.map +1 -0
- package/dist/languages/RuntimeManager.d.ts +181 -0
- package/dist/languages/RuntimeManager.d.ts.map +1 -0
- package/dist/languages/RuntimeManager.js +841 -0
- package/dist/languages/RuntimeManager.js.map +1 -0
- package/dist/languages/UniversalAnalyzer.d.ts +37 -0
- package/dist/languages/UniversalAnalyzer.d.ts.map +1 -0
- package/dist/languages/UniversalAnalyzer.js +101 -0
- package/dist/languages/UniversalAnalyzer.js.map +1 -0
- package/dist/languages/go/GoAdapter.d.ts +57 -0
- package/dist/languages/go/GoAdapter.d.ts.map +1 -0
- package/dist/languages/go/GoAdapter.js +360 -0
- package/dist/languages/go/GoAdapter.js.map +1 -0
- package/dist/languages/index.d.ts +13 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +23 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/languages/types.d.ts +182 -0
- package/dist/languages/types.d.ts.map +1 -0
- package/dist/languages/types.js +5 -0
- package/dist/languages/types.js.map +1 -0
- package/dist/languages/typescript/TypeScriptAdapter.d.ts +108 -0
- package/dist/languages/typescript/TypeScriptAdapter.d.ts.map +1 -0
- package/dist/languages/typescript/TypeScriptAdapter.js +567 -0
- package/dist/languages/typescript/TypeScriptAdapter.js.map +1 -0
- package/dist/languages/typescript/test-extraction.d.ts +2 -0
- package/dist/languages/typescript/test-extraction.d.ts.map +1 -0
- package/dist/languages/typescript/test-extraction.js +36 -0
- package/dist/languages/typescript/test-extraction.js.map +1 -0
- package/dist/mcp-tools-shared.d.ts +3 -0
- package/dist/mcp-tools-shared.d.ts.map +1 -1
- package/dist/mcp-tools-shared.js +123 -2
- package/dist/mcp-tools-shared.js.map +1 -1
- package/dist/mcp.js +3 -0
- package/dist/mcp.js.map +1 -1
- package/dist/types/crossLanguage.d.ts +267 -0
- package/dist/types/crossLanguage.d.ts.map +1 -0
- package/dist/types/crossLanguage.js +6 -0
- package/dist/types/crossLanguage.js.map +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/fileDiscovery.d.ts +6 -0
- package/dist/utils/fileDiscovery.d.ts.map +1 -1
- package/dist/utils/fileDiscovery.js +12 -1
- package/dist/utils/fileDiscovery.js.map +1 -1
- package/package.json +19 -20
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compatibility layer for Data Access Analyzer
|
|
3
|
+
* Ensures the new universal analyzer produces similar results to the legacy one
|
|
4
|
+
*/
|
|
5
|
+
import type { AnalyzerFunction } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Legacy-compatible data access analyzer function
|
|
8
|
+
* This wraps the new UniversalDataAccessAnalyzer to maintain API compatibility
|
|
9
|
+
*/
|
|
10
|
+
export declare const analyzeDataAccess: AnalyzerFunction;
|
|
11
|
+
/**
|
|
12
|
+
* Analyzer definition for registration
|
|
13
|
+
*/
|
|
14
|
+
export declare const dataAccessAnalyzer: {
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
category: string;
|
|
18
|
+
analyze: AnalyzerFunction;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=dataAccessAnalyzerCompat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataAccessAnalyzerCompat.d.ts","sourceRoot":"","sources":["../../src/analyzers/dataAccessAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOpD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,gBAqC/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;CAK9B,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compatibility layer for Data Access Analyzer
|
|
3
|
+
* Ensures the new universal analyzer produces similar results to the legacy one
|
|
4
|
+
*/
|
|
5
|
+
import { UniversalDataAccessAnalyzer } from './universal/UniversalDataAccessAnalyzer.js';
|
|
6
|
+
import { initializeLanguages } from '../languages/index.js';
|
|
7
|
+
// Initialize language system on module load
|
|
8
|
+
initializeLanguages();
|
|
9
|
+
/**
|
|
10
|
+
* Legacy-compatible data access analyzer function
|
|
11
|
+
* This wraps the new UniversalDataAccessAnalyzer to maintain API compatibility
|
|
12
|
+
*/
|
|
13
|
+
export const analyzeDataAccess = async (files, config = {}, options = {}, progressCallback) => {
|
|
14
|
+
const analyzer = new UniversalDataAccessAnalyzer();
|
|
15
|
+
// Map legacy config to universal config, only including defined values
|
|
16
|
+
const universalConfig = {};
|
|
17
|
+
if (config.databases !== undefined)
|
|
18
|
+
universalConfig.databases = config.databases;
|
|
19
|
+
if (config.organizationPatterns !== undefined)
|
|
20
|
+
universalConfig.organizationPatterns = config.organizationPatterns;
|
|
21
|
+
if (config.tablePatterns !== undefined)
|
|
22
|
+
universalConfig.tablePatterns = config.tablePatterns;
|
|
23
|
+
if (config.performanceThresholds !== undefined)
|
|
24
|
+
universalConfig.performanceThresholds = config.performanceThresholds;
|
|
25
|
+
if (config.securityPatterns !== undefined)
|
|
26
|
+
universalConfig.securityPatterns = config.securityPatterns;
|
|
27
|
+
if (config.checkOrgFilters !== undefined)
|
|
28
|
+
universalConfig.checkOrgFilters = config.checkOrgFilters;
|
|
29
|
+
if (config.checkSQLInjection !== undefined)
|
|
30
|
+
universalConfig.checkSQLInjection = config.checkSQLInjection;
|
|
31
|
+
if (config.checkPerformance !== undefined)
|
|
32
|
+
universalConfig.checkPerformance = config.checkPerformance;
|
|
33
|
+
// Call the universal analyzer
|
|
34
|
+
const result = await analyzer.analyze(files, universalConfig, {
|
|
35
|
+
progressCallback: progressCallback ? (progress) => {
|
|
36
|
+
progressCallback({
|
|
37
|
+
current: Math.floor(progress * 100),
|
|
38
|
+
total: 100,
|
|
39
|
+
analyzer: 'data-access',
|
|
40
|
+
phase: 'analyzing'
|
|
41
|
+
});
|
|
42
|
+
} : undefined,
|
|
43
|
+
...options
|
|
44
|
+
});
|
|
45
|
+
// Transform result to include data access patterns
|
|
46
|
+
// Note: The universal analyzer focuses on violations, while the legacy one
|
|
47
|
+
// also returned DataAccessPattern objects. For now, we'll just return violations.
|
|
48
|
+
return result;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Analyzer definition for registration
|
|
52
|
+
*/
|
|
53
|
+
export const dataAccessAnalyzer = {
|
|
54
|
+
name: 'data-access',
|
|
55
|
+
description: 'Analyzes database access patterns and data layer interactions',
|
|
56
|
+
category: 'security',
|
|
57
|
+
analyze: analyzeDataAccess
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=dataAccessAnalyzerCompat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataAccessAnalyzerCompat.js","sourceRoot":"","sources":["../../src/analyzers/dataAccessAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,4CAA4C;AAC5C,mBAAmB,EAAE,CAAC;AAEtB;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAqB,KAAK,EACtD,KAAe,EACf,SAAc,EAAE,EAChB,OAAO,GAAG,EAAE,EACZ,gBAAgB,EAChB,EAAE;IACF,MAAM,QAAQ,GAAG,IAAI,2BAA2B,EAAE,CAAC;IAEnD,uEAAuE;IACvE,MAAM,eAAe,GAAQ,EAAE,CAAC;IAEhC,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;QAAE,eAAe,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACjF,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS;QAAE,eAAe,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAClH,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS;QAAE,eAAe,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAC7F,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS;QAAE,eAAe,CAAC,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;IACrH,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS;QAAE,eAAe,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACtG,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS;QAAE,eAAe,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;IACnG,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS;QAAE,eAAe,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACzG,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS;QAAE,eAAe,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAEtG,8BAA8B;IAC9B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE;QAC5D,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAgB,EAAE,EAAE;YACxD,gBAAgB,CAAC;gBACf,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACnC,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,aAAa;gBACvB,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC,CAAC,SAAS;QACb,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,mDAAmD;IACnD,2EAA2E;IAC3E,kFAAkF;IAClF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,+DAA+D;IAC5E,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,iBAAiB;CAC3B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compatibility layer for DocumentationAnalyzer
|
|
3
|
+
* Ensures the new universal analyzer produces identical results to the legacy one
|
|
4
|
+
*/
|
|
5
|
+
import type { AnalyzerFunction } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Legacy-compatible documentation analyzer function
|
|
8
|
+
* This wraps the new UniversalDocumentationAnalyzer to maintain API compatibility
|
|
9
|
+
*/
|
|
10
|
+
export declare const analyzeDocumentation: AnalyzerFunction;
|
|
11
|
+
/**
|
|
12
|
+
* Analyzer definition for registration
|
|
13
|
+
*/
|
|
14
|
+
export declare const documentationAnalyzer: {
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
category: string;
|
|
18
|
+
analyze: AnalyzerFunction;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=documentationAnalyzerCompat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentationAnalyzerCompat.d.ts","sourceRoot":"","sources":["../../src/analyzers/documentationAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOpD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,gBAqClC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;CAKjC,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compatibility layer for DocumentationAnalyzer
|
|
3
|
+
* Ensures the new universal analyzer produces identical results to the legacy one
|
|
4
|
+
*/
|
|
5
|
+
import { UniversalDocumentationAnalyzer } from './universal/UniversalDocumentationAnalyzer.js';
|
|
6
|
+
import { initializeLanguages } from '../languages/index.js';
|
|
7
|
+
// Initialize language system on module load
|
|
8
|
+
initializeLanguages();
|
|
9
|
+
/**
|
|
10
|
+
* Legacy-compatible documentation analyzer function
|
|
11
|
+
* This wraps the new UniversalDocumentationAnalyzer to maintain API compatibility
|
|
12
|
+
*/
|
|
13
|
+
export const analyzeDocumentation = async (files, config = {}, options = {}, progressCallback) => {
|
|
14
|
+
console.log('[DEBUG] DocumentationAnalyzerCompat called with files:', files);
|
|
15
|
+
console.log('[DEBUG] DocumentationAnalyzerCompat config:', config);
|
|
16
|
+
const analyzer = new UniversalDocumentationAnalyzer();
|
|
17
|
+
// Convert legacy config format if needed
|
|
18
|
+
const universalConfig = {
|
|
19
|
+
requireFunctionDocs: config.requireFunctionDocs ?? true,
|
|
20
|
+
requireClassDocs: config.requireComponentDocs ?? true, // Map component → class
|
|
21
|
+
requireFileDocs: config.requireFileDocs ?? true,
|
|
22
|
+
requireParamDocs: config.requireParamDocs ?? true,
|
|
23
|
+
requireReturnDocs: config.requireReturnDocs ?? true,
|
|
24
|
+
minDescriptionLength: config.minDescriptionLength ?? 10,
|
|
25
|
+
checkExportedOnly: config.checkExportedOnly ?? false,
|
|
26
|
+
exemptPatterns: config.exemptPatterns ?? ['test', 'spec', '\\.d\\.ts$', 'mock', 'fixture']
|
|
27
|
+
};
|
|
28
|
+
// Call the universal analyzer
|
|
29
|
+
const result = await analyzer.analyze(files, universalConfig, {
|
|
30
|
+
progressCallback: progressCallback ? (progress) => {
|
|
31
|
+
progressCallback({
|
|
32
|
+
current: Math.floor(progress * 100),
|
|
33
|
+
total: 100,
|
|
34
|
+
analyzer: 'documentation',
|
|
35
|
+
phase: 'analyzing'
|
|
36
|
+
});
|
|
37
|
+
} : undefined,
|
|
38
|
+
...options
|
|
39
|
+
});
|
|
40
|
+
// The result format should be identical, but we can add any necessary transformations here
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Analyzer definition for registration
|
|
45
|
+
*/
|
|
46
|
+
export const documentationAnalyzer = {
|
|
47
|
+
name: 'documentation',
|
|
48
|
+
description: 'Analyzes documentation quality across the codebase',
|
|
49
|
+
category: 'documentation',
|
|
50
|
+
analyze: analyzeDocumentation
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=documentationAnalyzerCompat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentationAnalyzerCompat.js","sourceRoot":"","sources":["../../src/analyzers/documentationAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,8BAA8B,EAAE,MAAM,+CAA+C,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,4CAA4C;AAC5C,mBAAmB,EAAE,CAAC;AAEtB;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAqB,KAAK,EACzD,KAAe,EACf,SAAc,EAAE,EAChB,OAAO,GAAG,EAAE,EACZ,gBAAgB,EAChB,EAAE;IACF,OAAO,CAAC,GAAG,CAAC,wDAAwD,EAAE,KAAK,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,MAAM,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,8BAA8B,EAAE,CAAC;IAEtD,yCAAyC;IACzC,MAAM,eAAe,GAAG;QACtB,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,IAAI;QACvD,gBAAgB,EAAE,MAAM,CAAC,oBAAoB,IAAI,IAAI,EAAG,wBAAwB;QAChF,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI;QAC/C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI;QACjD,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,IAAI;QACnD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,EAAE;QACvD,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,KAAK;QACpD,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC;KAC3F,CAAC;IAEF,8BAA8B;IAC9B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE;QAC5D,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAgB,EAAE,EAAE;YACxD,gBAAgB,CAAC;gBACf,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACnC,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,eAAe;gBACzB,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC,CAAC,SAAS;QACb,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,2FAA2F;IAC3F,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,oDAAoD;IACjE,QAAQ,EAAE,eAAe;IACzB,OAAO,EAAE,oBAAoB;CAC9B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compatibility layer for DRY Analyzer
|
|
3
|
+
* Ensures the new universal analyzer produces identical results to the legacy one
|
|
4
|
+
*/
|
|
5
|
+
import type { AnalyzerFunction } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Legacy-compatible DRY analyzer function
|
|
8
|
+
* This wraps the new UniversalDRYAnalyzer to maintain API compatibility
|
|
9
|
+
*/
|
|
10
|
+
export declare const analyzeDRY: AnalyzerFunction;
|
|
11
|
+
/**
|
|
12
|
+
* Analyzer definition for registration
|
|
13
|
+
*/
|
|
14
|
+
export declare const dryAnalyzer: {
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
category: string;
|
|
18
|
+
analyze: AnalyzerFunction;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=dryAnalyzerCompat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dryAnalyzerCompat.d.ts","sourceRoot":"","sources":["../../src/analyzers/dryAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOpD;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,gBA6BxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;CAKvB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compatibility layer for DRY Analyzer
|
|
3
|
+
* Ensures the new universal analyzer produces identical results to the legacy one
|
|
4
|
+
*/
|
|
5
|
+
import { UniversalDRYAnalyzer } from './universal/UniversalDRYAnalyzer.js';
|
|
6
|
+
import { initializeLanguages } from '../languages/index.js';
|
|
7
|
+
// Initialize language system on module load
|
|
8
|
+
initializeLanguages();
|
|
9
|
+
/**
|
|
10
|
+
* Legacy-compatible DRY analyzer function
|
|
11
|
+
* This wraps the new UniversalDRYAnalyzer to maintain API compatibility
|
|
12
|
+
*/
|
|
13
|
+
export const analyzeDRY = async (files, config = {}, options = {}, progressCallback) => {
|
|
14
|
+
const analyzer = new UniversalDRYAnalyzer();
|
|
15
|
+
// The config format should be mostly compatible
|
|
16
|
+
const universalConfig = {
|
|
17
|
+
...config,
|
|
18
|
+
// Map any legacy config fields if needed
|
|
19
|
+
};
|
|
20
|
+
// Call the universal analyzer
|
|
21
|
+
const result = await analyzer.analyze(files, universalConfig, {
|
|
22
|
+
progressCallback: progressCallback ? (progress) => {
|
|
23
|
+
progressCallback({
|
|
24
|
+
current: Math.floor(progress * 100),
|
|
25
|
+
total: 100,
|
|
26
|
+
analyzer: 'dry',
|
|
27
|
+
phase: 'analyzing'
|
|
28
|
+
});
|
|
29
|
+
} : undefined,
|
|
30
|
+
...options
|
|
31
|
+
});
|
|
32
|
+
// The result format should be identical, but we can add any necessary transformations here
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Analyzer definition for registration
|
|
37
|
+
*/
|
|
38
|
+
export const dryAnalyzer = {
|
|
39
|
+
name: 'dry',
|
|
40
|
+
description: 'Detects code duplication across the codebase',
|
|
41
|
+
category: 'maintainability',
|
|
42
|
+
analyze: analyzeDRY
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=dryAnalyzerCompat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dryAnalyzerCompat.js","sourceRoot":"","sources":["../../src/analyzers/dryAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,4CAA4C;AAC5C,mBAAmB,EAAE,CAAC;AAEtB;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAqB,KAAK,EAC/C,KAAe,EACf,SAAc,EAAE,EAChB,OAAO,GAAG,EAAE,EACZ,gBAAgB,EAChB,EAAE;IACF,MAAM,QAAQ,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE5C,gDAAgD;IAChD,MAAM,eAAe,GAAG;QACtB,GAAG,MAAM;QACT,yCAAyC;KAC1C,CAAC;IAEF,8BAA8B;IAC9B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE;QAC5D,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAgB,EAAE,EAAE;YACxD,gBAAgB,CAAC;gBACf,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACnC,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC,CAAC,SAAS;QACb,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,2FAA2F;IAC3F,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,8CAA8C;IAC3D,QAAQ,EAAE,iBAAiB;IAC3B,OAAO,EAAE,UAAU;CACpB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compatibility layer for Schema Analyzer
|
|
3
|
+
* Ensures the new universal analyzer produces similar results to the legacy one
|
|
4
|
+
*/
|
|
5
|
+
import type { AnalyzerFunction } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Legacy-compatible schema analyzer function
|
|
8
|
+
* This wraps the new UniversalSchemaAnalyzer to maintain API compatibility
|
|
9
|
+
*/
|
|
10
|
+
export declare const analyzeSchema: AnalyzerFunction;
|
|
11
|
+
/**
|
|
12
|
+
* Analyzer definition for registration
|
|
13
|
+
*/
|
|
14
|
+
export declare const schemaAnalyzer: {
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
category: string;
|
|
18
|
+
analyze: AnalyzerFunction;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=schemaAnalyzerCompat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaAnalyzerCompat.d.ts","sourceRoot":"","sources":["../../src/analyzers/schemaAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAQpD;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,gBAyD3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;CAK1B,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compatibility layer for Schema Analyzer
|
|
3
|
+
* Ensures the new universal analyzer produces similar results to the legacy one
|
|
4
|
+
*/
|
|
5
|
+
import { UniversalSchemaAnalyzer } from './universal/UniversalSchemaAnalyzer.js';
|
|
6
|
+
import { initializeLanguages } from '../languages/index.js';
|
|
7
|
+
import { CodeIndexDB } from '../codeIndexDB.js';
|
|
8
|
+
// Initialize language system on module load
|
|
9
|
+
initializeLanguages();
|
|
10
|
+
/**
|
|
11
|
+
* Legacy-compatible schema analyzer function
|
|
12
|
+
* This wraps the new UniversalSchemaAnalyzer to maintain API compatibility
|
|
13
|
+
*/
|
|
14
|
+
export const analyzeSchema = async (files, config = {}, options = {}, progressCallback) => {
|
|
15
|
+
const analyzer = new UniversalSchemaAnalyzer();
|
|
16
|
+
// Get loaded schemas from database if available
|
|
17
|
+
let schemas = [];
|
|
18
|
+
try {
|
|
19
|
+
const db = CodeIndexDB.getInstance();
|
|
20
|
+
await db.initialize();
|
|
21
|
+
const loadedSchemas = await db.getAllSchemas();
|
|
22
|
+
// Convert database schemas to universal format
|
|
23
|
+
schemas = loadedSchemas.map(({ schema }) => ({
|
|
24
|
+
name: schema.name,
|
|
25
|
+
tables: schema.databases.flatMap(db => db.tables.map(table => ({
|
|
26
|
+
name: table.name,
|
|
27
|
+
columns: table.columns || []
|
|
28
|
+
})))
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
// If database isn't available, continue without schemas
|
|
33
|
+
console.warn('Schema database not available:', error);
|
|
34
|
+
}
|
|
35
|
+
// Map legacy config to universal config
|
|
36
|
+
const universalConfig = {
|
|
37
|
+
enableTableUsageTracking: config.enableTableUsageTracking ?? true,
|
|
38
|
+
checkMissingReferences: config.checkMissingReferences ?? true,
|
|
39
|
+
checkNamingConventions: config.checkNamingConventions ?? true,
|
|
40
|
+
detectUnusedTables: config.detectUnusedTables ?? false,
|
|
41
|
+
validateQueryPatterns: config.validateQueryPatterns ?? true,
|
|
42
|
+
maxQueriesPerFunction: config.maxQueriesPerFunction ?? 5,
|
|
43
|
+
requiredSchemas: config.requiredSchemas ?? [],
|
|
44
|
+
schemas // Pass loaded schemas
|
|
45
|
+
};
|
|
46
|
+
// Call the universal analyzer
|
|
47
|
+
const result = await analyzer.analyze(files, universalConfig);
|
|
48
|
+
// Transform violations to match legacy format
|
|
49
|
+
const transformedViolations = result.violations.map(v => ({
|
|
50
|
+
...v,
|
|
51
|
+
schemaType: v.rule,
|
|
52
|
+
details: v.message,
|
|
53
|
+
analyzer: 'schema'
|
|
54
|
+
}));
|
|
55
|
+
return {
|
|
56
|
+
...result,
|
|
57
|
+
violations: transformedViolations
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Analyzer definition for registration
|
|
62
|
+
*/
|
|
63
|
+
export const schemaAnalyzer = {
|
|
64
|
+
name: 'schema',
|
|
65
|
+
description: 'Analyzes code against database schemas',
|
|
66
|
+
category: 'database',
|
|
67
|
+
analyze: analyzeSchema
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=schemaAnalyzerCompat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaAnalyzerCompat.js","sourceRoot":"","sources":["../../src/analyzers/schemaAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,4CAA4C;AAC5C,mBAAmB,EAAE,CAAC;AAEtB;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAqB,KAAK,EAClD,KAAe,EACf,SAAc,EAAE,EAChB,OAAO,GAAG,EAAE,EACZ,gBAAgB,EAChB,EAAE;IACF,MAAM,QAAQ,GAAG,IAAI,uBAAuB,EAAE,CAAC;IAE/C,gDAAgD;IAChD,IAAI,OAAO,GAAU,EAAE,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,EAAE,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,aAAa,EAAE,CAAC;QAE/C,+CAA+C;QAC/C,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3C,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CACpC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;aAC7B,CAAC,CAAC,CACJ;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wDAAwD;QACxD,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,wCAAwC;IACxC,MAAM,eAAe,GAAG;QACtB,wBAAwB,EAAE,MAAM,CAAC,wBAAwB,IAAI,IAAI;QACjE,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,IAAI,IAAI;QAC7D,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,IAAI,IAAI;QAC7D,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,KAAK;QACtD,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,IAAI,IAAI;QAC3D,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,IAAI,CAAC;QACxD,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,EAAE;QAC7C,OAAO,CAAC,sBAAsB;KAC/B,CAAC;IAEF,8BAA8B;IAC9B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IAE9D,8CAA8C;IAC9C,MAAM,qBAAqB,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxD,GAAG,CAAC;QACJ,UAAU,EAAE,CAAC,CAAC,IAAI;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,qBAAqB;KAClC,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,wCAAwC;IACrD,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,aAAa;CACvB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compatibility layer for SOLID Analyzer
|
|
3
|
+
* Ensures the new universal analyzer produces similar results to the legacy one
|
|
4
|
+
*/
|
|
5
|
+
import type { AnalyzerFunction } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Legacy-compatible SOLID analyzer function
|
|
8
|
+
* This wraps the new UniversalSOLIDAnalyzer to maintain API compatibility
|
|
9
|
+
*/
|
|
10
|
+
export declare const analyzeSOLID: AnalyzerFunction;
|
|
11
|
+
/**
|
|
12
|
+
* Analyzer definition for registration
|
|
13
|
+
*/
|
|
14
|
+
export declare const solidAnalyzer: {
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
category: string;
|
|
18
|
+
analyze: AnalyzerFunction;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=solidAnalyzerCompat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solidAnalyzerCompat.d.ts","sourceRoot":"","sources":["../../src/analyzers/solidAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOpD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,gBAuD1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;CAKzB,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compatibility layer for SOLID Analyzer
|
|
3
|
+
* Ensures the new universal analyzer produces similar results to the legacy one
|
|
4
|
+
*/
|
|
5
|
+
import { UniversalSOLIDAnalyzer } from './universal/UniversalSOLIDAnalyzer.js';
|
|
6
|
+
import { initializeLanguages } from '../languages/index.js';
|
|
7
|
+
// Initialize language system on module load
|
|
8
|
+
initializeLanguages();
|
|
9
|
+
/**
|
|
10
|
+
* Legacy-compatible SOLID analyzer function
|
|
11
|
+
* This wraps the new UniversalSOLIDAnalyzer to maintain API compatibility
|
|
12
|
+
*/
|
|
13
|
+
export const analyzeSOLID = async (files, config = {}, options = {}, progressCallback) => {
|
|
14
|
+
console.error('[DEBUG] SOLID compat layer called with files:', files);
|
|
15
|
+
console.error('[DEBUG] SOLID compat layer config:', config);
|
|
16
|
+
const analyzer = new UniversalSOLIDAnalyzer();
|
|
17
|
+
// Map legacy config to universal config, only override defined values
|
|
18
|
+
const universalConfig = {
|
|
19
|
+
skipTestFiles: true
|
|
20
|
+
};
|
|
21
|
+
// Only set properties that are explicitly provided to avoid overriding defaults with undefined
|
|
22
|
+
if (config.maxMethodsPerClass !== undefined)
|
|
23
|
+
universalConfig.maxMethodsPerClass = config.maxMethodsPerClass;
|
|
24
|
+
if (config.maxLinesPerMethod !== undefined)
|
|
25
|
+
universalConfig.maxLinesPerMethod = config.maxLinesPerMethod;
|
|
26
|
+
if (config.maxParametersPerMethod !== undefined)
|
|
27
|
+
universalConfig.maxParametersPerMethod = config.maxParametersPerMethod;
|
|
28
|
+
if (config.maxClassComplexity !== undefined)
|
|
29
|
+
universalConfig.maxClassComplexity = config.maxClassComplexity;
|
|
30
|
+
if (config.maxInterfaceMembers !== undefined)
|
|
31
|
+
universalConfig.maxInterfaceMembers = config.maxInterfaceMembers;
|
|
32
|
+
if (config.checkDependencyInversion !== undefined)
|
|
33
|
+
universalConfig.checkDependencyInversion = config.checkDependencyInversion;
|
|
34
|
+
if (config.checkInterfaceSegregation !== undefined)
|
|
35
|
+
universalConfig.checkInterfaceSegregation = config.checkInterfaceSegregation;
|
|
36
|
+
if (config.checkLiskovSubstitution !== undefined)
|
|
37
|
+
universalConfig.checkLiskovSubstitution = config.checkLiskovSubstitution;
|
|
38
|
+
console.error('[DEBUG] SOLID compat: Universal config:', universalConfig);
|
|
39
|
+
// Call the universal analyzer
|
|
40
|
+
console.error('[DEBUG] SOLID compat: About to call analyzer.analyze()');
|
|
41
|
+
try {
|
|
42
|
+
const result = await analyzer.analyze(files, universalConfig, {
|
|
43
|
+
progressCallback: progressCallback ? (progress) => {
|
|
44
|
+
progressCallback({
|
|
45
|
+
current: Math.floor(progress * 100),
|
|
46
|
+
total: 100,
|
|
47
|
+
analyzer: 'solid',
|
|
48
|
+
phase: 'analyzing'
|
|
49
|
+
});
|
|
50
|
+
} : undefined,
|
|
51
|
+
...options
|
|
52
|
+
});
|
|
53
|
+
console.error('[DEBUG] SOLID compat: analyzer.analyze() completed, violations:', result.violations.length);
|
|
54
|
+
return {
|
|
55
|
+
...result,
|
|
56
|
+
violations: result.violations.map(v => ({
|
|
57
|
+
...v,
|
|
58
|
+
principle: v.rule,
|
|
59
|
+
analyzer: 'solid',
|
|
60
|
+
rule: v.rule
|
|
61
|
+
}))
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error('[DEBUG] SOLID compat: ERROR in analyzer.analyze():', error);
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Analyzer definition for registration
|
|
71
|
+
*/
|
|
72
|
+
export const solidAnalyzer = {
|
|
73
|
+
name: 'solid',
|
|
74
|
+
description: 'Detects violations of SOLID principles',
|
|
75
|
+
category: 'architecture',
|
|
76
|
+
analyze: analyzeSOLID
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=solidAnalyzerCompat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solidAnalyzerCompat.js","sourceRoot":"","sources":["../../src/analyzers/solidAnalyzerCompat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Universal DRY (Don't Repeat Yourself) Analyzer
|
|
3
|
+
* Works across multiple programming languages using the adapter pattern
|
|
4
|
+
*/
|
|
5
|
+
import { UniversalAnalyzer } from '../../languages/UniversalAnalyzer.js';
|
|
6
|
+
import type { Violation } from '../../types.js';
|
|
7
|
+
import type { AST, LanguageAdapter } from '../../languages/types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Configuration for DRY analyzer
|
|
10
|
+
*/
|
|
11
|
+
export interface DRYAnalyzerConfig {
|
|
12
|
+
minLineThreshold?: number;
|
|
13
|
+
similarityThreshold?: number;
|
|
14
|
+
excludePatterns?: string[];
|
|
15
|
+
checkImports?: boolean;
|
|
16
|
+
checkStrings?: boolean;
|
|
17
|
+
ignoreComments?: boolean;
|
|
18
|
+
ignoreWhitespace?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare const DEFAULT_DRY_CONFIG: DRYAnalyzerConfig;
|
|
21
|
+
export declare class UniversalDRYAnalyzer extends UniversalAnalyzer {
|
|
22
|
+
readonly name = "dry";
|
|
23
|
+
readonly description = "Detects code duplication across the codebase";
|
|
24
|
+
readonly category = "maintainability";
|
|
25
|
+
protected analyzeAST(ast: AST, adapter: LanguageAdapter, config: DRYAnalyzerConfig, sourceCode: string): Promise<Violation[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Extract code blocks from AST
|
|
28
|
+
*/
|
|
29
|
+
private extractCodeBlocks;
|
|
30
|
+
/**
|
|
31
|
+
* Create a code block from an AST node
|
|
32
|
+
*/
|
|
33
|
+
private createCodeBlock;
|
|
34
|
+
/**
|
|
35
|
+
* Normalize code for comparison
|
|
36
|
+
*/
|
|
37
|
+
private normalizeCode;
|
|
38
|
+
/**
|
|
39
|
+
* Hash code for comparison
|
|
40
|
+
*/
|
|
41
|
+
private hashCode;
|
|
42
|
+
/**
|
|
43
|
+
* Count lines in text
|
|
44
|
+
*/
|
|
45
|
+
private countLines;
|
|
46
|
+
/**
|
|
47
|
+
* Check if block is large enough to be considered
|
|
48
|
+
*/
|
|
49
|
+
private isBlockLargeEnough;
|
|
50
|
+
/**
|
|
51
|
+
* Build local index for duplicate detection
|
|
52
|
+
*/
|
|
53
|
+
private buildLocalIndex;
|
|
54
|
+
/**
|
|
55
|
+
* Check for duplicate string literals
|
|
56
|
+
*/
|
|
57
|
+
private checkDuplicateStrings;
|
|
58
|
+
/**
|
|
59
|
+
* Check for duplicate imports
|
|
60
|
+
*/
|
|
61
|
+
private checkDuplicateImports;
|
|
62
|
+
/**
|
|
63
|
+
* Helper methods
|
|
64
|
+
*/
|
|
65
|
+
private isExcluded;
|
|
66
|
+
private findNodeByLocation;
|
|
67
|
+
private walkAST;
|
|
68
|
+
private isSignificantBlock;
|
|
69
|
+
private isStringLiteral;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=UniversalDRYAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UniversalDRYAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/analyzers/universal/UniversalDRYAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,GAAG,EAAE,eAAe,EAAW,MAAM,0BAA0B,CAAC;AAG9E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,kBAAkB,EAAE,iBAQhC,CAAC;AAoBF,qBAAa,oBAAqB,SAAQ,iBAAiB;IACzD,QAAQ,CAAC,IAAI,SAAS;IACtB,QAAQ,CAAC,WAAW,kDAAkD;IACtE,QAAQ,CAAC,QAAQ,qBAAqB;cAEtB,UAAU,CACxB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,EAAE,CAAC;IAuDvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiFzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAsBrB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0C7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+B7B;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,eAAe;CAGxB"}
|