@aiready/consistency 0.8.4 → 0.8.5

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.
Files changed (68) hide show
  1. package/.turbo/turbo-build.log +8 -8
  2. package/.turbo/turbo-test.log +11 -8
  3. package/dist/__tests__/analyzer.test.d.ts +2 -0
  4. package/dist/__tests__/analyzer.test.d.ts.map +1 -0
  5. package/dist/__tests__/analyzer.test.js +157 -0
  6. package/dist/__tests__/analyzer.test.js.map +1 -0
  7. package/dist/__tests__/language-filter.test.d.ts +2 -0
  8. package/dist/__tests__/language-filter.test.d.ts.map +1 -0
  9. package/dist/__tests__/language-filter.test.js +46 -0
  10. package/dist/__tests__/language-filter.test.js.map +1 -0
  11. package/dist/__tests__/scoring.test.d.ts +2 -0
  12. package/dist/__tests__/scoring.test.d.ts.map +1 -0
  13. package/dist/__tests__/scoring.test.js +118 -0
  14. package/dist/__tests__/scoring.test.js.map +1 -0
  15. package/dist/analyzer.d.ts +7 -0
  16. package/dist/analyzer.d.ts.map +1 -0
  17. package/dist/analyzer.js +160 -0
  18. package/dist/analyzer.js.map +1 -0
  19. package/dist/analyzers/naming-ast.d.ts +7 -0
  20. package/dist/analyzers/naming-ast.d.ts.map +1 -0
  21. package/dist/analyzers/naming-ast.js +253 -0
  22. package/dist/analyzers/naming-ast.js.map +1 -0
  23. package/dist/analyzers/naming-constants.d.ts +21 -0
  24. package/dist/analyzers/naming-constants.d.ts.map +1 -0
  25. package/dist/analyzers/naming-constants.js +96 -0
  26. package/dist/analyzers/naming-constants.js.map +1 -0
  27. package/dist/analyzers/naming-python.d.ts +16 -0
  28. package/dist/analyzers/naming-python.d.ts.map +1 -0
  29. package/dist/analyzers/naming-python.js +165 -0
  30. package/dist/analyzers/naming-python.js.map +1 -0
  31. package/dist/analyzers/naming.d.ts +6 -0
  32. package/dist/analyzers/naming.d.ts.map +1 -0
  33. package/dist/analyzers/naming.js +234 -0
  34. package/dist/analyzers/naming.js.map +1 -0
  35. package/dist/analyzers/patterns.d.ts +10 -0
  36. package/dist/analyzers/patterns.d.ts.map +1 -0
  37. package/dist/analyzers/patterns.js +197 -0
  38. package/dist/analyzers/patterns.js.map +1 -0
  39. package/dist/cli.d.ts.map +1 -0
  40. package/dist/cli.js.map +1 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/scoring.d.ts +12 -0
  44. package/dist/scoring.d.ts.map +1 -0
  45. package/dist/scoring.js +110 -0
  46. package/dist/scoring.js.map +1 -0
  47. package/dist/types.d.ts +53 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +2 -0
  50. package/dist/types.js.map +1 -0
  51. package/dist/utils/ast-parser.d.ts +46 -0
  52. package/dist/utils/ast-parser.d.ts.map +1 -0
  53. package/dist/utils/ast-parser.js +157 -0
  54. package/dist/utils/ast-parser.js.map +1 -0
  55. package/dist/utils/config-loader.d.ts +19 -0
  56. package/dist/utils/config-loader.d.ts.map +1 -0
  57. package/dist/utils/config-loader.js +31 -0
  58. package/dist/utils/config-loader.js.map +1 -0
  59. package/dist/utils/context-detector.d.ts +40 -0
  60. package/dist/utils/context-detector.d.ts.map +1 -0
  61. package/dist/utils/context-detector.js +225 -0
  62. package/dist/utils/context-detector.js.map +1 -0
  63. package/dist/utils/scope-tracker.d.ts +87 -0
  64. package/dist/utils/scope-tracker.d.ts.map +1 -0
  65. package/dist/utils/scope-tracker.js +161 -0
  66. package/dist/utils/scope-tracker.js.map +1 -0
  67. package/package.json +2 -2
  68. package/tsconfig.tsbuildinfo +1 -0
@@ -1,6 +1,6 @@
1
1
 
2
2
  
