@aiready/consistency 0.21.9 → 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.
Files changed (132) hide show
  1. package/.turbo/turbo-build.log +23 -24
  2. package/dist/index.d.mts +3 -3
  3. package/dist/index.d.ts +3 -3
  4. package/dist/index.js +4 -4
  5. package/dist/index.mjs +3 -3
  6. package/package.json +2 -2
  7. package/src/__tests__/provider.test.ts +6 -34
  8. package/src/index.ts +3 -3
  9. package/src/provider.ts +2 -2
  10. package/dist/__tests__/analyzer.test.d.ts +0 -2
  11. package/dist/__tests__/analyzer.test.d.ts.map +0 -1
  12. package/dist/__tests__/analyzer.test.js +0 -157
  13. package/dist/__tests__/analyzer.test.js.map +0 -1
  14. package/dist/__tests__/language-filter.test.d.ts +0 -2
  15. package/dist/__tests__/language-filter.test.d.ts.map +0 -1
  16. package/dist/__tests__/language-filter.test.js +0 -46
  17. package/dist/__tests__/language-filter.test.js.map +0 -1
  18. package/dist/__tests__/scoring.test.d.ts +0 -2
  19. package/dist/__tests__/scoring.test.d.ts.map +0 -1
  20. package/dist/__tests__/scoring.test.js +0 -118
  21. package/dist/__tests__/scoring.test.js.map +0 -1
  22. package/dist/analyzer.d.ts +0 -7
  23. package/dist/analyzer.d.ts.map +0 -1
  24. package/dist/analyzer.js +0 -160
  25. package/dist/analyzer.js.map +0 -1
  26. package/dist/analyzers/naming-ast.d.ts +0 -7
  27. package/dist/analyzers/naming-ast.d.ts.map +0 -1
  28. package/dist/analyzers/naming-ast.js +0 -253
  29. package/dist/analyzers/naming-ast.js.map +0 -1
  30. package/dist/analyzers/naming-constants.d.ts +0 -21
  31. package/dist/analyzers/naming-constants.d.ts.map +0 -1
  32. package/dist/analyzers/naming-constants.js +0 -96
  33. package/dist/analyzers/naming-constants.js.map +0 -1
  34. package/dist/analyzers/naming-python.d.ts +0 -16
  35. package/dist/analyzers/naming-python.d.ts.map +0 -1
  36. package/dist/analyzers/naming-python.js +0 -165
  37. package/dist/analyzers/naming-python.js.map +0 -1
  38. package/dist/analyzers/naming.d.ts +0 -6
  39. package/dist/analyzers/naming.d.ts.map +0 -1
  40. package/dist/analyzers/naming.js +0 -234
  41. package/dist/analyzers/naming.js.map +0 -1
  42. package/dist/analyzers/patterns.d.ts +0 -10
  43. package/dist/analyzers/patterns.d.ts.map +0 -1
  44. package/dist/analyzers/patterns.js +0 -197
  45. package/dist/analyzers/patterns.js.map +0 -1
  46. package/dist/chunk-2BTBNG6X.mjs +0 -814
  47. package/dist/chunk-3ZB6FFRL.mjs +0 -661
  48. package/dist/chunk-5UFRGXSB.mjs +0 -783
  49. package/dist/chunk-66M3TIO7.mjs +0 -837
  50. package/dist/chunk-6BM5MV3S.mjs +0 -719
  51. package/dist/chunk-6H3JHDP7.mjs +0 -832
  52. package/dist/chunk-7PHHJOGC.mjs +0 -1374
  53. package/dist/chunk-AASFXGUR.mjs +0 -1622
  54. package/dist/chunk-AR7DIZLP.mjs +0 -827
  55. package/dist/chunk-BDDMOIU2.mjs +0 -385
  56. package/dist/chunk-BMILMNKJ.mjs +0 -1633
  57. package/dist/chunk-BYY6MD5T.mjs +0 -729
  58. package/dist/chunk-CA4Q5JBK.mjs +0 -1143
  59. package/dist/chunk-CF4LU7KE.mjs +0 -384
  60. package/dist/chunk-CJINEUIH.mjs +0 -1369
  61. package/dist/chunk-CLWNLHDB.mjs +0 -909
  62. package/dist/chunk-CZUJTDNH.mjs +0 -848
  63. package/dist/chunk-DNGW3WQK.mjs +0 -810
  64. package/dist/chunk-DSI3TEO2.mjs +0 -662
  65. package/dist/chunk-EIQ5K6OO.mjs +0 -1579
  66. package/dist/chunk-FEJODRK5.mjs +0 -783
  67. package/dist/chunk-FK56AZ43.mjs +0 -817
  68. package/dist/chunk-H6S7WKSQ.mjs +0 -729
  69. package/dist/chunk-HAOJLJNB.mjs +0 -1290
  70. package/dist/chunk-HJCP36VW.mjs +0 -821
  71. package/dist/chunk-HPG7P6PD.mjs +0 -1372
  72. package/dist/chunk-IVRBV7SE.mjs +0 -1295
  73. package/dist/chunk-IXBC6GVT.mjs +0 -832
  74. package/dist/chunk-J5IFYDVU.mjs +0 -1579
  75. package/dist/chunk-KWQVBF7K.mjs +0 -831
  76. package/dist/chunk-LD3CHHU2.mjs +0 -1297
  77. package/dist/chunk-LMOXGPCM.mjs +0 -722
  78. package/dist/chunk-LSXZH6X6.mjs +0 -810
  79. package/dist/chunk-LUAREV6A.mjs +0 -508
  80. package/dist/chunk-MAPVFXBP.mjs +0 -708
  81. package/dist/chunk-MM2PLUCH.mjs +0 -1376
  82. package/dist/chunk-NPWCJZUG.mjs +0 -708
  83. package/dist/chunk-ON73WHHU.mjs +0 -1310
  84. package/dist/chunk-P6NVKUBB.mjs +0 -831
  85. package/dist/chunk-Q3KTWDSL.mjs +0 -808
  86. package/dist/chunk-Q5XMWG33.mjs +0 -661
  87. package/dist/chunk-QOIPVP6P.mjs +0 -1607
  88. package/dist/chunk-RMEQWG52.mjs +0 -1633
  89. package/dist/chunk-S6BZVTWN.mjs +0 -731
  90. package/dist/chunk-TE6JYZD3.mjs +0 -810
  91. package/dist/chunk-TLVLM3M5.mjs +0 -771
  92. package/dist/chunk-TXHPUU7A.mjs +0 -863
  93. package/dist/chunk-UMBBTNQN.mjs +0 -787
  94. package/dist/chunk-V2UPXL7L.mjs +0 -842
  95. package/dist/chunk-VODCPPET.mjs +0 -1292
  96. package/dist/chunk-W6UGMKRV.mjs +0 -1310
  97. package/dist/chunk-WGH4TGZ3.mjs +0 -1288
  98. package/dist/chunk-WTBDNCEN.mjs +0 -1352
  99. package/dist/chunk-XVW5DKJQ.mjs +0 -1619
  100. package/dist/chunk-YCDCIOJN.mjs +0 -842
  101. package/dist/chunk-YEHXYHGY.mjs +0 -1497
  102. package/dist/chunk-YHHXE2JX.mjs +0 -912
  103. package/dist/chunk-ZB6UK276.mjs +0 -662
  104. package/dist/chunk-ZG3KFSD3.mjs +0 -1142
  105. package/dist/cli.d.ts.map +0 -1
  106. package/dist/cli.js.map +0 -1
  107. package/dist/index.d.ts.map +0 -1
  108. package/dist/index.js.map +0 -1
  109. package/dist/scoring.d.ts +0 -12
  110. package/dist/scoring.d.ts.map +0 -1
  111. package/dist/scoring.js +0 -110
  112. package/dist/scoring.js.map +0 -1
  113. package/dist/types.d.ts +0 -53
  114. package/dist/types.d.ts.map +0 -1
  115. package/dist/types.js +0 -2
  116. package/dist/types.js.map +0 -1
  117. package/dist/utils/ast-parser.d.ts +0 -46
  118. package/dist/utils/ast-parser.d.ts.map +0 -1
  119. package/dist/utils/ast-parser.js +0 -157
  120. package/dist/utils/ast-parser.js.map +0 -1
  121. package/dist/utils/config-loader.d.ts +0 -19
  122. package/dist/utils/config-loader.d.ts.map +0 -1
  123. package/dist/utils/config-loader.js +0 -31
  124. package/dist/utils/config-loader.js.map +0 -1
  125. package/dist/utils/context-detector.d.ts +0 -40
  126. package/dist/utils/context-detector.d.ts.map +0 -1
  127. package/dist/utils/context-detector.js +0 -225
  128. package/dist/utils/context-detector.js.map +0 -1
  129. package/dist/utils/scope-tracker.d.ts +0 -87
  130. package/dist/utils/scope-tracker.d.ts.map +0 -1
  131. package/dist/utils/scope-tracker.js +0 -161
  132. package/dist/utils/scope-tracker.js.map +0 -1
