@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,197 +0,0 @@
|
|
|
1
|
-
import { readFileContent } from '@aiready/core';
|
|
2
|
-
/**
|
|
3
|
-
* Analyzes code pattern consistency
|
|
4
|
-
*/
|
|
5
|
-
export async function analyzePatterns(files) {
|
|
6
|
-
const issues = [];
|
|
7
|
-
// Analyze error handling patterns
|
|
8
|
-
const errorHandlingIssues = await analyzeErrorHandling(files);
|
|
9
|
-
issues.push(...errorHandlingIssues);
|
|
10
|
-
// Analyze async/await patterns
|
|
11
|
-
const asyncIssues = await analyzeAsyncPatterns(files);
|
|
12
|
-
issues.push(...asyncIssues);
|
|
13
|
-
// Analyze import styles
|
|
14
|
-
const importIssues = await analyzeImportStyles(files);
|
|
15
|
-
issues.push(...importIssues);
|
|
16
|
-
return issues;
|
|
17
|
-
}
|
|
18
|
-
async function analyzeErrorHandling(files) {
|
|
19
|
-
const patterns = {
|
|
20
|
-
tryCatch: [],
|
|
21
|
-
throwsError: [],
|
|
22
|
-
returnsNull: [],
|
|
23
|
-
returnsError: []
|
|
24
|
-
};
|
|
25
|
-
for (const file of files) {
|
|
26
|
-
const content = await readFileContent(file);
|
|
27
|
-
if (content.includes('try {') || content.includes('} catch')) {
|
|
28
|
-
patterns.tryCatch.push(file);
|
|
29
|
-
}
|
|
30
|
-
if (content.match(/throw new \w*Error/)) {
|
|
31
|
-
patterns.throwsError.push(file);
|
|
32
|
-
}
|
|
33
|
-
if (content.match(/return null/)) {
|
|
34
|
-
patterns.returnsNull.push(file);
|
|
35
|
-
}
|
|
36
|
-
if (content.match(/return \{ error:/)) {
|
|
37
|
-
patterns.returnsError.push(file);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
const issues = [];
|
|
41
|
-
// Check for mixed error handling strategies
|
|
42
|
-
const strategiesUsed = Object.values(patterns).filter(p => p.length > 0).length;
|
|
43
|
-
if (strategiesUsed > 2) {
|
|
44
|
-
issues.push({
|
|
45
|
-
files: [...new Set([
|
|
46
|
-
...patterns.tryCatch,
|
|
47
|
-
...patterns.throwsError,
|
|
48
|
-
...patterns.returnsNull,
|
|
49
|
-
...patterns.returnsError
|
|
50
|
-
])],
|
|
51
|
-
type: 'error-handling',
|
|
52
|
-
description: 'Inconsistent error handling strategies across codebase',
|
|
53
|
-
examples: [
|
|
54
|
-
patterns.tryCatch.length > 0 ? `Try-catch used in ${patterns.tryCatch.length} files` : '',
|
|
55
|
-
patterns.throwsError.length > 0 ? `Throws errors in ${patterns.throwsError.length} files` : '',
|
|
56
|
-
patterns.returnsNull.length > 0 ? `Returns null in ${patterns.returnsNull.length} files` : '',
|
|
57
|
-
patterns.returnsError.length > 0 ? `Returns error objects in ${patterns.returnsError.length} files` : ''
|
|
58
|
-
].filter(e => e),
|
|
59
|
-
severity: 'major'
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
return issues;
|
|
63
|
-
}
|
|
64
|
-
async function analyzeAsyncPatterns(files) {
|
|
65
|
-
const patterns = {
|
|
66
|
-
asyncAwait: [],
|
|
67
|
-
promises: [],
|
|
68
|
-
callbacks: []
|
|
69
|
-
};
|
|
70
|
-
for (const file of files) {
|
|
71
|
-
const content = await readFileContent(file);
|
|
72
|
-
if (content.match(/async\s+(function|\(|[a-zA-Z])/)) {
|
|
73
|
-
patterns.asyncAwait.push(file);
|
|
74
|
-
}
|
|
75
|
-
if (content.match(/\.then\(/) || content.match(/\.catch\(/)) {
|
|
76
|
-
patterns.promises.push(file);
|
|
77
|
-
}
|
|
78
|
-
if (content.match(/callback\s*\(/) || content.match(/\(\s*err\s*,/)) {
|
|
79
|
-
patterns.callbacks.push(file);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
const issues = [];
|
|
83
|
-
// Modern codebases should prefer async/await
|
|
84
|
-
if (patterns.callbacks.length > 0 && patterns.asyncAwait.length > 0) {
|
|
85
|
-
issues.push({
|
|
86
|
-
files: [...patterns.callbacks, ...patterns.asyncAwait],
|
|
87
|
-
type: 'async-style',
|
|
88
|
-
description: 'Mixed async patterns: callbacks and async/await',
|
|
89
|
-
examples: [
|
|
90
|
-
`Callbacks found in: ${patterns.callbacks.slice(0, 3).join(', ')}`,
|
|
91
|
-
`Async/await used in: ${patterns.asyncAwait.slice(0, 3).join(', ')}`
|
|
92
|
-
],
|
|
93
|
-
severity: 'minor'
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
// Mixing .then() chains with async/await
|
|
97
|
-
if (patterns.promises.length > patterns.asyncAwait.length * 0.3 && patterns.asyncAwait.length > 0) {
|
|
98
|
-
issues.push({
|
|
99
|
-
files: patterns.promises,
|
|
100
|
-
type: 'async-style',
|
|
101
|
-
description: 'Consider using async/await instead of promise chains for consistency',
|
|
102
|
-
examples: patterns.promises.slice(0, 5),
|
|
103
|
-
severity: 'info'
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
return issues;
|
|
107
|
-
}
|
|
108
|
-
async function analyzeImportStyles(files) {
|
|
109
|
-
const patterns = {
|
|
110
|
-
esModules: [],
|
|
111
|
-
commonJS: [],
|
|
112
|
-
mixed: []
|
|
113
|
-
};
|
|
114
|
-
for (const file of files) {
|
|
115
|
-
const content = await readFileContent(file);
|
|
116
|
-
const hasESM = content.match(/^import\s+/m);
|
|
117
|
-
// Check for actual CommonJS require() calls, excluding:
|
|
118
|
-
// - String literals: "require('...') or 'require('...')
|
|
119
|
-
// - Regex patterns: /require\(/
|
|
120
|
-
// - Comments: // require( or /* require( */
|
|
121
|
-
const hasCJS = hasActualRequireCalls(content);
|
|
122
|
-
if (hasESM && hasCJS) {
|
|
123
|
-
patterns.mixed.push(file);
|
|
124
|
-
}
|
|
125
|
-
else if (hasESM) {
|
|
126
|
-
patterns.esModules.push(file);
|
|
127
|
-
}
|
|
128
|
-
else if (hasCJS) {
|
|
129
|
-
patterns.commonJS.push(file);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
const issues = [];
|
|
133
|
-
// Check for mixed import styles in same file
|
|
134
|
-
if (patterns.mixed.length > 0) {
|
|
135
|
-
issues.push({
|
|
136
|
-
files: patterns.mixed,
|
|
137
|
-
type: 'import-style',
|
|
138
|
-
description: 'Mixed ES modules and CommonJS imports in same files',
|
|
139
|
-
examples: patterns.mixed.slice(0, 5),
|
|
140
|
-
severity: 'major'
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
// Check for inconsistent styles across project
|
|
144
|
-
if (patterns.esModules.length > 0 && patterns.commonJS.length > 0) {
|
|
145
|
-
const ratio = patterns.commonJS.length / (patterns.esModules.length + patterns.commonJS.length);
|
|
146
|
-
if (ratio > 0.2 && ratio < 0.8) {
|
|
147
|
-
issues.push({
|
|
148
|
-
files: [...patterns.esModules, ...patterns.commonJS],
|
|
149
|
-
type: 'import-style',
|
|
150
|
-
description: 'Inconsistent import styles across project',
|
|
151
|
-
examples: [
|
|
152
|
-
`ES modules: ${patterns.esModules.length} files`,
|
|
153
|
-
`CommonJS: ${patterns.commonJS.length} files`
|
|
154
|
-
],
|
|
155
|
-
severity: 'minor'
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
return issues;
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Detects actual require() calls, excluding false positives
|
|
163
|
-
* Filters out require() in:
|
|
164
|
-
* - String literals (single/double/template quotes)
|
|
165
|
-
* - Regex patterns
|
|
166
|
-
* - Single-line comments (//)
|
|
167
|
-
* - Multi-line comments
|
|
168
|
-
*/
|
|
169
|
-
function hasActualRequireCalls(content) {
|
|
170
|
-
// Simple heuristic: remove obvious false positives
|
|
171
|
-
// 1. Remove single-line comments
|
|
172
|
-
let cleaned = content.replace(/\/\/.*$/gm, '');
|
|
173
|
-
// 2. Remove multi-line comments (non-greedy)
|
|
174
|
-
cleaned = cleaned.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
175
|
-
// 3. Remove string literals - use simpler regex to avoid backtracking
|
|
176
|
-
// Match strings but don't try to be perfect, just remove obvious ones
|
|
177
|
-
cleaned = cleaned.replace(/"[^"\n]*"/g, '""');
|
|
178
|
-
cleaned = cleaned.replace(/'[^'\n]*'/g, "''");
|
|
179
|
-
cleaned = cleaned.replace(/`[^`]*`/g, '``');
|
|
180
|
-
// 4. Simple regex detection: if we see /require in the line, likely a regex pattern
|
|
181
|
-
// Remove lines that look like regex patterns with require
|
|
182
|
-
cleaned = cleaned.replace(/\/[^/\n]*require[^/\n]*\/[gimsuvy]*/g, '');
|
|
183
|
-
// Now check for require( in the cleaned content
|
|
184
|
-
return /require\s*\(/.test(cleaned);
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Analyzes API design consistency
|
|
188
|
-
*/
|
|
189
|
-
export async function analyzeAPIDesign(files) {
|
|
190
|
-
// This would analyze:
|
|
191
|
-
// - Function parameter order consistency
|
|
192
|
-
// - Return type patterns
|
|
193
|
-
// - Options object vs individual parameters
|
|
194
|
-
// For now, return empty array
|
|
195
|
-
return [];
|
|
196
|
-
}
|
|
197
|
-
//# sourceMappingURL=patterns.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/analyzers/patterns.ts"],"names":[],"mappings":"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"}
|