當前位置:
首頁 > 最新 > 微軟為Python提供代碼智能感知功能:介紹Python語言伺服器

微軟為Python提供代碼智能感知功能:介紹Python語言伺服器

Visual Studio一直以來都以其在所有語言中的智能感知(代碼分析和建議)的質量而受到認可,而且Visual Studio在2011年就已經支持了Python的智能感知。我們很高興地宣布,我們將把Python支持提供給其他工具,以Microsoft Python語言伺服器的形式提供。它會在Visual Studio Code的Python 擴展中首次發布,該擴展預計7月份推出,稍後我們將以一個獨立組件的形式發布它,您可以使用任何與語言伺服器協議一起工作的工具使用它。

智能感知和語言伺服器的背景

自從Visual Basic問世以來,Visual Studio系列IDE的核心特性之一就是智能感知:當您在鍵入代碼時,變數、函數和其他符號會自動補全。通過靜態代碼分析、預編譯資料庫和UI重疊的巧妙組合,開發人員經常被真正理解他們代碼的編輯器所帶來的生產力提升所折服。

時至今日,智能感知仍然是其中最重要的功能之一。越來越多的工具要求用戶編寫代碼,在這些編輯器中完成編寫工作實際上是無法避免的。然而,編寫提供良好體驗所必需的靜態分析是很困難的,而且大多數實現都與所使用的編輯器緊密相關。這時語言伺服器協議的出現就非常必要了。

語言伺服器是實現語言伺服器協議的獨立程序,最初是為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中,變數是在賦值時附加(「綁定」)到值的名稱。無論類型是否與前一個類型相同,分配新名稱總是重新綁定值。所以,你僅僅在一個地方看到了" 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的一個核心特性。

VSCode中Python的特性

我們7月份發布的Visual Studio代碼的Python擴展將包括Python語言伺服器的早期版本。這個版本中VSCode開發人員的新特性包括:

輸入代碼時出現的語法錯誤

未找到模塊時的警告

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

改進了分析工作區和呈現完成的性能

能夠檢測整個工作區中的語法錯誤,而不僅僅是當前文件。

更快的啟動時間

更快的導入

更好地處理一些語言結構

所有這些都已經在Visual Studio 2017中提供,或者將在下一個小更新中提供。

擁有一個獨立的、跨平台的語言伺服器意味著我們可以在Visual Studio和Visual StudioCode中繼續創新和改進Python開發人員的智能感知體驗。

請務必查看我們的VS Code發布公告以獲得更多信息。Python語言伺服器的獨立版本將在未來幾個月發布,並將在Apache 2.0許可下可用。

英文原文:https://blogs.msdn.microsoft.com/pythonengineering/2018/07/18/introducing-the-python-language-server/

譯者:無路可套


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

單隱層BP神經網路的Python實現
為啥學了3個月Python還不會爬網站?癥結在這!

TAG:Python |