@@ -1,24 +1,23 @@
1
-
2
- 
3
- > @aiready/consistency@0.21.9 build /Users/pengcao/projects/aiready/packages/consistency
4
- > tsup src/index.ts src/cli.ts --format cjs,esm --dts
5
-
6
- CLI Building entry: src/cli.ts, src/index.ts
7
- CLI Using tsconfig: tsconfig.json
8
- CLI tsup v8.5.1
9
- CLI Target: es2020
10
- CJS Build start
11
- ESM Build start
12
- CJS dist/index.js 35.50 KB
13
- CJS dist/cli.js 41.09 KB
14
- CJS ⚡️ Build success in 44ms
15
- ESM dist/chunk-7DKVZNY7.mjs 30.66 KB
16
- ESM dist/index.mjs 3.26 KB
17
- ESM dist/cli.mjs 8.85 KB
18
- ESM ⚡️ Build success in 44ms
19
- DTS Build start
20
- DTS ⚡️ Build success in 1839ms
21
- DTS dist/cli.d.ts 20.00 B
22
- DTS dist/index.d.ts 3.94 KB
23
- DTS dist/cli.d.mts 20.00 B
24
- DTS dist/index.d.mts 3.94 KB
1
+
2
+ > @aiready/consistency@0.21.9 build /Users/pengcao/projects/aiready/packages/consistency
3
+ > tsup src/index.ts src/cli.ts --format cjs,esm --dts
4
+
5
+ CLI Building entry: src/cli.ts, src/index.ts
6
+ CLI Using tsconfig: tsconfig.json
7
+ CLI tsup v8.5.1
8
+ CLI Target: es2020
9
+ CJS Build start
10
+ ESM Build start
11
+ CJS dist/cli.js 41.09 KB
12
+ CJS dist/index.js 35.54 KB
13
+ CJS ⚡️ Build success in 94ms
14
+ ESM dist/index.mjs 3.29 KB
15
+ ESM dist/cli.mjs 8.85 KB
16
+ ESM dist/chunk-7DKVZNY7.mjs 30.66 KB
17
+ ESM ⚡️ Build success in 95ms
18
+ DTS Build start
19
+ DTS ⚡️ Build success in 2064ms
20
+ DTS dist/cli.d.ts 20.00 B
21
+ DTS dist/index.d.ts 3.96 KB
22
+ DTS dist/cli.d.mts 20.00 B
23
+ DTS dist/index.d.mts 3.96 KB
package/dist/index.d.mts CHANGED
@@ -2,9 +2,9 @@ import * as _aiready_core from '@aiready/core';
2
2
  import { Severity, Issue, IssueType, ScanOptions, AnalysisResult, CostConfig, ToolScoringOutput } from '@aiready/core';
