codeguard-testgen 1.0.7 → 1.0.9

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.
@@ -0,0 +1,349 @@
1
+ "use strict";
2
+ /**
3
+ * Fuzzy Matching Utilities for Search-Replace Operations
4
+ * Provides multiple matching strategies for reliable code block replacement
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.normalizeWhitespace = normalizeWhitespace;
8
+ exports.levenshteinDistance = levenshteinDistance;
9
+ exports.similarityScore = similarityScore;
10
+ exports.contextAwareSearch = contextAwareSearch;
11
+ exports.smartSearch = smartSearch;
12
+ exports.findSimilarBlocks = findSimilarBlocks;
13
+ exports.getSearchFailureMessage = getSearchFailureMessage;
14
+ /**
15
+ * Normalize whitespace for comparison
16
+ * - Converts tabs to spaces
17
+ * - Normalizes line endings
18
+ * - Trims each line
19
+ * - Collapses multiple spaces
20
+ */
21
+ function normalizeWhitespace(text) {
22
+ return text
23
+ .replace(/\r\n/g, '\n') // Normalize line endings (Windows -> Unix)
24
+ .replace(/\t/g, ' ') // Convert tabs to 2 spaces
25
+ .split('\n')
26
+ .map(line => line.trim()) // Trim each line
27
+ .join('\n')
28
+ .replace(/\n{3,}/g, '\n\n') // Collapse 3+ blank lines to double (preserve double blanks)
29
+ .trim();
30
+ }
31
+ /**
32
+ * Calculate Levenshtein distance between two strings
33
+ * Used for fuzzy matching with a threshold
34
+ */
35
+ function levenshteinDistance(a, b) {
36
+ if (a.length === 0)
37
+ return b.length;
38
+ if (b.length === 0)
39
+ return a.length;
40
+ const matrix = [];
41
+ // Initialize first column
42
+ for (let i = 0; i <= b.length; i++) {
43
+ matrix[i] = [i];
44
+ }
45
+ // Initialize first row
46
+ for (let j = 0; j <= a.length; j++) {
47
+ matrix[0][j] = j;
48
+ }
49
+ // Fill in the rest of the matrix
50
+ for (let i = 1; i <= b.length; i++) {
51
+ for (let j = 1; j <= a.length; j++) {
52
+ if (b.charAt(i - 1) === a.charAt(j - 1)) {
53
+ matrix[i][j] = matrix[i - 1][j - 1];
54
+ }
55
+ else {
56
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
57
+ matrix[i][j - 1] + 1, // insertion
58
+ matrix[i - 1][j] + 1 // deletion
59
+ );
60
+ }
61
+ }
62
+ }
63
+ return matrix[b.length][a.length];
64
+ }
65
+ /**
66
+ * Calculate similarity score (0-1) based on Levenshtein distance
67
+ */
68
+ function similarityScore(a, b) {
69
+ const distance = levenshteinDistance(a, b);
70
+ const maxLength = Math.max(a.length, b.length);
71
+ if (maxLength === 0)
72
+ return 1.0;
73
+ return 1 - (distance / maxLength);
74
+ }
75
+ /**
76
+ * Exact string search
77
+ */
78
+ function exactSearch(content, search) {
79
+ const index = content.indexOf(search);
80
+ if (index === -1)
81
+ return null;
82
+ return {
83
+ found: true,
84
+ startIndex: index,
85
+ endIndex: index + search.length,
86
+ confidence: 1.0,
87
+ originalText: search,
88
+ matchType: 'exact'
89
+ };
90
+ }
91
+ /**
92
+ * Normalized whitespace search
93
+ * Handles differences in indentation, line endings, and spacing
94
+ */
95
+ function normalizedSearch(content, search) {
96
+ const normalizedContent = normalizeWhitespace(content);
97
+ const normalizedSearch = normalizeWhitespace(search);
98
+ const index = normalizedContent.indexOf(normalizedSearch);
99
+ if (index === -1)
100
+ return null;
101
+ // Map back to original content position
102
+ // Count how many normalized characters correspond to original position
103
+ let originalIndex = 0;
104
+ let normalizedIndex = 0;
105
+ const contentLines = content.split('\n');
106
+ const normalizedLines = normalizedContent.split('\n');
107
+ // Find the line where match starts
108
+ let normalizedCharCount = 0;
109
+ let matchStartLine = 0;
110
+ for (let i = 0; i < normalizedLines.length; i++) {
111
+ const lineLength = normalizedLines[i].length + 1; // +1 for newline
112
+ if (normalizedCharCount + lineLength > index) {
113
+ matchStartLine = i;
114
+ break;
115
+ }
116
+ normalizedCharCount += lineLength;
117
+ }
118
+ // Calculate original start position
119
+ let originalStartIndex = 0;
120
+ for (let i = 0; i < matchStartLine; i++) {
121
+ originalStartIndex += contentLines[i].length + 1; // +1 for newline
122
+ }
123
+ // Add offset within the line
124
+ const offsetInNormalizedLine = index - normalizedCharCount;
125
+ const normalizedLine = normalizedLines[matchStartLine];
126
+ const originalLine = contentLines[matchStartLine];
127
+ // Simple approximation: find similar position in original line
128
+ const ratio = offsetInNormalizedLine / normalizedLine.length;
129
+ const offsetInOriginalLine = Math.floor(ratio * originalLine.length);
130
+ originalStartIndex += offsetInOriginalLine;
131
+ // Find the actual match by looking for content that normalizes to our search
132
+ // Try different lengths around the expected position
133
+ const searchLength = search.length;
134
+ const minLength = Math.floor(searchLength * 0.8);
135
+ const maxLength = Math.ceil(searchLength * 1.5);
136
+ for (let len = searchLength - 50; len <= searchLength + 200; len++) {
137
+ const candidate = content.substring(originalStartIndex, originalStartIndex + len);
138
+ if (normalizeWhitespace(candidate) === normalizedSearch) {
139
+ return {
140
+ found: true,
141
+ startIndex: originalStartIndex,
142
+ endIndex: originalStartIndex + len,
143
+ confidence: 0.95,
144
+ originalText: candidate,
145
+ matchType: 'normalized'
146
+ };
147
+ }
148
+ }
149
+ // Fallback: use estimated length
150
+ return {
151
+ found: true,
152
+ startIndex: originalStartIndex,
153
+ endIndex: originalStartIndex + search.length,
154
+ confidence: 0.85,
155
+ originalText: content.substring(originalStartIndex, originalStartIndex + search.length),
156
+ matchType: 'normalized'
157
+ };
158
+ }
159
+ /**
160
+ * Fuzzy search using Levenshtein distance
161
+ * Finds best match even with typos or small changes
162
+ * Optimized with sampling and early bailout to prevent hanging on large files
163
+ */
164
+ function fuzzySearch(content, search, threshold = 0.85) {
165
+ const searchLength = search.length;
166
+ const minLength = Math.floor(searchLength * 0.7);
167
+ const maxLength = Math.ceil(searchLength * 1.3);
168
+ let bestMatch = null;
169
+ // Performance optimization: Use sampling for very large files
170
+ // If content is > 100KB and search is > 100 chars, sample every N characters
171
+ const contentSize = content.length;
172
+ const shouldSample = contentSize > 100000 && searchLength > 100;
173
+ const step = shouldSample ? Math.max(1, Math.floor(searchLength / 4)) : 1;
174
+ // Limit iterations to prevent infinite loops on huge files
175
+ const maxIterations = Math.min(contentSize - minLength, 50000);
176
+ let iterationCount = 0;
177
+ // Slide a window across content
178
+ for (let i = 0; i <= content.length - minLength; i += step) {
179
+ iterationCount++;
180
+ // Safety: bail out after max iterations
181
+ if (iterationCount > maxIterations) {
182
+ break;
183
+ }
184
+ for (let len = minLength; len <= maxLength && i + len <= content.length; len++) {
185
+ const candidate = content.substring(i, i + len);
186
+ const score = similarityScore(search, candidate);
187
+ if (score >= threshold) {
188
+ if (!bestMatch || score > bestMatch.confidence) {
189
+ bestMatch = {
190
+ found: true,
191
+ startIndex: i,
192
+ endIndex: i + len,
193
+ confidence: score,
194
+ originalText: candidate,
195
+ matchType: 'fuzzy'
196
+ };
197
+ // If we found a near-perfect match, return immediately
198
+ if (score >= 0.98) {
199
+ return bestMatch;
200
+ }
201
+ }
202
+ }
203
+ }
204
+ }
205
+ return bestMatch;
206
+ }
207
+ /**
208
+ * Context-aware search
209
+ * Uses surrounding lines as anchors to find the target block
210
+ */
211
+ function contextAwareSearch(content, search, contextLines = 3) {
212
+ const searchLines = search.split('\n');
213
+ if (searchLines.length < contextLines * 2 + 1) {
214
+ // Not enough context, fall back to normalized search
215
+ return normalizedSearch(content, search);
216
+ }
217
+ const beforeContext = searchLines.slice(0, contextLines).join('\n');
218
+ const afterContext = searchLines.slice(-contextLines).join('\n');
219
+ const target = searchLines.slice(contextLines, -contextLines).join('\n');
220
+ const contentLines = content.split('\n');
221
+ // Find before context
222
+ const normalizedBefore = normalizeWhitespace(beforeContext);
223
+ let beforeIndex = -1;
224
+ for (let i = 0; i <= contentLines.length - contextLines; i++) {
225
+ const candidate = contentLines.slice(i, i + contextLines).join('\n');
226
+ if (normalizeWhitespace(candidate) === normalizedBefore) {
227
+ beforeIndex = i;
228
+ break;
229
+ }
230
+ }
231
+ if (beforeIndex === -1)
232
+ return null;
233
+ // Find after context starting from after beforeIndex
234
+ const normalizedAfter = normalizeWhitespace(afterContext);
235
+ let afterIndex = -1;
236
+ for (let i = beforeIndex + contextLines; i <= contentLines.length - contextLines; i++) {
237
+ const candidate = contentLines.slice(i, i + contextLines).join('\n');
238
+ if (normalizeWhitespace(candidate) === normalizedAfter) {
239
+ afterIndex = i;
240
+ break;
241
+ }
242
+ }
243
+ if (afterIndex === -1)
244
+ return null;
245
+ // Extract the middle section
246
+ const startLine = beforeIndex + contextLines;
247
+ const endLine = afterIndex;
248
+ const matchedText = contentLines.slice(startLine, endLine).join('\n');
249
+ // Calculate character positions
250
+ let startIndex = 0;
251
+ for (let i = 0; i < startLine; i++) {
252
+ startIndex += contentLines[i].length + 1; // +1 for newline
253
+ }
254
+ let endIndex = startIndex;
255
+ for (let i = startLine; i < endLine; i++) {
256
+ endIndex += contentLines[i].length + 1;
257
+ }
258
+ return {
259
+ found: true,
260
+ startIndex,
261
+ endIndex: endIndex - 1, // Remove last newline
262
+ confidence: 0.98,
263
+ originalText: matchedText,
264
+ matchType: 'context'
265
+ };
266
+ }
267
+ /**
268
+ * Main search function that tries multiple strategies
269
+ */
270
+ function smartSearch(content, search, mode = 'auto') {
271
+ // Try exact match first (fastest)
272
+ if (mode === 'exact' || mode === 'auto') {
273
+ const exactResult = exactSearch(content, search);
274
+ if (exactResult)
275
+ return exactResult;
276
+ }
277
+ // Try normalized match (handles whitespace)
278
+ if (mode === 'normalized' || mode === 'auto') {
279
+ const normalizedResult = normalizedSearch(content, search);
280
+ if (normalizedResult)
281
+ return normalizedResult;
282
+ }
283
+ // Try context-aware if search has enough lines
284
+ if (mode === 'auto' && search.split('\n').length >= 7) {
285
+ const contextResult = contextAwareSearch(content, search);
286
+ if (contextResult)
287
+ return contextResult;
288
+ }
289
+ // Try fuzzy match (most expensive, last resort)
290
+ if (mode === 'fuzzy' || mode === 'auto') {
291
+ const fuzzyResult = fuzzySearch(content, search, 0.85);
292
+ if (fuzzyResult)
293
+ return fuzzyResult;
294
+ }
295
+ return null;
296
+ }
297
+ /**
298
+ * Find similar blocks in content to help with debugging
299
+ */
300
+ function findSimilarBlocks(content, search, topN = 3) {
301
+ const searchLength = search.length;
302
+ const windowSize = Math.floor(searchLength * 1.2);
303
+ const contentLines = content.split('\n');
304
+ const searchLineCount = search.split('\n').length;
305
+ const candidates = [];
306
+ // Sample blocks of similar size
307
+ for (let i = 0; i <= contentLines.length - searchLineCount; i++) {
308
+ const blockLines = contentLines.slice(i, i + searchLineCount);
309
+ const blockText = blockLines.join('\n');
310
+ const similarity = similarityScore(normalizeWhitespace(search), normalizeWhitespace(blockText));
311
+ if (similarity > 0.3) { // Only consider somewhat similar blocks
312
+ candidates.push({
313
+ text: blockText,
314
+ similarity,
315
+ startLine: i + 1,
316
+ endLine: i + searchLineCount
317
+ });
318
+ }
319
+ }
320
+ // Sort by similarity and return top N
321
+ candidates.sort((a, b) => b.similarity - a.similarity);
322
+ return candidates.slice(0, topN);
323
+ }
324
+ /**
325
+ * Get helpful error message with suggestions
326
+ */
327
+ function getSearchFailureMessage(content, search) {
328
+ const similar = findSimilarBlocks(content, search, 3);
329
+ let message = 'Search block not found in file.\n\n';
330
+ if (similar.length > 0) {
331
+ message += 'Most similar blocks found:\n\n';
332
+ similar.forEach((block, idx) => {
333
+ message += `${idx + 1}. Lines ${block.startLine}-${block.endLine} (${Math.round(block.similarity * 100)}% similar):\n`;
334
+ message += '```\n';
335
+ message += block.text.split('\n').slice(0, 5).join('\n');
336
+ if (block.text.split('\n').length > 5) {
337
+ message += '\n... (truncated)';
338
+ }
339
+ message += '\n```\n\n';
340
+ });
341
+ }
342
+ message += 'Tips:\n';
343
+ message += '- Include more context lines (3-5 lines before/after) to make search unique\n';
344
+ message += '- Check for typos in your search block\n';
345
+ message += '- Verify the file hasn\'t changed since you last read it\n';
346
+ message += '- Try using read_file to see current file contents\n';
347
+ return message;
348
+ }
349
+ //# sourceMappingURL=fuzzyMatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzzyMatcher.js","sourceRoot":"","sources":["../src/fuzzyMatcher.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -32,11 +32,29 @@ declare function replaceFunctionTests(testFilePath: string, functionName: string
32
32
  declare function deleteLines(filePath: string, startLine: number, endLine: number): Promise<any>;
