如何在我的 VS 代码扩展中获取自定义单词的范围?
How to get range of custom word in my VS Code Extension?
我想在我的 VS 代码扩展中获取自定义单词的范围,如果我将鼠标悬停在它上面,并且文本行是否与模式匹配。这是我到目前为止写的:
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 ( )
视为一个单词?
这对我有用:
let disposable3 = vscode.languages.registerHoverProvider('plaintext', {
provideHover(document, position) {
let hoverRange;
const hoverLineText = document.lineAt(position.line).text;
const pattern = new RegExp("\w+\s*\(.*\s*\)");
if (pattern.test(hoverLineText)){
hoverRange = document.getWordRangeAtPosition(position, pattern);
if (hoverRange) return new vscode.Hover(document.getText(hoverRange), new vscode.Range(position, position));
else return null;
}
else return null;
}
});
context.subscriptions.push(disposable3);
如您所见,悬停在空格上有效。但是正则表达式太宽松了,所以它确实会选择
这样的东西
if (asdasdasd)
while(adasd)
因为那些看起来也像函数调用。
我想在我的 VS 代码扩展中获取自定义单词的范围,如果我将鼠标悬停在它上面,并且文本行是否与模式匹配。这是我到目前为止写的:
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 ( )
视为一个单词?
这对我有用:
let disposable3 = vscode.languages.registerHoverProvider('plaintext', {
provideHover(document, position) {
let hoverRange;
const hoverLineText = document.lineAt(position.line).text;
const pattern = new RegExp("\w+\s*\(.*\s*\)");
if (pattern.test(hoverLineText)){
hoverRange = document.getWordRangeAtPosition(position, pattern);
if (hoverRange) return new vscode.Hover(document.getText(hoverRange), new vscode.Range(position, position));
else return null;
}
else return null;
}
});
context.subscriptions.push(disposable3);
如您所见,悬停在空格上有效。但是正则表达式太宽松了,所以它确实会选择
这样的东西if (asdasdasd)
while(adasd)
因为那些看起来也像函数调用。