微軟爲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/ 譯者:無路可套


分享到:


相關文章: