【发布时间】:2021-12-19 14:35:20
【问题描述】:
我想在我的 VS Code 扩展中获取自定义单词的范围,如果我将鼠标悬停在它上面,并且文本行是否与模式匹配。这是我到目前为止所写的:
vscode.languages.registerHoverProvider('.mylanguage', {
provideHover(document, position, token) {
// define `hoverRange` somewhere here
const hoverLineText = document.lineAt(position.line).text;
const pattern = new RegExp("\\w+\\s{0,}\\(.{0,}\\s{0,}\\)");
if(pattern.test(hoverLineText)){
hoverRange = document.getWordRangeAtPosition(position, pattern);
}
console.log(hoverRange);
//etc. ...
我希望,如果您在编辑器中编写 myFunction ( ) 之类的内容,并且将鼠标悬停在该字符串的任何位置(例如,甚至在空白处),控制台将输出 hoverRange,这将考虑到右括号)的位置也是如此。
但是,如果我将鼠标悬停在空白处,则不会向控制台输出任何内容。相反,我需要将鼠标悬停在myFunction 上,这样我才能得到字符串的整个范围。
如何让我的 VS Code 扩展将 myFunction ( ) 视为一个单词?
【问题讨论】:
-
{0,}是*,而不是getWordRangeAtPosition计算字符串myFunction ( )开始和结束的偏移量并将其转换为范围,为什么需要复制正则表达式,为什么你有没有在provideHover函数之外定义hoverRange -
@rioV8 糟糕,我只是将
hoverRange更改为在provideHover中定义。我可以计算字符串的偏移量,并转换为该范围,但这会导致与上面相同的结果。我仍然需要将鼠标悬停在myFunction上才能获得新的范围。 -
是在你想要的所有场合调用的悬停提供程序
-
@rioV8 是的,在我想要的所有场合都会调用提供程序。唯一的问题是我不知道如何让 VS Code 识别自定义单词。
-
如果正则表达式匹配行中的某处,找到匹配的开始和结束并为此创建一个范围
标签: javascript typescript visual-studio-code vscode-extensions