Visual Studio是一款适用于任何程序员的编辑器,不论使用什么语言它都能支持。它捆绑的工具、扩展到Marketplace(应用商店)中的插件,我们已支持超过150种语言。我们还公开承诺开发VS Code(Visual Studio Code是一款轻量级的WEB集成环境),同时开放和开源VS Code核心组件。我们最有名的组件之一是Monaco editor, 而另一个使VS Code大放光彩的组件,是一个开放式,基于JSON的协议,任何人使用此组件实现"语言服务(language server)"可以为VS Code添加新的语言支持。
就在今天,在旧金山召开的DevNation大会上,我们联手Red Hat and Codenvy宣布了一个消息: visiostudio语言服务器协议正由来自这个行业的软件工具发明者和语言提供者修改。就像开发人员从之前的TypeScript或者在OmniSharp写C#时代过渡到现在,对于语言提供者来说,今天的变革意味着开发人员将从中获利,使用各式各样的开发工具和运行系统体验变得更好。此外,这还意味着,任何一个开发人员都可以在任何工具上使用自己钟爱的编程语言将编程进行到底,即便这工具不是在VS上写的。
Visual Studio Code为很多编程语言提供语言支持。只有对语言有更深层次理解的语言服务商,才能更好地支撑特定的某种编程语言。VS Code 和这些服务器之间的交互丰富了编程体验,比如,它会在编辑的时候提示“错误和警告”,“重构”,“转到定义”。
这个例子说明了开发工具和语言服务器在一个常规的编辑会话过程中是如何进行语义信息通信的:
用户在开发工具中打开一个文件(称之为document):开发工具通知语言服务器文档已打开(didOpen),并将文档的相关信息保存在内存中。
用户进行编辑:开发工具通知语言服务器文档已更改(didChange),并且语言服务器更新程序的语义信息。同时,语言服务器分析这些信息,将找到的一些错误和警告通知服务器(diagnostics)。
用户在某一标志处执行“转向定义”(Go To Definition):开发工具向服务器发送一个definition请求。服务器用保存有文档定义的uri信息和文档的range信息进行响应。基于这些信息,工具打开定义位置处的相应文档。
用户关闭文档(文件):开发工具发送didClose通知,告知语言服务器该文档不再保存在内存中,而是由文件系统进行维护(例如,存储在文件系统中)。
开发工具和语言服务器之间通过JSON-RPC进行通信,在一次典型的会话过程中会进行多次这样的通信。
这种架构使得VS Code可以和多个语言服务器进行交互,每个服务器可以用任何一种语言实现(开发工具同样由独立的语言实现),并且支持大量的特性,只要它利用的是通用的基于JSON的协议。
令人兴奋的是Codenvy也采用了这个协议,它已将该协议添加到了下一代Eclipse IDE(Eclipse Che)中,Red Hat同样支持该协议,并正致力于发布一个面向Java的独立的语言服务器,支持该协议的任何工具都可以使用这个语言服务器。之所以如此,原因在于该协议能够使语言服务器执行一次,不同的工具却都可以利用它。
完整的协议规范发布在公共的GitHub版本库(public GitHub repository)中,该协议发展史也包含其中。有更多的语言和工具继续支持该协议,所以我们会和开放社区中的Red Hat、Codenvy等一起对其持续地支持和发展。任何人都可以提问、发布文件或者在repo库中提交pull请求,就像其它的任何开源项目。
对编程语言社区来说,这仅仅是一个开始,就像 OmniSharp (C#),JSON,C++,xText,JavaFX 和 R 一样,社区已经承诺在未来发布服务来支持他们的语言。协议实现的完整列表,这包括语言服务,编辑器,和在 GitHub repo 上可用的 SDK。
如果你想要学习更多,可以查看 keynote,也可以查看来自 Red Hat 和 Eclipse Che 团队的博客文章,还可以访问在 GitHub 上的 语言服务协议仓库。这甚至包括 语言服务预排(Language Server Walkthrough),在那里你可以用 TypeScript 和 Node.js 语言单步调试。当然,你也可以在任何语言中实现一个语言服务!
快乐编程吧!
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务