微软为Python提供代码智能感知功能:介绍Python语言服务器

微软为Python提供代码智能感知功能:介绍Python语言服务器

Visual Studio一直以来都以其在所有语言中的智能感知(代码分析和建议)的质量而受到认可,而且Visual Studio在2011年就已经支持了Python的智能感知。我们很高兴地宣布,我们将把Python支持提供给其他工具,以Microsoft Python语言服务器的形式提供。它会在Visual Studio Code的Python 扩展中首次发布,该扩展预计7月份推出,稍后我们将以一个独立组件的形式发布它,您可以使用任何与语言服务器协议一起工作的工具使用它。

智能感知和语言服务器的背景

自从Visual Basic问世以来,Visual Studio系列IDE的核心特性之一就是智能感知:当您在键入代码时,变量、函数和其他符号会自动补全。通过静态代码分析、预编译数据库和UI重叠的巧妙组合,开发人员经常被真正理解他们代码的编辑器所带来的生产力提升所折服。

微软为Python提供代码智能感知功能:介绍Python语言服务器

时至今日,智能感知仍然是其中最重要的功能之一。越来越多的工具要求用户编写代码,在这些编辑器中完成编写工作实际上是无法避免的。然而,编写提供良好体验所必需的静态分析是很困难的,而且大多数实现都与所使用的编辑器紧密相关。这时语言服务器协议的出现就非常必要了。

语言服务器是实现语言服务器协议的独立程序,最初是为Visual Studio Code创建的。编辑器可以运行语言服务器,并使用这个基于JSON的通信通道来提供和请求关于用户代码的信息。所有的分析和“智能”操作都由服务器处理,使编辑器能够专注于展示和与用户的交互。

Visual Studio Code支持的大多数语言都使用语言服务器,包括C++、C#和Go。从编辑的角度来看,这些语言之间没有区别——所有的智能都存在于语言服务器中。这意味着在Visual Studio代码中添加对新语言的支持很容易,而且根本不需要修改编辑器。语言服务器还可以与Sublime Text, vim和更多的插件一起使用。

介绍Python语言服务器

以前,Visual Studio中的Python智能感知非常依赖于Python IDE。近十年来,我们一直在发展这种支持。它对Python语言有着令人印象深刻的深刻理解,但只有Visual Studio用户才能享受这项工作。最近, 我们一直在重构我们的实现, 将其与 Visual Studio 分开, 并将其作为一个使用语言服务器协议的独立程序来使用。

从编辑器的角度来看,语言服务器是一个黑盒子,它被赋予文本并给出更多文本的列表。对于静态类型的语言 (如 C#), 这通常与查找变量定义和在那里指定的类型一样简单。但是, Python 变量在分配之后的任何时间里都可以更改类型, 并且在运行的任何代码中几乎任何位置都可以发生分配。这实际上使完美的静态类型推断成为不可能!

微软为Python提供代码智能感知功能:介绍Python语言服务器

技术问题除外:变量通常被认为是“孔”,其中只有兼容的值可以“适合”,其中孔的形状是由其类型决定的。在Python中,变量是在赋值时附加(“绑定”)到值的名称。无论类型是否与前一个类型相同,分配新名称总是重新绑定值。所以,你仅仅在一个地方看到了" self.value = ‘a string’"并不意味着"self.value"永远是一个字符串。)

我们的Python语言服务器使用迭代全程序分析来跟踪项目中所有变量的类型,同时模拟项目中所有代码的执行。通常这种方法对于复杂的程序来说需要花费数小时,并且需要无限的RAM,但是我们使用了许多技巧来使它能够快速完成,以供智能感知使用。我们还做了必要的权衡,以提供有用的信息,尽管不可能完美地推断Python程序中的所有类型。

最终的结果是,我们有一个黑盒子,它接收Python代码并提供编辑器所需的所有信息,包括工具提示、完成、查找定义和引用、全局变量重命名等等。为了提高性能,它在Windows、macOS和Linux上运行.NET Core,从Python 2.5到Python 3.7,支持最新的语言特性,比如async/await、类型注释和类型存根包(包括类型共享包,语言服务器中包含它的副本)。它在您键入时执行增量更新,并且已经被证明是Visual Studio的一个核心特性。

VS Code中Python的特性

我们7月份发布的Visual Studio代码的Python扩展将包括Python语言服务器的早期版本。这个版本中VS Code开发人员的新特性包括:

  • 输入代码时出现的语法错误

  • 未找到模块时的警告

  • 使用 typeshed 文件填充模块的缺失完成

  • 改进了分析工作区和呈现完成的性能

  • 能够检测整个工作区中的语法错误,而不仅仅是当前文件。

  • 更快的启动时间

  • 更快的导入

  • 更好地处理一些语言结构

微软为Python提供代码智能感知功能:介绍Python语言服务器

所有这些都已经在Visual Studio 2017中提供,或者将在下一个小更新中提供。

拥有一个独立的、跨平台的语言服务器意味着我们可以在Visual Studio和Visual Studio Code中继续创新和改进Python开发人员的智能感知体验。

请务必查看我们的VS Code发布公告以获得更多信息。Python语言服务器的独立版本将在未来几个月发布,并将在Apache 2.0许可下可用。

英文原文:https://blogs.msdn.microsoft.com/pythonengineering/2018/07/18/introducing-the-python-language-server/ 译者:无路可套


分享到:


相關文章: