javascript - VS Code Hover Extension 实现 HoverProvider

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

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

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

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

enter image description here

./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"
 }
}

最佳答案

您的代码使我能够在我的第一个扩展程序中使用 Hovers。我认为您的错误是将 javascript 作为 选择器: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 的更多信息.

不确定是否需要它,但我也获取了返回值并将其推送到订阅数组中。没有它也能工作,但我认为这是正确的??

关于javascript - VS Code Hover Extension 实现 HoverProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54792391/

相关文章:

html - 当鼠标悬停在框上时,如何向该框(a 标签)添加红色边框?

c# - excanvas js 在 IE8 中不工作

javascript - 如何为以下代码编写 document.querySelector

javascript - 类型上不存在属性(编辑器内部)

azure - Azure ARM 模板上的 Visual Studio Code 报告无法加载架构 - 文件意外结束

css - 如何用CSS显示和隐藏一个div?

css - 文本下的悬停间距

javascript - 使用 Router 中间件获取 POST 请求

javascript - jQuery - $.extend 不返回预期的函数

javascript - 利用dom to image将图像复制到剪贴板