3
- > @aiready/consistency@0.8.4 build /Users/pengcao/projects/aiready/packages/consistency
3
+ > @aiready/consistency@0.8.5 build /Users/pengcao/projects/aiready/packages/consistency
4
4
  > tsup src/index.ts src/cli.ts --format cjs,esm --dts
5
5
 
6
6
  CLI Building entry: src/cli.ts, src/index.ts
@@ -9,15 +9,15 @@
9
9
  CLI Target: es2020
10
10
  CJS Build start
11
11
  ESM Build start
12
- CJS dist/index.js 55.33 KB
13
- CJS dist/cli.js 50.90 KB
14
- CJS ⚡️ Build success in 72ms
15
- ESM dist/chunk-YEHXYHGY.mjs 40.95 KB
12
+ DTS Build start
16
13
  ESM dist/index.mjs 12.69 KB
17
14
  ESM dist/cli.mjs 8.76 KB
18
- ESM ⚡️ Build success in 73ms
19
- DTS Build start
20
- DTS ⚡️ Build success in 1971ms
15
+ ESM dist/chunk-YEHXYHGY.mjs 40.95 KB
16
+ ESM ⚡️ Build success in 320ms
17
+ CJS dist/index.js 55.33 KB
18
+ CJS dist/cli.js 50.90 KB
19
+ CJS ⚡️ Build success in 320ms
20
+ DTS ⚡️ Build success in 2759ms
21
21
  DTS dist/cli.d.ts 20.00 B
22
22
  DTS dist/index.d.ts 3.27 KB
23
23
  DTS dist/cli.d.mts 20.00 B
@@ -1,18 +1,21 @@
1
1
 
2
2
  
3
- > @aiready/consistency@0.8.4 test /Users/pengcao/projects/aiready/packages/consistency
3
+ > @aiready/consistency@0.8.5 test /Users/pengcao/projects/aiready/packages/consistency
4
4
  > vitest run
5
5
 
6
6
  [?25l
7
7
   RUN  v4.0.18 /Users/pengcao/projects/aiready/packages/consistency
8
8
 
9
- ✓ src/__tests__/scoring.test.ts (8 tests) 11ms
10
- ✓ src/__tests__/language-filter.test.ts (3 tests) 3ms
11
- ✓ src/__tests__/analyzer.test.ts (18 tests) 170ms
9
+ ✓ src/__tests__/scoring.test.ts (8 tests) 5ms
10
+ ✓ dist/__tests__/scoring.test.js (8 tests) 7ms
11
+ ✓ src/__tests__/language-filter.test.ts (3 tests) 4ms
12
+ ✓ dist/__tests__/language-filter.test.js (3 tests) 3ms
13
+ ✓ src/__tests__/analyzer.test.ts (18 tests) 183ms
14
+ ✓ dist/__tests__/analyzer.test.js (18 tests) 186ms
12
15
 
13
-  Test Files  3 passed (3)
14
-  Tests  29 passed (29)
15
-  Start at  22:45:25
16
-  Duration  1.67s (transform 949ms, setup 0ms, import 2.13s, tests 184ms, environment 0ms)
16
+  Test Files  6 passed (6)
17
+  Tests  58 passed (58)
18
+  Start at  22:40:02
19
+  Duration  1.28s (transform 1.52s, setup 0ms, import 3.61s, tests 387ms, environment 42ms)
17
20
 
18
21
  [?25h
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=analyzer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/analyzer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,157 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { analyzeConsistency } from '../analyzer';
3
+ import { analyzePatterns } from '../analyzers/patterns';
4
+ describe('analyzeConsistency', () => {
5
+ it('should analyze naming issues', async () => {
6
+ const report = await analyzeConsistency({
7
+ rootDir: './src',
8
+ checkNaming: true,
9
+ checkPatterns: false,
10
+ });
11
+ expect(report).toHaveProperty('summary');
12
+ expect(report).toHaveProperty('results');
13
+ expect(report).toHaveProperty('recommendations');
14
+ expect(report.summary).toHaveProperty('namingIssues');
15
+ });
16
+ it('should detect minimum severity filtering', async () => {
17
+ const report = await analyzeConsistency({
18
+ rootDir: './src',
19
+ minSeverity: 'major',
20
+ });
21
+ // All issues should be major or critical
22
+ for (const result of report.results) {
23
+ for (const issue of result.issues) {
24
+ expect(['major', 'critical']).toContain(issue.severity);
25
+ }
26
+ }
27
+ });
28
+ });
29
+ describe('analyzeNaming', () => {
30
+ it('should detect single letter variables', () => {
31
+ const testCode = `
32
+ const x = 10;
33
+ const y = 20;
34
+ const result = x + y;
35
+ `;
36
+ // In a real test, we'd create temp files or mock file reading
37
+ // For now, this is a placeholder structure
38
+ expect(true).toBe(true);
39
+ });
40
+ it('should NOT flag acceptable abbreviations', () => {
41
+ // These should all be acceptable and NOT flagged
42
+ const acceptableAbbreviations = [
43
+ 'env', 'req', 'res', 'ctx', 'err', 'api', 'url', 'id',
44
+ 'max', 'min', 'now', 'utm', 'has', 'is', 'can',
45
+ 'db', 'fs', 'os', 'ui', 'tmp', 'src', 'dst',
46
+ // New additions from Phase 1
47
+ 'img', 'txt', 'doc', 'md', 'ts', 'js', 'ddb', 's3',
48
+ 'fcp', 'lcp', 'fps', 'po', 'dto', 'e2e', 'a11y', 'i18n'
49
+ ];
50
+ // These abbreviations should not trigger warnings
51
+ expect(acceptableAbbreviations.length).toBeGreaterThan(0);
52
+ });
53
+ it('should NOT flag common short English words', () => {
54
+ // Full words, not abbreviations - should be accepted
55
+ const commonWords = [
56
+ 'day', 'key', 'net', 'to', 'go', 'for', 'not', 'new', 'old',
57
+ 'top', 'end', 'run', 'try', 'use', 'get', 'set', 'add', 'put'
58
+ ];
59
+ // These are full words and should not be flagged as abbreviations
60
+ expect(commonWords.length).toBeGreaterThan(0);
61
+ });
62
+ it('should detect snake_case in TypeScript files', () => {
63
+ const testCode = `
64
+ const user_name = 'John';
65
+ const user_id = 123;
66
+ `;
67
+ // Test would check for convention-mix issues
68
+ expect(true).toBe(true);
69
+ });
70
+ it('should detect unclear boolean names', () => {
71
+ const testCode = `
72
+ const enabled: boolean = true;
73
+ const active: boolean = false;
74
+ `;
75
+ // Should suggest prefixes like isEnabled, isActive
76
+ expect(true).toBe(true);
77
+ });
78
+ it('should allow common abbreviations', () => {
79
+ const testCode = `
80
+ const id = '123';
81
+ const url = 'https://example.com';
82
+ const api = new ApiClient();
83
+ `;
84
+ // Should not flag these as issues
85
+ expect(true).toBe(true);
86
+ });
87
+ it('should NOT flag multi-line arrow function parameters (Phase 3)', () => {
88
+ // Multi-line arrow functions should not trigger single-letter warnings
89
+ const multiLineArrowCode = `
90
+ items.map(
91
+ s => s.value
92
+ )
93
+
94
+ items.filter(
95
+ item =>
96
+ item.valid
97
+ )
98
+ `;
99
+ // 's' and 'item' should not be flagged as poor naming
100
+ expect(true).toBe(true);
101
+ });
102
+ it('should NOT flag short-lived comparison variables (Phase 3)', () => {
103
+ // Variables used only within 3-5 lines for comparisons
104
+ const shortLivedCode = `
105
+ const a = obj1;
106
+ const b = obj2;
107
+ return compare(a, b);
108
+ `;
109
+ // 'a' and 'b' should not be flagged as they're short-lived
110
+ expect(true).toBe(true);
111
+ });
112
+ });
113
+ describe('analyzePatterns', () => {
114
+ it('should detect mixed error handling', async () => {
115
+ // Test would analyze files with different error handling approaches
116
+ const issues = await analyzePatterns([]);
117
+ expect(Array.isArray(issues)).toBe(true);
118
+ });
119
+ it('should detect mixed async patterns', async () => {
120
+ // Test would check for async/await vs promises vs callbacks
121
+ const issues = await analyzePatterns([]);
122
+ expect(Array.isArray(issues)).toBe(true);
123
+ });
124
+ it('should detect mixed import styles', async () => {
125
+ // Test would check for ES modules vs CommonJS
126
+ const issues = await analyzePatterns([]);
127
+ expect(Array.isArray(issues)).toBe(true);
128
+ });
129
+ });
130
+ describe('consistency scoring', () => {
131
+ it('should calculate consistency score correctly', () => {
132
+ // Lower issues = higher score
133
+ expect(true).toBe(true);
134
+ });
135
+ it('should weight critical issues more than info', () => {
136
+ // Critical issues should reduce score more
137
+ expect(true).toBe(true);
138
+ });
139
+ });
140
+ describe('recommendations', () => {
141
+ it('should generate relevant recommendations', async () => {
142
+ const report = await analyzeConsistency({
143
+ rootDir: './src',
144
+ });
145
+ expect(Array.isArray(report.recommendations)).toBe(true);
146
+ expect(report.recommendations.length).toBeGreaterThan(0);
147
+ });
148
+ it('should suggest standardizing error handling', () => {
149
+ // When mixed error handling detected
150
+ expect(true).toBe(true);
151
+ });
152
+ it('should suggest using async/await consistently', () => {
153
+ // When mixed async patterns detected
154
+ expect(true).toBe(true);
155
+ });
156
+ });
157
+ //# sourceMappingURL=analyzer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.test.js","sourceRoot":"","sources":["../../src/__tests__/analyzer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=language-filter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-filter.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/language-filter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { analyzeNamingAST } from '../analyzers/naming-ast';
3
+ describe('Language File Filtering', () => {
4
+ beforeEach(() => {
5
+ // Suppress console warnings during tests
6
+ vi.spyOn(console, 'warn').mockImplementation(() => { });
7
+ });
8
+ it('should only process JS/TS files', async () => {
9
+ const mixedFiles = [
10
+ '/path/to/file.ts',
11
+ '/path/to/file.tsx',
12
+ '/path/to/file.js',
13
+ '/path/to/file.jsx',
14
+ '/path/to/file.py', // Should be filtered out
15
+ '/path/to/file.java', // Should be filtered out
16
+ '/path/to/file.rb', // Should be filtered out
17
+ '/path/to/file.go', // Should be filtered out
18
+ ];
19
+ // This test verifies that the function doesn't crash on non-JS/TS files
20
+ // In reality, it will try to read these files if they exist, but parseFile will return null
21
+ // and they'll be skipped. The filtering happens before parseFile is called.
22
+ await expect(analyzeNamingAST(mixedFiles)).resolves.not.toThrow();
23
+ });
24
+ it('should filter out Python files before parsing', async () => {
25
+ const files = [
26
+ '/path/to/script.py',
27
+ '/path/to/another.py',
28
+ ];
29
+ // Should not attempt to parse Python files
30
+ const result = await analyzeNamingAST(files);
31
+ expect(result).toEqual([]);
32
+ });
33
+ it('should accept all JS/TS file extensions', async () => {
34
+ const jstsFiles = [
35
+ 'test.js',
36
+ 'test.jsx',
37
+ 'test.ts',
38
+ 'test.tsx',
39
+ 'TEST.JS', // Test case-insensitive
40
+ 'TEST.TS',
41
+ ];
42
+ // These should all pass the filter (though they won't parse if they don't exist)
43
+ await expect(analyzeNamingAST(jstsFiles)).resolves.not.toThrow();
44
+ });
45
+ });
46
+ //# sourceMappingURL=language-filter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-filter.test.js","sourceRoot":"","sources":["../../src/__tests__/language-filter.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,UAAU,CAAC,GAAG,EAAE;QACd,yCAAyC;QACzC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,UAAU,GAAG;YACjB,kBAAkB;YAClB,mBAAmB;YACnB,kBAAkB;YAClB,mBAAmB;YACnB,kBAAkB,EAAM,yBAAyB;YACjD,oBAAoB,EAAI,yBAAyB;YACjD,kBAAkB,EAAM,yBAAyB;YACjD,kBAAkB,EAAM,yBAAyB;SAClD,CAAC;QAEF,wEAAwE;QACxE,4FAA4F;QAC5F,4EAA4E;QAC5E,MAAM,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,KAAK,GAAG;YACZ,oBAAoB;YACpB,qBAAqB;SACtB,CAAC;QAEF,2CAA2C;QAC3C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,SAAS,GAAG;YAChB,SAAS;YACT,UAAU;YACV,SAAS;YACT,UAAU;YACV,SAAS,EAAG,wBAAwB;YACpC,SAAS;SACV,CAAC;QAEF,iFAAiF;QACjF,MAAM,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scoring.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/scoring.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,118 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.test.js","sourceRoot":"","sources":["../../src/__tests__/scoring.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,160 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
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
@@ -0,0 +1 @@
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"}