如何在我的 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 属性 中使用诊断命令