@trebired/code-discipline 3.3.0 → 3.3.2

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 (64) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +17 -35
  3. package/dist/checks/fix-folderization.d.ts.map +1 -1
  4. package/dist/checks/fix-folderization.js +2 -0
  5. package/dist/checks/fix-folderization.js.map +1 -1
  6. package/dist/checks/index.d.ts.map +1 -1
  7. package/dist/checks/index.js +19 -15
  8. package/dist/checks/index.js.map +1 -1
  9. package/dist/checks/rule-slugs.js +1 -1
  10. package/dist/checks/rule-slugs.js.map +1 -1
  11. package/dist/checks/rules/banned/files.d.ts +3 -2
  12. package/dist/checks/rules/banned/files.d.ts.map +1 -1
  13. package/dist/checks/rules/banned/files.js +32 -1
  14. package/dist/checks/rules/banned/files.js.map +1 -1
  15. package/dist/checks/rules/dry/candidates.d.ts +2 -6
  16. package/dist/checks/rules/dry/candidates.d.ts.map +1 -1
  17. package/dist/checks/rules/dry/candidates.js +173 -126
  18. package/dist/checks/rules/dry/candidates.js.map +1 -1
  19. package/dist/checks/rules/dry/fingerprint.d.ts +1 -0
  20. package/dist/checks/rules/dry/fingerprint.d.ts.map +1 -1
  21. package/dist/checks/rules/dry/fingerprint.js +1 -0
  22. package/dist/checks/rules/dry/fingerprint.js.map +1 -1
  23. package/dist/checks/rules/dry/index.d.ts +1 -2
  24. package/dist/checks/rules/dry/index.d.ts.map +1 -1
  25. package/dist/checks/rules/dry/index.js +3 -12
  26. package/dist/checks/rules/dry/index.js.map +1 -1
  27. package/dist/checks/rules/dry/model.d.ts +7 -34
  28. package/dist/checks/rules/dry/model.d.ts.map +1 -1
  29. package/dist/checks/rules/dry/model.js +1 -11
  30. package/dist/checks/rules/dry/model.js.map +1 -1
  31. package/dist/checks/rules/evasion-guards/functions.d.ts +1 -1
  32. package/dist/checks/rules/evasion-guards/functions.d.ts.map +1 -1
  33. package/dist/checks/rules/evasion-guards/functions.js +3 -25
  34. package/dist/checks/rules/evasion-guards/functions.js.map +1 -1
  35. package/dist/checks/rules/max/function-lines.d.ts.map +1 -1
  36. package/dist/checks/rules/max/function-lines.js +6 -69
  37. package/dist/checks/rules/max/function-lines.js.map +1 -1
  38. package/dist/checks/rules/typescript-functions.d.ts +5 -1
  39. package/dist/checks/rules/typescript-functions.d.ts.map +1 -1
  40. package/dist/checks/rules/typescript-functions.js +26 -1
  41. package/dist/checks/rules/typescript-functions.js.map +1 -1
  42. package/dist/checks/types.d.ts +4 -9
  43. package/dist/checks/types.d.ts.map +1 -1
  44. package/dist/cli/run-cli.d.ts.map +1 -1
  45. package/dist/cli/run-cli.js +2 -1
  46. package/dist/cli/run-cli.js.map +1 -1
  47. package/dist/config/normalize/rule-options.d.ts.map +1 -1
  48. package/dist/config/normalize/rule-options.js +1 -28
  49. package/dist/config/normalize/rule-options.js.map +1 -1
  50. package/dist/index.d.ts +1 -1
  51. package/dist/index.d.ts.map +1 -1
  52. package/native/darwin-arm64.node +0 -0
  53. package/native/darwin-x64.node +0 -0
  54. package/native/linux-arm64-gnu.node +0 -0
  55. package/native/linux-x64-gnu.node +0 -0
  56. package/package.json +1 -1
  57. package/dist/checks/rules/dry/fix.d.ts +0 -5
  58. package/dist/checks/rules/dry/fix.d.ts.map +0 -1
  59. package/dist/checks/rules/dry/fix.js +0 -252
  60. package/dist/checks/rules/dry/fix.js.map +0 -1
  61. package/dist/checks/rules/dry/helpers.d.ts +0 -5
  62. package/dist/checks/rules/dry/helpers.d.ts.map +0 -1
  63. package/dist/checks/rules/dry/helpers.js +0 -99
  64. package/dist/checks/rules/dry/helpers.js.map +0 -1
@@ -1,43 +1,29 @@
1
1
  import fs from "node:fs/promises";
2
2
  import ts from "typescript";
3
3
  import { parseSource } from "../../../imports/module-specifiers.js";
4
- import { createFunctionFingerprint, resolveClassification, resolveFunctionDisplayName, resolveRemovalRange, resolveStandaloneName, } from "./fingerprint.js";
4
+ import { createFunctionFingerprint, resolveClassification, resolveFunctionDisplayName } from "./fingerprint.js";
5
5
  const MIN_SOURCE_DUPLICATE_CHARACTERS = 300;
6
- function createDryViolation(candidate, options) {
7
- return {
8
- rule: "dry",
9
- fix: true,
10
- filePath: candidate.filePath,
11
- message: `${candidate.localName ?? "anonymous function"} duplicates registered helper ${candidate.helper.helperKey}`,
12
- details: {
13
- fixable: candidate.safeToFix,
14
- helper: candidate.helper.helperKey,
15
- helperFile: candidate.helper.filePath,
16
- reason: candidate.nonFixableReason,
17
- },
18
- };
19
- }
20
- function createDrySourceDuplicateViolation(candidate, canonical) {
21
- const candidateLine = candidate.sourceFile.getLineAndCharacterOfPosition(candidate.nodeStart).line + 1;
22
- const canonicalLine = canonical.sourceFile.getLineAndCharacterOfPosition(canonical.nodeStart).line + 1;
23
- return {
24
- rule: "dry",
25
- fix: false,
26
- filePath: candidate.filePath,
27
- message: `${candidate.localName ?? "anonymous function"} duplicates ${canonical.localName ?? "function"} in ${canonical.filePath}`,
28
- details: {
29
- fixable: false,
30
- reason: "source duplicate requires a canonical helper for autofix",
31
- duplicateOf: {
32
- filePath: canonical.filePath,
33
- line: canonicalLine,
34
- name: canonical.localName,
35
- },
36
- line: candidateLine,
37
- usesOuterScope: candidate.usesOuterScope,
38
- usesRestrictedRuntime: candidate.usesRestrictedRuntime,
39
- },
40
- };
6
+ const MIN_NAME_DUPLICATE_CHARACTERS = 300;
7
+ const SIMILARITY_THRESHOLD = 0.99;
8
+ class DisjointSet {
9
+ constructor(size) {
10
+ this.parents = Array.from({ length: size }, (_, index) => index);
11
+ }
12
+ find(index) {
13
+ const parent = this.parents[index];
14
+ if (parent === index)
15
+ return index;
16
+ const root = this.find(parent);
17
+ this.parents[index] = root;
18
+ return root;
19
+ }
20
+ union(left, right) {
21
+ const leftRoot = this.find(left);
22
+ const rightRoot = this.find(right);
23
+ if (leftRoot === rightRoot)
24
+ return;
25
+ this.parents[rightRoot] = leftRoot;
26
+ }
41
27
  }
42
28
  function isFingerprintableFunction(node) {
43
29
  return (ts.isFunctionDeclaration(node) && Boolean(node.body))
@@ -48,126 +34,187 @@ function isFingerprintableFunction(node) {
48
34
  || (ts.isSetAccessorDeclaration(node) && Boolean(node.body))
49
35
  || (ts.isConstructorDeclaration(node) && Boolean(node.body));
50
36
  }
51
- function buildDrySourceDuplicate(node, sourceFile, file, helpers) {
37
+ function normalizeFunctionName(name) {
38
+ const normalized = name?.trim().toLowerCase();
39
+ return normalized || undefined;
40
+ }
41
+ function isTopLevelFunction(node) {
42
+ if (ts.isFunctionDeclaration(node)) {
43
+ return ts.isSourceFile(node.parent);
44
+ }
45
+ const parent = node.parent;
46
+ if (!parent || !ts.isVariableDeclaration(parent))
47
+ return false;
48
+ const declarationList = parent.parent;
49
+ const statement = declarationList.parent;
50
+ return ts.isVariableDeclarationList(declarationList)
51
+ && ts.isVariableStatement(statement)
52
+ && ts.isSourceFile(statement.parent);
53
+ }
54
+ function buildDryFunctionDescriptor(node, sourceFile, file) {
52
55
  const classification = resolveClassification(node);
53
56
  if (classification === "unsupported")
54
57
  return null;
55
58
  const sourceText = node.getText(sourceFile).replace(/\s+/g, "");
56
- if (sourceText.length < MIN_SOURCE_DUPLICATE_CHARACTERS)
57
- return null;
58
59
  const fingerprintState = createFunctionFingerprint(node, sourceFile);
59
- if (helpers.has(fingerprintState.fingerprint))
60
- return null;
60
+ const localName = resolveFunctionDisplayName(node, sourceFile);
61
61
  return {
62
62
  absolutePath: file.absolutePath,
63
+ characterCount: sourceText.length,
63
64
  classification,
64
65
  fingerprint: fingerprintState.fingerprint,
65
66
  filePath: file.relativeFromProjectRoot,
66
- localName: resolveFunctionDisplayName(node, sourceFile),
67
- nodeStart: node.getStart(sourceFile),
68
- sourceFile,
69
- usesOuterScope: fingerprintState.usesOuterScope,
70
- usesRestrictedRuntime: fingerprintState.usesRestrictedRuntime,
71
- };
72
- }
73
- function resolveNonFixableReason(args) {
74
- if (args.classification === "method")
75
- return "methods are report-only in v1";
76
- if (args.classification !== "standalone")
77
- return "unsupported function shape";
78
- if (!args.removalOk)
79
- return "duplicate declaration cannot be removed safely";
80
- if (args.usesOuterScope)
81
- return "duplicate captures outer scope";
82
- if (args.usesRestrictedRuntime)
83
- return "duplicate depends on this, super, arguments, or new.target";
84
- return undefined;
85
- }
86
- function buildDryCandidate(node, sourceFile, file, helpers) {
87
- const classification = resolveClassification(node);
88
- const localName = resolveStandaloneName(node);
89
- const removal = resolveRemovalRange(node, sourceFile);
90
- const fingerprintState = createFunctionFingerprint(node, sourceFile);
91
- const helper = helpers.get(fingerprintState.fingerprint);
92
- if (!helper)
93
- return null;
94
- const isSelf = helper.absolutePath === file.absolutePath
95
- && helper.nodeStart === node.getStart(sourceFile)
96
- && helper.nodeEnd === node.getEnd();
97
- if (isSelf)
98
- return null;
99
- const safeToFix = classification === "standalone"
100
- && removal.ok
101
- && !fingerprintState.usesOuterScope
102
- && !fingerprintState.usesRestrictedRuntime
103
- && Boolean(localName);
104
- return {
105
- absolutePath: file.absolutePath,
106
- classification,
107
- fingerprint: fingerprintState.fingerprint,
108
- filePath: file.relativeFromProjectRoot,
109
- helper,
110
67
  localName,
111
- nonFixableReason: resolveNonFixableReason({
112
- classification,
113
- removalOk: removal.ok,
114
- usesOuterScope: fingerprintState.usesOuterScope,
115
- usesRestrictedRuntime: fingerprintState.usesRestrictedRuntime,
116
- }),
117
- removalEnd: removal.end,
118
- removalStart: removal.start,
119
- safeToFix,
68
+ normalizedName: normalizeFunctionName(localName),
69
+ nodeStart: node.getStart(sourceFile),
70
+ normalizedText: fingerprintState.fingerprint,
120
71
  sourceFile,
72
+ topLevel: isTopLevelFunction(node),
121
73
  usesOuterScope: fingerprintState.usesOuterScope,
122
74
  usesRestrictedRuntime: fingerprintState.usesRestrictedRuntime,
123
75
  };
124
76
  }
125
- async function collectDryCandidates(sourceFiles, helpers, options) {
126
- const results = [];
77
+ async function collectDryFunctions(sourceFiles) {
78
+ const functions = [];
127
79
  for (const file of sourceFiles) {
128
80
  const text = await fs.readFile(file.absolutePath, "utf8");
129
81
  const sourceFile = parseSource(text, file.absolutePath);
130
82
  const visit = (node) => {
131
83
  if (isFingerprintableFunction(node)) {
132
- const candidate = buildDryCandidate(node, sourceFile, file, helpers);
133
- if (candidate)
134
- results.push(candidate);
84
+ const descriptor = buildDryFunctionDescriptor(node, sourceFile, file);
85
+ if (descriptor)
86
+ functions.push(descriptor);
135
87
  }
136
88
  ts.forEachChild(node, visit);
137
89
  };
138
90
  visit(sourceFile);
139
91
  }
140
- return results;
92
+ return functions.sort((left, right) => left.filePath.localeCompare(right.filePath) || left.nodeStart - right.nodeStart);
141
93
  }
142
- async function collectDrySourceDuplicateViolations(sourceFiles, helpers) {
143
- const byFingerprint = new Map();
144
- for (const file of sourceFiles) {
145
- const text = await fs.readFile(file.absolutePath, "utf8");
146
- const sourceFile = parseSource(text, file.absolutePath);
147
- const visit = (node) => {
148
- if (isFingerprintableFunction(node)) {
149
- const duplicate = buildDrySourceDuplicate(node, sourceFile, file, helpers);
150
- if (duplicate) {
151
- const rows = byFingerprint.get(duplicate.fingerprint) ?? [];
152
- rows.push(duplicate);
153
- byFingerprint.set(duplicate.fingerprint, rows);
154
- }
155
- }
156
- ts.forEachChild(node, visit);
157
- };
158
- visit(sourceFile);
94
+ function getTrigrams(value) {
95
+ const padded = ` ${value} `;
96
+ const trigrams = new Set();
97
+ for (let index = 0; index <= padded.length - 3; index += 1) {
98
+ trigrams.add(padded.slice(index, index + 3));
99
+ }
100
+ return trigrams;
101
+ }
102
+ function jaccardSimilarity(left, right) {
103
+ let intersection = 0;
104
+ for (const entry of left) {
105
+ if (right.has(entry))
106
+ intersection += 1;
107
+ }
108
+ const union = left.size + right.size - intersection;
109
+ return union === 0 ? 1 : intersection / union;
110
+ }
111
+ function shouldCompareSimilarity(left, right) {
112
+ if (left.characterCount < MIN_SOURCE_DUPLICATE_CHARACTERS || right.characterCount < MIN_SOURCE_DUPLICATE_CHARACTERS)
113
+ return false;
114
+ const smaller = Math.min(left.normalizedText.length, right.normalizedText.length);
115
+ const larger = Math.max(left.normalizedText.length, right.normalizedText.length);
116
+ return smaller / larger >= 0.75;
117
+ }
118
+ function resolvePairSignals(left, right) {
119
+ const signals = [];
120
+ if (left.fingerprint === right.fingerprint && left.characterCount >= MIN_SOURCE_DUPLICATE_CHARACTERS && right.characterCount >= MIN_SOURCE_DUPLICATE_CHARACTERS) {
121
+ signals.push({ confidence: 1, signal: "exact-normalized" });
159
122
  }
160
- const violations = [];
161
- for (const rows of byFingerprint.values()) {
162
- if (rows.length < 2)
123
+ if (left.classification === "standalone"
124
+ && right.classification === "standalone"
125
+ && left.topLevel
126
+ && right.topLevel
127
+ && left.characterCount >= MIN_NAME_DUPLICATE_CHARACTERS
128
+ && right.characterCount >= MIN_NAME_DUPLICATE_CHARACTERS
129
+ && left.normalizedName
130
+ && left.normalizedName === right.normalizedName) {
131
+ signals.push({ confidence: 1, signal: "matching-name" });
132
+ }
133
+ if (shouldCompareSimilarity(left, right)) {
134
+ const similarity = jaccardSimilarity(getTrigrams(left.normalizedText), getTrigrams(right.normalizedText));
135
+ if (similarity >= SIMILARITY_THRESHOLD) {
136
+ signals.push({ confidence: similarity, signal: "similar-structure" });
137
+ }
138
+ }
139
+ return signals;
140
+ }
141
+ function collectDuplicateGroups(functions) {
142
+ const disjointSet = new DisjointSet(functions.length);
143
+ const groupSignals = new Map();
144
+ for (let leftIndex = 0; leftIndex < functions.length; leftIndex += 1) {
145
+ for (let rightIndex = leftIndex + 1; rightIndex < functions.length; rightIndex += 1) {
146
+ const signals = resolvePairSignals(functions[leftIndex], functions[rightIndex]);
147
+ if (signals.length === 0)
148
+ continue;
149
+ disjointSet.union(leftIndex, rightIndex);
150
+ const key = `${leftIndex}:${rightIndex}`;
151
+ groupSignals.set(key, {
152
+ confidence: Math.max(...signals.map((signal) => signal.confidence)),
153
+ signals: new Set(signals.map((signal) => signal.signal)),
154
+ });
155
+ }
156
+ }
157
+ const indexesByRoot = new Map();
158
+ for (let index = 0; index < functions.length; index += 1) {
159
+ const root = disjointSet.find(index);
160
+ const indexes = indexesByRoot.get(root) ?? [];
161
+ indexes.push(index);
162
+ indexesByRoot.set(root, indexes);
163
+ }
164
+ const groups = [];
165
+ for (const indexes of indexesByRoot.values()) {
166
+ if (indexes.length < 2)
163
167
  continue;
164
- const [canonical, ...duplicates] = rows.sort((left, right) => (left.filePath.localeCompare(right.filePath)
165
- || left.nodeStart - right.nodeStart));
166
- for (const duplicate of duplicates) {
167
- violations.push(createDrySourceDuplicateViolation(duplicate, canonical));
168
+ let confidence = 0;
169
+ const signals = new Set();
170
+ for (const [key, entry] of groupSignals) {
171
+ const [left, right] = key.split(":").map((value) => Number.parseInt(value, 10));
172
+ if (!indexes.includes(left) || !indexes.includes(right))
173
+ continue;
174
+ confidence = Math.max(confidence, entry.confidence);
175
+ for (const signal of entry.signals)
176
+ signals.add(signal);
168
177
  }
178
+ groups.push({
179
+ confidence,
180
+ functions: indexes.map((index) => functions[index]),
181
+ signals: [...signals].sort(),
182
+ });
169
183
  }
170
- return violations;
184
+ return groups;
185
+ }
186
+ function formatFunctionLocation(descriptor) {
187
+ return descriptor.localName
188
+ ? `${descriptor.filePath}#${descriptor.localName}`
189
+ : descriptor.filePath;
190
+ }
191
+ function createDryGroupViolation(group) {
192
+ const files = [...new Set(group.functions.map((descriptor) => descriptor.filePath))];
193
+ return {
194
+ rule: "dry",
195
+ fix: false,
196
+ filePath: "multiple files",
197
+ message: `function duplicates in files: ${files.join(", ")}`,
198
+ details: {
199
+ confidence: Number(group.confidence.toFixed(3)),
200
+ files,
201
+ fixable: false,
202
+ functions: group.functions.map((descriptor) => ({
203
+ classification: descriptor.classification,
204
+ filePath: descriptor.filePath,
205
+ line: descriptor.sourceFile.getLineAndCharacterOfPosition(descriptor.nodeStart).line + 1,
206
+ name: descriptor.localName,
207
+ topLevel: descriptor.topLevel,
208
+ })),
209
+ locations: group.functions.map(formatFunctionLocation),
210
+ reason: "duplicate function group requires human canonicalization",
211
+ signals: group.signals,
212
+ },
213
+ };
214
+ }
215
+ async function collectDrySourceDuplicateViolations(sourceFiles) {
216
+ const functions = await collectDryFunctions(sourceFiles);
217
+ return collectDuplicateGroups(functions).map(createDryGroupViolation);
171
218
  }
172
- export { collectDryCandidates, collectDrySourceDuplicateViolations, createDryViolation };
219
+ export { collectDrySourceDuplicateViolations };
173
220
  //# sourceMappingURL=candidates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"candidates.js","sourceRoot":"","sources":["../../../../src/checks/rules/dry/candidates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"candidates.js","sourceRoot":"","sources":["../../../../src/checks/rules/dry/candidates.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import ts from "typescript";
2
2
  declare function createFunctionFingerprint(node: ts.FunctionLikeDeclaration, sourceFile: ts.SourceFile): {
3
3
  fingerprint: string;
4
+ normalized: unknown;
4
5
  usesOuterScope: boolean;
5
6
  usesRestrictedRuntime: boolean;
6
7
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/dry/fingerprint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAO5B,iBAAS,yBAAyB,CAChC,IAAI,EAAE,EAAE,CAAC,uBAAuB,EAChC,UAAU,EAAE,EAAE,CAAC,UAAU,GACxB;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,qBAAqB,EAAE,OAAO,CAAC;CAChC,CASA;AAED,iBAAS,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,GAAG,MAAM,GAAG,SAAS,CAWnF;AAED,iBAAS,0BAA0B,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAanH;AAED,iBAAS,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,CAexG;AAED,iBAAS,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,CAqCrI;AAQD,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,GACtB,CAAC"}
1
+ {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/dry/fingerprint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAO5B,iBAAS,yBAAyB,CAChC,IAAI,EAAE,EAAE,CAAC,uBAAuB,EAChC,UAAU,EAAE,EAAE,CAAC,UAAU,GACxB;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAUA;AAED,iBAAS,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,GAAG,MAAM,GAAG,SAAS,CAWnF;AAED,iBAAS,0BAA0B,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAanH;AAED,iBAAS,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,CAexG;AAED,iBAAS,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,CAqCrI;AAQD,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,GACtB,CAAC"}
@@ -8,6 +8,7 @@ function createFunctionFingerprint(node, sourceFile) {
8
8
  const normalized = serializeFunctionLike(node, context, sourceFile, serializeNode);
9
9
  return {
10
10
  fingerprint: stableSerialize(normalized),
11
+ normalized,
11
12
  usesOuterScope: context.usesOuterScope,
12
13
  usesRestrictedRuntime: context.usesRestrictedRuntime,
13
14
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../../../src/checks/rules/dry/fingerprint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../../../src/checks/rules/dry/fingerprint.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import type { NormalizedCheckCodeDisciplineOptions } from "../../types.js";
2
2
  import type { ScannedSourceFile } from "../../../imports/types.js";
3
3
  import type { CodeDisciplineViolation } from "../../../shared/discipline-types.js";
4
- import { fixDryRule } from "./fix.js";
5
4
  declare function collectDryViolations(sourceFiles: ScannedSourceFile[], options: NormalizedCheckCodeDisciplineOptions): Promise<CodeDisciplineViolation[]>;
6
- export { collectDryViolations, fixDryRule };
5
+ export { collectDryViolations };
7
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/dry/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAEnF,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAItC,iBAAe,oBAAoB,CACjC,WAAW,EAAE,iBAAiB,EAAE,EAChC,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAapC;AAED,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/dry/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAInF,iBAAe,oBAAoB,CACjC,WAAW,EAAE,iBAAiB,EAAE,EAChC,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAMpC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,20 +1,11 @@
1
- import { collectDryCandidates, collectDrySourceDuplicateViolations, createDryViolation } from "./candidates.js";
2
- import { fixDryRule } from "./fix.js";
3
- import { resolveDryHelpers } from "./helpers.js";
1
+ import { collectDrySourceDuplicateViolations } from "./candidates.js";
4
2
  import { filterDrySourceFiles } from "./model.js";
5
3
  async function collectDryViolations(sourceFiles, options) {
6
4
  const rule = options.rules.dry;
7
5
  if (!rule)
8
6
  return [];
9
- const helpers = await resolveDryHelpers(rule, options);
10
7
  const drySourceFiles = filterDrySourceFiles(sourceFiles);
11
- const candidates = await collectDryCandidates(drySourceFiles, helpers, options);
12
- const helperViolations = candidates.map((candidate) => createDryViolation(candidate, options));
13
- const sourceDuplicateViolations = await collectDrySourceDuplicateViolations(drySourceFiles, helpers);
14
- return [
15
- ...helperViolations,
16
- ...sourceDuplicateViolations,
17
- ];
8
+ return collectDrySourceDuplicateViolations(drySourceFiles);
18
9
  }
19
- export { collectDryViolations, fixDryRule };
10
+ export { collectDryViolations };
20
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/checks/rules/dry/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,mCAAmC,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAChH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,KAAK,UAAU,oBAAoB,CACjC,WAAgC,EAChC,OAA6C;IAE7C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAChF,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/F,MAAM,yBAAyB,GAAG,MAAM,mCAAmC,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACrG,OAAO;QACL,GAAG,gBAAgB;QACnB,GAAG,yBAAyB;KAC7B,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/checks/rules/dry/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mCAAmC,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,KAAK,UAAU,oBAAoB,CACjC,WAAgC,EAChC,OAA6C;IAE7C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACzD,OAAO,mCAAmC,CAAC,cAAc,CAAC,CAAC;AAC7D,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,48 +1,21 @@
1
1
  import ts from "typescript";
2
2
  import type { ScannedSourceFile } from "../../../imports/types.js";
3
- declare const DRY_RESOLUTION_EXTENSIONS: string[];
4
- type DryHelperDescriptor = {
5
- absolutePath: string;
6
- exportName: string;
7
- fingerprint: string;
8
- filePath: string;
9
- helperKey: string;
10
- importPath: string;
11
- localName: string;
12
- nodeEnd: number;
13
- nodeStart: number;
14
- };
15
- type DryCandidateDescriptor = {
16
- absolutePath: string;
17
- classification: "method" | "standalone" | "unsupported";
18
- fingerprint: string | null;
19
- filePath: string;
20
- helper: DryHelperDescriptor;
21
- localName?: string;
22
- nonFixableReason?: string;
23
- removalEnd: number;
24
- removalStart: number;
25
- safeToFix: boolean;
26
- sourceFile: ts.SourceFile;
27
- usesOuterScope: boolean;
28
- usesRestrictedRuntime: boolean;
29
- };
30
- type DrySourceDuplicateDescriptor = {
3
+ type DryFunctionDescriptor = {
31
4
  absolutePath: string;
5
+ characterCount: number;
32
6
  classification: "method" | "standalone";
33
7
  fingerprint: string;
34
8
  filePath: string;
35
9
  localName?: string;
10
+ normalizedName?: string;
36
11
  nodeStart: number;
12
+ normalizedText: string;
37
13
  sourceFile: ts.SourceFile;
14
+ topLevel: boolean;
38
15
  usesOuterScope: boolean;
39
16
  usesRestrictedRuntime: boolean;
40
17
  };
41
- type ImportBinding = {
42
- exportName: string;
43
- localName: string;
44
- };
45
18
  declare function filterDrySourceFiles(sourceFiles: ScannedSourceFile[]): ScannedSourceFile[];
46
- export { DRY_RESOLUTION_EXTENSIONS, filterDrySourceFiles };
47
- export type { DryCandidateDescriptor, DryHelperDescriptor, DrySourceDuplicateDescriptor, ImportBinding };
19
+ export { filterDrySourceFiles };
20
+ export type { DryFunctionDescriptor };
48
21
  //# sourceMappingURL=model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/dry/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,QAAA,MAAM,yBAAyB,UAS9B,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,QAAQ,GAAG,YAAY,GAAG,aAAa,CAAC;IACxD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,KAAK,4BAA4B,GAAG;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,QAAQ,GAAG,YAAY,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,iBAAS,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,CAEnF;AAED,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,CAAC;AAC3D,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/dry/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,QAAQ,GAAG,YAAY,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,iBAAS,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,CAEnF;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAChC,YAAY,EAAE,qBAAqB,EAAE,CAAC"}
@@ -1,16 +1,6 @@
1
1
  import { isTypeScriptFamilyExtension } from "../../../shared/languages.js";
2
- const DRY_RESOLUTION_EXTENSIONS = [
3
- ".ts",
4
- ".tsx",
5
- ".mts",
6
- ".js",
7
- ".jsx",
8
- ".mjs",
9
- ".cts",
10
- ".cjs",
11
- ];
12
2
  function filterDrySourceFiles(sourceFiles) {
13
3
  return sourceFiles.filter((file) => isTypeScriptFamilyExtension(file.extension));
14
4
  }
15
- export { DRY_RESOLUTION_EXTENSIONS, filterDrySourceFiles };
5
+ export { filterDrySourceFiles };
16
6
  //# sourceMappingURL=model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../src/checks/rules/dry/model.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAE3E,MAAM,yBAAyB,GAAG;IAChC,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC;AA+CF,SAAS,oBAAoB,CAAC,WAAgC;IAC5D,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../src/checks/rules/dry/model.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAkB3E,SAAS,oBAAoB,CAAC,WAAgC;IAC5D,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import ts from "typescript";
2
+ import { getStartLine } from "../typescript-functions.js";
2
3
  type FunctionDescriptor = {
3
4
  characterCount: number;
4
5
  kind: string;
@@ -7,7 +8,6 @@ type FunctionDescriptor = {
7
8
  startLine: number;
8
9
  statementCount: number;
9
10
  };
10
- declare function getStartLine(sourceFile: ts.SourceFile, node: ts.Node): number;
11
11
  declare function collectFunctionDescriptors(sourceFile: ts.SourceFile): FunctionDescriptor[];
12
12
  export { collectFunctionDescriptors, getStartLine };
13
13
  export type { FunctionDescriptor };
@@ -1 +1 @@
1
- {"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/evasion-guards/functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAI5B,KAAK,kBAAkB,GAAG;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,iBAAS,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,MAAM,CAEtE;AAgDD,iBAAS,0BAA0B,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,kBAAkB,EAAE,CAUnF;AAED,OAAO,EAAE,0BAA0B,EAAE,YAAY,EAAE,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/evasion-guards/functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAEL,YAAY,EAIb,MAAM,4BAA4B,CAAC;AAEpC,KAAK,kBAAkB,GAAG;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AA8BF,iBAAS,0BAA0B,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,kBAAkB,EAAE,CAUnF;AAED,OAAO,EAAE,0BAA0B,EAAE,YAAY,EAAE,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,CAAC"}