參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

2021 年 8 月 (版本 1.60)

更新 1.60.1:此更新解決了這些問題

更新 1.60.2:此更新解決了這些問題

下載:Windows:x64 Arm64 | Mac:通用 Intel Apple 晶片 | Linux:deb rpm tarball Arm snap


歡迎使用 Visual Studio Code 2021 年 8 月版。此版本中有許多更新,我們希望您會喜歡,其中一些主要亮點包括

如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。

請在太平洋時間 9 月 2 日星期四上午 8 點(倫敦時間下午 4 點)參加 VS Code 團隊的直播,觀看此版本新功能的演示,並向我們提問。

內測版:想盡快嘗試新功能?您可以下載每晚的內測版構建,並儘快嘗試最新的更新。

工作臺

自動語言檢測

上一個版本,我們為未命名檔案引入了一個實驗性功能,該功能會根據檔案內容自動設定檔案語言模式。自動語言檢測功能使用機器學習來猜測語言,機器學習模型完全在您的機器本地執行。該模型由開源機器學習庫 Tensorflow.js 提供支援,並使用 GitHub 使用者 @yoeoGuesslang 機器學習模型。

此版本中,我們預設啟用自動語言檢測,並擴充套件檢測範圍,以包括沒有副檔名的檔案。在筆記本中,我們提供了一種使用語言選擇器進行語言檢測的簡單方法。

我們新增此功能是因為我們發現一些 VS Code 新使用者不知道如何設定語言模式,也不知道需要這樣做才能獲得 VS Code 豐富的特性集(語言著色和擴充套件推薦)。讓新使用者快速看到 VS Code 可用的語言功能和擴充套件,有助於他們快速上手編輯器。

此外,將未命名文字編輯器用作草稿本的高階使用者不再需要顯式設定語言模式,我們希望這將簡化他們的工作流程。

以下是自動語言檢測支援的幾個有趣場景。

從網上獲取一個示例並貼上到未命名編輯器中

主題:Panda Theme

“管道到程式碼”語言檢測(展示對無副檔名檔案的檢測)

主題:Panda Theme

筆記本語言選擇器中的自動檢測選項

主題:Panda Theme

終端編輯器確認對話方塊

關閉具有執行中子程序的終端編輯器時出現的對話方塊現在特定於終端編輯器,並且不再提供“儲存”終端的方法。

Terminal editor confirmation dialog

當編輯器未能恢復時,保持開啟而不是關閉

以前,當編輯器在視窗重新載入或應用程式重新啟動後未能恢復時,編輯器會自動關閉,直到找到成功載入的編輯器。這種行為導致令人沮喪的結果,精心建立的編輯器佈局會因為編輯器關閉而消失。

在此版本中,曾經成功開啟的編輯器將不會關閉,即使它未能恢復。編輯器會指示問題並提供重試操作。

Keep editors open and offer to Try Again

設定編輯器中程式碼塊的語法高亮

設定描述中的圍欄程式碼塊現在具有語法高亮。

Syntax highlighting of TypeScript code in the Settings editor

在側邊開啟設定編輯器

現在可以透過使用 openToSide 引數配置鍵繫結,在側邊組中開啟設定編輯器。

{
  "key": "cmd+,",
  "command": "workbench.action.openSettings",
  "args": {
    "openToSide": true
  }
}

這也適用於 workbench.action.openSettingsJson 命令。

編輯器

高效能括號對著色

編輯器現在支援原生括號對著色

Side by side comparison with bracket pair colorization on and off

可以透過設定 "editor.bracketPairColorization.enabled": true 來啟用括號對著色。所有顏色都是可主題化的,最多可以配置六種顏色。

我們實現此功能是為了解決 CoenraadS 著名的 Bracket Pair Colorizer 擴充套件的效能問題。

現在,即使是巨大文件中的更改也會立即反映出來。

自動完成中的內聯建議

當自動完成小部件顯示時,內聯建議現在可以擴充套件建議預覽。如果自動完成小部件中選定的建議可以透過內聯完成提供程式進行擴充套件,則該擴充套件會以斜體顯示。第一次按 Tab 仍只接受自動完成建議。第二次按 Tab 則會接受內聯建議。

此功能要求啟用建議預覽 ("editor.suggest.preview": true)。

更新的 Peek 檢視

我們對 Peek 檢視進行了視覺重新整理,以與其餘編輯器檢視保持一致。

Peek view for informational items

Peek view for warning items

Peek view for error items

Peek view for References view

