Javascript 如何在VS代码中以自定义HTML模式实现点击?

Javascript 如何在VS代码中以自定义HTML模式实现点击?,javascript,visual-studio-code,vscode-extensions,Javascript,Visual Studio Code,Vscode Extensions,我想在扩展中实现类似于HTML模板中的Go-to定义的东西 例如,按住ctrl键单击路径将打开一个编辑器,其中文件位于以下路径: {% include "relative/path/to/snippet.html" %} 您是否有任何关于回购协议的相关文件的指示 我对VSCode扩展非常陌生,对Intellisense完全是新手,所以我需要一些示例 我想应该包括: 解析HTML/文本文件以查找相关的可单击区域 让IntelliSense做些有趣的事情 实现这些新奇的东西(我最终会弄明白这一部分

我想在扩展中实现类似于HTML模板中的Go-to定义的东西

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

{% include "relative/path/to/snippet.html" %}
您是否有任何关于回购协议的相关文件的指示

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

我想应该包括:

  • 解析HTML/文本文件以查找相关的可单击区域
  • 让IntelliSense做些有趣的事情
  • 实现这些新奇的东西(我最终会弄明白这一部分)

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

    这看起来像:

    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());
    
    import*作为“vscode”中的vscode;
    从“路径”导入*作为路径
    类MyProvider实现vscode.DefinitionProvider{
    ProviderDefinition(文档:vscode.TextDocument,位置:vscode.position,标记:vscode.CancellationToken):vscode.ProviderResult{
    const linkText=getLinkText(文档,位置);//实现这个
    如果(!linkText){
    返回null;
    }
    const workspace=vscode.workspace.getWorkspaceFolder(document.uri);
    const root=workspace?workspace.uri:document.uri;
    返回新的vscode.Location(
    根({
    path:path.join(root.path,linkText)
    }),
    新的vscode.Position(0,0));
    }
    }
    registerDefinitionProvider('html',new MyProvider());
    
    谢谢。我需要一些时间来了解如何插入并了解它是如何工作的。我将扩展作为一种语言支持启动,然后在我的package.json和入口点中丢失了开发依赖项。扩展是否需要注册贡献语言才能工作?我似乎无法为JSON文件加载提供程序