如何在我的 VS 代码扩展中删除悬停时的诊断内容?
How to remove the diagnostic content on hover in my VS Code extension?
在我的 VS Code 扩展中,我注册了一个删除诊断的命令:
extension.ts
context.subscriptions.push(
vscode.commands.registerCommand(
DELETE_DIAGNOSTIC_COMMAND,
() => removeDiagnostic()
)
);
这就是 removeDiagnostic
函数的样子:
utils.ts
export function removeDiagnostic(): void {
const editor = window.activeTextEditor;
if(editor){
const diagnosticStart = editor.selection.start;
const diagnosticEnd = editor.selection.end;
const diagnosticRange = new Range(diagnosticStart, diagnosticEnd);
editor.edit(editBuilder => {
editBuilder.replace(diagnosticRange, "");
});
}
此处提供的 DELETE_DIAGNOSTIC_COMMAND
作为代码操作:
MyCodeActionProvider.ts
const DELETE_DIAGNOSTIC_COMMAND = 'delete-diagnostic.command';
export class MyCodeActionProvider implements vscode.CodeActionProvider {
public static readonly providedCodeActionKinds = [
vscode.CodeActionKind.QuickFix
];
provideCodeActions(document: vscode.TextDocument, range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext, token: vscode.CancellationToken): vscode.CodeAction[] {
return context.diagnostics
.filter(diagnostic => diagnostic.code === 'myDiagnosticCode')
.map(diagnostic => this.createCommandCodeAction(diagnostic));
}
private createCommandCodeAction(diagnostic: vscode.Diagnostic): vscode.CodeAction {
const action = new vscode.CodeAction('Remove deprecated intrinsic', vscode.CodeActionKind.QuickFix);
action.command = { command: DELETE_DIAGNOSTIC_COMMAND, title: 'Remove deprecated intrinsic', tooltip: 'This will remove the deprecated intrinsic from the editor.' };
action.diagnostics = [diagnostic];
action.isPreferred = true;
return action;
}
}
并且,代码操作提供程序已在此处注册:
extension.ts
context.subscriptions.push(
vscode.languages.registerCodeActionsProvider('myFileExtension', new MyCodeActionProvider(), {
providedCodeActionKinds: MyCodeActionProvider.providedCodeActionKinds
})
);
在 removeDiagnostic
函数中,我想在将鼠标悬停在诊断上时获取诊断的范围,以便 运行 快速修复命令将其删除。
更清楚地说,当我 运行 来自 Problems
选项卡的命令时,我能够删除选定的范围,但当我将鼠标悬停在诊断上时则不能:
当我将鼠标悬停在命令上 运行 时,如何从编辑器中删除诊断?
将诊断从代码操作传递到 args
属性 中的 DELETE_DIAGNOSTIC_COMMAND
命令,并在 range
属性 中使用诊断命令
在我的 VS Code 扩展中,我注册了一个删除诊断的命令:
extension.ts
context.subscriptions.push(
vscode.commands.registerCommand(
DELETE_DIAGNOSTIC_COMMAND,
() => removeDiagnostic()
)
);
这就是 removeDiagnostic
函数的样子:
utils.ts
export function removeDiagnostic(): void {
const editor = window.activeTextEditor;
if(editor){
const diagnosticStart = editor.selection.start;
const diagnosticEnd = editor.selection.end;
const diagnosticRange = new Range(diagnosticStart, diagnosticEnd);
editor.edit(editBuilder => {
editBuilder.replace(diagnosticRange, "");
});
}
此处提供的 DELETE_DIAGNOSTIC_COMMAND
作为代码操作:
MyCodeActionProvider.ts
const DELETE_DIAGNOSTIC_COMMAND = 'delete-diagnostic.command';
export class MyCodeActionProvider implements vscode.CodeActionProvider {
public static readonly providedCodeActionKinds = [
vscode.CodeActionKind.QuickFix
];
provideCodeActions(document: vscode.TextDocument, range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext, token: vscode.CancellationToken): vscode.CodeAction[] {
return context.diagnostics
.filter(diagnostic => diagnostic.code === 'myDiagnosticCode')
.map(diagnostic => this.createCommandCodeAction(diagnostic));
}
private createCommandCodeAction(diagnostic: vscode.Diagnostic): vscode.CodeAction {
const action = new vscode.CodeAction('Remove deprecated intrinsic', vscode.CodeActionKind.QuickFix);
action.command = { command: DELETE_DIAGNOSTIC_COMMAND, title: 'Remove deprecated intrinsic', tooltip: 'This will remove the deprecated intrinsic from the editor.' };
action.diagnostics = [diagnostic];
action.isPreferred = true;
return action;
}
}
并且,代码操作提供程序已在此处注册:
extension.ts
context.subscriptions.push(
vscode.languages.registerCodeActionsProvider('myFileExtension', new MyCodeActionProvider(), {
providedCodeActionKinds: MyCodeActionProvider.providedCodeActionKinds
})
);
在 removeDiagnostic
函数中,我想在将鼠标悬停在诊断上时获取诊断的范围,以便 运行 快速修复命令将其删除。
更清楚地说,当我 运行 来自 Problems
选项卡的命令时,我能够删除选定的范围,但当我将鼠标悬停在诊断上时则不能:
当我将鼠标悬停在命令上 运行 时,如何从编辑器中删除诊断?
将诊断从代码操作传递到 args
属性 中的 DELETE_DIAGNOSTIC_COMMAND
命令,并在 range
属性 中使用诊断命令