終端

框線和塊元素字元的自定義渲染

當 GPU 加速開啟 (terminal.integrated.gpuAcceleration) 時,框線和塊元素字元現在使用畫素完美的自定義字形,而不是使用字型。這意味著,例如,即使您在終端中設定了行高或字間距,框也會無間隙地繪製。

Terminal glyph rendering before with gaps Terminal glyph rendering after without gaps

這是終端應用程式 Zenith 的一個示例,它顯示了部分周圍的框線字元以及圖表的塊元素。

Terminal rendering box characters and block elements

可以透過設定 "terminal.integrated.customGlyphs": false 來停用此功能。

某些字型下劃線的改進渲染

過去在終端中下劃線的渲染存在一些歷史問題,其中大部分透過切換到 WebGL 渲染器(預設)得到了修復。但這有一個例外,即在 Linux 上,字型中的下劃線字元意外地繪製在單元格邊界之下。

請注意,下面一行中的下劃線是如何渲染到單元格下方的

The underscore was previously rendered 1 pixel below the cell's bounds

雖然這在大多數情況下都工作正常,但在最底行卻失敗了,因為它繪製在畫布邊界之外。

我們現在透過檢測此類字型並將下劃線紋理向上移動,直到它位於單元格邊界內,從而解決了這個問題。此解決方案也適用於畫布渲染器,該渲染器以前不會顯示任何行的下劃線,因為它會剪裁行以避免重疊。

The underscore is now at the bottom of the cell's bounds

重新載入視窗後更快地重新連線

以前,重新載入視窗時,解析終端緩衝區狀態可能需要長達 300 毫秒,並且還可能發生損壞。對於幾個繁忙的終端,這會迅速增加!為了解決這個問題,恢復緩衝區的方法已從在 pty 主機上記錄大量最近的原始終端事件,更改為在 pty 主機上維護一個無頭終端前端並將所有資料寫入其中。

這種方法帶來了幾個好處

  • 可以微調要恢復的滾動回滾量。預設現在是 100,這是速度和資料量之間的一個良好平衡。滾動回滾量可以透過 terminal.integrated.persistentSessionScrollback 設定更改。
  • 得益於 xterm.js 的快速解析器,這應該對 CPU 使用率影響最小,並降低 pty 主機的整體記憶體使用量。
  • 終端模式現在顯式恢復,這些模式以前可能會被遺漏並導致緩衝區損壞。
  • 不再需要重播昂貴的調整大小事件,因為終端的緩衝區始終與其大小同步。
  • 由於恢復相對較快,因此它全部在一個幀中處理。這意味著寶貴的 CPU 時間不會浪費在渲染部分恢復的終端並進一步減慢速度。

這種新實現提供的速度提升取決於許多因素,例如終端數量、硬體、終端緩衝區大小以及終端中正在發生的事情。粗略估計,恢復一個完整的終端緩衝區應該能帶來大約 5-10 倍的速度提升。

我們還在 npm 上釋出了新的 xterm-headless 包,因此您可以在自己的專案中使用這項工作。

除錯

在 WATCH 檢視中設定值

現在可以在 WATCH 檢視中使用上下文選單中的設定值操作來設定監視表示式的值。

Shows WATCH view with the Set Value action selected in the context menu

除錯擴充套件必須選擇加入此功能,才能使設定值可用。目前,JS-debug、C# 和 C++ 擴充套件支援此功能,但我們預計其他除錯擴充套件也將很快跟進。

次要 UI 改進

  • VS Code 現在也在 VARIABLES 檢視、WATCH 檢視和 Debug hover 中檢測值連結。當變數的值是一個連結時,這將更容易透過點選它來跟蹤該連結。

  • 當啟動一個已在執行的除錯會話的另一個例項時,現在會彈出一個模態確認對話方塊,以防止意外啟動兩個會話。

  • 點選編輯器斷點槽中停用的斷點現在會啟用該斷點,而不是將其移除。

  • 當除錯會話處於活動狀態時,執行到行操作現在在編輯器的斷點槽上下文選單中可用。

新設定

  • 如果您想避免在除錯會話期間意外關閉視窗,可以啟用新設定 debug.confirmOnExit。將其設定為 always 後,在關閉視窗時會提示您確認是否要停止除錯會話。

    Confirm quit while debugging

  • 新設定 debug.console.acceptSuggestionOnEnter 控制是否應在除錯控制檯中透過 Enter 接受建議。Enter 也用於評估在除錯控制檯中鍵入的任何內容,因此此選項讓使用者更好地控制按下 Enter 時發生的情況。