33
33
  declare function insertLines(filePath: string, lineNumber: number, content: string): Promise<any>;
34
34
  declare function replaceLines(filePath: string, startLine: number, endLine: number, newContent: string): Promise<any>;
35
+ /**
36
+ * Search and replace a code block using fuzzy matching
37
+ * Much more reliable than line-based editing!
38
+ */
39
+ declare function searchReplaceBlock(filePath: string, search: string, replace: string, matchMode?: 'exact' | 'normalized' | 'fuzzy'): Promise<any>;
40
+ /**
41
+ * Insert content at a specific position in the file
42
+ * Simpler than search_replace_block for adding new content
43
+ */
44
+ declare function insertAtPosition(filePath: string, content: string, position?: 'beginning' | 'end' | 'after_imports' | 'before_first_describe', afterMarker?: string): Promise<any>;
35
45
  declare function executeTool(toolName: string, args: any): Promise<any>;
36
46
  declare function generateTests(sourceFile: string): Promise<string>;
37
47
  declare function generateTestsForFolder(): Promise<void>;
48
+ /** [Not useful, introduce side-effect]
49
+ * Validate and fix the complete test file after all functions are processed
50
+ * Runs full test suite and fixes file-level issues (mock pollution, imports, etc)
51
+ */
52
+ declare function validateAndFixCompleteTestFile(sourceFile: string, testFilePath: string, functionNames: string[]): Promise<void>;
53
+ /**
54
+ * Generate tests for multiple functions, one at a time
55
+ */
38
56
  declare function generateTestsForFunctions(sourceFile: string, functionNames: string[]): Promise<string>;
