一、VS Code 插件模板
下面是一个完整的 VS Code 插件模板项目,它可以与 MCP(Model Context Protocol) 交互,并利用 Claude 提供智能代码建议。
该插件的核心功能包括:
-
获取当前 MCP 上下文(任务、历史、记忆等)
-
调用 Claude 生成代码建议
-
在 VS Code 编辑器中插入 AI 生成的代码
-
在 VS Code 侧边栏显示任务栈
1、如何使用
1.安装依赖
npm install -g yo generator-code # VS Code 扩展生成器
yo code # 选择 "New TypeScript Extension"
cd your-extension-name
npm install axios @anthropic-ai/sdk
2.复制以下代码文件
-
src/extension.ts
(插件主逻辑) -
src/panel.ts
(侧边栏任务显示)
3.运行插件
npm run watch
code --extensionDevelopmentPath=.
2、src/extension.ts
(插件主逻辑)
import * as vscode from 'vscode';
import axios from 'axios';
import Anthropic from '@anthropic-ai/sdk';
// Claude API Key(替换为你的)
const CLAUDE_API_KEY = "你的API密钥";
// MCP 服务器地址
const MCP_API_URL = "http://localhost:8000";
export function activate(context: vscode.ExtensionContext) {
console.log('🎉 MCP AI 插件已激活!');
// 注册 "MCP 获取上下文" 命令
let disposable = vscode.commands.registerCommand('mcp.getContext', async () => {
try {
// 从 MCP 获取上下文
const response = await axios.get(`${MCP_API_URL}/context`);
const contextData = response.data;
const task = contextData.task_stack?.[0] || "未找到当前任务";
const history = contextData.history?.join('\n') || "无历史记录";
// 构建 Claude Prompt
const prompt = `
你是一个智能开发助手。当前任务:${task}
历史记录:
${history}
请提供实现该任务的代码建议:
`;
// 调用 Claude 生成代码
const anthropic = new Anthropic({ apiKey: CLAUDE_API_KEY });
const responseAI = await anthropic.messages.create({
model: "claude-3-sonnet-20240229",
max_tokens: 1024,
messages: [{ role: "user", content: prompt }]
});
const aiCode = responseAI.content[0].text || "⚠️ Claude 未返回代码建议";
// 插入代码到编辑器
const editor = vscode.window.activeTextEditor;
if (editor) {
editor.edit(editBuilder => {
editBuilder.insert(editor.selection.active, aiCode);
});
}
vscode.window.showInformationMessage("✅ Claude 代码建议已插入编辑器!");
} catch (error) {
console.error("❌ MCP 请求失败:", error);
vscode.window.showErrorMessage("❌ 获取 MCP 上下文失败,请检查服务器");
}
});
// 注册侧边栏
context.subscriptions.push(disposable);
context.subscriptions.push(vscode.window.registerWebviewViewProvider('mcpSidebar', new MCPSidebarProvider(context.extensionUri)));
}
export function deactivate() {
console.log('🛑 MCP AI 插件已停用');
}
3、src/panel.ts
(侧边栏任务栈显示)
import * as vscode from 'vscode';
import axios from 'axios';
const MCP_API_URL = "http://localhost:8000";
export class MCPSidebarProvider implements vscode.WebviewViewProvider {
private _view?: vscode.WebviewView;
constructor(private readonly _extensionUri: vscode.Uri) {}
async resolveWebviewView(webviewView: vscode.WebviewView) {
this._view = webviewView;
webviewView.webview.options = { enableScripts: true };
// 加载任务数据
this.updateSidebar();
}
private async updateSidebar() {
if (!this._view) return;
try {
const response = await axios.get(`${MCP_API_URL}/context`);
const taskStack = response.data.task_stack || [];
this._view.webview.html = this.getHTML(taskStack);
} catch (error) {
this._view.webview.html = `<h3>❌ 无法连接 MCP</h3>`;
}
}
private getHTML(tasks: string[]): string {
return `
<html><body>
<h3>📌 当前任务栈</h3>
<ul>${tasks.map(task => `<li>${task}</li>`).join('')}</ul>
<button onclick="vscode.postMessage({ command: 'refresh' })">🔄 刷新</button>
<script>
const vscode = acquireVsCodeApi();
window.addEventListener('message', event => {
location.reload();
});
</script>
</body></html>
`;
}
}
4、package.json
(扩展定义)
{
"name": "mcp-ai-helper",
"displayName": "MCP AI Helper",
"description": "基于 MCP 和 Claude 的 VS Code 智能助手",
"version": "1.0.0",
"engines": { "vscode": "^1.78.0" },
"categories": ["Other"],
"activationEvents": ["onCommand:mcp.getContext"],
"main": "./dist/extension.js",
"contributes": {
"commands": [
{
"command": "mcp.getContext",
"title": "获取 MCP 上下文并调用 Claude"
}
],
"viewsContainers": {
"activitybar": [
{
"id": "mcp-sidebar",
"title": "MCP 任务",
"icon": "resources/mcp-icon.png"
}
]
},
"views": {
"mcp-sidebar": [
{
"type": "webview",
"id": "mcpSidebar",
"name": "MCP 任务栈"
}
]
}
},
"dependencies": {
"axios": "^0.27.2",
"@anthropic-ai/sdk": "^0.3.0"
}
}
5、如何测试插件
1.在 VS Code 里打开插件目录
code .
2.运行插件
npm run watch
code --extensionDevelopmentPath=.
3.使用 MCP + Claude
-
按
Ctrl+Shift+P
(打开命令面板) -
运行
MCP 获取上下文并调用 Claude
-
侧边栏显示当前任务栈
二、Eclipse 中添加 MCP
要在 Eclipse 中添加 MCP(Model Context Protocol),你可以使用 Eclipse 插件开发(Eclipse Plugin Development Environment, PDE) 来构建一个插件,或者直接在 Eclipse IDE 中编写 Java 代码来集成 MCP。
方法 1:使用 Eclipse 插件(推荐)
这个方法适用于 想要创建 Eclipse 插件来与 MCP 交互 的用户。
步骤 1:创建一个新的 Eclipse 插件项目
-
打开 Eclipse,点击
File > New > Plug-in Project
。 -
输入插件名称(例如
MCP Eclipse Plugin
),点击 Next。 -
选择
This plug-in will make contributions to the UI
(该插件将为 UI 提供扩展)。 -
点击 Finish 创建插件。
步骤 2:添加 HTTP 依赖
MCP 服务器使用 REST API,我们需要添加 HTTP 请求库 来访问 MCP。
-
在
MANIFEST.MF
文件中添加以下依赖:-
org.eclipse.ui
-
org.eclipse.jface
-
org.apache.httpcomponents.httpclient
-
org.json
(用于解析 MCP 返回的 JSON)
-
-
手动导入
Apache HttpClient
依赖(如果 Eclipse 没有内置)
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
步骤 3:创建 MCP 连接类
在 src/com/mcp/eclipse
目录下创建 MCPClient.java
:
package com.mcp.eclipse;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONObject;
public class MCPClient {
private static final String MCP_SERVER = "http://localhost:8000";
public static String getContext() {
try {
URL url = new URL(MCP_SERVER + "/context");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder response = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// 解析 JSON
JSONObject jsonResponse = new JSONObject(response.toString());
return jsonResponse.toString(4); // 格式化输出 JSON
} catch (Exception e) {
return "❌ MCP 连接失败: " + e.getMessage();
}
}
}
步骤 4:创建 UI 命令
在 plugin.xml
里添加命令:
<extension
point="org.eclipse.ui.commands">
<command
id="com.mcp.eclipse.getContext"
name="获取 MCP 上下文">
</command>
</extension>
创建 Handler
处理命令,在 src/com/mcp/eclipse
目录下创建 MCPHandler.java
:
package com.mcp.eclipse;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
public class MCPHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
String context = MCPClient.getContext();
MessageDialog.openInformation(shell, "MCP 上下文", context);
return null;
}
}
步骤 5:运行插件
-
右键点击项目,选择
Run As > Eclipse Application
,启动 Eclipse 插件开发环境。 -
在
Window > Preferences
里搜索 MCP,应该可以看到新命令 "获取 MCP 上下文"。 -
点击 "获取 MCP 上下文",弹出对话框显示 MCP 服务器的当前上下文!🎉
方法 2:在 Java 代码中直接调用 MCP
如果你不想写 Eclipse 插件,而是直接在 Eclipse 里用 Java 代码访问 MCP,可以使用 HttpClient
访问 MCP REST API。
示例:获取 MCP 任务栈
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONObject;
public class MCPClient {
private static final String MCP_SERVER = "http://localhost:8000";
public static void main(String[] args) {
try {
URL url = new URL(MCP_SERVER + "/context");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder response = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
JSONObject jsonResponse = new JSONObject(response.toString());
System.out.println("📌 MCP 任务栈: " + jsonResponse.getJSONArray("task_stack"));
} catch (Exception e) {
System.out.println("❌ MCP 连接失败: " + e.getMessage());
}
}
}
运行后,你会看到类似的输出:
📌 MCP 任务栈: ["修复用户认证漏洞", "优化数据库查询"]
总结
方法 | 适用场景 | 复杂度 | UI 交互 | 适用开发者 |
---|---|---|---|---|
方法 1:Eclipse 插件 | 需要 Eclipse UI 交互(如按钮、对话框) | ⭐⭐⭐⭐ | ✅ | Eclipse 插件开发者 |
方法 2:Java 直接访问 | 只需获取 MCP 数据,无 UI 需求 | ⭐⭐ | ❌ | 普通 Java 开发者 |
三、Eclipse + Claude + MCP 代码建议
这个 Eclipse 插件 可以:
-
获取 MCP 任务栈(从
/context
读取任务信息) -
调用 Claude 生成代码建议(基于当前任务)
-
在 Eclipse 编辑器中插入 AI 代码
-
在侧边栏显示任务栈(实时更新)
步骤 1:创建 Eclipse 插件
-
打开 Eclipse →
File > New > Plug-in Project
-
输入项目名称(如
MCP_AI_Helper
),点击 Next -
选择 UI 插件(
This plug-in will make contributions to the UI
) -
点击 Finish 创建插件
步骤 2:添加依赖
-
打开
MANIFEST.MF
,在Dependencies
里添加:-
org.eclipse.ui
-
org.eclipse.jface
-
org.apache.httpcomponents.httpclient
-
org.json
-
-
手动添加 Claude SDK
-
复制
anthropic-sdk.jar
到lib/
目录 -
在
MANIFEST.MF
里添加anthropic-sdk
依赖
步骤 3:创建 MCP 连接类
src/com/mcp/eclipse/MCPClient.java
package com.mcp.eclipse;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONObject;
public class MCPClient {
private static final String MCP_SERVER = "http://localhost:8000";
public static String getContext() {
try {
URL url = new URL(MCP_SERVER + "/context");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder response = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
JSONObject jsonResponse = new JSONObject(response.toString());
return jsonResponse.getJSONArray("task_stack").getString(0); // 取最新任务
} catch (Exception e) {
return "❌ MCP 连接失败: " + e.getMessage();
}
}
}
步骤 4:创建 Claude 代码建议
src/com/mcp/eclipse/ClaudeClient.java
package com.mcp.eclipse;
import anthropic.sdk.*;
import anthropic.sdk.resources.*;
public class ClaudeClient {
private static final String CLAUDE_API_KEY = "你的API密钥";
public static String generateCode(String task) {
try {
Anthropic anthropic = new Anthropic.Builder().apiKey(CLAUDE_API_KEY).build();
MessageResponse response = anthropic.messages()
.create(new MessageRequest.Builder()
.model("claude-3-sonnet-20240229")
.maxTokens(1024)
.message(new Message.Builder()
.role("user")
.content("请为以下任务提供代码建议:\n" + task)
.build())
.build());
return response.content().get(0).text();
} catch (Exception e) {
return "❌ Claude 请求失败: " + e.getMessage();
}
}
}
步骤 5:创建 UI 命令
在 plugin.xml
添加:
<extension
point="org.eclipse.ui.commands">
<command
id="com.mcp.eclipse.getCode"
name="获取 Claude 代码建议">
</command>
</extension>
步骤 6:创建命令 Handler
src/com/mcp/eclipse/CodeSuggestionHandler.java
package com.mcp.eclipse;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.jface.dialogs.MessageDialog;
public class CodeSuggestionHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IEditorPart editor = window.getActivePage().getActiveEditor();
if (editor instanceof ITextEditor) {
ITextEditor textEditor = (ITextEditor) editor;
IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());
ITextSelection selection = (ITextSelection) textEditor.getSelectionProvider().getSelection();
// 获取 MCP 任务
String task = MCPClient.getContext();
if (task.startsWith("❌")) {
MessageDialog.openError(window.getShell(), "MCP 错误", task);
return null;
}
// 调用 Claude 生成代码
String code = ClaudeClient.generateCode(task);
if (code.startsWith("❌")) {
MessageDialog.openError(window.getShell(), "Claude 错误", code);
return null;
}
// 插入到 Eclipse 编辑器
int offset = selection.getOffset();
try {
document.replace(offset, 0, "\n" + code + "\n");
MessageDialog.openInformation(window.getShell(), "Claude 代码建议", "代码已插入编辑器!");
} catch (Exception e) {
MessageDialog.openError(window.getShell(), "插入失败", e.getMessage());
}
}
return null;
}
}
步骤 7:添加侧边栏
在 plugin.xml
添加:
<extension
point="org.eclipse.ui.views">
<view
id="com.mcp.eclipse.taskView"
name="MCP 任务栈"
class="com.mcp.eclipse.TaskView"
category="org.eclipse.ui">
</view>
</extension>
创建 src/com/mcp/eclipse/TaskView.java
package com.mcp.eclipse;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.List;
import org.eclipse.ui.part.ViewPart;
import org.json.JSONObject;
public class TaskView extends ViewPart {
private List taskList;
@Override
public void createPartControl(Composite parent) {
taskList = new List(parent, SWT.BORDER | SWT.V_SCROLL);
updateTasks();
}
private void updateTasks() {
String jsonResponse = MCPClient.getContext();
try {
JSONObject json = new JSONObject(jsonResponse);
taskList.removeAll();
for (Object task : json.getJSONArray("task_stack")) {
taskList.add(task.toString());
}
} catch (Exception e) {
taskList.add("❌ MCP 连接失败");
}
}
@Override
public void setFocus() {
updateTasks();
}
}
步骤 8:运行插件
-
在 Eclipse 中打开
Run > Run Configurations
-
选择
Eclipse Application
,然后点击 Run -
在 Eclipse 界面:
-
Window > Show View > Other...
-
搜索
MCP 任务栈
,点击打开
-
-
使用 Claude 代码建议
-
选中代码编辑器
-
Ctrl+3
搜索获取 Claude 代码建议
-
插入 AI 代码 🎉
-
四、Eclipse 让 Claude 进行代码优化
要让 Claude 进行代码优化,我们可以在 Eclipse 插件 里添加一个新功能,允许 Claude 分析当前代码并自动优化。
功能设计
-
获取 Eclipse 编辑器的代码
-
调用 Claude API,要求优化代码
-
将优化后的代码插入 Eclipse 编辑器
-
弹出对话框显示优化结果
步骤 1:创建命令
在 plugin.xml
添加:
<extension
point="org.eclipse.ui.commands">
<command
id="com.mcp.eclipse.optimizeCode"
name="优化代码(Claude)">
</command>
</extension>
步骤 2:创建 OptimizeCodeHandler.java
src/com/mcp/eclipse/OptimizeCodeHandler.java
package com.mcp.eclipse;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.jface.dialogs.MessageDialog;
public class OptimizeCodeHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IEditorPart editor = window.getActivePage().getActiveEditor();
if (editor instanceof ITextEditor) {
ITextEditor textEditor = (ITextEditor) editor;
IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());
ITextSelection selection = (ITextSelection) textEditor.getSelectionProvider().getSelection();
// 获取选中的代码
String code = selection.getText();
if (code.trim().isEmpty()) {
MessageDialog.openError(window.getShell(), "错误", "请先选中需要优化的代码!");
return null;
}
// 让 Claude 进行优化
String optimizedCode = ClaudeClient.optimizeCode(code);
if (optimizedCode.startsWith("❌")) {
MessageDialog.openError(window.getShell(), "Claude 错误", optimizedCode);
return null;
}
// 插入优化后的代码
int offset = selection.getOffset();
try {
document.replace(offset, selection.getLength(), optimizedCode);
MessageDialog.openInformation(window.getShell(), "Claude 代码优化", "代码已优化!");
} catch (Exception e) {
MessageDialog.openError(window.getShell(), "插入失败", e.getMessage());
}
}
return null;
}
}
步骤 3:让 Claude 优化代码
src/com/mcp/eclipse/ClaudeClient.java
package com.mcp.eclipse;
import anthropic.sdk.*;
import anthropic.sdk.resources.*;
public class ClaudeClient {
private static final String CLAUDE_API_KEY = "你的API密钥";
public static String optimizeCode(String code) {
try {
Anthropic anthropic = new Anthropic.Builder().apiKey(CLAUDE_API_KEY).build();
MessageResponse response = anthropic.messages()
.create(new MessageRequest.Builder()
.model("claude-3-opus-20240229") // 选用更强的优化模型
.maxTokens(2048)
.message(new Message.Builder()
.role("user")
.content("请优化以下 Java 代码,提高性能和可读性:\n" + code)
.build())
.build());
return response.content().get(0).text();
} catch (Exception e) {
return "❌ Claude 请求失败: " + e.getMessage();
}
}
}
步骤 4:运行 & 测试
-
运行 Eclipse 插件 →
Run As > Eclipse Application
-
选中代码
-
Ctrl+3 搜索 "优化代码(Claude)"
-
查看优化后代码 🎉
五、增加自动优化模式(Claude + Eclipse)
新功能:
-
分析代码质量(性能、可读性、结构)
-
自动选择优化策略(提升性能、减少冗余、提高安全性)
-
支持多种语言优化(Java、Python、JavaScript、C++)
步骤 1:添加优化模式选项
修改 plugin.xml
<extension
point="org.eclipse.ui.commands">
<command
id="com.mcp.eclipse.autoOptimize"
name="自动优化代码(Claude)">
</command>
</extension>
步骤 2:创建 AutoOptimizeHandler.java
src/com/mcp/eclipse/AutoOptimizeHandler.java
package com.mcp.eclipse;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.MessageBox;
public class AutoOptimizeHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IEditorPart editor = window.getActivePage().getActiveEditor();
if (editor instanceof ITextEditor) {
ITextEditor textEditor = (ITextEditor) editor;
IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());
ITextSelection selection = (ITextSelection) textEditor.getSelectionProvider().getSelection();
// 获取代码
String code = selection.getText();
if (code.trim().isEmpty()) {
MessageDialog.openError(window.getShell(), "错误", "请先选中需要优化的代码!");
return null;
}
// 选择优化模式
String mode = selectOptimizationMode(window.getShell());
if (mode == null) {
return null;
}
// 让 Claude 进行优化
String optimizedCode = ClaudeClient.autoOptimizeCode(code, mode);
if (optimizedCode.startsWith("❌")) {
MessageDialog.openError(window.getShell(), "Claude 错误", optimizedCode);
return null;
}
// 插入优化后的代码
int offset = selection.getOffset();
try {
document.replace(offset, selection.getLength(), optimizedCode);
MessageDialog.openInformation(window.getShell(), "Claude 自动优化", "代码已优化!");
} catch (Exception e) {
MessageDialog.openError(window.getShell(), "插入失败", e.getMessage());
}
}
return null;
}
private String selectOptimizationMode(Shell shell) {
MessageBox dialog = new MessageBox(shell, SWT.ICON_QUESTION | SWT.YES | SWT.NO | SWT.CANCEL);
dialog.setText("选择优化模式");
dialog.setMessage("请选择优化方式:\n\n是(YES)= 性能优化\n否(NO)= 可读性优化\n取消 = 结构优化");
int response = dialog.open();
if (response == SWT.YES) {
return "performance";
} else if (response == SWT.NO) {
return "readability";
} else {
return "structure";
}
}
}
步骤 3:更新 ClaudeClient.java
src/com/mcp/eclipse/ClaudeClient.java
package com.mcp.eclipse;
import anthropic.sdk.*;
import anthropic.sdk.resources.*;
public class ClaudeClient {
private static final String CLAUDE_API_KEY = "你的API密钥";
public static String autoOptimizeCode(String code, String mode) {
try {
String prompt = "请优化以下代码,目标是 ";
switch (mode) {
case "performance":
prompt += "提高性能和运行效率";
break;
case "readability":
prompt += "提高可读性和简洁性";
break;
case "structure":
prompt += "优化结构,减少重复代码";
break;
default:
prompt += "综合优化";
break;
}
prompt += ":\n" + code;
Anthropic anthropic = new Anthropic.Builder().apiKey(CLAUDE_API_KEY).build();
MessageResponse response = anthropic.messages()
.create(new MessageRequest.Builder()
.model("claude-3-opus-20240229")
.maxTokens(2048)
.message(new Message.Builder()
.role("user")
.content(prompt)
.build())
.build());
return response.content().get(0).text();
} catch (Exception e) {
return "❌ Claude 请求失败: " + e.getMessage();
}
}
}
步骤 4:运行 & 测试
-
运行 Eclipse 插件 →
Run As > Eclipse Application
-
选中代码
-
Ctrl+3 搜索 "自动优化代码(Claude)"
-
弹出选择优化模式
-
YES = 性能优化
-
NO = 可读性优化
-
CANCEL = 结构优化
-
-
查看 Claude 自动优化后的代码 🎉
六、增加 AI 自动选择优化模式(Claude + Eclipse)
新功能:
-
AI 自动分析代码质量(性能、可读性、结构)
-
自动选择最佳优化策略(无需用户手动选择)
-
适用于 Java / Python / JavaScript / C++ 等代码
步骤 1:更新 AutoOptimizeHandler.java
src/com/mcp/eclipse/AutoOptimizeHandler.java
package com.mcp.eclipse;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.jface.dialogs.MessageDialog;
public class AutoOptimizeHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IEditorPart editor = window.getActivePage().getActiveEditor();
if (editor instanceof ITextEditor) {
ITextEditor textEditor = (ITextEditor) editor;
IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());
ITextSelection selection = (ITextSelection) textEditor.getSelectionProvider().getSelection();
// 获取代码
String code = selection.getText();
if (code.trim().isEmpty()) {
MessageDialog.openError(window.getShell(), "错误", "请先选中需要优化的代码!");
return null;
}
// 让 Claude 自动分析代码并选择最佳优化策略
String mode = ClaudeClient.analyzeCodeQuality(code);
if (mode.startsWith("❌")) {
MessageDialog.openError(window.getShell(), "Claude 错误", mode);
return null;
}
// 让 Claude 进行优化
String optimizedCode = ClaudeClient.autoOptimizeCode(code, mode);
if (optimizedCode.startsWith("❌")) {
MessageDialog.openError(window.getShell(), "Claude 错误", optimizedCode);
return null;
}
// 插入优化后的代码
int offset = selection.getOffset();
try {
document.replace(offset, selection.getLength(), optimizedCode);
MessageDialog.openInformation(window.getShell(), "Claude 自动优化", "代码已优化(模式:" + mode + ")!");
} catch (Exception e) {
MessageDialog.openError(window.getShell(), "插入失败", e.getMessage());
}
}
return null;
}
}
步骤 2:更新 ClaudeClient.java
src/com/mcp/eclipse/ClaudeClient.java
package com.mcp.eclipse;
import anthropic.sdk.*;
import anthropic.sdk.resources.*;
public class ClaudeClient {
private static final String CLAUDE_API_KEY = "你的API密钥";
// 自动分析代码质量并选择最佳优化策略
public static String analyzeCodeQuality(String code) {
try {
String prompt = "请分析以下代码的质量,并根据以下规则返回最佳优化策略:\n" +
"- 如果代码运行效率低,请返回 'performance'\n" +
"- 如果代码可读性差,请返回 'readability'\n" +
"- 如果代码结构不佳,请返回 'structure'\n" +
"代码:\n" + code + "\n" +
"请只返回上述三个选项之一,不要返回其他内容。";
Anthropic anthropic = new Anthropic.Builder().apiKey(CLAUDE_API_KEY).build();
MessageResponse response = anthropic.messages()
.create(new MessageRequest.Builder()
.model("claude-3-opus-20240229")
.maxTokens(50)
.message(new Message.Builder()
.role("user")
.content(prompt)
.build())
.build());
String mode = response.content().get(0).text().trim();
if (!mode.equals("performance") && !mode.equals("readability") && !mode.equals("structure")) {
return "❌ Claude 返回了无效的优化模式: " + mode;
}
return mode;
} catch (Exception e) {
return "❌ Claude 请求失败: " + e.getMessage();
}
}
// 根据 AI 选择的优化模式进行优化
public static String autoOptimizeCode(String code, String mode) {
try {
String prompt = "请优化以下代码,目标是 ";
switch (mode) {
case "performance":
prompt += "提高性能和运行效率";
break;
case "readability":
prompt += "提高可读性和简洁性";
break;
case "structure":
prompt += "优化结构,减少重复代码";
break;
default:
return "❌ 无效的优化模式";
}
prompt += ":\n" + code;
Anthropic anthropic = new Anthropic.Builder().apiKey(CLAUDE_API_KEY).build();
MessageResponse response = anthropic.messages()
.create(new MessageRequest.Builder()
.model("claude-3-opus-20240229")
.maxTokens(2048)
.message(new Message.Builder()
.role("user")
.content(prompt)
.build())
.build());
return response.content().get(0).text();
} catch (Exception e) {
return "❌ Claude 请求失败: " + e.getMessage();
}
}
}
步骤 3:运行 & 测试
-
运行 Eclipse 插件 →
Run As > Eclipse Application
-
选中代码
-
Ctrl+3 搜索 "自动优化代码(Claude)"
-
AI 自动分析代码
-
Claude 自动选择优化模式
-
Claude 自动优化代码
-
插入优化后的代码 🎉
最终效果
✅ AI 自动分析代码质量 ✅ AI 自动选择最佳优化策略 ✅ Claude 自动优化代码 ✅ Eclipse 内集成 AI 代码优化
七、增加优化前后代码对比功能(Claude + Eclipse)
新功能:
-
Claude 自动优化代码
-
显示优化前后的代码对比
-
用户可撤销优化,恢复原代码
-
支持 Java、Python、JavaScript、C++ 代码
步骤 1:修改 AutoOptimizeHandler.java
src/com/mcp/eclipse/AutoOptimizeHandler.java
package com.mcp.eclipse;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Shell;
public class AutoOptimizeHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IEditorPart editor = window.getActivePage().getActiveEditor();
if (editor instanceof ITextEditor) {
ITextEditor textEditor = (ITextEditor) editor;
IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());
ITextSelection selection = (ITextSelection) textEditor.getSelectionProvider().getSelection();
// 获取选中的代码
String originalCode = selection.getText();
if (originalCode.trim().isEmpty()) {
MessageDialog.openError(window.getShell(), "错误", "请先选中需要优化的代码!");
return null;
}
// AI 自动分析代码质量并选择优化策略
String mode = ClaudeClient.analyzeCodeQuality(originalCode);
if (mode.startsWith("❌")) {
MessageDialog.openError(window.getShell(), "Claude 错误", mode);
return null;
}
// Claude 进行优化
String optimizedCode = ClaudeClient.autoOptimizeCode(originalCode, mode);
if (optimizedCode.startsWith("❌")) {
MessageDialog.openError(window.getShell(), "Claude 错误", optimizedCode);
return null;
}
// 显示优化前后的代码对比
Shell shell = window.getShell();
CodeDiffDialog diffDialog = new CodeDiffDialog(shell, originalCode, optimizedCode);
if (diffDialog.open() == Window.OK) {
// 用户确认优化
int offset = selection.getOffset();
try {
document.replace(offset, selection.getLength(), optimizedCode);
MessageDialog.openInformation(shell, "Claude 自动优化", "代码已优化(模式:" + mode + ")!");
} catch (Exception e) {
MessageDialog.openError(shell, "插入失败", e.getMessage());
}
}
}
return null;
}
}
步骤 2:新增 CodeDiffDialog.java
src/com/mcp/eclipse/CodeDiffDialog.java
package com.mcp.eclipse;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
public class CodeDiffDialog extends Dialog {
private String originalCode;
private String optimizedCode;
public CodeDiffDialog(Shell parentShell, String originalCode, String optimizedCode) {
super(parentShell);
this.originalCode = originalCode;
this.optimizedCode = optimizedCode;
}
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText("优化前后代码对比");
}
@Override
protected Composite createDialogArea(Composite parent) {
Composite container = (Composite) super.createDialogArea(parent);
container.setLayout(new GridLayout(2, false));
Label lblOriginal = new Label(container, SWT.NONE);
lblOriginal.setText("优化前代码:");
lblOriginal.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false));
Text txtOriginal = new Text(container, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
txtOriginal.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
txtOriginal.setText(originalCode);
txtOriginal.setEditable(false);
Label lblOptimized = new Label(container, SWT.NONE);
lblOptimized.setText("优化后代码:");
lblOptimized.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false));
Text txtOptimized = new Text(container, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
txtOptimized.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
txtOptimized.setText(optimizedCode);
txtOptimized.setEditable(false);
return container;
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, OK, "应用优化", true);
createButton(parent, CANCEL, "取消", false);
}
}
步骤 3:更新 ClaudeClient.java
src/com/mcp/eclipse/ClaudeClient.java
package com.mcp.eclipse;
import anthropic.sdk.*;
import anthropic.sdk.resources.*;
public class ClaudeClient {
private static final String CLAUDE_API_KEY = "你的API密钥";
// 自动分析代码质量并选择最佳优化策略
public static String analyzeCodeQuality(String code) {
try {
String prompt = "请分析以下代码的质量,并返回最佳优化策略:\n" +
"- 如果代码运行效率低,请返回 'performance'\n" +
"- 如果代码可读性差,请返回 'readability'\n" +
"- 如果代码结构不佳,请返回 'structure'\n" +
"代码:\n" + code + "\n" +
"请只返回上述三个选项之一,不要返回其他内容。";
Anthropic anthropic = new Anthropic.Builder().apiKey(CLAUDE_API_KEY).build();
MessageResponse response = anthropic.messages()
.create(new MessageRequest.Builder()
.model("claude-3-opus-20240229")
.maxTokens(50)
.message(new Message.Builder()
.role("user")
.content(prompt)
.build())
.build());
String mode = response.content().get(0).text().trim();
if (!mode.equals("performance") && !mode.equals("readability") && !mode.equals("structure")) {
return "❌ Claude 返回了无效的优化模式: " + mode;
}
return mode;
} catch (Exception e) {
return "❌ Claude 请求失败: " + e.getMessage();
}
}
// Claude 代码优化
public static String autoOptimizeCode(String code, String mode) {
try {
String prompt = "请优化以下代码,目标是 ";
switch (mode) {
case "performance":
prompt += "提高性能和运行效率";
break;
case "readability":
prompt += "提高可读性和简洁性";
break;
case "structure":
prompt += "优化结构,减少重复代码";
break;
default:
return "❌ 无效的优化模式";
}
prompt += ":\n" + code;
Anthropic anthropic = new Anthropic.Builder().apiKey(CLAUDE_API_KEY).build();
MessageResponse response = anthropic.messages()
.create(new MessageRequest.Builder()
.model("claude-3-opus-20240229")
.maxTokens(2048)
.message(new Message.Builder()
.role("user")
.content(prompt)
.build())
.build());
return response.content().get(0).text();
} catch (Exception e) {
return "❌ Claude 请求失败: " + e.getMessage();
}
}
}
最终效果
✅ Claude 自动优化代码
✅ 优化前后代码对比
✅ 用户可撤销优化,恢复原代码
✅ Eclipse 内集成 AI 代码优化 🎉
八、Eclipse + Claude 代码优化 + 代码注释功能
新功能:
✅ Claude 自动优化代码
✅ 优化前后代码对比
✅ Claude 自动添加代码注释
✅ 用户可选择是否应用优化 & 注释
步骤 1:更新 AutoOptimizeHandler.java
src/com/mcp/eclipse/AutoOptimizeHandler.java
package com.mcp.eclipse;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Shell;
public class AutoOptimizeHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IEditorPart editor = window.getActivePage().getActiveEditor();
if (editor instanceof ITextEditor) {
ITextEditor textEditor = (ITextEditor) editor;
IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());
ITextSelection selection = (ITextSelection) textEditor.getSelectionProvider().getSelection();
// 获取选中的代码
String originalCode = selection.getText();
if (originalCode.trim().isEmpty()) {
MessageDialog.openError(window.getShell(), "错误", "请先选中需要优化的代码!");
return null;
}
// AI 自动分析代码质量并选择优化策略
String mode = ClaudeClient.analyzeCodeQuality(originalCode);
if (mode.startsWith("❌")) {
MessageDialog.openError(window.getShell(), "Claude 错误", mode);
return null;
}
// Claude 进行优化
String optimizedCode = ClaudeClient.autoOptimizeCode(originalCode, mode);
if (optimizedCode.startsWith("❌")) {
MessageDialog.openError(window.getShell(), "Claude 错误", optimizedCode);
return null;
}
// Claude 自动添加代码注释
String commentedCode = ClaudeClient.autoCommentCode(optimizedCode);
if (commentedCode.startsWith("❌")) {
MessageDialog.openError(window.getShell(), "Claude 错误", commentedCode);
return null;
}
// 显示优化前后的代码对比
Shell shell = window.getShell();
CodeDiffDialog diffDialog = new CodeDiffDialog(shell, originalCode, commentedCode);
if (diffDialog.open() == Window.OK) {
// 用户确认优化
int offset = selection.getOffset();
try {
document.replace(offset, selection.getLength(), commentedCode);
MessageDialog.openInformation(shell, "Claude 代码优化", "代码已优化并添加注释!(模式:" + mode + ")");
} catch (Exception e) {
MessageDialog.openError(shell, "插入失败", e.getMessage());
}
}
}
return null;
}
}
步骤 2:更新 ClaudeClient.java
src/com/mcp/eclipse/ClaudeClient.java
package com.mcp.eclipse;
import anthropic.sdk.*;
import anthropic.sdk.resources.*;
public class ClaudeClient {
private static final String CLAUDE_API_KEY = "你的API密钥";
// AI 分析代码质量,返回优化模式
public static String analyzeCodeQuality(String code) {
try {
String prompt = "请分析以下代码的质量,并返回最佳优化策略:\n" +
"- 如果代码运行效率低,请返回 'performance'\n" +
"- 如果代码可读性差,请返回 'readability'\n" +
"- 如果代码结构不佳,请返回 'structure'\n" +
"代码:\n" + code + "\n" +
"请只返回上述三个选项之一,不要返回其他内容。";
Anthropic anthropic = new Anthropic.Builder().apiKey(CLAUDE_API_KEY).build();
MessageResponse response = anthropic.messages()
.create(new MessageRequest.Builder()
.model("claude-3-opus-20240229")
.maxTokens(50)
.message(new Message.Builder()
.role("user")
.content(prompt)
.build())
.build());
String mode = response.content().get(0).text().trim();
if (!mode.equals("performance") && !mode.equals("readability") && !mode.equals("structure")) {
return "❌ Claude 返回了无效的优化模式: " + mode;
}
return mode;
} catch (Exception e) {
return "❌ Claude 请求失败: " + e.getMessage();
}
}
// Claude 代码优化
public static String autoOptimizeCode(String code, String mode) {
try {
String prompt = "请优化以下代码,目标是 ";
switch (mode) {
case "performance":
prompt += "提高性能和运行效率";
break;
case "readability":
prompt += "提高可读性和简洁性";
break;
case "structure":
prompt += "优化结构,减少重复代码";
break;
default:
return "❌ 无效的优化模式";
}
prompt += ":\n" + code;
Anthropic anthropic = new Anthropic.Builder().apiKey(CLAUDE_API_KEY).build();
MessageResponse response = anthropic.messages()
.create(new MessageRequest.Builder()
.model("claude-3-opus-20240229")
.maxTokens(2048)
.message(new Message.Builder()
.role("user")
.content(prompt)
.build())
.build());
return response.content().get(0).text();
} catch (Exception e) {
return "❌ Claude 请求失败: " + e.getMessage();
}
}
// Claude 自动添加代码注释
public static String autoCommentCode(String code) {
try {
String prompt = "请为以下代码添加详细的注释,使其更易于理解:\n" + code;
Anthropic anthropic = new Anthropic.Builder().apiKey(CLAUDE_API_KEY).build();
MessageResponse response = anthropic.messages()
.create(new MessageRequest.Builder()
.model("claude-3-opus-20240229")
.maxTokens(2048)
.message(new Message.Builder()
.role("user")
.content(prompt)
.build())
.build());
return response.content().get(0).text();
} catch (Exception e) {
return "❌ Claude 请求失败: " + e.getMessage();
}
}
}
步骤 3:运行 & 测试
-
运行 Eclipse 插件 →
Run As > Eclipse Application
-
选中代码
-
Ctrl+3 搜索 "自动优化代码(Claude)"
-
Claude 自动分析代码
-
Claude 自动选择优化模式
-
Claude 自动优化代码
-
Claude 自动添加代码注释
-
用户可查看优化前后代码对比
-
用户确认后,代码自动替换 🎉
最终效果
✅ Claude 自动优化代码
✅ 优化前后代码对比
✅ Claude 自动添加代码注释
✅ 用户可选择是否应用优化 & 注释
九、clipse + Claude 代码优化 + 代码格式化 + 代码注释功能
新增功能 ✅ Claude 自动格式化代码(支持 Java、Python、C++)
步骤 1:更新 ClaudeClient.java
新增 formatCode
方法,支持代码格式化
package com.mcp.eclipse;
import anthropic.sdk.*;
import anthropic.sdk.resources.*;
public class ClaudeClient {
private static final String CLAUDE_API_KEY = "你的API密钥";
// 代码格式化
public static String formatCode(String code, String language) {
try {
String prompt = "请使用标准代码格式规则格式化以下 " + language + " 代码,并保持功能不变:\n" + code;
Anthropic anthropic = new Anthropic.Builder().apiKey(CLAUDE_API_KEY).build();
MessageResponse response = anthropic.messages()
.create(new MessageRequest.Builder()
.model("claude-3-opus-20240229")
.maxTokens(2048)
.message(new Message.Builder()
.role("user")
.content(prompt)
.build())
.build());
return response.content().get(0).text();
} catch (Exception e) {
return "❌ Claude 请求失败: " + e.getMessage();
}
}
}
步骤 2:新增 AutoFormatHandler.java
src/com/mcp/eclipse/AutoFormatHandler.java
package com.mcp.eclipse;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Shell;
public class AutoFormatHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IEditorPart editor = window.getActivePage().getActiveEditor();
if (editor instanceof ITextEditor) {
ITextEditor textEditor = (ITextEditor) editor;
IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());
ITextSelection selection = (ITextSelection) textEditor.getSelectionProvider().getSelection();
String originalCode = selection.getText();
if (originalCode.trim().isEmpty()) {
MessageDialog.openError(window.getShell(), "错误", "请先选中需要格式化的代码!");
return null;
}
// 识别编程语言
String language = detectLanguage(textEditor);
if (language == null) {
MessageDialog.openError(window.getShell(), "错误", "无法识别代码语言!");
return null;
}
// Claude 进行代码格式化
String formattedCode = ClaudeClient.formatCode(originalCode, language);
if (formattedCode.startsWith("❌")) {
MessageDialog.openError(window.getShell(), "Claude 错误", formattedCode);
return null;
}
// 代码格式化前后对比
Shell shell = window.getShell();
CodeDiffDialog diffDialog = new CodeDiffDialog(shell, originalCode, formattedCode);
if (diffDialog.open() == Window.OK) {
// 用户确认格式化
int offset = selection.getOffset();
try {
document.replace(offset, selection.getLength(), formattedCode);
MessageDialog.openInformation(shell, "Claude 代码格式化", "代码已格式化!(语言:" + language + ")");
} catch (Exception e) {
MessageDialog.openError(shell, "插入失败", e.getMessage());
}
}
}
return null;
}
private String detectLanguage(ITextEditor editor) {
String fileName = editor.getEditorInput().getName();
if (fileName.endsWith(".java")) return "Java";
if (fileName.endsWith(".py")) return "Python";
if (fileName.endsWith(".cpp") || fileName.endsWith(".h")) return "C++";
return null;
}
}
步骤 3:注册 Eclipse 插件
更新 plugin.xml
<extension
point="org.eclipse.ui.commands">
<command
id="com.mcp.eclipse.autoFormat"
name="Claude 代码格式化">
</command>
</extension>
<extension
point="org.eclipse.ui.handlers">
<handler
class="com.mcp.eclipse.AutoFormatHandler"
commandId="com.mcp.eclipse.autoFormat">
</handler>
</extension>
步骤 4:运行 & 测试
-
运行 Eclipse 插件 →
Run As > Eclipse Application
-
选中代码
-
Ctrl+3 搜索 "Claude 代码格式化"
-
Claude 识别代码语言
-
Claude 格式化代码
-
格式化前后代码对比
-
用户确认后,代码自动替换 🎉
最终效果
✅ Claude 自动优化代码
✅ 优化前后代码对比
✅ Claude 自动添加代码注释
✅ Claude 代码格式化
✅ 用户可选择是否应用优化 & 注释 & 格式化
🚀 Claude + Eclipse 代码优化助手,正式支持代码格式化! 🎉
十、Eclipse + MCP API 连接 + Claude 代码优化
更新内容:
✅ MCP 通过 API 连接(支持 HTTPS)
✅ Claude 代码优化、注释、格式化
✅ 优化前后代码对比
步骤 1:更新 MCPClient.java
通过 API 连接 MCP
package com.mcp.eclipse;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
import javax.net.ssl.HttpsURLConnection;
public class MCPClient {
private static final String MCP_API_URL = "https://your-mcp-server.com/api"; // 修改为你的MCP服务器地址
private static final String API_KEY = "your-mcp-api-key"; // 替换为你的 API 密钥
// 发送请求到 MCP API
public static String sendRequest(String payload) {
try {
URL url = new URL(MCP_API_URL);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Authorization", "Bearer " + API_KEY);
connection.setDoOutput(true);
// 发送 JSON 请求
try (OutputStream os = connection.getOutputStream()) {
byte[] input = payload.getBytes("utf-8");
os.write(input, 0, input.length);
}
// 读取响应
int status = connection.getResponseCode();
if (status == 200) {
try (Scanner scanner = new Scanner(connection.getInputStream(), "utf-8")) {
return scanner.useDelimiter("\\A").next();
}
} else {
return "❌ MCP 请求失败: " + status;
}
} catch (Exception e) {
return "❌ MCP API 连接错误: " + e.getMessage();
}
}
// 代码优化请求
public static String optimizeCode(String code) {
String payload = "{ \"task\": \"optimize\", \"code\": " + "\"" + code.replace("\"", "\\\"") + "\" }";
return sendRequest(payload);
}
// 代码格式化请求
public static String formatCode(String code) {
String payload = "{ \"task\": \"format\", \"code\": " + "\"" + code.replace("\"", "\\\"") + "\" }";
return sendRequest(payload);
}
// 代码注释请求
public static String commentCode(String code) {
String payload = "{ \"task\": \"comment\", \"code\": " + "\"" + code.replace("\"", "\\\"") + "\" }";
return sendRequest(payload);
}
}
步骤 2:更新 AutoOptimizeHandler.java
集成 MCP API 代码优化
package com.mcp.eclipse;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Shell;
public class AutoOptimizeHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IEditorPart editor = window.getActivePage().getActiveEditor();
if (editor instanceof ITextEditor) {
ITextEditor textEditor = (ITextEditor) editor;
IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());
ITextSelection selection = (ITextSelection) textEditor.getSelectionProvider().getSelection();
String originalCode = selection.getText();
if (originalCode.trim().isEmpty()) {
MessageDialog.openError(window.getShell(), "错误", "请先选中需要优化的代码!");
return null;
}
// 调用 MCP 进行代码优化
String optimizedCode = MCPClient.optimizeCode(originalCode);
if (optimizedCode.startsWith("❌")) {
MessageDialog.openError(window.getShell(), "MCP 错误", optimizedCode);
return null;
}
// 代码优化前后对比
Shell shell = window.getShell();
CodeDiffDialog diffDialog = new CodeDiffDialog(shell, originalCode, optimizedCode);
if (diffDialog.open() == Window.OK) {
int offset = selection.getOffset();
try {
document.replace(offset, selection.getLength(), optimizedCode);
MessageDialog.openInformation(shell, "MCP 代码优化", "代码已优化!");
} catch (Exception e) {
MessageDialog.openError(shell, "插入失败", e.getMessage());
}
}
}
return null;
}
}
步骤 3:更新 plugin.xml
注册 MCP 代码优化命令
<extension
point="org.eclipse.ui.commands">
<command
id="com.mcp.eclipse.autoOptimize"
name="MCP 代码优化">
</command>
</extension>
<extension
point="org.eclipse.ui.handlers">
<handler
class="com.mcp.eclipse.AutoOptimizeHandler"
commandId="com.mcp.eclipse.autoOptimize">
</handler>
</extension>
步骤 4:运行 & 测试
-
运行 Eclipse 插件 →
Run As > Eclipse Application
-
选中代码
-
Ctrl+3 搜索 "MCP 代码优化"
-
代码发送到 MCP API
-
MCP 进行优化
-
优化前后代码对比
-
用户确认后,代码自动替换 🎉
最终效果
✅ MCP API 连接(支持 HTTPS)
✅ MCP 代码优化
✅ 优化前后代码对比
✅ Claude 代码注释
✅ Claude 代码格式化
✅ 用户可选择是否应用优化、注释、格式化
🚀 Eclipse + MCP + Claude 代码优化系统,现在支持 API 连接! 🎉