首先注册代码动作提供者,再实现提供者接口。通过监听诊断信息(如“Missing import”),在用户提供上下文菜单时返回快速修复建议,例如自动插入导入语句,并支持分类动作如重构或源码优化,最后在开发主机中测试触发与执行效果。

在 Visual Studio Code(简称 VSCode)中开发代码动作提供者(Code Action Provider),可以让你的扩展为用户提供上下文相关的代码修复或重构建议。这在语言服务器扩展中非常常见,比如自动导入缺失的模块、修复语法错误、优化代码结构等。
代码动作是用户通过右键菜单或快捷键(如 Ctrl + .)触发的一组建议操作。它们通常出现在编辑器检测到问题时,例如未使用的变量、类型错误或缺少导入。
要实现代码动作提供者,你需要注册一个 CodeActionProvider 到你的扩展中,并根据文档和诊断信息决定返回哪些动作。
在扩展的 extension.ts 文件中,使用 vscode.languages.registerCodeActionsProvider 方法注册提供者。你需要指定语言类型和提供者逻辑。
示例代码:
import * as vscode from 'vscode';
<p>export function activate(context: vscode.ExtensionContext) {
const provider = new MyCodeActionProvider();
const disposable = vscode.languages.registerCodeActionsProvider('javascript', provider);
context.subscriptions.push(disposable);
}
创建一个类实现 vscode.CodeActionProvider 接口,主要实现 provideCodeActions 方法。
该方法接收文档、范围、上下文(包含诊断信息)等参数,返回一个代码动作数组。
示例实现:
class MyCodeActionProvider implements vscode.CodeActionProvider {
provideCodeActions(
document: vscode.TextDocument,
range: vscode.Range,
context: vscode.CodeActionContext
): vscode.Command[] | vscode.CodeAction[] | undefined {
// 只处理特定诊断
const diagnostics = context.diagnostics.filter(diag =>
diag.message.includes('Missing import')
);
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;"> if (!diagnostics.length) {
return;
}
const action = new vscode.CodeAction(
'Auto-import module',
vscode.CodeActionKind.QuickFix
);
action.edit = new vscode.WorkspaceEdit();
action.edit.insert(document.uri, diagnostics[0].range.start, "import { MyModule } from 'mymodule';\n");
action.diagnostics = diagnostics;
action.isPreferred = true;
return [action];
}}
上面的例子中,当检测到“Missing import”错误时,提供一个自动插入导入语句的修复动作。
代码动作通常与语言服务器发布的诊断(Diagnostic)相关联。确保你的语言服务器或文档分析逻辑能正确生成带消息和范围的诊断项。
你可以通过以下方式增强匹配精度:
VSCode 区分不同类型的代码动作,使用 CodeActionKind 可以分类:
例如,注册一个重构动作:
vscode.languages.registerCodeActionsProvider('javascript', provider, {
providedCodeActionKinds: [vscode.CodeActionKind.Refactor]
});
在开发过程中,使用 VSCode 的扩展开发主机(F5 启动)进行测试。确保:
查看输出面板中的“Extension Host”日志,排查注册或执行异常。
基本上就这些。实现一个有效的代码动作提供者关键在于准确识别上下文,并构造清晰、安全的编辑操作。配合语言服务器协议(LSP),还能实现更复杂的跨文件重构功能。
以上就是VSCode代码动作提供者开发的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号