Просмотр исходного кода

feat: add code action prompt handlers for explain, fix and improve code

sam hoang 11 месяцев назад
Родитель
Сommit
7c875f1fea
2 измененных файлов с 113 добавлено и 0 удалено
  1. 63 0
      src/core/prompts/__tests__/code-actions.test.ts
  2. 50 0
      src/core/prompts/code-actions.ts

+ 63 - 0
src/core/prompts/__tests__/code-actions.test.ts

@@ -0,0 +1,63 @@
+import { explainCodePrompt, fixCodePrompt, improveCodePrompt } from '../code-actions';
+
+describe('Code Action Prompts', () => {
+    const testFilePath = 'test/file.ts';
+    const testCode = 'function test() { return true; }';
+
+    describe('explainCodePrompt', () => {
+        it('should format explain prompt correctly', () => {
+            const prompt = explainCodePrompt(testFilePath, testCode);
+            
+            expect(prompt).toContain(`@/${testFilePath}`);
+            expect(prompt).toContain(testCode);
+            expect(prompt).toContain('purpose and functionality');
+            expect(prompt).toContain('Key components');
+            expect(prompt).toContain('Important patterns');
+        });
+    });
+
+    describe('fixCodePrompt', () => {
+        it('should format fix prompt without diagnostics', () => {
+            const prompt = fixCodePrompt(testFilePath, testCode);
+            
+            expect(prompt).toContain(`@/${testFilePath}`);
+            expect(prompt).toContain(testCode);
+            expect(prompt).toContain('Address all detected problems');
+            expect(prompt).not.toContain('Current problems detected');
+        });
+
+        it('should format fix prompt with diagnostics', () => {
+            const diagnostics = [
+                {
+                    source: 'eslint',
+                    message: 'Missing semicolon',
+                    code: 'semi'
+                },
+                {
+                    message: 'Unused variable',
+                    severity: 1
+                }
+            ];
+
+            const prompt = fixCodePrompt(testFilePath, testCode, diagnostics);
+            
+            expect(prompt).toContain('Current problems detected:');
+            expect(prompt).toContain('[eslint] Missing semicolon (semi)');
+            expect(prompt).toContain('[Error] Unused variable');
+            expect(prompt).toContain(testCode);
+        });
+    });
+
+    describe('improveCodePrompt', () => {
+        it('should format improve prompt correctly', () => {
+            const prompt = improveCodePrompt(testFilePath, testCode);
+            
+            expect(prompt).toContain(`@/${testFilePath}`);
+            expect(prompt).toContain(testCode);
+            expect(prompt).toContain('Code readability');
+            expect(prompt).toContain('Performance optimization');
+            expect(prompt).toContain('Best practices');
+            expect(prompt).toContain('Error handling');
+        });
+    });
+});

+ 50 - 0
src/core/prompts/code-actions.ts

@@ -0,0 +1,50 @@
+export const explainCodePrompt = (filePath: string, selectedText: string) => `
+Explain the following code from file path @/${filePath}:
+
+\`\`\`
+${selectedText}
+\`\`\`
+
+Please provide a clear and concise explanation of what this code does, including:
+1. The purpose and functionality
+2. Key components and their interactions
+3. Important patterns or techniques used
+`;
+
+export const fixCodePrompt = (filePath: string, selectedText: string, diagnostics?: any[]) => {
+    const diagnosticText = diagnostics && diagnostics.length > 0
+        ? `\nCurrent problems detected:
+${diagnostics.map(d => `- [${d.source || 'Error'}] ${d.message}${d.code ? ` (${d.code})` : ''}`).join('\n')}`
+        : '';
+
+    return `
+Fix any issues in the following code from file path @/${filePath}
+${diagnosticText}
+
+\`\`\`
+${selectedText}
+\`\`\`
+
+Please:
+1. Address all detected problems listed above (if any)
+2. Identify any other potential bugs or issues
+3. Provide corrected code
+4. Explain what was fixed and why
+`;
+};
+
+export const improveCodePrompt = (filePath: string, selectedText: string) => `
+Improve the following code from file path @/${filePath}:
+
+\`\`\`
+${selectedText}
+\`\`\`
+
+Please suggest improvements for:
+1. Code readability and maintainability
+2. Performance optimization
+3. Best practices and patterns
+4. Error handling and edge cases
+
+Provide the improved code along with explanations for each enhancement.
+`;