我正在进行vscode扩展,以提供语法突出显示和针对扩展HTML lang的自定义语言的建议。我正在使用CompletionItemProvider API。
在这种语言中,我们得到了用$%-$包裹的命令,例如 $%FOR(...)$ 或 $%IF(...)$ ,所以我想在输入$%时显示可用命令的建议。
但是由于某些原因,当光标位于%字符上时,该功能不起作用。
这是代码的简化版本。我基本上基于完成示例(https://github.com/Microsoft/vscode-extension-samples/blob/master/completions-sample/src/extension.ts):
const completionProvider = vscode.languages.registerCompletionItemProvider(
'*',
{
provideCompletionItems(document: vscode.TextDocument, position: vscode.Position) {
let linePrefix = document.lineAt(position).text.substr(0, position.character);
if (!linePrefix.endsWith("$%")) {
return undefined;
}
console.log("should show suggestions");
return [
new vscode.CompletionItem('IF', vscode.CompletionItemKind.Method),
new vscode.CompletionItem('FOR', vscode.CompletionItemKind.Method)
];
}
}
);
context.subscriptions.push(completionProvider);
该功能接收在编辑器上键入的文本,并检查用户是否刚刚输入了$%,如果是,则显示建议列表
结果是弹出窗口,显示“无建议”消息:
但是,如果我检查另一个以'%'以外的字符结尾的触发器字符串,则更改行
if (!linePrefix.endsWith("$%")) {
对此
if (!linePrefix.endsWith("$%$")) {
或这个
if (!linePrefix.endsWith("$%.")) {
有效!
有人可以解释我在做什么错吗?
答案 0 :(得分:0)
我遇到了同样的问题。我重置了 VS 代码的设置,现在它可以工作了。 警告:所有已安装的扩展程序都将被删除。