我想在扩展中实现类似于 HTML 模板中的“转到定义”的功能。
例如,按住 Ctrl 键单击路径将打开一个编辑器,其中文件位于此路径:
{% include "relative/path/to/snippet.html" %}
您是否有任何指向相关文档的指针,在任何存储库上执行类似的操作?
我对 VSCode 扩展和 Intellisense 完全陌生,所以我需要一些示例。
我想它会包括:
- 解析 HTML/文本文件以查找相关的可点击区域
- 告诉 IntelliSense 做一些奇特的事情
- 实现一些奇特的东西(我最终会弄清楚这部分)
最佳答案
此功能由 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/