@aiready/consistency 0.21.8 → 0.21.11
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/.turbo/turbo-build.log +23 -24
- package/.turbo/turbo-format-check.log +1 -1
- package/.turbo/turbo-lint.log +1 -1
- package/.turbo/turbo-test.log +18 -19
- package/.turbo/turbo-type-check.log +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +4 -4
- package/dist/index.mjs +3 -3
- package/package.json +2 -2
- package/src/__tests__/provider.test.ts +6 -34
- package/src/index.ts +3 -3
- package/src/provider.ts +2 -2
- package/dist/__tests__/analyzer.test.d.ts +0 -2
- package/dist/__tests__/analyzer.test.d.ts.map +0 -1
- package/dist/__tests__/analyzer.test.js +0 -157
- package/dist/__tests__/analyzer.test.js.map +0 -1
- package/dist/__tests__/language-filter.test.d.ts +0 -2
- package/dist/__tests__/language-filter.test.d.ts.map +0 -1
- package/dist/__tests__/language-filter.test.js +0 -46
- package/dist/__tests__/language-filter.test.js.map +0 -1
- package/dist/__tests__/scoring.test.d.ts +0 -2
- package/dist/__tests__/scoring.test.d.ts.map +0 -1
- package/dist/__tests__/scoring.test.js +0 -118
- package/dist/__tests__/scoring.test.js.map +0 -1
- package/dist/analyzer.d.ts +0 -7
- package/dist/analyzer.d.ts.map +0 -1
- package/dist/analyzer.js +0 -160
- package/dist/analyzer.js.map +0 -1
- package/dist/analyzers/naming-ast.d.ts +0 -7
- package/dist/analyzers/naming-ast.d.ts.map +0 -1
- package/dist/analyzers/naming-ast.js +0 -253
- package/dist/analyzers/naming-ast.js.map +0 -1
- package/dist/analyzers/naming-constants.d.ts +0 -21
- package/dist/analyzers/naming-constants.d.ts.map +0 -1
- package/dist/analyzers/naming-constants.js +0 -96
- package/dist/analyzers/naming-constants.js.map +0 -1
- package/dist/analyzers/naming-python.d.ts +0 -16
- package/dist/analyzers/naming-python.d.ts.map +0 -1
- package/dist/analyzers/naming-python.js +0 -165
- package/dist/analyzers/naming-python.js.map +0 -1
- package/dist/analyzers/naming.d.ts +0 -6
- package/dist/analyzers/naming.d.ts.map +0 -1
- package/dist/analyzers/naming.js +0 -234
- package/dist/analyzers/naming.js.map +0 -1
- package/dist/analyzers/patterns.d.ts +0 -10
- package/dist/analyzers/patterns.d.ts.map +0 -1
- package/dist/analyzers/patterns.js +0 -197
- package/dist/analyzers/patterns.js.map +0 -1
- package/dist/chunk-2BTBNG6X.mjs +0 -814
- package/dist/chunk-3ZB6FFRL.mjs +0 -661
- package/dist/chunk-5UFRGXSB.mjs +0 -783
- package/dist/chunk-66M3TIO7.mjs +0 -837
- package/dist/chunk-6BM5MV3S.mjs +0 -719
- package/dist/chunk-6H3JHDP7.mjs +0 -832
- package/dist/chunk-7PHHJOGC.mjs +0 -1374
- package/dist/chunk-AASFXGUR.mjs +0 -1622
- package/dist/chunk-AR7DIZLP.mjs +0 -827
- package/dist/chunk-BDDMOIU2.mjs +0 -385
- package/dist/chunk-BMILMNKJ.mjs +0 -1633
- package/dist/chunk-BYY6MD5T.mjs +0 -729
- package/dist/chunk-CA4Q5JBK.mjs +0 -1143
- package/dist/chunk-CF4LU7KE.mjs +0 -384
- package/dist/chunk-CJINEUIH.mjs +0 -1369
- package/dist/chunk-CLWNLHDB.mjs +0 -909
- package/dist/chunk-CZUJTDNH.mjs +0 -848
- package/dist/chunk-DNGW3WQK.mjs +0 -810
- package/dist/chunk-DSI3TEO2.mjs +0 -662
- package/dist/chunk-EIQ5K6OO.mjs +0 -1579
- package/dist/chunk-FEJODRK5.mjs +0 -783
- package/dist/chunk-FK56AZ43.mjs +0 -817
- package/dist/chunk-H6S7WKSQ.mjs +0 -729
- package/dist/chunk-HAOJLJNB.mjs +0 -1290
- package/dist/chunk-HJCP36VW.mjs +0 -821
- package/dist/chunk-HPG7P6PD.mjs +0 -1372
- package/dist/chunk-IVRBV7SE.mjs +0 -1295
- package/dist/chunk-IXBC6GVT.mjs +0 -832
- package/dist/chunk-J5IFYDVU.mjs +0 -1579
- package/dist/chunk-KWQVBF7K.mjs +0 -831
- package/dist/chunk-LD3CHHU2.mjs +0 -1297
- package/dist/chunk-LMOXGPCM.mjs +0 -722
- package/dist/chunk-LSXZH6X6.mjs +0 -810
- package/dist/chunk-LUAREV6A.mjs +0 -508
- package/dist/chunk-MAPVFXBP.mjs +0 -708
- package/dist/chunk-MM2PLUCH.mjs +0 -1376
- package/dist/chunk-NPWCJZUG.mjs +0 -708
- package/dist/chunk-ON73WHHU.mjs +0 -1310
- package/dist/chunk-P6NVKUBB.mjs +0 -831
- package/dist/chunk-Q3KTWDSL.mjs +0 -808
- package/dist/chunk-Q5XMWG33.mjs +0 -661
- package/dist/chunk-QOIPVP6P.mjs +0 -1607
- package/dist/chunk-RMEQWG52.mjs +0 -1633
- package/dist/chunk-S6BZVTWN.mjs +0 -731
- package/dist/chunk-TE6JYZD3.mjs +0 -810
- package/dist/chunk-TLVLM3M5.mjs +0 -771
- package/dist/chunk-TXHPUU7A.mjs +0 -863
- package/dist/chunk-UMBBTNQN.mjs +0 -787
- package/dist/chunk-V2UPXL7L.mjs +0 -842
- package/dist/chunk-VODCPPET.mjs +0 -1292
- package/dist/chunk-W6UGMKRV.mjs +0 -1310
- package/dist/chunk-WGH4TGZ3.mjs +0 -1288
- package/dist/chunk-WTBDNCEN.mjs +0 -1352
- package/dist/chunk-XVW5DKJQ.mjs +0 -1619
- package/dist/chunk-YCDCIOJN.mjs +0 -842
- package/dist/chunk-YEHXYHGY.mjs +0 -1497
- package/dist/chunk-YHHXE2JX.mjs +0 -912
- package/dist/chunk-ZB6UK276.mjs +0 -662
- package/dist/chunk-ZG3KFSD3.mjs +0 -1142
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/scoring.d.ts +0 -12
- package/dist/scoring.d.ts.map +0 -1
- package/dist/scoring.js +0 -110
- package/dist/scoring.js.map +0 -1
- package/dist/types.d.ts +0 -53
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/utils/ast-parser.d.ts +0 -46
- package/dist/utils/ast-parser.d.ts.map +0 -1
- package/dist/utils/ast-parser.js +0 -157
- package/dist/utils/ast-parser.js.map +0 -1
- package/dist/utils/config-loader.d.ts +0 -19
- package/dist/utils/config-loader.d.ts.map +0 -1
- package/dist/utils/config-loader.js +0 -31
- package/dist/utils/config-loader.js.map +0 -1
- package/dist/utils/context-detector.d.ts +0 -40
- package/dist/utils/context-detector.d.ts.map +0 -1
- package/dist/utils/context-detector.js +0 -225
- package/dist/utils/context-detector.js.map +0 -1
- package/dist/utils/scope-tracker.d.ts +0 -87
- package/dist/utils/scope-tracker.d.ts.map +0 -1
- package/dist/utils/scope-tracker.js +0 -161
- package/dist/utils/scope-tracker.js.map +0 -1
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { calculateConsistencyScore } from '../scoring';
|
|
3
|
-
describe('Consistency Scoring', () => {
|
|
4
|
-
describe('calculateConsistencyScore', () => {
|
|
5
|
-
it('should return perfect score for no issues', () => {
|
|
6
|
-
const result = calculateConsistencyScore([], 100);
|
|
7
|
-
expect(result.score).toBe(100);
|
|
8
|
-
expect(result.toolName).toBe('consistency');
|
|
9
|
-
expect(result.rawMetrics.totalIssues).toBe(0);
|
|
10
|
-
expect(result.recommendations).toHaveLength(0);
|
|
11
|
-
});
|
|
12
|
-
it('should penalize high issue density', () => {
|
|
13
|
-
const issues = Array(50).fill({
|
|
14
|
-
severity: 'minor',
|
|
15
|
-
category: 'naming',
|
|
16
|
-
message: 'Test issue',
|
|
17
|
-
location: { file: 'test.ts', line: 1 },
|
|
18
|
-
});
|
|
19
|
-
// 50 issues / 10 files = 5 issues per file
|
|
20
|
-
// densityPenalty = min(50, 5 * 15) = 50
|
|
21
|
-
const result = calculateConsistencyScore(issues, 10);
|
|
22
|
-
expect(result.score).toBeLessThan(60);
|
|
23
|
-
expect(result.rawMetrics.issuesPerFile).toBe(5);
|
|
24
|
-
});
|
|
25
|
-
it('should heavily penalize critical issues', () => {
|
|
26
|
-
const issues = [
|
|
27
|
-
{
|
|
28
|
-
severity: 'critical',
|
|
29
|
-
category: 'naming',
|
|
30
|
-
message: 'Critical naming issue',
|
|
31
|
-
location: { file: 'test.ts', line: 1 },
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
severity: 'critical',
|
|
35
|
-
category: 'naming',
|
|
36
|
-
message: 'Another critical issue',
|
|
37
|
-
location: { file: 'test.ts', line: 10 },
|
|
38
|
-
},
|
|
39
|
-
];
|
|
40
|
-
const result = calculateConsistencyScore(issues, 10);
|
|
41
|
-
// 2 issues / 10 files = 0.2 issues/file → densityPenalty = 3
|
|
42
|
-
// weightedCount = 2*10 = 20, avgWeighted = 2.0 → severityPenalty = 4
|
|
43
|
-
// score = 100 - 3 - 4 = 93
|
|
44
|
-
expect(result.score).toBe(93);
|
|
45
|
-
expect(result.rawMetrics.criticalIssues).toBe(2);
|
|
46
|
-
expect(result.factors.some(f => f.name === 'Critical Issues')).toBe(true);
|
|
47
|
-
expect(result.recommendations.some(r => r.priority === 'high')).toBe(true);
|
|
48
|
-
});
|
|
49
|
-
it('should apply weighted severity penalties', () => {
|
|
50
|
-
const issues = [
|
|
51
|
-
...Array(5).fill({ severity: 'critical' }),
|
|
52
|
-
...Array(10).fill({ severity: 'major' }),
|
|
53
|
-
...Array(20).fill({ severity: 'minor' }),
|
|
54
|
-
];
|
|
55
|
-
const result = calculateConsistencyScore(issues.map((i, idx) => ({
|
|
56
|
-
...i,
|
|
57
|
-
category: 'naming',
|
|
58
|
-
message: 'test',
|
|
59
|
-
location: { file: 'test.ts', line: idx },
|
|
60
|
-
})), 50);
|
|
61
|
-
expect(result.rawMetrics.criticalIssues).toBe(5);
|
|
62
|
-
expect(result.rawMetrics.majorIssues).toBe(10);
|
|
63
|
-
expect(result.rawMetrics.minorIssues).toBe(20);
|
|
64
|
-
// 35 issues / 50 files = 0.7 issues/file → densityPenalty = 10.5
|
|
65
|
-
// weightedCount = 50+30+10 = 90, avgWeighted = 1.8 → severityPenalty = 3.6
|
|
66
|
-
// score = 100 - 10.5 - 3.6 = 85.9 → 86
|
|
67
|
-
expect(result.score).toBe(86);
|
|
68
|
-
});
|
|
69
|
-
it('should generate appropriate recommendations', () => {
|
|
70
|
-
const issues = [
|
|
71
|
-
...Array(3).fill({ severity: 'critical', category: 'naming' }),
|
|
72
|
-
...Array(10).fill({ severity: 'major', category: 'patterns' }),
|
|
73
|
-
];
|
|
74
|
-
const result = calculateConsistencyScore(issues.map((i, idx) => ({
|
|
75
|
-
...i,
|
|
76
|
-
message: 'test',
|
|
77
|
-
location: { file: 'test.ts', line: idx },
|
|
78
|
-
})), 5);
|
|
79
|
-
expect(result.recommendations.length).toBeGreaterThan(0);
|
|
80
|
-
expect(result.recommendations.some(r => r.action.includes('critical'))).toBe(true);
|
|
81
|
-
expect(result.recommendations.some(r => r.action.includes('naming'))).toBe(true);
|
|
82
|
-
});
|
|
83
|
-
it('should handle edge case of zero files', () => {
|
|
84
|
-
const issues = [];
|
|
85
|
-
const result = calculateConsistencyScore(issues, 0);
|
|
86
|
-
expect(result.score).toBe(100);
|
|
87
|
-
expect(result.rawMetrics.issuesPerFile).toBe(0);
|
|
88
|
-
});
|
|
89
|
-
it('should recommend linter for many minor issues', () => {
|
|
90
|
-
const issues = Array(30).fill({
|
|
91
|
-
severity: 'minor',
|
|
92
|
-
category: 'naming',
|
|
93
|
-
message: 'Minor style issue',
|
|
94
|
-
location: { file: 'test.ts', line: 1 },
|
|
95
|
-
});
|
|
96
|
-
const result = calculateConsistencyScore(issues, 10);
|
|
97
|
-
expect(result.recommendations.some(r => r.action.includes('linter'))).toBe(true);
|
|
98
|
-
});
|
|
99
|
-
it('should combine all penalty types', () => {
|
|
100
|
-
const issues = [
|
|
101
|
-
...Array(10).fill({ severity: 'critical', category: 'naming' }),
|
|
102
|
-
...Array(20).fill({ severity: 'major', category: 'patterns' }),
|
|
103
|
-
...Array(40).fill({ severity: 'minor', category: 'naming' }),
|
|
104
|
-
];
|
|
105
|
-
const result = calculateConsistencyScore(issues.map((i, idx) => ({
|
|
106
|
-
...i,
|
|
107
|
-
message: 'test',
|
|
108
|
-
location: { file: 'test.ts', line: idx },
|
|
109
|
-
})), 10);
|
|
110
|
-
// 70 issues / 10 files = 7 issues/file
|
|
111
|
-
// High density + critical issues + weighted severity
|
|
112
|
-
expect(result.score).toBeLessThan(30);
|
|
113
|
-
expect(result.factors.length).toBeGreaterThan(2);
|
|
114
|
-
expect(result.recommendations.length).toBeGreaterThan(0);
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
//# sourceMappingURL=scoring.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scoring.test.js","sourceRoot":"","sources":["../../src/__tests__/scoring.test.ts"],"names":[],"mappings":"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"}
|
package/dist/analyzer.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { ConsistencyOptions, ConsistencyReport } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Main consistency analyzer that orchestrates all analysis types
|
|
4
|
-
* Supports: TypeScript, JavaScript, Python
|
|
5
|
-
*/
|
|
6
|
-
export declare function analyzeConsistency(options: ConsistencyOptions): Promise<ConsistencyReport>;
|
|
7
|
-
//# sourceMappingURL=analyzer.d.ts.map
|
package/dist/analyzer.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAoB,MAAM,SAAS,CAAC;AAKvF;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAyI5B"}
|
package/dist/analyzer.js
DELETED
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import { scanFiles } from '@aiready/core';
|
|
2
|
-
import { analyzeNamingAST } from './analyzers/naming-ast';
|
|
3
|
-
import { analyzePythonNaming } from './analyzers/naming-python';
|
|
4
|
-
import { analyzePatterns } from './analyzers/patterns';
|
|
5
|
-
/**
|
|
6
|
-
* Main consistency analyzer that orchestrates all analysis types
|
|
7
|
-
* Supports: TypeScript, JavaScript, Python
|
|
8
|
-
*/
|
|
9
|
-
export async function analyzeConsistency(options) {
|
|
10
|
-
const { checkNaming = true, checkPatterns = true, checkArchitecture = false, // Not implemented yet
|
|
11
|
-
minSeverity = 'info', ...scanOptions } = options;
|
|
12
|
-
// Scan files
|
|
13
|
-
const filePaths = await scanFiles(scanOptions);
|
|
14
|
-
// Separate files by language
|
|
15
|
-
const tsJsFiles = filePaths.filter(f => /\.(ts|tsx|js|jsx)$/i.test(f));
|
|
16
|
-
const pythonFiles = filePaths.filter(f => /\.py$/i.test(f));
|
|
17
|
-
// Collect issues by category - now handles multiple languages
|
|
18
|
-
let namingIssues = [];
|
|
19
|
-
if (checkNaming) {
|
|
20
|
-
const tsJsNamingIssues = tsJsFiles.length > 0 ? await analyzeNamingAST(tsJsFiles) : [];
|
|
21
|
-
const pythonNamingIssues = pythonFiles.length > 0 ? await analyzePythonNaming(pythonFiles) : [];
|
|
22
|
-
namingIssues = [...tsJsNamingIssues, ...pythonNamingIssues];
|
|
23
|
-
}
|
|
24
|
-
const patternIssues = checkPatterns ? await analyzePatterns(filePaths) : [];
|
|
25
|
-
// Convert to AnalysisResult format
|
|
26
|
-
const results = [];
|
|
27
|
-
const fileIssuesMap = new Map();
|
|
28
|
-
// Process naming issues
|
|
29
|
-
for (const issue of namingIssues) {
|
|
30
|
-
if (!shouldIncludeSeverity(issue.severity, minSeverity)) {
|
|
31
|
-
continue;
|
|
32
|
-
}
|
|
33
|
-
const consistencyIssue = {
|
|
34
|
-
type: issue.type === 'convention-mix' ? 'naming-inconsistency' : 'naming-quality',
|
|
35
|
-
category: 'naming',
|
|
36
|
-
severity: issue.severity,
|
|
37
|
-
message: `${issue.type}: ${issue.identifier}`,
|
|
38
|
-
location: {
|
|
39
|
-
file: issue.file,
|
|
40
|
-
line: issue.line,
|
|
41
|
-
column: issue.column
|
|
42
|
-
},
|
|
43
|
-
suggestion: issue.suggestion
|
|
44
|
-
};
|
|
45
|
-
if (!fileIssuesMap.has(issue.file)) {
|
|
46
|
-
fileIssuesMap.set(issue.file, []);
|
|
47
|
-
}
|
|
48
|
-
fileIssuesMap.get(issue.file).push(consistencyIssue);
|
|
49
|
-
}
|
|
50
|
-
// Process pattern issues
|
|
51
|
-
for (const issue of patternIssues) {
|
|
52
|
-
if (!shouldIncludeSeverity(issue.severity, minSeverity)) {
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
const consistencyIssue = {
|
|
56
|
-
type: 'pattern-inconsistency',
|
|
57
|
-
category: 'patterns',
|
|
58
|
-
severity: issue.severity,
|
|
59
|
-
message: issue.description,
|
|
60
|
-
location: {
|
|
61
|
-
file: issue.files[0] || 'multiple files',
|
|
62
|
-
line: 1
|
|
63
|
-
},
|
|
64
|
-
examples: issue.examples,
|
|
65
|
-
suggestion: `Standardize ${issue.type} patterns across ${issue.files.length} files`
|
|
66
|
-
};
|
|
67
|
-
// Add to first file in the pattern
|
|
68
|
-
const firstFile = issue.files[0];
|
|
69
|
-
if (firstFile && !fileIssuesMap.has(firstFile)) {
|
|
70
|
-
fileIssuesMap.set(firstFile, []);
|
|
71
|
-
}
|
|
72
|
-
if (firstFile) {
|
|
73
|
-
fileIssuesMap.get(firstFile).push(consistencyIssue);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
// Convert to AnalysisResult format
|
|
77
|
-
for (const [fileName, issues] of fileIssuesMap) {
|
|
78
|
-
results.push({
|
|
79
|
-
fileName,
|
|
80
|
-
issues: issues,
|
|
81
|
-
metrics: {
|
|
82
|
-
consistencyScore: calculateConsistencyScore(issues)
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
// Sort results by severity first, then by issue count per file
|
|
87
|
-
results.sort((fileResultA, fileResultB) => {
|
|
88
|
-
const severityOrder = { critical: 0, major: 1, minor: 2, info: 3 };
|
|
89
|
-
// Get highest severity in each file
|
|
90
|
-
const maxSeverityA = Math.min(...fileResultA.issues.map(i => severityOrder[i.severity]));
|
|
91
|
-
const maxSeverityB = Math.min(...fileResultB.issues.map(i => severityOrder[i.severity]));
|
|
92
|
-
// Sort by severity first
|
|
93
|
-
if (maxSeverityA !== maxSeverityB) {
|
|
94
|
-
return maxSeverityA - maxSeverityB;
|
|
95
|
-
}
|
|
96
|
-
// Then by issue count (descending)
|
|
97
|
-
return fileResultB.issues.length - fileResultA.issues.length;
|
|
98
|
-
});
|
|
99
|
-
// Generate recommendations
|
|
100
|
-
const recommendations = generateRecommendations(namingIssues, patternIssues);
|
|
101
|
-
// Compute filtered counts (respecting minSeverity) to report accurate summary
|
|
102
|
-
const namingCountFiltered = namingIssues.filter(i => shouldIncludeSeverity(i.severity, minSeverity)).length;
|
|
103
|
-
const patternCountFiltered = patternIssues.filter(i => shouldIncludeSeverity(i.severity, minSeverity)).length;
|
|
104
|
-
// Detect naming conventions (TODO: re-implement for AST version)
|
|
105
|
-
// const conventionAnalysis = detectNamingConventions(filePaths, namingIssues);
|
|
106
|
-
return {
|
|
107
|
-
summary: {
|
|
108
|
-
totalIssues: namingCountFiltered + patternCountFiltered,
|
|
109
|
-
namingIssues: namingCountFiltered,
|
|
110
|
-
patternIssues: patternCountFiltered,
|
|
111
|
-
architectureIssues: 0,
|
|
112
|
-
filesAnalyzed: filePaths.length
|
|
113
|
-
},
|
|
114
|
-
results,
|
|
115
|
-
recommendations
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
function shouldIncludeSeverity(severity, minSeverity) {
|
|
119
|
-
const severityLevels = { info: 0, minor: 1, major: 2, critical: 3 };
|
|
120
|
-
return severityLevels[severity] >= severityLevels[minSeverity];
|
|
121
|
-
}
|
|
122
|
-
function calculateConsistencyScore(issues) {
|
|
123
|
-
// Higher score = more consistent (fewer issues)
|
|
124
|
-
const weights = { critical: 10, major: 5, minor: 2, info: 1 };
|
|
125
|
-
const totalWeight = issues.reduce((sum, issue) => sum + weights[issue.severity], 0);
|
|
126
|
-
// Score from 0-1, where 1 is perfect
|
|
127
|
-
return Math.max(0, 1 - totalWeight / 100);
|
|
128
|
-
}
|
|
129
|
-
function generateRecommendations(namingIssues, patternIssues) {
|
|
130
|
-
const recommendations = [];
|
|
131
|
-
if (namingIssues.length > 0) {
|
|
132
|
-
const conventionMixCount = namingIssues.filter(i => i.type === 'convention-mix').length;
|
|
133
|
-
if (conventionMixCount > 0) {
|
|
134
|
-
recommendations.push(`Standardize naming conventions: Found ${conventionMixCount} snake_case variables in TypeScript/JavaScript (use camelCase)`);
|
|
135
|
-
}
|
|
136
|
-
const poorNamingCount = namingIssues.filter(i => i.type === 'poor-naming').length;
|
|
137
|
-
if (poorNamingCount > 0) {
|
|
138
|
-
recommendations.push(`Improve variable naming: Found ${poorNamingCount} single-letter or unclear variable names`);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
if (patternIssues.length > 0) {
|
|
142
|
-
const errorHandlingIssues = patternIssues.filter(i => i.type === 'error-handling');
|
|
143
|
-
if (errorHandlingIssues.length > 0) {
|
|
144
|
-
recommendations.push('Standardize error handling strategy across the codebase (prefer try-catch with typed errors)');
|
|
145
|
-
}
|
|
146
|
-
const asyncIssues = patternIssues.filter(i => i.type === 'async-style');
|
|
147
|
-
if (asyncIssues.length > 0) {
|
|
148
|
-
recommendations.push('Use async/await consistently instead of mixing with promise chains or callbacks');
|
|
149
|
-
}
|
|
150
|
-
const importIssues = patternIssues.filter(i => i.type === 'import-style');
|
|
151
|
-
if (importIssues.length > 0) {
|
|
152
|
-
recommendations.push('Use ES modules consistently across the project (avoid mixing with CommonJS)');
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
if (recommendations.length === 0) {
|
|
156
|
-
recommendations.push('No major consistency issues found! Your codebase follows good practices.');
|
|
157
|
-
}
|
|
158
|
-
return recommendations;
|
|
159
|
-
}
|
|
160
|
-
//# sourceMappingURL=analyzer.js.map
|
package/dist/analyzer.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { NamingIssue } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* AST-based naming analyzer
|
|
4
|
-
* Only supports TypeScript/JavaScript files (.ts, .tsx, .js, .jsx)
|
|
5
|
-
*/
|
|
6
|
-
export declare function analyzeNamingAST(files: string[]): Promise<NamingIssue[]>;
|
|
7
|
-
//# sourceMappingURL=naming-ast.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"naming-ast.d.ts","sourceRoot":"","sources":["../../src/analyzers/naming-ast.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAmB5C;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA8B9E"}
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
import { parseFile, traverseAST, getFunctionName, getLineNumber, isCoverageContext, isLoopStatement, } from '../utils/ast-parser';
|
|
2
|
-
import { ScopeTracker } from '../utils/scope-tracker';
|
|
3
|
-
import { buildCodeContext, adjustSeverity, isAcceptableInContext, calculateComplexity, } from '../utils/context-detector';
|
|
4
|
-
import { loadNamingConfig } from '../utils/config-loader';
|
|
5
|
-
/**
|
|
6
|
-
* AST-based naming analyzer
|
|
7
|
-
* Only supports TypeScript/JavaScript files (.ts, .tsx, .js, .jsx)
|
|
8
|
-
*/
|
|
9
|
-
export async function analyzeNamingAST(files) {
|
|
10
|
-
const issues = [];
|
|
11
|
-
// Load and merge configuration
|
|
12
|
-
const { allAbbreviations, allShortWords, disabledChecks } = await loadNamingConfig(files);
|
|
13
|
-
// Filter to only JS/TS files that the TypeScript parser can handle
|
|
14
|
-
const supportedFiles = files.filter(file => /\.(js|jsx|ts|tsx)$/i.test(file));
|
|
15
|
-
for (const file of supportedFiles) {
|
|
16
|
-
try {
|
|
17
|
-
const ast = parseFile(file);
|
|
18
|
-
if (!ast)
|
|
19
|
-
continue; // Skip files that fail to parse
|
|
20
|
-
const fileIssues = analyzeFileNamingAST(file, ast, allAbbreviations, allShortWords, disabledChecks);
|
|
21
|
-
issues.push(...fileIssues);
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
console.warn(`Skipping ${file} due to parse error:`, error);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return issues;
|
|
28
|
-
}
|
|
29
|
-
function analyzeFileNamingAST(file, ast, allAbbreviations, allShortWords, disabledChecks) {
|
|
30
|
-
const issues = [];
|
|
31
|
-
const scopeTracker = new ScopeTracker(ast);
|
|
32
|
-
const context = buildCodeContext(file, ast);
|
|
33
|
-
const ancestors = [];
|
|
34
|
-
// First pass: Build scope tree and track all variables
|
|
35
|
-
traverseAST(ast, {
|
|
36
|
-
enter: (node, parent) => {
|
|
37
|
-
ancestors.push(node);
|
|
38
|
-
// Enter scopes
|
|
39
|
-
if (node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression' || node.type === 'ArrowFunctionExpression') {
|
|
40
|
-
scopeTracker.enterScope('function', node);
|
|
41
|
-
// Track parameters
|
|
42
|
-
if ('params' in node) {
|
|
43
|
-
for (const param of node.params) {
|
|
44
|
-
if (param.type === 'Identifier') {
|
|
45
|
-
scopeTracker.declareVariable(param.name, param, getLineNumber(param), {
|
|
46
|
-
isParameter: true,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
else if (param.type === 'ObjectPattern' || param.type === 'ArrayPattern') {
|
|
50
|
-
// Handle destructured parameters
|
|
51
|
-
extractIdentifiersFromPattern(param, scopeTracker, true);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
else if (node.type === 'BlockStatement') {
|
|
57
|
-
scopeTracker.enterScope('block', node);
|
|
58
|
-
}
|
|
59
|
-
else if (isLoopStatement(node)) {
|
|
60
|
-
scopeTracker.enterScope('loop', node);
|
|
61
|
-
}
|
|
62
|
-
else if (node.type === 'ClassDeclaration') {
|
|
63
|
-
scopeTracker.enterScope('class', node);
|
|
64
|
-
}
|
|
65
|
-
// Track variable declarations
|
|
66
|
-
if (node.type === 'VariableDeclarator') {
|
|
67
|
-
if (node.id.type === 'Identifier') {
|
|
68
|
-
const isInCoverage = isCoverageContext(node, ancestors);
|
|
69
|
-
scopeTracker.declareVariable(node.id.name, node.id, getLineNumber(node.id), {
|
|
70
|
-
type: ('typeAnnotation' in node.id) ? node.id.typeAnnotation : null,
|
|
71
|
-
isDestructured: false,
|
|
72
|
-
isLoopVariable: scopeTracker.getCurrentScopeType() === 'loop',
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
else if (node.id.type === 'ObjectPattern' || node.id.type === 'ArrayPattern') {
|
|
76
|
-
extractIdentifiersFromPattern(node.id, scopeTracker, false, ancestors);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
// Track references
|
|
80
|
-
if (node.type === 'Identifier' && parent) {
|
|
81
|
-
// Only count as reference if it's not a declaration
|
|
82
|
-
if (parent.type !== 'VariableDeclarator' || parent.id !== node) {
|
|
83
|
-
if (parent.type !== 'FunctionDeclaration' || parent.id !== node) {
|
|
84
|
-
scopeTracker.addReference(node.name, node);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
leave: (node) => {
|
|
90
|
-
ancestors.pop();
|
|
91
|
-
// Exit scopes
|
|
92
|
-
if (node.type === 'FunctionDeclaration' ||
|
|
93
|
-
node.type === 'FunctionExpression' ||
|
|
94
|
-
node.type === 'ArrowFunctionExpression' ||
|
|
95
|
-
node.type === 'BlockStatement' ||
|
|
96
|
-
isLoopStatement(node) ||
|
|
97
|
-
node.type === 'ClassDeclaration') {
|
|
98
|
-
scopeTracker.exitScope();
|
|
99
|
-
}
|
|
100
|
-
},
|
|
101
|
-
});
|
|
102
|
-
// Second pass: Analyze all variables
|
|
103
|
-
const allVariables = scopeTracker.getAllVariables();
|
|
104
|
-
for (const varInfo of allVariables) {
|
|
105
|
-
const name = varInfo.name;
|
|
106
|
-
const line = varInfo.declarationLine;
|
|
107
|
-
// Skip if checks are disabled
|
|
108
|
-
if (disabledChecks.has('single-letter') && name.length === 1)
|
|
109
|
-
continue;
|
|
110
|
-
if (disabledChecks.has('abbreviation') && name.length <= 3)
|
|
111
|
-
continue;
|
|
112
|
-
// Check coverage context
|
|
113
|
-
const isInCoverage = ['s', 'b', 'f', 'l'].includes(name) && varInfo.isDestructured;
|
|
114
|
-
if (isInCoverage)
|
|
115
|
-
continue;
|
|
116
|
-
// Check if acceptable in context
|
|
117
|
-
const functionComplexity = varInfo.node.type === 'Identifier' && 'parent' in varInfo.node
|
|
118
|
-
? calculateComplexity(varInfo.node)
|
|
119
|
-
: context.complexity;
|
|
120
|
-
if (isAcceptableInContext(name, context, {
|
|
121
|
-
isLoopVariable: varInfo.isLoopVariable || allAbbreviations.has(name),
|
|
122
|
-
isParameter: varInfo.isParameter,
|
|
123
|
-
isDestructured: varInfo.isDestructured,
|
|
124
|
-
complexity: functionComplexity,
|
|
125
|
-
})) {
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
// Single letter check
|
|
129
|
-
if (name.length === 1 && !allAbbreviations.has(name) && !allShortWords.has(name)) {
|
|
130
|
-
// Check if short-lived
|
|
131
|
-
const isShortLived = scopeTracker.isShortLived(varInfo, 5);
|
|
132
|
-
if (!isShortLived) {
|
|
133
|
-
issues.push({
|
|
134
|
-
file,
|
|
135
|
-
line,
|
|
136
|
-
type: 'poor-naming',
|
|
137
|
-
identifier: name,
|
|
138
|
-
severity: adjustSeverity('minor', context, 'poor-naming'),
|
|
139
|
-
suggestion: `Use descriptive variable name instead of single letter '${name}'`,
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
continue;
|
|
143
|
-
}
|
|
144
|
-
// Abbreviation check (2-3 letters)
|
|
145
|
-
if (name.length >= 2 && name.length <= 3) {
|
|
146
|
-
if (!allShortWords.has(name.toLowerCase()) && !allAbbreviations.has(name.toLowerCase())) {
|
|
147
|
-
// Check if short-lived for abbreviations too
|
|
148
|
-
const isShortLived = scopeTracker.isShortLived(varInfo, 5);
|
|
149
|
-
if (!isShortLived) {
|
|
150
|
-
issues.push({
|
|
151
|
-
file,
|
|
152
|
-
line,
|
|
153
|
-
type: 'abbreviation',
|
|
154
|
-
identifier: name,
|
|
155
|
-
severity: adjustSeverity('info', context, 'abbreviation'),
|
|
156
|
-
suggestion: `Consider using full word instead of abbreviation '${name}'`,
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
continue;
|
|
161
|
-
}
|
|
162
|
-
// Snake_case check for TypeScript/JavaScript
|
|
163
|
-
if (!disabledChecks.has('convention-mix') && file.match(/\.(ts|tsx|js|jsx)$/)) {
|
|
164
|
-
if (name.includes('_') && !name.startsWith('_') && name.toLowerCase() === name) {
|
|
165
|
-
const camelCase = name.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
166
|
-
issues.push({
|
|
167
|
-
file,
|
|
168
|
-
line,
|
|
169
|
-
type: 'convention-mix',
|
|
170
|
-
identifier: name,
|
|
171
|
-
severity: adjustSeverity('minor', context, 'convention-mix'),
|
|
172
|
-
suggestion: `Use camelCase '${camelCase}' instead of snake_case in TypeScript/JavaScript`,
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
// Third pass: Analyze function names
|
|
178
|
-
if (!disabledChecks.has('unclear')) {
|
|
179
|
-
traverseAST(ast, {
|
|
180
|
-
enter: (node) => {
|
|
181
|
-
if (node.type === 'FunctionDeclaration' || node.type === 'MethodDefinition') {
|
|
182
|
-
const name = getFunctionName(node);
|
|
183
|
-
if (!name)
|
|
184
|
-
return;
|
|
185
|
-
const line = getLineNumber(node);
|
|
186
|
-
// Skip entry points
|
|
187
|
-
if (['main', 'init', 'setup', 'bootstrap'].includes(name))
|
|
188
|
-
return;
|
|
189
|
-
// Check for action verbs and patterns
|
|
190
|
-
const hasActionVerb = name.match(/^(get|set|is|has|can|should|create|update|delete|fetch|load|save|process|handle|validate|check|find|search|filter|map|reduce|make|do|run|start|stop|build|parse|format|render|calculate|compute|generate|transform|convert|normalize|sanitize|encode|decode|compress|extract|merge|split|join|sort|compare|test|verify|ensure|apply|execute|invoke|call|emit|dispatch|trigger|listen|subscribe|unsubscribe|add|remove|clear|reset|toggle|enable|disable|open|close|connect|disconnect|send|receive|read|write|import|export|register|unregister|mount|unmount|track|store|persist|upsert|derive|classify|combine|discover|activate|require|assert|expect|mask|escape|sign|put|list|complete|page|safe|mock|pick|pluralize|text|count|detect|select)/);
|
|
191
|
-
const isFactoryPattern = name.match(/(Factory|Builder|Creator|Generator|Provider|Adapter|Mock)$/);
|
|
192
|
-
const isEventHandler = name.match(/^on[A-Z]/);
|
|
193
|
-
const isDescriptiveLong = name.length > 15;
|
|
194
|
-
const isReactHook = name.match(/^use[A-Z]/);
|
|
195
|
-
const isHelperPattern = name.match(/^(to|from|with|without|for|as|into)\w+/) ||
|
|
196
|
-
name.match(/^\w+(To|From|With|Without|For|As|Into)\w*$/); // xForY, xToY patterns
|
|
197
|
-
const isUtilityName = ['cn', 'proxy', 'sitemap', 'robots', 'gtag'].includes(name);
|
|
198
|
-
const isLanguageKeyword = ['constructor', 'toString', 'valueOf', 'toJSON'].includes(name);
|
|
199
|
-
const isFrameworkPattern = name.match(/^(goto|fill|click|select|submit|wait|expect)\w*/); // Page Object Model, test framework patterns
|
|
200
|
-
// Descriptive patterns: countX, totalX, etc.
|
|
201
|
-
const isDescriptivePattern = name.match(/^(default|total|count|sum|avg|max|min|initial|current|previous|next)\w+/) ||
|
|
202
|
-
name.match(/\w+(Count|Total|Sum|Average|List|Map|Set|Config|Settings|Options|Props|Data|Info|Details|State|Status|Response|Result)$/);
|
|
203
|
-
// Count capital letters for compound detection
|
|
204
|
-
const capitalCount = (name.match(/[A-Z]/g) || []).length;
|
|
205
|
-
const isCompoundWord = capitalCount >= 3; // daysSinceLastCommit has 4 capitals
|
|
206
|
-
if (!hasActionVerb && !isFactoryPattern && !isEventHandler && !isDescriptiveLong && !isReactHook && !isHelperPattern && !isUtilityName && !isDescriptivePattern && !isCompoundWord && !isLanguageKeyword && !isFrameworkPattern) {
|
|
207
|
-
issues.push({
|
|
208
|
-
file,
|
|
209
|
-
line,
|
|
210
|
-
type: 'unclear',
|
|
211
|
-
identifier: name,
|
|
212
|
-
severity: adjustSeverity('info', context, 'unclear'),
|
|
213
|
-
suggestion: `Function '${name}' should start with an action verb (get, set, create, etc.)`,
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
},
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
return issues;
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Extract all identifiers from a destructuring pattern
|
|
224
|
-
*/
|
|
225
|
-
function extractIdentifiersFromPattern(pattern, scopeTracker, isParameter, ancestors) {
|
|
226
|
-
if (pattern.type === 'ObjectPattern') {
|
|
227
|
-
for (const prop of pattern.properties) {
|
|
228
|
-
if (prop.type === 'Property' && prop.value.type === 'Identifier') {
|
|
229
|
-
scopeTracker.declareVariable(prop.value.name, prop.value, getLineNumber(prop.value), {
|
|
230
|
-
isParameter,
|
|
231
|
-
isDestructured: true,
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
else if (prop.type === 'RestElement' && prop.argument.type === 'Identifier') {
|
|
235
|
-
scopeTracker.declareVariable(prop.argument.name, prop.argument, getLineNumber(prop.argument), {
|
|
236
|
-
isParameter,
|
|
237
|
-
isDestructured: true,
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
else if (pattern.type === 'ArrayPattern') {
|
|
243
|
-
for (const element of pattern.elements) {
|
|
244
|
-
if (element && element.type === 'Identifier') {
|
|
245
|
-
scopeTracker.declareVariable(element.name, element, getLineNumber(element), {
|
|
246
|
-
isParameter,
|
|
247
|
-
isDestructured: true,
|
|
248
|
-
});
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
//# sourceMappingURL=naming-ast.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"naming-ast.js","sourceRoot":"","sources":["../../src/analyzers/naming-ast.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared constants and utilities for naming analysis
|
|
3
|
-
* Extracted from naming.ts and naming-ast.ts to reduce duplication
|
|
4
|
-
*/
|
|
5
|
-
export declare const COMMON_SHORT_WORDS: Set<string>;
|
|
6
|
-
export declare const ACCEPTABLE_ABBREVIATIONS: Set<string>;
|
|
7
|
-
/**
|
|
8
|
-
* Convert snake_case to camelCase
|
|
9
|
-
*/
|
|
10
|
-
export declare function snakeCaseToCamelCase(str: string): string;
|
|
11
|
-
/**
|
|
12
|
-
* Detect naming convention patterns across the codebase
|
|
13
|
-
*/
|
|
14
|
-
export declare function detectNamingConventions(files: string[], allIssues: Array<{
|
|
15
|
-
type: string;
|
|
16
|
-
[key: string]: any;
|
|
17
|
-
}>): {
|
|
18
|
-
dominantConvention: 'camelCase' | 'snake_case' | 'PascalCase' | 'mixed';
|
|
19
|
-
conventionScore: number;
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=naming-constants.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"naming-constants.d.ts","sourceRoot":"","sources":["../../src/analyzers/naming-constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,kBAAkB,aAiB7B,CAAC;AAGH,eAAO,MAAM,wBAAwB,aAmDnC,CAAC;AAEH;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC,GACrD;IACD,kBAAkB,EAAE,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,OAAO,CAAC;IACxE,eAAe,EAAE,MAAM,CAAC;CACzB,CAWA"}
|