【问题标题】:VSCode DefinitionProvider in JavaScript/Node.jsJavaScript/Node.js 中的 VSCode 定义提供程序
【发布时间】:2020-07-14 18:13:15
【问题描述】:

我想在我的 VSCode 扩展中实现一个 DefinitionProvider。 但我不确定我必须如何在 Javascript 中执行此操作,因为 registerDefinitionProvider 不接受我的课程。

module.exports = class ALDefinitionProvider {
    provideDefinition(textDocument, position, token) {
        console.log(textDocument);
        console.log(position);
    }
}

错误信息: 这里的文字: “ALDefinitionProvider”类型的参数不可分配给“DefinitionProvider”类型的参数。 'provideDefinition(...)' 返回的类型在这些类型之间不兼容。 类型 'void' 不可分配给类型 'ProviderResult'。

我是这样注册的:

vscode.languages.registerDefinitionProvider('al', new ALDefinitionProvider());

我也尝试过类似的方法,但我不确定如何使用它来实现它:

class GoDefinitionProvider extends vscode.DefinitionProvider {
    provideDefinition(
        document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken):
        Thenable<vscode.Location> {
    }
}

有谁知道如何在 Javascript/Node.js 中实现这一点? :)

【问题讨论】:

  • "registerDefinitionProvider 不接受我的课程" - 你遇到了什么错误?
  • @Bergi 我在我的问题中添加了错误消息:)
  • 所以这是一个打字稿错误!是的,您需要更改providedDefinition 方法的类型以返回Location(或它的数组,或LocationLinks)。 “我不确定如何用这个实现它” - 你知道如何实现它吗?你想要你的扩展提供什么定义?
  • 哦,好吧,我的错...我用承诺返回了位置,它起作用了。 “你希望你的扩展提供什么定义?” - 变量和函数

标签: javascript node.js typescript vscode-extensions


【解决方案1】:

是的,是我的错…… 我在我的函数中添加了一个 Promise,现在它可以工作了!

module.exports = class ALDefinitionProvider {
    provideDefinition(textDocument, position, token) {
        return new Promise((resolve) => {
            console.log(textDocument);
            console.log(position);
            return new Location(Uri.parse(''), position);
        });
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-24
    • 2021-09-19
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多