JavaScript 除錯

舊版節點偵錯程式已移除

VS Code 長期以來一直包含一個內建的 Node.js 偵錯程式,併發布了一個單獨的 Chrome 偵錯程式。去年,我們為 Node.js 和 Chrome 引入了一個新的偵錯程式,自 VS Code 1.47(2020 年 7 月)以來,它一直是預設偵錯程式,並提供“選擇退出”選項。

在此版本中,舊版偵錯程式已從產品中移除,並在 Marketplace 中標記為已棄用。如果您是未選擇退出新 JavaScript 偵錯程式的大多數 VS Code 使用者之一,那麼對您來說沒有任何變化。

如果您需要舊版偵錯程式——例如,除錯 Node.js 6 程式——您可以安裝 [已棄用] Node Debug[已棄用] Debugger for Chrome 擴充套件,並分別使用 legacy-nodelegacy-chrome 啟動型別。

改進非同步函式和 Node.js 內部的單步執行

您可以設定偵錯程式的 skipFiles 以避免單步進入某些程式碼,包括 Node.js 內部,這在單步執行非同步函式時經常會遇到。

然而,Node.js 在處理 “黑盒化” 指令碼時並非總是表現出正確的行為,因此在此迭代中,我們在偵錯程式中引入了“合成黑盒化”。這應該會顯著提高使用 Node.js 程式時的可靠性,尤其是在單步進入非同步函式時。

在下一個版本中,我們計劃預設讓偵錯程式跳過 Node.js 內部。

安裝程式

預設將 VS Code 註冊為支援的檔案型別

Windows 11 引入了新的檔案資源管理器上下文選單,將開啟方式置於選單頂部,與開啟分組。此更新使得查詢所有可用編輯器和更改預設值變得更加容易。

遵循新的最佳實踐,VS Code 的複選框註冊 VS Code 為關聯檔案型別的編輯器現在在 Windows 安裝期間預設選中。我們還審查了關聯檔案型別列表,並將其擴充套件以包含更多常用檔案型別。

Windows 11 上的 Microsoft Store

隨著即將釋出的 Windows 11,新的 Microsoft Store 可以支援更傳統的應用程式型別和安裝程式。如果您已經透過 Windows Insider 程式測試 Windows 11,現在就可以在商店中搜索並安裝最新版本的 VS Code。安裝後,您將擁有與我們網站上的使用者安裝版本相同的 VS Code,並且更新將像今天一樣在應用程式內處理。

Notebook

筆記本現在支援 Markdown 單元格之間的連結

您可以使用以下方式建立指向 Markdown 單元格中標題的連結:

