grok-cli-hurry-mode 1.0.1 → 1.0.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.
- package/README.md +60 -12
- package/dist/agent/grok-agent.d.ts +5 -0
- package/dist/agent/grok-agent.js +17 -1
- package/dist/agent/grok-agent.js.map +1 -1
- package/dist/grok/tools.js +257 -0
- package/dist/grok/tools.js.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/intelligence/ast-parser.d.ts +141 -0
- package/dist/tools/intelligence/ast-parser.js +619 -0
- package/dist/tools/intelligence/ast-parser.js.map +1 -0
- package/dist/tools/intelligence/code-context.d.ts +181 -0
- package/dist/tools/intelligence/code-context.js +573 -0
- package/dist/tools/intelligence/code-context.js.map +1 -0
- package/dist/tools/intelligence/dependency-analyzer.d.ts +124 -0
- package/dist/tools/intelligence/dependency-analyzer.js +469 -0
- package/dist/tools/intelligence/dependency-analyzer.js.map +1 -0
- package/dist/tools/intelligence/index.d.ts +10 -0
- package/dist/tools/intelligence/index.js +6 -0
- package/dist/tools/intelligence/index.js.map +1 -0
- package/dist/tools/intelligence/refactoring-assistant.d.ts +196 -0
- package/dist/tools/intelligence/refactoring-assistant.js +612 -0
- package/dist/tools/intelligence/refactoring-assistant.js.map +1 -0
- package/dist/tools/intelligence/symbol-search.d.ts +121 -0
- package/dist/tools/intelligence/symbol-search.js +336 -0
- package/dist/tools/intelligence/symbol-search.js.map +1 -0
- package/package.json +17 -3
@@ -0,0 +1,612 @@
|
|
1
|
+
import { ASTParserTool } from "./ast-parser.js";
|
2
|
+
import { SymbolSearchTool } from "./symbol-search.js";
|
3
|
+
import { MultiFileEditorTool } from "../advanced/multi-file-editor.js";
|
4
|
+
import { OperationHistoryTool } from "../advanced/operation-history.js";
|
5
|
+
import fs from "fs-extra";
|
6
|
+
import path from "path";
|
7
|
+
export class RefactoringAssistantTool {
|
8
|
+
constructor() {
|
9
|
+
this.name = "refactoring_assistant";
|
10
|
+
this.description = "Perform safe code refactoring operations including rename, extract, inline, and move operations";
|
11
|
+
this.astParser = new ASTParserTool();
|
12
|
+
this.symbolSearch = new SymbolSearchTool();
|
13
|
+
this.multiFileEditor = new MultiFileEditorTool();
|
14
|
+
this.operationHistory = new OperationHistoryTool();
|
15
|
+
}
|
16
|
+
async execute(args) {
|
17
|
+
try {
|
18
|
+
const { operation, ...operationArgs } = args;
|
19
|
+
if (!operation) {
|
20
|
+
throw new Error("Refactoring operation type is required");
|
21
|
+
}
|
22
|
+
let result;
|
23
|
+
switch (operation) {
|
24
|
+
case 'rename':
|
25
|
+
result = await this.performRename(operationArgs);
|
26
|
+
break;
|
27
|
+
case 'extract_function':
|
28
|
+
result = await this.performExtractFunction(operationArgs);
|
29
|
+
break;
|
30
|
+
case 'extract_variable':
|
31
|
+
result = await this.performExtractVariable(operationArgs);
|
32
|
+
break;
|
33
|
+
case 'inline_function':
|
34
|
+
result = await this.performInlineFunction(operationArgs);
|
35
|
+
break;
|
36
|
+
case 'inline_variable':
|
37
|
+
result = await this.performInlineVariable(operationArgs);
|
38
|
+
break;
|
39
|
+
case 'move_function':
|
40
|
+
case 'move_class':
|
41
|
+
result = await this.performMove(operationArgs);
|
42
|
+
break;
|
43
|
+
default:
|
44
|
+
throw new Error(`Unsupported refactoring operation: ${operation}`);
|
45
|
+
}
|
46
|
+
return {
|
47
|
+
success: true,
|
48
|
+
output: JSON.stringify(result, null, 2)
|
49
|
+
};
|
50
|
+
}
|
51
|
+
catch (error) {
|
52
|
+
return {
|
53
|
+
success: false,
|
54
|
+
error: error instanceof Error ? error.message : String(error)
|
55
|
+
};
|
56
|
+
}
|
57
|
+
}
|
58
|
+
async performRename(request) {
|
59
|
+
const { symbolName, newName, filePath, scope, includeComments, includeStrings } = request;
|
60
|
+
if (!symbolName || !newName) {
|
61
|
+
throw new Error("Symbol name and new name are required for rename operation");
|
62
|
+
}
|
63
|
+
// Validate new name
|
64
|
+
if (!this.isValidIdentifier(newName)) {
|
65
|
+
throw new Error(`Invalid identifier: ${newName}`);
|
66
|
+
}
|
67
|
+
// Find all occurrences of the symbol
|
68
|
+
const searchPath = scope === 'file' && filePath ? path.dirname(filePath) : process.cwd();
|
69
|
+
const searchResult = await this.symbolSearch.execute({
|
70
|
+
query: symbolName,
|
71
|
+
searchPath,
|
72
|
+
includeUsages: true,
|
73
|
+
fuzzyMatch: false,
|
74
|
+
caseSensitive: true
|
75
|
+
});
|
76
|
+
if (!searchResult.success || !searchResult.output) {
|
77
|
+
throw new Error("Failed to find symbol occurrences");
|
78
|
+
}
|
79
|
+
const parsed = JSON.parse(searchResult.output);
|
80
|
+
if (!parsed.success) {
|
81
|
+
throw new Error("Failed to find symbol occurrences");
|
82
|
+
}
|
83
|
+
const symbolRefs = parsed.result.symbols;
|
84
|
+
// Filter by scope
|
85
|
+
const relevantRefs = scope === 'file' && filePath
|
86
|
+
? symbolRefs.filter(ref => ref.filePath === filePath)
|
87
|
+
: symbolRefs;
|
88
|
+
if (relevantRefs.length === 0) {
|
89
|
+
throw new Error(`Symbol '${symbolName}' not found in specified scope`);
|
90
|
+
}
|
91
|
+
// Perform safety analysis
|
92
|
+
const safety = await this.analyzeSafety(relevantRefs, 'rename');
|
93
|
+
// Generate changes
|
94
|
+
const fileChanges = [];
|
95
|
+
const affectedFiles = new Set();
|
96
|
+
for (const ref of relevantRefs) {
|
97
|
+
affectedFiles.add(ref.filePath);
|
98
|
+
const changes = await this.generateRenameChanges(ref, symbolName, newName, includeComments, includeStrings);
|
99
|
+
if (changes.length > 0) {
|
100
|
+
fileChanges.push({
|
101
|
+
filePath: ref.filePath,
|
102
|
+
changes
|
103
|
+
});
|
104
|
+
}
|
105
|
+
}
|
106
|
+
// Generate preview
|
107
|
+
const preview = this.generatePreview(fileChanges, 'rename', symbolName, newName);
|
108
|
+
return {
|
109
|
+
type: 'rename',
|
110
|
+
description: `Rename '${symbolName}' to '${newName}' (${scope} scope)`,
|
111
|
+
files: fileChanges,
|
112
|
+
preview,
|
113
|
+
safety
|
114
|
+
};
|
115
|
+
}
|
116
|
+
async performExtractFunction(request) {
|
117
|
+
const { filePath, startLine, endLine, functionName, parameters = [], returnType } = request;
|
118
|
+
if (!filePath || startLine === undefined || endLine === undefined || !functionName) {
|
119
|
+
throw new Error("File path, line range, and function name are required");
|
120
|
+
}
|
121
|
+
if (!await fs.pathExists(filePath)) {
|
122
|
+
throw new Error(`File not found: ${filePath}`);
|
123
|
+
}
|
124
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
125
|
+
const lines = content.split('\n');
|
126
|
+
if (startLine < 0 || endLine >= lines.length || startLine > endLine) {
|
127
|
+
throw new Error("Invalid line range");
|
128
|
+
}
|
129
|
+
// Extract the code block
|
130
|
+
const extractedCode = lines.slice(startLine, endLine + 1);
|
131
|
+
const extractedText = extractedCode.join('\n');
|
132
|
+
// Analyze the extracted code for variables
|
133
|
+
const analysis = await this.analyzeExtractedCode(extractedText, filePath);
|
134
|
+
// Generate function signature
|
135
|
+
const functionSignature = this.generateFunctionSignature(functionName, analysis.parameters.length > 0 ? analysis.parameters : parameters, returnType || analysis.inferredReturnType);
|
136
|
+
// Create the new function
|
137
|
+
const newFunction = this.createExtractedFunction(functionSignature, extractedText, analysis.localVariables);
|
138
|
+
// Generate function call
|
139
|
+
const functionCall = this.generateFunctionCall(functionName, analysis.parameters, analysis.returnVariable);
|
140
|
+
// Create changes
|
141
|
+
const changes = [
|
142
|
+
// Replace extracted code with function call
|
143
|
+
{
|
144
|
+
startLine,
|
145
|
+
startColumn: 0,
|
146
|
+
endLine,
|
147
|
+
endColumn: lines[endLine].length,
|
148
|
+
oldText: extractedText,
|
149
|
+
newText: functionCall,
|
150
|
+
type: 'replace'
|
151
|
+
},
|
152
|
+
// Insert new function (simplified - should find appropriate location)
|
153
|
+
{
|
154
|
+
startLine: endLine + 1,
|
155
|
+
startColumn: 0,
|
156
|
+
endLine: endLine + 1,
|
157
|
+
endColumn: 0,
|
158
|
+
oldText: '',
|
159
|
+
newText: '\n' + newFunction + '\n',
|
160
|
+
type: 'insert'
|
161
|
+
}
|
162
|
+
];
|
163
|
+
const safety = {
|
164
|
+
riskLevel: 'medium',
|
165
|
+
potentialIssues: [
|
166
|
+
'Variable scope changes',
|
167
|
+
'Side effects may be altered',
|
168
|
+
'Error handling context may change'
|
169
|
+
],
|
170
|
+
affectedFiles: 1,
|
171
|
+
affectedSymbols: 1,
|
172
|
+
requiresTests: true,
|
173
|
+
breakingChanges: false
|
174
|
+
};
|
175
|
+
const fileChanges = [{
|
176
|
+
filePath,
|
177
|
+
changes
|
178
|
+
}];
|
179
|
+
const preview = this.generatePreview(fileChanges, 'extract_function', extractedText, functionName);
|
180
|
+
return {
|
181
|
+
type: 'extract_function',
|
182
|
+
description: `Extract function '${functionName}' from lines ${startLine}-${endLine}`,
|
183
|
+
files: fileChanges,
|
184
|
+
preview,
|
185
|
+
safety
|
186
|
+
};
|
187
|
+
}
|
188
|
+
async performExtractVariable(args) {
|
189
|
+
const { filePath, startLine, startColumn, endLine, endColumn, variableName, variableType } = args;
|
190
|
+
if (!filePath || !variableName) {
|
191
|
+
throw new Error("File path and variable name are required");
|
192
|
+
}
|
193
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
194
|
+
const lines = content.split('\n');
|
195
|
+
// Extract expression
|
196
|
+
const startLineContent = lines[startLine];
|
197
|
+
const endLineContent = lines[endLine];
|
198
|
+
let expression;
|
199
|
+
if (startLine === endLine) {
|
200
|
+
expression = startLineContent.substring(startColumn, endColumn);
|
201
|
+
}
|
202
|
+
else {
|
203
|
+
expression = startLineContent.substring(startColumn) + '\n' +
|
204
|
+
lines.slice(startLine + 1, endLine).join('\n') + '\n' +
|
205
|
+
endLineContent.substring(0, endColumn);
|
206
|
+
}
|
207
|
+
// Generate variable declaration
|
208
|
+
const indent = this.getIndentation(startLineContent);
|
209
|
+
const varDeclaration = `${indent}const ${variableName}${variableType ? `: ${variableType}` : ''} = ${expression.trim()};`;
|
210
|
+
const changes = [
|
211
|
+
// Insert variable declaration
|
212
|
+
{
|
213
|
+
startLine,
|
214
|
+
startColumn: 0,
|
215
|
+
endLine: startLine,
|
216
|
+
endColumn: 0,
|
217
|
+
oldText: '',
|
218
|
+
newText: varDeclaration + '\n',
|
219
|
+
type: 'insert'
|
220
|
+
},
|
221
|
+
// Replace expression with variable
|
222
|
+
{
|
223
|
+
startLine: startLine + 1, // Account for inserted line
|
224
|
+
startColumn,
|
225
|
+
endLine: endLine + 1,
|
226
|
+
endColumn,
|
227
|
+
oldText: expression,
|
228
|
+
newText: variableName,
|
229
|
+
type: 'replace'
|
230
|
+
}
|
231
|
+
];
|
232
|
+
const safety = {
|
233
|
+
riskLevel: 'low',
|
234
|
+
potentialIssues: ['Variable name conflicts'],
|
235
|
+
affectedFiles: 1,
|
236
|
+
affectedSymbols: 1,
|
237
|
+
requiresTests: false,
|
238
|
+
breakingChanges: false
|
239
|
+
};
|
240
|
+
const fileChanges = [{
|
241
|
+
filePath,
|
242
|
+
changes
|
243
|
+
}];
|
244
|
+
const preview = this.generatePreview(fileChanges, 'extract_variable', expression, variableName);
|
245
|
+
return {
|
246
|
+
type: 'extract_variable',
|
247
|
+
description: `Extract variable '${variableName}' from expression`,
|
248
|
+
files: fileChanges,
|
249
|
+
preview,
|
250
|
+
safety
|
251
|
+
};
|
252
|
+
}
|
253
|
+
async performInlineFunction(request) {
|
254
|
+
const { symbolName, filePath, preserveComments } = request;
|
255
|
+
// Find function definition
|
256
|
+
const parseResult = await this.astParser.execute({
|
257
|
+
filePath,
|
258
|
+
includeSymbols: true,
|
259
|
+
symbolTypes: ['function']
|
260
|
+
});
|
261
|
+
if (!parseResult.success || !parseResult.output) {
|
262
|
+
throw new Error("Failed to parse file");
|
263
|
+
}
|
264
|
+
const parsed = JSON.parse(parseResult.output);
|
265
|
+
if (!parsed.success) {
|
266
|
+
throw new Error("Failed to parse file");
|
267
|
+
}
|
268
|
+
const symbols = parsed.result.symbols;
|
269
|
+
const functionSymbol = symbols.find(s => s.name === symbolName && s.type === 'function');
|
270
|
+
if (!functionSymbol) {
|
271
|
+
throw new Error(`Function '${symbolName}' not found`);
|
272
|
+
}
|
273
|
+
// Get function body
|
274
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
275
|
+
const lines = content.split('\n');
|
276
|
+
const functionLines = lines.slice(functionSymbol.startPosition.row, functionSymbol.endPosition.row + 1);
|
277
|
+
const functionBody = this.extractFunctionBody(functionLines.join('\n'));
|
278
|
+
// Find all calls to this function
|
279
|
+
const usageSearch = await this.symbolSearch.execute({
|
280
|
+
query: symbolName,
|
281
|
+
searchPath: path.dirname(filePath),
|
282
|
+
includeUsages: true,
|
283
|
+
fuzzyMatch: false
|
284
|
+
});
|
285
|
+
if (!usageSearch.success || !usageSearch.output) {
|
286
|
+
throw new Error("Failed to find function usages");
|
287
|
+
}
|
288
|
+
const usageParsed = JSON.parse(usageSearch.output);
|
289
|
+
if (!usageParsed.success) {
|
290
|
+
throw new Error("Failed to find function usages");
|
291
|
+
}
|
292
|
+
const usages = usageParsed.result.symbols;
|
293
|
+
const functionCalls = this.findFunctionCalls(usages, symbolName);
|
294
|
+
// Generate inline replacements
|
295
|
+
const fileChanges = [];
|
296
|
+
const affectedFiles = new Set();
|
297
|
+
for (const call of functionCalls) {
|
298
|
+
affectedFiles.add(call.filePath);
|
299
|
+
const inlinedCode = this.inlineFunction(functionBody, call.arguments);
|
300
|
+
// Add change to replace function call with inlined code
|
301
|
+
const changes = [{
|
302
|
+
startLine: call.line,
|
303
|
+
startColumn: call.column,
|
304
|
+
endLine: call.line,
|
305
|
+
endColumn: call.column + call.text.length,
|
306
|
+
oldText: call.text,
|
307
|
+
newText: inlinedCode,
|
308
|
+
type: 'replace'
|
309
|
+
}];
|
310
|
+
fileChanges.push({
|
311
|
+
filePath: call.filePath,
|
312
|
+
changes
|
313
|
+
});
|
314
|
+
}
|
315
|
+
// Remove function definition
|
316
|
+
const definitionChanges = [{
|
317
|
+
startLine: functionSymbol.startPosition.row,
|
318
|
+
startColumn: 0,
|
319
|
+
endLine: functionSymbol.endPosition.row + 1,
|
320
|
+
endColumn: 0,
|
321
|
+
oldText: functionLines.join('\n'),
|
322
|
+
newText: preserveComments ? this.extractComments(functionLines.join('\n')) : '',
|
323
|
+
type: 'replace'
|
324
|
+
}];
|
325
|
+
fileChanges.push({
|
326
|
+
filePath,
|
327
|
+
changes: definitionChanges
|
328
|
+
});
|
329
|
+
const safety = {
|
330
|
+
riskLevel: 'high',
|
331
|
+
potentialIssues: [
|
332
|
+
'Code duplication',
|
333
|
+
'Variable scope changes',
|
334
|
+
'Performance implications',
|
335
|
+
'Debugging complexity'
|
336
|
+
],
|
337
|
+
affectedFiles: affectedFiles.size,
|
338
|
+
affectedSymbols: functionCalls.length + 1,
|
339
|
+
requiresTests: true,
|
340
|
+
breakingChanges: false
|
341
|
+
};
|
342
|
+
const preview = this.generatePreview(fileChanges, 'inline_function', symbolName, 'inlined code');
|
343
|
+
return {
|
344
|
+
type: 'inline_function',
|
345
|
+
description: `Inline function '${symbolName}' at all call sites`,
|
346
|
+
files: fileChanges,
|
347
|
+
preview,
|
348
|
+
safety
|
349
|
+
};
|
350
|
+
}
|
351
|
+
async performInlineVariable(request) {
|
352
|
+
// Similar to inline function but for variables
|
353
|
+
throw new Error("Inline variable not yet implemented");
|
354
|
+
}
|
355
|
+
async performMove(request) {
|
356
|
+
// Move function or class to different file
|
357
|
+
throw new Error("Move operation not yet implemented");
|
358
|
+
}
|
359
|
+
// Helper methods
|
360
|
+
isValidIdentifier(name) {
|
361
|
+
return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);
|
362
|
+
}
|
363
|
+
async analyzeSafety(refs, operation) {
|
364
|
+
const affectedFiles = new Set(refs.map(ref => ref.filePath)).size;
|
365
|
+
const affectedSymbols = refs.length;
|
366
|
+
let riskLevel = 'low';
|
367
|
+
const potentialIssues = [];
|
368
|
+
if (affectedFiles > 5) {
|
369
|
+
riskLevel = 'medium';
|
370
|
+
potentialIssues.push('Many files affected');
|
371
|
+
}
|
372
|
+
if (affectedSymbols > 20) {
|
373
|
+
riskLevel = 'high';
|
374
|
+
potentialIssues.push('Many symbol occurrences');
|
375
|
+
}
|
376
|
+
if (operation === 'rename') {
|
377
|
+
potentialIssues.push('Potential naming conflicts');
|
378
|
+
}
|
379
|
+
return {
|
380
|
+
riskLevel,
|
381
|
+
potentialIssues,
|
382
|
+
affectedFiles,
|
383
|
+
affectedSymbols,
|
384
|
+
requiresTests: affectedFiles > 1,
|
385
|
+
breakingChanges: false
|
386
|
+
};
|
387
|
+
}
|
388
|
+
async generateRenameChanges(ref, oldName, newName, includeComments, includeStrings) {
|
389
|
+
const changes = [];
|
390
|
+
const content = await fs.readFile(ref.filePath, 'utf-8');
|
391
|
+
const lines = content.split('\n');
|
392
|
+
// Simple text replacement for now
|
393
|
+
for (let i = 0; i < lines.length; i++) {
|
394
|
+
const line = lines[i];
|
395
|
+
// Skip comments and strings if not requested
|
396
|
+
if (!includeComments && (line.trim().startsWith('//') || line.trim().startsWith('*'))) {
|
397
|
+
continue;
|
398
|
+
}
|
399
|
+
if (!includeStrings && (line.includes('"') || line.includes("'"))) {
|
400
|
+
continue;
|
401
|
+
}
|
402
|
+
// Find word boundaries to avoid partial matches
|
403
|
+
const regex = new RegExp(`\\b${oldName}\\b`, 'g');
|
404
|
+
let match;
|
405
|
+
while ((match = regex.exec(line)) !== null) {
|
406
|
+
changes.push({
|
407
|
+
startLine: i,
|
408
|
+
startColumn: match.index,
|
409
|
+
endLine: i,
|
410
|
+
endColumn: match.index + oldName.length,
|
411
|
+
oldText: oldName,
|
412
|
+
newText: newName,
|
413
|
+
type: 'replace'
|
414
|
+
});
|
415
|
+
}
|
416
|
+
}
|
417
|
+
return changes;
|
418
|
+
}
|
419
|
+
async analyzeExtractedCode(code, filePath) {
|
420
|
+
// Analyze variables, return statements, etc.
|
421
|
+
const lines = code.split('\n');
|
422
|
+
const parameters = [];
|
423
|
+
const localVariables = [];
|
424
|
+
let inferredReturnType = 'void';
|
425
|
+
let returnVariable;
|
426
|
+
// Simple analysis - could be enhanced with AST parsing
|
427
|
+
for (const line of lines) {
|
428
|
+
if (line.includes('return ')) {
|
429
|
+
const returnMatch = line.match(/return\s+([^;]+)/);
|
430
|
+
if (returnMatch) {
|
431
|
+
returnVariable = returnMatch[1].trim();
|
432
|
+
inferredReturnType = 'any'; // Could infer better
|
433
|
+
}
|
434
|
+
}
|
435
|
+
}
|
436
|
+
return {
|
437
|
+
parameters,
|
438
|
+
localVariables,
|
439
|
+
inferredReturnType,
|
440
|
+
returnVariable
|
441
|
+
};
|
442
|
+
}
|
443
|
+
generateFunctionSignature(name, parameters, returnType) {
|
444
|
+
const params = parameters.map(p => `${p.name}${p.type ? `: ${p.type}` : ''}${p.defaultValue ? ` = ${p.defaultValue}` : ''}`).join(', ');
|
445
|
+
return `function ${name}(${params})${returnType !== 'void' ? `: ${returnType}` : ''}`;
|
446
|
+
}
|
447
|
+
createExtractedFunction(signature, body, localVars) {
|
448
|
+
return `${signature} {\n${body}\n}`;
|
449
|
+
}
|
450
|
+
generateFunctionCall(name, parameters, returnVar) {
|
451
|
+
const args = parameters.map(p => p.name).join(', ');
|
452
|
+
const call = `${name}(${args})`;
|
453
|
+
return returnVar ? `const ${returnVar} = ${call};` : `${call};`;
|
454
|
+
}
|
455
|
+
getIndentation(line) {
|
456
|
+
const match = line.match(/^(\s*)/);
|
457
|
+
return match ? match[1] : '';
|
458
|
+
}
|
459
|
+
extractFunctionBody(functionCode) {
|
460
|
+
// Extract just the body content between { }
|
461
|
+
const lines = functionCode.split('\n');
|
462
|
+
const bodyStart = lines.findIndex(line => line.includes('{')) + 1;
|
463
|
+
const bodyEnd = lines.length - 1; // Assume last line has }
|
464
|
+
return lines.slice(bodyStart, bodyEnd).join('\n');
|
465
|
+
}
|
466
|
+
findFunctionCalls(usages, functionName) {
|
467
|
+
// Find actual function calls vs just references
|
468
|
+
const calls = [];
|
469
|
+
for (const usage of usages) {
|
470
|
+
for (const u of usage.usages) {
|
471
|
+
if (u.type === 'call') {
|
472
|
+
calls.push({
|
473
|
+
filePath: usage.filePath,
|
474
|
+
line: u.line,
|
475
|
+
column: u.column,
|
476
|
+
text: u.context,
|
477
|
+
arguments: [] // Would parse actual arguments
|
478
|
+
});
|
479
|
+
}
|
480
|
+
}
|
481
|
+
}
|
482
|
+
return calls;
|
483
|
+
}
|
484
|
+
inlineFunction(functionBody, args) {
|
485
|
+
// Replace parameters with arguments in function body
|
486
|
+
// This is a simplified implementation
|
487
|
+
return functionBody;
|
488
|
+
}
|
489
|
+
extractComments(code) {
|
490
|
+
const lines = code.split('\n');
|
491
|
+
const comments = lines.filter(line => line.trim().startsWith('//') ||
|
492
|
+
line.trim().startsWith('*') ||
|
493
|
+
line.trim().startsWith('/*'));
|
494
|
+
return comments.join('\n');
|
495
|
+
}
|
496
|
+
generatePreview(fileChanges, operation, oldValue, newValue) {
|
497
|
+
let preview = `${operation.toUpperCase()}: ${oldValue} → ${newValue}\n\n`;
|
498
|
+
for (const fileChange of fileChanges) {
|
499
|
+
preview += `File: ${fileChange.filePath}\n`;
|
500
|
+
preview += `Changes: ${fileChange.changes.length}\n`;
|
501
|
+
for (const change of fileChange.changes.slice(0, 3)) { // Show first 3 changes
|
502
|
+
preview += ` Line ${change.startLine}: ${change.oldText} → ${change.newText}\n`;
|
503
|
+
}
|
504
|
+
if (fileChange.changes.length > 3) {
|
505
|
+
preview += ` ... and ${fileChange.changes.length - 3} more changes\n`;
|
506
|
+
}
|
507
|
+
preview += '\n';
|
508
|
+
}
|
509
|
+
return preview;
|
510
|
+
}
|
511
|
+
getSchema() {
|
512
|
+
return {
|
513
|
+
type: "object",
|
514
|
+
properties: {
|
515
|
+
operation: {
|
516
|
+
type: "string",
|
517
|
+
enum: ["rename", "extract_function", "extract_variable", "inline_function", "inline_variable", "move_function", "move_class"],
|
518
|
+
description: "Type of refactoring operation to perform"
|
519
|
+
},
|
520
|
+
symbolName: {
|
521
|
+
type: "string",
|
522
|
+
description: "Name of symbol to refactor (for rename, inline, move operations)"
|
523
|
+
},
|
524
|
+
newName: {
|
525
|
+
type: "string",
|
526
|
+
description: "New name for symbol (for rename operation)"
|
527
|
+
},
|
528
|
+
filePath: {
|
529
|
+
type: "string",
|
530
|
+
description: "Path to file containing the symbol"
|
531
|
+
},
|
532
|
+
scope: {
|
533
|
+
type: "string",
|
534
|
+
enum: ["file", "project", "global"],
|
535
|
+
description: "Scope of refactoring operation",
|
536
|
+
default: "project"
|
537
|
+
},
|
538
|
+
includeComments: {
|
539
|
+
type: "boolean",
|
540
|
+
description: "Include comments in rename operation",
|
541
|
+
default: false
|
542
|
+
},
|
543
|
+
includeStrings: {
|
544
|
+
type: "boolean",
|
545
|
+
description: "Include string literals in rename operation",
|
546
|
+
default: false
|
547
|
+
},
|
548
|
+
startLine: {
|
549
|
+
type: "integer",
|
550
|
+
description: "Start line for extract operations"
|
551
|
+
},
|
552
|
+
endLine: {
|
553
|
+
type: "integer",
|
554
|
+
description: "End line for extract operations"
|
555
|
+
},
|
556
|
+
startColumn: {
|
557
|
+
type: "integer",
|
558
|
+
description: "Start column for extract variable operation"
|
559
|
+
},
|
560
|
+
endColumn: {
|
561
|
+
type: "integer",
|
562
|
+
description: "End column for extract variable operation"
|
563
|
+
},
|
564
|
+
functionName: {
|
565
|
+
type: "string",
|
566
|
+
description: "Name for extracted function"
|
567
|
+
},
|
568
|
+
variableName: {
|
569
|
+
type: "string",
|
570
|
+
description: "Name for extracted variable"
|
571
|
+
},
|
572
|
+
variableType: {
|
573
|
+
type: "string",
|
574
|
+
description: "Type annotation for extracted variable"
|
575
|
+
},
|
576
|
+
parameters: {
|
577
|
+
type: "array",
|
578
|
+
items: {
|
579
|
+
type: "object",
|
580
|
+
properties: {
|
581
|
+
name: { type: "string" },
|
582
|
+
type: { type: "string" },
|
583
|
+
defaultValue: { type: "string" }
|
584
|
+
},
|
585
|
+
required: ["name"]
|
586
|
+
},
|
587
|
+
description: "Parameters for extracted function"
|
588
|
+
},
|
589
|
+
returnType: {
|
590
|
+
type: "string",
|
591
|
+
description: "Return type for extracted function"
|
592
|
+
},
|
593
|
+
targetFile: {
|
594
|
+
type: "string",
|
595
|
+
description: "Target file for move operations"
|
596
|
+
},
|
597
|
+
createTargetFile: {
|
598
|
+
type: "boolean",
|
599
|
+
description: "Create target file if it doesn't exist",
|
600
|
+
default: false
|
601
|
+
},
|
602
|
+
preserveComments: {
|
603
|
+
type: "boolean",
|
604
|
+
description: "Preserve comments in inline operations",
|
605
|
+
default: true
|
606
|
+
}
|
607
|
+
},
|
608
|
+
required: ["operation"]
|
609
|
+
};
|
610
|
+
}
|
611
|
+
}
|
612
|
+
//# sourceMappingURL=refactoring-assistant.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"refactoring-assistant.js","sourceRoot":"","sources":["../../../src/tools/intelligence/refactoring-assistant.ts"],"names":[],"mappings":"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"}
|