2

我遵循了 Visual Studio 代码中的本教程,了解如何创建语言服务器来验证扩展文件。我继续制作 lsp-sample 项目的副本并让它运行。

在我对这个项目的分析中,我注意到只有工作区中打开或更改的文件被验证。

// The content of a text document has changed. This event is emitted
// when the text document first opened or when its content has changed.        
documents.onDidChangeContent((change) => { 
    validateTextDocument(change.document);
});

这对于大多数情况来说都很好,但我认为当工作区打开时,所有文件(无论是否被编辑器打开)都应该经过验证,以便在 vscode 中拥有更丰富的 IDE 体验。

任何有语言服务器协议经验的人都可以帮助我如何做到这一点吗?据我所知,“文档”对象仅填充打开的文件。

非常感谢,里卡多

4

1 回答 1

3

您需要检查来自客户端rootPathrootUri初始initialize请求。从那里,您可以验证其所有文件并根据需要报告错误。当然,这两种情况都有可能null

workspace/workspaceFolders如果客户端支持工作区文件夹,那么您将需要与and交互workspace/didChangeWorkspaceFolders并从中提取相关信息以确定如何验证您的文件。

于 2018-03-28T08:40:58.937 回答