39
57
  declare function generateTestsForFunction(): Promise<void>;
40
58
  declare function main(): Promise<void>;
41
- export { main, generateTests, generateTestsForFolder, generateTestsForFunction, generateTestsForFunctions, executeTool, analyzeFileAST, getFunctionAST, getImportsAST, getTypeDefinitions, getClassMethods, replaceFunctionTests, deleteLines, insertLines, replaceLines, CodebaseIndexer, TOOLS };
59
+ export { main, generateTests, generateTestsForFolder, generateTestsForFunction, generateTestsForFunctions, validateAndFixCompleteTestFile, executeTool, analyzeFileAST, getFunctionAST, getImportsAST, getTypeDefinitions, getClassMethods, replaceFunctionTests, searchReplaceBlock, insertAtPosition, deleteLines, insertLines, replaceLines, CodebaseIndexer, TOOLS };
42
60
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAaH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AA6BpD,UAAU,IAAI;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAmED,QAAA,MAAM,KAAK,EAAE,IAAI,EAuVhB,CAAC;AA2BF,iBAAS,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CA4J7C;AAqDD,iBAAS,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,GAAG,CAyCnE;AA4ED,iBAAS,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CA0D5C;AAED,iBAAS,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAuEjD;AAED,iBAAS,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,CAoDjE;AA+LD,iBAAe,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAiJpH;AA6KD,iBAAe,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAkC7F;AAED,iBAAe,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA2B9F;AAED,iBAAe,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAkClH;AAyBD,iBAAe,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAwHpE;AAoRD,iBAAe,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+ehE;AAmCD,iBAAe,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA2DrD;AAGD,iBAAe,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAoXrG;AAED,iBAAe,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CA8DvD;AAED,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAmJnC;AAQD,OAAO,EACL,IAAI,EACJ,aAAa,EACb,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,WAAW,EACX,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,YAAY,EACZ,eAAe,EACf,KAAK,EACN,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}