3
3
 
4
4
  /**
5
- * Consistency Tool Provider
5
+ * Naming Consistency Tool Provider
6
6
  */
7
- declare const ConsistencyProvider: _aiready_core.ToolProvider;
7
+ declare const NAMING_CONSISTENCY_PROVIDER: _aiready_core.ToolProvider;
8
8
 
9
9
  interface ConsistencyOptions extends ScanOptions {
10
10
  /** Check naming conventions and quality */
@@ -112,4 +112,4 @@ declare function calculateConsistencyScore(issues: ConsistencyIssue[], totalFile
112
112
 
113
113
  declare function generateSummary(report: any): any;
114
114
 
115
- export { type ArchitectureIssue, type ConsistencyIssue, type ConsistencyOptions, ConsistencyProvider, type ConsistencyReport, type NamingIssue, type PatternIssue, analyzeConsistency, analyzeNaming, analyzeNamingAST, analyzePatterns, calculateConsistencyScore, detectNamingConventions, generateSummary };
115
+ export { type ArchitectureIssue, type ConsistencyIssue, type ConsistencyOptions, type ConsistencyReport, NAMING_CONSISTENCY_PROVIDER, type NamingIssue, type PatternIssue, analyzeConsistency, analyzeNaming, analyzeNamingAST, analyzePatterns, calculateConsistencyScore, detectNamingConventions, generateSummary };
package/dist/index.d.ts CHANGED
@@ -2,9 +2,9 @@ import * as _aiready_core from '@aiready/core';
2
2
  import { Severity, Issue, IssueType, ScanOptions, AnalysisResult, CostConfig, ToolScoringOutput } from '@aiready/core';
3
3
 
4
4
  /**
5
- * Consistency Tool Provider
5
+ * Naming Consistency Tool Provider
6
6
  */
7
- declare const ConsistencyProvider: _aiready_core.ToolProvider;
7
+ declare const NAMING_CONSISTENCY_PROVIDER: _aiready_core.ToolProvider;
8
8
 
9
9
  interface ConsistencyOptions extends ScanOptions {
10
10
  /** Check naming conventions and quality */
@@ -112,4 +112,4 @@ declare function calculateConsistencyScore(issues: ConsistencyIssue[], totalFile
112
112
 
113
113
  declare function generateSummary(report: any): any;
114
114
 
115
- export { type ArchitectureIssue, type ConsistencyIssue, type ConsistencyOptions, ConsistencyProvider, type ConsistencyReport, type NamingIssue, type PatternIssue, analyzeConsistency, analyzeNaming, analyzeNamingAST, analyzePatterns, calculateConsistencyScore, detectNamingConventions, generateSummary };
115
+ export { type ArchitectureIssue, type ConsistencyIssue, type ConsistencyOptions, type ConsistencyReport, NAMING_CONSISTENCY_PROVIDER, type NamingIssue, type PatternIssue, analyzeConsistency, analyzeNaming, analyzeNamingAST, analyzePatterns, calculateConsistencyScore, detectNamingConventions, generateSummary };
package/dist/index.js CHANGED
@@ -20,7 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
- ConsistencyProvider: () => ConsistencyProvider,
23
+ NAMING_CONSISTENCY_PROVIDER: () => NAMING_CONSISTENCY_PROVIDER,
24
24
  analyzeConsistency: () => analyzeConsistency,
25
25
  analyzeNaming: () => analyzeNaming,
26
26
  analyzeNamingAST: () => analyzeNamingAST,
@@ -1166,7 +1166,7 @@ function transformToIssue(i) {
1166
1166
  }
1167
1167
 
1168
1168
  // src/provider.ts
1169
- var ConsistencyProvider = (0, import_core7.createProvider)({
1169
+ var NAMING_CONSISTENCY_PROVIDER = (0, import_core7.createProvider)({
1170
1170
  id: import_core7.ToolName.NamingConsistency,
1171
1171
  alias: ["consistency", "naming", "standards"],
1172
1172
  version: "0.16.5",
@@ -1257,13 +1257,13 @@ async function analyzeNaming(filePaths) {
1257
1257
  }
1258
1258
 
1259
1259
  // src/index.ts
1260
- import_core9.ToolRegistry.register(ConsistencyProvider);
1260
+ import_core9.ToolRegistry.register(NAMING_CONSISTENCY_PROVIDER);
1261
1261
  function generateSummary(report) {
1262
1262
  return report.summary;
1263
1263
  }
1264
1264
  // Annotate the CommonJS export names for ESM import in node:
1265
1265
  0 && (module.exports = {
1266
- ConsistencyProvider,
1266
+ NAMING_CONSISTENCY_PROVIDER,
1267
1267
  analyzeConsistency,
1268
1268
  analyzeNaming,
1269
1269
  analyzeNamingAST,
package/dist/index.mjs CHANGED
@@ -13,7 +13,7 @@ import { ToolRegistry } from "@aiready/core";
13
13
 
14
14
  // src/provider.ts
15
15
  import { createProvider, ToolName } from "@aiready/core";
16
- var ConsistencyProvider = createProvider({
16
+ var NAMING_CONSISTENCY_PROVIDER = createProvider({
17
17
  id: ToolName.NamingConsistency,
18
18
  alias: ["consistency", "naming", "standards"],
19
19
  version: "0.16.5",
@@ -104,12 +104,12 @@ async function analyzeNaming(filePaths) {
104
104
  }
105
105
 
106
106
  // src/index.ts
107
- ToolRegistry.register(ConsistencyProvider);
107
+ ToolRegistry.register(NAMING_CONSISTENCY_PROVIDER);
108
108
  function generateSummary(report) {
109
109
  return report.summary;
110
110
  }
111
111
  export {
112
- ConsistencyProvider,
112
+ NAMING_CONSISTENCY_PROVIDER,
113
113
  analyzeConsistency,
114
114
  analyzeNaming,
115
115
  analyzeNamingAST,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiready/consistency",
3
- "version": "0.21.9",
3
+ "version": "0.21.11",
4
4
  "description": "Detects consistency issues in naming, patterns, and architecture that confuse AI models",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -43,7 +43,7 @@
43
43
  "@typescript-eslint/typescript-estree": "^8.53.0",
44
44
  "chalk": "^5.3.0",
45
45
  "commander": "^14.0.0",
46
- "@aiready/core": "0.24.9"
46
+ "@aiready/core": "0.24.12"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@types/node": "^24.0.0",
@@ -1,40 +1,12 @@
1
- import { describe, it, expect, vi } from 'vitest';
2
- import { ConsistencyProvider } from '../provider';
3
- import * as analyzer from '../analyzer';
4
-
5
- vi.mock('../analyzer', () => ({
6
- analyzeConsistency: vi.fn(),
7
- }));
1
+ import { describe, it, expect } from 'vitest';
2
+ import { NAMING_CONSISTENCY_PROVIDER } from '../provider';
8
3
 
9
4
  describe('Consistency Provider', () => {
10
- it('should analyze and return SpokeOutput', async () => {
11
- vi.mocked(analyzer.analyzeConsistency).mockResolvedValue({
12
- summary: {
13
- totalIssues: 0,
14
- namingIssues: 0,
15
- patternIssues: 0,
16
- architectureIssues: 0,
17
- filesAnalyzed: 1,
18
- },
19
- results: [],
20
- recommendations: [],
21
- });
22
-
23
- const output = await ConsistencyProvider.analyze({ rootDir: '.' });
24
-
25
- expect(output.summary.filesAnalyzed).toBe(1);
26
- expect(output.metadata!.toolName).toBe('naming-consistency');
5
+ it('should have correct ID', () => {
6
+ expect(NAMING_CONSISTENCY_PROVIDER.id).toBe('naming-consistency');
27
7
  });
28
8
 
29
- it('should score an output', () => {
30
- const mockOutput = {
31
- summary: { filesAnalyzed: 10 } as any,
32
- results: [{ fileName: 'f1.ts', issues: [] }],
33
- };
34
-
35
- const scoring = ConsistencyProvider.score(mockOutput as any, {
36
- rootDir: '.',
37
- });
38
- expect(scoring.score).toBeDefined();
9
+ it('should have alias', () => {
10
+ expect(NAMING_CONSISTENCY_PROVIDER.alias).toContain('consistency');
39
11
  });
40
12
  });
package/src/index.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { ToolRegistry } from '@aiready/core';
2
- import { ConsistencyProvider } from './provider';
2
+ import { NAMING_CONSISTENCY_PROVIDER } from './provider';
3
3
 
4
4
  // Register with global registry
5
- ToolRegistry.register(ConsistencyProvider);
5
+ ToolRegistry.register(NAMING_CONSISTENCY_PROVIDER);
6
6
 
7
7
  export { analyzeConsistency } from './analyzer';
8
8
  export function generateSummary(report: any) {
@@ -13,7 +13,7 @@ export { analyzeNaming } from './analyzers/naming'; // Legacy regex version
13
13
  export { detectNamingConventions } from './analyzers/naming-constants';
14
14
  export { analyzePatterns } from './analyzers/patterns';
15
15
  export { calculateConsistencyScore } from './scoring';
16
- export { ConsistencyProvider };
16
+ export { NAMING_CONSISTENCY_PROVIDER };
17
17
  export type {
18
18
  ConsistencyOptions,
19
19
  ConsistencyReport,
package/src/provider.ts CHANGED
@@ -4,9 +4,9 @@ import { calculateConsistencyScore } from './scoring';
4
4
  import { ConsistencyOptions, ConsistencyIssue } from './types';
5
5
 
6
6
  /**
7
- * Consistency Tool Provider
7
+ * Naming Consistency Tool Provider
8
8
  */
9
- export const ConsistencyProvider = createProvider({
9
+ export const NAMING_CONSISTENCY_PROVIDER = createProvider({
10
10
  id: ToolName.NamingConsistency,
11
11
  alias: ['consistency', 'naming', 'standards'],
12
12
  version: '0.16.5',
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=analyzer.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analyzer.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/analyzer.test.ts"],"names":[],"mappings":""}
@@ -1,157 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"analyzer.test.js","sourceRoot":"","sources":["../../src/__tests__/analyzer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;YACtC,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,IAAI;YACjB,aAAa,EAAE,KAAK;SACrB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;YACtC,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,OAAO;SACrB,CAAC,CAAC;QAEH,yCAAyC;QACzC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClC,MAAM,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,QAAQ,GAAG;;;;CAIpB,CAAC;QACE,8DAA8D;QAC9D,2CAA2C;QAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,iDAAiD;QACjD,MAAM,uBAAuB,GAAG;YAC9B,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI;YACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;YAC9C,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;YAC3C,6BAA6B;YAC7B,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;YAClD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;SACxD,CAAC;QACF,kDAAkD;QAClD,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,qDAAqD;QACrD,MAAM,WAAW,GAAG;YAClB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;YAC3D,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;SAC9D,CAAC;QACF,kEAAkE;QAClE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,QAAQ,GAAG;;;CAGpB,CAAC;QACE,6CAA6C;QAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,QAAQ,GAAG;;;CAGpB,CAAC;QACE,mDAAmD;QACnD,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,QAAQ,GAAG;;;;CAIpB,CAAC;QACE,kCAAkC;QAClC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,uEAAuE;QACvE,MAAM,kBAAkB,GAAG;;;;;;;;;CAS9B,CAAC;QACE,sDAAsD;QACtD,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,uDAAuD;QACvD,MAAM,cAAc,GAAG;;;;CAI1B,CAAC;QACE,2DAA2D;QAC3D,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,oEAAoE;QACpE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,4DAA4D;QAC5D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,8CAA8C;QAC9C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,8BAA8B;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,2CAA2C;QAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;YACtC,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,qCAAqC;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,qCAAqC;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=language-filter.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"language-filter.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/language-filter.test.ts"],"names":[],"mappings":""}
@@ -1,46 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=scoring.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scoring.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/scoring.test.ts"],"names":[],"mappings":""}
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAGvD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,MAAM,GAAG,yBAAyB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAElD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,MAAM,GAAuB,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;gBAChD,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,YAAY;gBACrB,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE;aACnB,CAAC,CAAC;YAEvB,2CAA2C;YAC3C,wCAAwC;YACxC,MAAM,MAAM,GAAG,yBAAyB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAErD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,MAAM,GAAuB;gBACjC;oBACE,QAAQ,EAAE,UAAU;oBACpB,QAAQ,EAAE,QAAQ;oBAClB,OAAO,EAAE,uBAAuB;oBAChC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE;iBACnB;gBACrB;oBACE,QAAQ,EAAE,UAAU;oBACpB,QAAQ,EAAE,QAAQ;oBAClB,OAAO,EAAE,wBAAwB;oBACjC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE;iBACpB;aACtB,CAAC;YAEF,MAAM,MAAM,GAAG,yBAAyB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAErD,6DAA6D;YAC7D,qEAAqE;YACrE,2BAA2B;YAC3B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1E,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,MAAM,GAAuB;gBACjC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAsB,CAAC;gBAC9D,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAsB,CAAC;gBAC5D,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAsB,CAAC;aAC7D,CAAC;YAEF,MAAM,MAAM,GAAG,yBAAyB,CACtC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gBACtB,GAAG,CAAC;gBACJ,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;aACzC,CAAC,CAAuB,EACzB,EAAE,CACH,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/C,iEAAiE;YACjE,2EAA2E;YAC3E,uCAAuC;YACvC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,MAAM,GAAuB;gBACjC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAsB,CAAC;gBAClF,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAsB,CAAC;aACnF,CAAC;YAEF,MAAM,MAAM,GAAG,yBAAyB,CACtC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gBACtB,GAAG,CAAC;gBACJ,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;aACzC,CAAC,CAAuB,EACzB,CAAC,CACF,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnF,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,MAAM,GAAuB,EAAE,CAAC;YAEtC,MAAM,MAAM,GAAG,yBAAyB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,MAAM,GAAuB,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;gBAChD,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,mBAAmB;gBAC5B,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE;aACnB,CAAC,CAAC;YAEvB,MAAM,MAAM,GAAG,yBAAyB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAErD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,MAAM,GAAuB;gBACjC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAsB,CAAC;gBACnF,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAsB,CAAC;gBAClF,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAsB,CAAC;aACjF,CAAC;YAEF,MAAM,MAAM,GAAG,yBAAyB,CACtC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gBACtB,GAAG,CAAC;gBACJ,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;aACzC,CAAC,CAAuB,EACzB,EAAE,CACH,CAAC;YAEF,uCAAuC;YACvC,qDAAqD;YACrD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -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
@@ -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"}