【问题标题】:VS Code Hover Extension implement HoverProviderVS Code Hover Extension 实现 HoverProvider
【发布时间】:2019-07-14 12:00:02
【问题描述】:

尝试添加 hovers 以将悬停添加到我的 VS Code 扩展。我能够使用语法突出显示和命令来工作,但坚持添加此悬停功能。

我认为我的障碍是如何正确实施HoverProvider API。我在下面对悬停提供程序进行了一个简单的测试,当一系列标记被识别为关键字HELLO 时,它会激活。我在测试中实现的悬停。我正在使用vsce package 在本地打包和测试我的扩展。

我的扩展命令有效,但是当我将鼠标悬停在“HELLO”这个词上时,我的悬停不会出现。

./client/extension.js

const vscode = require('vscode');

function activate(context) {

    console.log('Congratulations, your extension "star-rod" is now active!');

    let disposable = vscode.commands.registerCommand('extension.mamar', () => {
        vscode.window.showInformationMessage("The Star Rod... is powerful beyond belief. It can grant any wish. For as long as we can remember, Bowser has been making wishes like, for instance... 'I'd like to trounce Mario' or 'I want Princess Peach to like me.' Of course, Stars ignore such selfish wishes. As a result, his wishes were never granted.");
    });

    context.subscriptions.push(disposable);

    vscode.languages.registerHoverProvider('javascript', {
        provideHover(document, position, token) {

            const range = document.getWordRangeAtPosition(position);
            const word = document.getText(range);

            if (word == "HELLO") {

                return new vscode.Hover({
                    language: "Hello language",
                    value: "Hello Value"
                });
            }
        }
    });
}

function deactivate() { }

module.exports = {
    activate,
    deactivate
}

./package.json

    {
 "name": "star-rod-script",
 "publisher": "sonicspiral",
 "displayName": "Star Rod Script",
 "description": "Syntax highlighting for Paper Mario 64 ROM patching tool",
 "version": "1.0.1",
 "repository": {
  "type": "git",
  "url": "https://github.com/gregdegruy/star-rod.git"
 },
 "categories": [
  "Programming Languages"
 ],
 "activationEvents": [
    "onCommand:extension.mamar",
    "onLanguage:star-rod-script"
 ],
 "engines": {
  "vscode": "^1.31.0"
 },
 "main": "./client/extension.js",
 "contributes": {
  "capabilities": {
    "hoverProvider": "true"
  },
  "commands": [
    {
     "command": "extension.mamar",
     "title": "Mamar"
    }
  ],
  "languages": [
   {
    "id": "star-rod-script",
    "extensions": [
     ".bpat",
     ".bscr",
     ".mpat",
     ".mscr"
    ],
    "aliases": [
     "Star Rod Script",
     "mscr"
    ],
    "configuration": "./language-configuration.json"
   }
  ],
  "grammars": [
   {
    "language": "star-rod-script",
    "scopeName": "source.mscr",
    "path": "./syntaxes/mscr.tmLanguage.json"
   }
  ]
 },
 "devDependencies": {
  "js-yaml": "^3.12.1",
  "vscode": "^1.1.29"
 }
}

【问题讨论】:

  • 您的扩展程序是否被激活?您能否提供更多关于哪些方法无效以及您尝试过哪些方法的信息?
  • 是的,但是当我将鼠标悬停在我的测试“HELLO”关键字上时,不会出现悬停对话框。我只需要一个示例如何使用正确的语法创建悬停,我并不完全了解它周围的 API。
  • 您从不使用在provideHover 作为输入传递的令牌是否正常?

标签: javascript visual-studio-code hover vscode-extensions


【解决方案1】:

你的 package.json 看起来有点奇怪。我敢打赌你的扩展没有激活。 “贡献/能力”的价值是我以前从未见过的。删除它,而是将您的 activationEvents 更改为:

"activationEvents": [
    "onLanguage:star-rod-script"
],

【讨论】:

  • 用示例截图更新了帖子,它选择我的扩展程序已激活,我可以运行我的测试命令“mamar”。即使添加了这个activationEvent,关键字HELLO也不会出现悬停。
【解决方案2】:

您的代码使我能够在我的第一个扩展程序中使用悬停。我认为您的错误是将 javascript 作为selector: vscode.DocumentSelector。那是你复制的代码吗?对于您的扩展程序,这可能应该设置为 star-rod-script

我也没有"capabilities": {"hoverProvider": "true"}。我将您的代码更改为:

disposable = vscode.languages.registerHoverProvider('star-rod-script', {  // or 'star rod script'
    //....
});

context.subscriptions.push(disposable);

我不知道您如何将扩展应用到某些文档的细微差别,但看起来您并没有尝试将悬停应用到 javascript 文档。您需要选择器来包含您的扩展使用的文档。在我的情况下,我的扩展名包含在 vscode 状态栏中显示的语言模式。有关document-selectors 的更多信息。

不确定是否需要,但我也接受了返回并将其推送到订阅数组中。没有那个也可以,但我认为这是正确的??

【讨论】:

    猜你喜欢
    • 2019-06-08
    • 2021-08-17
    • 1970-01-01
    • 2017-12-02
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多