我正在尝试在VSCode中为面向可编程ASIC的汇编器提供语言支持。 到目前为止,我只有TextMate语法,现在我正在尝试了解如何实现语言服务器。 我正在向
学习https://github.com/Microsoft/vscode-extension-samples/tree/master/lsp-sample
甚至可以调试我的环境。
我在努力的地方是我不了解示例中的完成机制。
我在调试时看到的是,第一个字母(单词边界)很快就变成了:
据我所知,覆盖此内容的唯一代码是server.ts文件中的这一部分
// This handler provides the initial list of the completion items.
connection.onCompletion(
(_textDocumentPosition: TextDocumentPositionParams): CompletionItem[] => {
// The pass parameter contains the position of the text document in
// which code complete got requested. For the example we ignore this
// info and always provide the same completion items.
return [
{
label: 'TypeScript',
kind: CompletionItemKind.Text,
data: 1
},
{
label: 'JavaScript',
kind: CompletionItemKind.Text,
data: 2
}
];
}
);
// This handler resolves additional information for the item selected in
// the completion list.
connection.onCompletionResolve(
(item: CompletionItem): CompletionItem => {
if (item.data === 1) {
item.detail = 'TypeScript details';
item.documentation = 'TypeScript documentation';
} else if (item.data === 2) {
item.detail = 'JavaScript details';
item.documentation = 'JavaScript documentation';
}
return item;
}
);
我测试了更多标签,当Completionparser检查标签中的大写字母时,它出现了。 增加了2个标签“ TwoMore”和“ JetBrain”,它们的行为方式相同,例如m / M或b / B也弹出了。
不明显的是为什么会这样?