javascript - 如何在VS Code中实现自定义HTML模式的点击?

标签 javascript visual-studio-code vscode-extensions

我想在扩展中实现类似于 HTML 模板中的“转到定义”的功能。

例如,按住 Ctrl 键单击路径将打开一个编辑器,其中文件位于此路径:

{% include "relative/path/to/snippet.html" %}

您是否有任何指向相关文档的指针,在任何存储库上执行类似的操作?

我对 VSCode 扩展和 Intellisense 完全陌生,所以我需要一些示例。

我想它会包括:

  1. 解析 HTML/文本文件以查找相关的可点击区域
  2. 告诉 IntelliSense 做一些奇特的事情
  3. 实现一些奇特的东西(我最终会弄清楚这部分)

最佳答案

此功能由 DefinitionProvider 提供支持。您的扩展程序可以创建一个自定义定义提供程序,该提供程序仅返回您感兴趣的路径的结果。该提供程序将使用 registerDefinitionProvider 对于 html 语言模式

进行注册

这看起来像:

import * as vscode from 'vscode';
import * as path from 'path'

class MyProvider implements vscode.DefinitionProvider {
    provideDefinition(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): vscode.ProviderResult<vscode.Definition> {

        const linkText = getLinkText(document, position); // implement this

        if (! linkText) { 
            return null;
        }

        const workspace = vscode.workspace.getWorkspaceFolder(document.uri);
        const root = workspace ? workspace.uri : document.uri;

        return new vscode.Location(
            root.with({
                path: path.join(root.path, linkText)
            }),
            new vscode.Position(0, 0));
    }
}

vscode.languages.registerDefinitionProvider('html', new MyProvider());

关于javascript - 如何在VS Code中实现自定义HTML模式的点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50814413/

相关文章:

angular - VSCode Angular 5 Chrome 调试器问题 - 匹配空白? - 和霍尔特

visual-studio-code - 如何向 VS Code 资源管理器标题栏或命令面板贡献一个命令,该命令仅在我的 webview 获得焦点时才处于事件状态?

visual-studio-code - 如何添加带有VSCode扩展名的上下文菜单?

visual-studio-code - VSCode,终端每个字符后都有空格

javascript - jQuery 在 mouseout() 菜单或子菜单后关闭当前子菜单

javascript - 如何在客户端设置自定义验证器 isValid 属性?

javascript - highcharts:如何正确地将 float 显示为 xAxis 中的日期时间

ubuntu - 如何在 VSCode + Vim + Ubuntu 中使用其他语言(例如俄语)而不自行更改布局?

typescript - VsCode 插件 : Color Coding inline SQL in ts file

javascript - 通过@Input()传递的数据