[Link text](#_header-slug)

header-slug 是標題的小寫文字,其中所有空格或特殊字元都替換為 -。上面的示例中的連結將指向標題 # Header Slug

處理大型輸出時的效能改進

我們優化了筆記本中處理大型輸出的方式,以顯著提高效能。

在幕後,VS Code 使用 Uint8Arrays 將筆記本輸出儲存為二進位制資料。以前,在擴充套件主機程序和渲染器程序之間傳輸輸出資料時,資料首先被轉換為數字值陣列,然後序列化為 JSON。

要了解為什麼這不利於效能,請考慮一個輸出文字:Hello Code! 的筆記本。它在內部儲存為 Uint8Array

new Uint8Array([72, 101, 108, 108, 111, 32, 67, 111, 100, 101, 33]);

該資料長 11 位元組。舊的實現會將其轉換為 JSON 字串

'[72,101,108,108,111,32,67,111,100,101,33]';

此字串長 41 位元組,是我們原始資料大小的 3.5 倍以上!這需要傳輸大量的額外位元組,並且接收者現在必須將該字串解析為 JSON,才能將其轉換回 Uint8Array。對於大小為數十 MB 的筆記本輸出,這種解析可能會成為一個顯著的瓶頸。

使用新實現,筆記本輸出在傳輸時保持為二進位制資料。您可以在此拉取請求中閱讀有關此實現細節的更多資訊。

此修復顯著改善了載入已儲存有大量輸出的筆記本的效能,並改善了筆記本在執行期間生成大量輸出時的效能。

onNotebook 啟用事件改進

當筆記本在工作區中開啟時,VS Code 將發出 onNotebook:{type}onNotebook:* 事件,以便在監聽這些事件時可以啟用筆記本擴充套件。以前,VS Code 會等待所有監聽這兩個事件的擴充套件註冊,然後才打開檔案,但現在它只會等待特定筆記本的序列化程式註冊。例如,當用戶在一個新的工作區中開啟 ipynb 檔案時,內建的 ipynb 序列化程式擴充套件將被啟用,檔案將立即開啟。同時,VS Code 會向所有其他擴充套件(例如 Jupyter、.NET Interactive 或 Julia 擴充套件)發出啟用事件。其他擴充套件的啟用不會減慢檔案操作,以確保快速開啟筆記本。

筆記本佈局自定義

現在可以透過編輯器工具欄直接自定義筆記本佈局設定。

Notebook layout customization actions available in the editor toolbar

語言功能

TypeScript 4.4

VS Code 現在包含 TypeScript 4.4。此更新帶來了對許多新語言功能和改進的支援,包括靜態塊新的嚴格選項。它還添加了新的工具改進並修復了一些重要的錯誤。

您可以在TypeScript 部落格上閱讀有關 TypeScript 4.4 的所有資訊。

JavaScript 和 TypeScript 的內聯提示

TypeScript 4.4 中最重要的新的工具功能是內聯提示支援。內聯提示向原始碼新增額外的內聯資訊,以幫助您理解程式碼的功能。

例如,引數名稱內聯提示顯示函式呼叫中引數的名稱。

Parameter name inlay hints

這可以幫助您一目瞭然地理解每個引數的含義,這對於接受布林標誌或引數容易混淆的函式特別有用。

要啟用引數名稱提示,請設定 javascript.inlayHints.parameterNames.enabledtypescript.inlayHints.parameterNames.enabled。有三個可能的值

  • none - 停用引數內聯提示。
  • literals - 僅顯示字面量(字串、數字、布林值)的內聯提示。
  • all - 顯示所有引數的內聯提示。

此外,VS Code 還提供了內聯提示,顯示 JavaScript 和 TypeScript 程式碼中的隱式型別資訊。

變數型別內聯提示顯示沒有顯式型別註釋的變數的型別。

設定 - javascript.inlayHints.variableTypes.enabledtypescript.inlayHints.variableTypes.enabled

Variable type inlay hints

屬性型別內聯提示顯示沒有顯式型別註釋的類屬性的型別。

設定 - javascript.inlayHints.propertyDeclarationTypes.enabledtypescript.inlayHints.propertyDeclarationTypes.enabled

Property type inlay hints

引數型別提示顯示隱式型別引數的型別。

設定 - javascript.inlayHints.parameterTypes.enabledtypescript.inlayHints.parameterTypes.enabled

Parameter type inlay hints

返回型別內聯提示顯示沒有顯式型別註釋的函式的返回型別。

設定 - javascript.inlayHints.functionLikeReturnTypes.enabledtypescript.inlayHints.functionLikeReturnTypes.enabled

Return type inlay hints

我們計劃繼續改進內聯提示,因此請務必分享您對新功能的任何反饋

JavaScript 檔案中的拼寫建議

VS Code 現在幫助您捕獲 JavaScript 檔案中的簡單拼寫錯誤。

Spelling suggestions in a plain JS files

拼寫建議僅在有相當高的置信度認為它們是實際錯誤,而不僅僅是 IntelliSense 引擎不理解的程式碼模式時才會顯示。您可以在新增該功能的 PR 中閱讀有關此的更多詳細資訊。

您也可以透過設定停用這些建議。

"javascript.suggestionActions.enabled": false

為了更全面的檢查,請嘗試在您的 JavaScript 程式碼中啟用完整語義檢查。這不僅可以幫助捕獲更多錯誤,還可以啟用幾個有用的快速修復。

typescript.tsserver.useSyntaxServer

新的 typescript.tsserver.useSyntaxServer 設定允許您控制 TypeScript 是否啟動專用伺服器以快速處理與語法相關的操作,例如計算程式碼摺疊。它替換了現在已棄用的 typescript.tsserver.useSeparateSyntaxServer 設定。

可能的值為:

  • auto - 啟動一個完整伺服器和一個用於語法操作的輕量級伺服器。語法伺服器用於加快程式碼摺疊等語法操作,並在專案載入時提供 IntelliSense。(預設)
  • always - 使用輕量級語法伺服器處理所有 IntelliSense 操作。此語法伺服器只能為已開啟的檔案提供 IntelliSense。
  • never - 不使用專用語法伺服器。使用單個伺服器處理所有 IntelliSense 操作。

預覽功能

鎖定編輯器組

隨著編輯器區域中的終端的引入,我們收到了使用者的報告,他們對終端編輯器太容易或意外地被檔案編輯器替換感到沮喪。預設情況下,檔案將始終在活動編輯器組中開啟,因此,即使終端處於活動狀態,檔案也會開啟並隱藏終端。

鎖定編輯器組提供了一種新的方法來解決此問題,不僅適用於終端,也適用於任何編輯器。如果您打開了多個編輯器組,現在可以鎖定它,無論是使用新命令還是使用“...”溢位選單。

Lock Group action on the editor context menu

鎖定組的行為與未鎖定組不同。

  • 除非使用者明確將其移動到鎖定組(例如,透過拖放),否則新編輯器不會在鎖定組中開啟。
  • 如果編輯器跳過鎖定組進行開啟,它將在最近使用的未鎖定組中開啟,或在鎖定組的側邊建立一個新組。
  • 編輯器組的鎖定狀態在重新啟動後會持久儲存並恢復。
  • 您也可以鎖定空組,從而實現更穩定的編輯器佈局。
  • 鎖定組在操作工具欄(右上角)中以鎖定圖標表示。

Locked editor group layout with lock icon

請看下面的演示,瞭解鎖定編輯器組的實際行為。即使 Markdown 預覽處於活動狀態,新檔案也會在左側編輯器組中開啟。

為此功能新增的命令是

  • workbench.action.experimentalLockEditorGroup
  • workbench.action.experimentalUnlockEditorGroup
  • workbench.action.experimentalToggleEditorGroupLock

新的上下文鍵 activeEditorGroupLocked 可用於根據組的鎖定狀態有條件地繫結命令。

注意:在鎖定編輯器組的設計最終確定之前,相關設定和命令是實驗性的。我們希望您對這項新功能提出反饋,所以請隨時報告問題

自動鎖定編輯器組

基於新的鎖定編輯器組概念,新的 workbench.editor.experimentalAutoLockGroups 設定允許您選擇當編輯器開啟時應自動鎖定組的編輯器。這僅適用於編輯器是第一個在空或新組中開啟的情況。

終端預設配置為自動鎖定新組。在下面的短影片中,即使終端處於活動狀態,從終端選擇的檔案也將在左側編輯器組中開啟。

如果您希望 Markdown 預覽自動鎖定組,可以將 mainThreadWebview-markdown.preview: true 新增到 experimentalAutoLockGroups 設定中。

在接下來的里程碑中,我們將致力於改進設定使用者體驗,以便能夠選擇編輯器而無需知道其識別符號。相關設定和命令是實驗性的,直到我們最終確定鎖定編輯器組的設計。我們再次希望收到您的反饋

“按檔名搜尋”快速選擇中的引號支援

此迭代中,我們增加了透過將搜尋字串置於引號中,從“按檔名搜尋”快速選擇 (⌘P (Windows, Linux Ctrl+P)) 中排除模糊搜尋結果的功能。

此功能表現出色的場景

當查詢只有幾個字元時

如果您想減少結果的“雜亂”

我們喜歡這種引用體驗,它感覺很直觀,因為大多數搜尋引擎都使用類似的機制,但我們希望收到您的反饋。我們還在考慮在問題 #131431 中討論的其他方法。

對擴充套件的貢獻

Jupyter

按行執行

VS Code 現在支援 Jupyter 筆記本中的按行執行功能。這是一種簡單的除錯模式,可讓您逐行執行單元格程式碼。要試用,請確保已安裝 ipykernel v6+ 作為您選擇的核心,然後選擇按行執行按鈕。

除錯

還實驗性地支援使用 VS Code 的完整除錯功能除錯 Jupyter 筆記本。要試用,請確保已安裝 ipykernel v6+ 作為您選擇的核心,設定 "jupyter.experimental.debugging": true,設定一個斷點,然後選擇除錯單元格命令。

Jupyter 鍵對映

我們將 Jupyter 經典鍵繫結提取到單獨的 Jupyter Keymap 擴充套件中,如果您喜歡使用 Marketplace 中的另一組 筆記本鍵繫結,您可以停用此擴充套件。

Python

全新測試介面

得益於新的測試 APIPython 擴充套件對其測試功能進行了改進。您現在可以享受更穩定的測試發現、導航和狀態渲染體驗,以及搜尋測試、執行選定測試、重新執行上次執行的測試等新功能!

Running tests with the new Python Test Explorer

從編輯器在終端中執行和除錯 Python 檔案

現在可以直接從編輯器中使用 Python 擴充套件在終端中執行和除錯您的 Python 檔案。

GitHub 拉取請求和議題

備受期待的在 GitHub Pull Requests and Issues 擴充套件中展開和摺疊所有評論的功能現已推出。所有評論都可以透過命令GitHub Pull Requests: Expand All CommentsGitHub Pull Requests: Collapse All Comments進行展開和摺疊。還有一個設定 githubPullRequests.commentExpandState 用於控制展開/摺疊狀態。最後,您也可以從評論 UI 內部摺疊所有評論。

Collapse all pull request comments button

要了解所有新功能和更新,您可以檢視擴充套件 0.30.0 版本的完整更新日誌

擴充套件創作

Web 擴充套件

當 VS Code 在瀏覽器中執行時,擴充套件被載入到同樣在瀏覽器中執行的擴充套件主機中。“Web 擴充套件主機”受到瀏覽器的限制,擴充套件無法訪問本地檔案系統或平臺功能。為了幫助擴充套件作者更新其擴充套件以支援在 Web 版 VS Code 中執行,現在提供了Web 擴充套件創作指南。在這裡您將瞭解哪種型別的擴充套件在 Web 上執行效果最佳,如何訪問 VS Code API,以及如何使用虛擬檔案系統。

除了 Web 擴充套件指南,yo code 擴充套件生成器現在有一個選項可以搭建Web 擴充套件,並且還支援 @vscode/test-web 模組,用於從命令列測試 Web 擴充套件。

如果您還沒有親身體驗過 Web 版 Visual Studio Code,您可以在 GitHub 儲存庫的 <> Code 選項卡中按 '.'(句點鍵),然後您將啟動 Web 版 VS Code 來瀏覽和編輯原始碼。

命令的短標題

commands 貢獻點允許擴充套件為命令定義 UI 屬性,例如標題、類別或圖示。選單,另一方面,是顯示命令的“位置”,選單可能會顯示命令的部分或全部 UI 屬性。例如,有些菜單隻渲染圖示,而另一些選單渲染標題或類別加標題。作為擴充套件作者,可能很難想出一個全域性選單和本地選單都同樣適用的命令標題。例如,“命令面板”可以顯示比上下文選單更多的單詞。

為了允許不同的標題,有一個新的 shortTitle 屬性。它允許命令提供一個更短的標題,根據 UI 效果良好,例如命令面板中的筆記本:清除所有單元格輸出,以及筆記本工具欄中更短的清除所有

應用程式主機已新增到環境名稱空間

.env 名稱空間現在包含應用程式主機 appHost 屬性。appHost 允許擴充套件開發人員確定 VS Code 所在的宿主環境。示例包括桌面、GitHub Codespaces、github.dev 和 vscode.dev。

RendererContext.workspace.isTrusted for notebook renderers

傳遞給筆記本渲染器的上下文物件上的新屬性 workspace.isTrusted 允許擴充套件作者檢查當前工作區是否受信任。

import type { ActivationFunction } from 'vscode-notebook-renderer';

export const activate: ActivationFunction<void> = (ctx) => {
  return {
    renderOutputItem: (outputInfo, element) => {
      if (ctx.workspace.isTrusted) {
        // Render normally. Still take precautions to avoid script injection and
        // only enable as much functionality as your renderer needs.
      } else {
        // Only render safe content. Always make sure it has been properly sanitized.
      }
    }
  }
};

平臺特定擴充套件

我們在平臺特定擴充套件方面取得了進展,該功能允許擴充套件作者為不同平臺(Windows、macOS、Linux)建立單獨的擴充套件版本。我們一直在與 Marketplace 團隊合作開發此功能,並已確定解決方案。在這個里程碑中,我們開始了實施工作,並計劃儘快將其提供給擴充套件作者。您可以關注問題 #23251 以獲取更新並提供反饋。

更新的 codicons

以下新圖示已新增到我們的 codicon 庫

An example of updated codicons

  • folder-library
  • run-errors

Walkthrough 貢獻的更新

使用可主題化的 SVG 作為 Walkthrough 步驟媒體

Walkthrough 步驟現在可以在其 media 物件中指定 svg 屬性。除了更好的縮放支援外,SVG 還提供對主題標記的訪問,這可以使媒體在視覺上與工作臺的其餘部分保持一致。有關更多資訊,請參閱我們的主題化 Webview 內容指南。

宣告 Walkthrough 感興趣的檔案

Walkthroughs 現在支援可選的 featuredFor 引數,該引數列出了給定 Walkthrough 適用的檔案型別。當在工作區資料夾中找到這些檔案時,Walkthrough 將以更高的視覺優先順序呈現。

任務預設組 API

TaskGroupisDefault 屬性已最終確定。擴充套件現在可以獲取任務,然後讀取任務 groupisDefault 屬性,以確定任務是否為該組的預設任務。

偵錯程式擴充套件創作

“DebugSessionOptions”中新增“managedByParent”屬性

DebugSessionOptions 型別中新增了一個標誌 managedByParent。當傳遞給 startDebugging API 時,它控制是否將 disconnectrestart 等生命週期請求傳送到新建立的會話或其父會話。

除錯介面卡協議的“showUser”屬性

launch 請求失敗時,VS Code 現在將遵守除錯介面卡響應中傳送的 showUser 屬性。如果提供了 showUser 屬性且為 false,VS Code 將不會顯示帶有錯誤的模態對話方塊。如果 showUser 屬性缺失或為 true,VS Code 將像以前一樣顯示錯誤對話方塊。

對於其他除錯介面卡協議 (DAP) 請求,沒有變化。如果 showUsertrue,錯誤將透過通知顯示。否則,將不會向用戶顯示任何內容。

VS Code 不再為“noDebug”除錯會話註冊斷點

當 DAP 的 launch 請求的 noDebug 屬性設定為 true 時,VS Code 將不再呼叫任何斷點註冊 DAP 請求(setBreakpointssetExceptionBreakpointssetDataBreakpointssetFunctionBreakpointssetInstructionBreakpoints)。

VS Code 現在支援 DAP 的“setExpression”請求

如果除錯介面卡實現了 setExpression 請求(supportsSetExpression 功能為 true),VS Code 將在兩種情況下使用 setExpression

  • 在 VARIABLES 和 WATCH 檢視中,用於更改變數的值,如果除錯介面卡不支援 setVariable 請求(supportsSetVariable 功能缺失或為 false),並且如果變數具有 evaluateName 屬性且可編輯(VariablePresentationHint 中的 readOnly 屬性不為 true)。
  • 在 WATCH 檢視中,用於更改可賦值表示式的值,如果監視表示式可編輯(VariablePresentationHint 中的 readOnly 屬性不為 true)。

在 DAP 錯誤訊息中禁止顯示“開啟 launch.json”按鈕

除錯介面卡協議允許 MessageErrorResponse 返回一個 url,其中可以找到關於訊息的附加資訊,以及一個 urlLabel,它作為開啟 URL 的 UI 呈現給使用者。當 VS Code 在模態對話方塊中向用戶顯示訊息時,會顯示一個標題為 urlLabel 的按鈕。在此版本之前,VS Code 還會新增一個標題為開啟 launch.json 的按鈕。如果訊息的 url 使用“command”方案,例如 command:myExtension.fixError,則不再新增該按鈕。

除錯介面卡協議

新的“memory”事件釋出

memory 事件已完成,現在可在 除錯介面卡協議 的 1.49 版和相應的 npm 模組中使用。如果除錯介面卡已收到 initialize 請求的 supportsMemoryEvent 功能為 true 的值,則除錯介面卡可以發出 memory 事件以指示某個記憶體範圍已更新。

建議的擴充套件 API

每個里程碑都會帶來新的提議 API,擴充套件作者可以嘗試使用它們。一如既往,我們希望得到您的反饋。要嘗試提議的 API,您需要執行以下操作:

  • 您必須使用 Insiders 版本,因為提議的 API 經常更改。
  • 您的擴充套件的 package.json 檔案中必須包含以下行:"enableProposedApi": true
  • 將最新版本的 vscode.proposed.d.ts 檔案複製到您專案的源位置。

您不能釋出使用提議 API 的擴充套件。下個版本中可能會有破壞性更改,我們絕不希望破壞現有擴充套件。

對型別層次結構的支援

有一個關於 TypeHierarchyProvider 的 API 提案,允許擴充套件為符號提供超型別和子型別。該 API 已準備好試用,如果您發現問題或有建議,可以在 VS Code 儲存庫中輸入。

隨處建立終端

提議的終端位置 API 允許在面板和編輯器區域中建立終端拆分。

查詢和事件:終端是否“互動過”

一個新的提議 API Terminal.state 和 window.onDidChangeTerminalState 允許查詢終端是否“互動過”。互動意味著資料已傳送到程序,可能出於各種原因發生,主要原因是鍵盤輸入。

QuickPickItems 中的按鈕

有一個關於在 QuickPickItem 中新增和處理按鈕的 API 提案。我們希望這將使擴充套件能夠提供更豐富的 Quick Pick 使用者互動。

Buttons in QuickPickItems

試用一下,告訴我們您的想法。需要注意的是,目前Quick Pick 的滾動位置存在已知問題,我們認為新的提議 API 會加劇這個問題。我們正在研究解決此問題的正確 API 集。請透過參與該問題讓我們知道您的想法。

測試標籤

測試標籤是一個提議的 API,它提供了一種組織測試的方法,以及指示哪些測試是可執行的。

非錯誤測試輸出

測試 API 支援測試失敗訊息,但以前沒有辦法將非錯誤輸出與特定測試用例相關聯。我們正在評估一種方法來實現此目的,透過將可選的 TestItemlocation 傳遞給 TestRun.appendOutput 方法。如果您有任何意見,請在問題 #129201 上留下反饋!

內聯完成提供程式:與自動完成小部件的互動

InlineCompletionContext 有一個新欄位 selectedCompletionInfo,其中包含自動完成小部件中當前選定建議的詳細資訊。此外,每當使用者更改自動完成小部件中選定的專案時,都會請求 InlineCompletionItemProvider 提供內聯建議。如果內聯建議擴充套件了選定的建議專案,則該擴充套件會以斜體顯示。

工程

修復對 RHEL7 和 Centos7 發行版的支援

在 VS Code 1.53 版中,我們更新了構建映象以使用較新的 Electron 版本,導致本機模組的 CXXABI 要求發生變化,這破壞了我們 rpm 包在某些發行版中的使用,參見問題 #115784。透過更新到 Electron v13,我們現在能夠使用與執行時相同的編譯器工具鏈構建我們的本機模組,具體來說,我們現在使用 Clang 並靜態連結執行時的 libcxx。這使我們能夠繞過 CXXABI 要求,僅增加二進位制檔案大小約 10 MB,並恢復對這些發行版的支援。感謝您的耐心和對 Insiders 版本的測試幫助。

文件

VS Code 中的 Julia

新增了 Visual Studio Code 中的 Julia 主題,描述了 VS Code 對 Julia 程式語言 的支援,透過 Julia 擴充套件實現。Julia 擴充套件包括豐富的語言功能,例如程式碼完成、程式碼導航和除錯,以及整合的 REPL 和繪圖導航器。

Julia extension

Azure 機器學習

您可以閱讀 VS Code 中的 Azure 機器學習 概述,瞭解 Azure 機器學習擴充套件 如何讓您直接從 VS Code 使用基於 Azure 機器學習雲的 機器學習模型

值得注意的修復

  • 82489:使用“AltGr”鍵時鍵盤輸入不正確
  • 115945:除錯工具欄貢獻的命令在工具欄停靠時缺失
  • 118196:重新啟動除錯會話時,args-list 中的元素不更新
  • 121201:iPad 上選單選擇未正確渲染
  • 124128:除錯停止時,擴充套件開發視窗未關閉
  • 125259:除錯在啟動前不儲存 launch.json
  • 126102:SkipFiles 仍然會暫時開啟要跳過的檔案,導致速度變慢
  • 126911:擴充套件除錯:停止除錯會話不關閉視窗
  • 128484:debug:啟動失敗時停用模態對話方塊的選項
  • 129019:作為關閉狀態啟動的樹檢視需要另一次重新整理(或重新開啟)才能顯示內容
  • 129469:設定編輯器輸入框可以更大一些
  • 129645:在設定 UI 中啟用程式碼塊語法高亮
  • 129844:markdownEnumDescriptions 不會刪除設定 UI 中的 markdown ##,也不會刪除 settings.json 中的 ##
  • 130265:Node 偵錯程式在未處理的 Promise 拒絕時不中斷

感謝

最後但同樣重要的是,衷心感謝以下本月為 VS Code 做出貢獻的人們:

對我們問題跟蹤的貢獻

vscode 的貢獻

vscode-generator-code 的貢獻

vscode-js-debug 的貢獻

vscode-pull-request-github 的貢獻

debug-adapter-protocol 的貢獻

language-server-protocol 的貢獻

monaco-editor 的貢獻

monaco-html 的貢獻

monaco-languages 的貢獻