【问题标题】:How to implement a click through in custom HTML mode in VS Code?如何在 VS Code 中以自定义 HTML 模式实现点击?
【发布时间】:2018-06-12 10:01:43
【问题描述】:

我想在一个扩展中实现类似于 HTML 模板中的 Go To Definition 的东西。

例如,在路径上按住 ctrl 单击会打开一个编辑器,其中包含该路径中的文件:

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

您是否有任何指向相关文档的指针,在任何类似的 repo 上?

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

我猜应该包括:

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

【问题讨论】:

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


    【解决方案1】:

    此功能由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());
    

    【讨论】:

    • 谢谢。我需要一些时间来了解如何插入并了解它是如何工作的。我以语言支持开始我的扩展,然后错过了 package.json 和入口点中的开发依赖项。
    • 扩展是否需要注册贡献语言才能使其工作?我似乎无法为 JSON 文件加载我的提供程序
    猜你喜欢
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 2014-08-17
    • 2016-01-05
    • 2016-12-31
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多