🚀 在 VS Code 中

2024 年 9 月 (版本 1.94)

更新 1.94.1:此更新解決了這個安全性問題

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

下載:Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap


歡迎使用 Visual Studio Code 2024 年 9 月發行版本。此版本包含許多更新,希望您會喜歡,以下是一些重點摘要:

如果您想在線上閱讀這些發行說明,請前往 code.visualstudio.com 上的更新Insiders: 想要盡快試用新功能嗎?您可以下載每晚的 Insiders 組建,並在最新更新可用時立即試用。

GitHub Copilot

在聊天中切換語言模型

先前,我們宣布您可以註冊以搶先體驗 OpenAI o1 模型。一旦您取得存取權,您將在 VS Code 的 Copilot 聊天中擁有 Copilot 聊天模型選取器控制項,以選擇要用於聊天對話的模型版本。

Copilot model picker control in the Chat view enables switching to another language model.

內嵌聊天中的 GPT-4o

我們已將 Copilot 內嵌聊天升級至 GPT-4o,以便在您於編輯器中使用聊天時,為您提供更快、更準確且更高品質的程式碼和說明。

聊天中的公用程式碼比對

您可以允許 GitHub Copilot 傳回可能與 GitHub.com 上公開可用的程式碼相符的程式碼。當您的組織訂閱個人訂閱啟用此功能時,Copilot 程式碼完成功能已為您提供有關偵測到的比對詳細資訊。我們現在也會在 Copilot 聊天中向您顯示這些公用程式碼的比對。

如果您的組織或訂閱已啟用此功能,您可能會在回應結尾看到一則訊息,其中包含檢視比對連結。如果您選取此連結,將會開啟一個編輯器,其中顯示比對程式碼參考的詳細資訊。

Chat code referencing example.

在 GitHub 部落格上取得有關 GitHub Copilot 中的程式碼參考的詳細資訊。

聊天中的檔案建議

在聊天輸入欄位中,您現在可以輸入 #<filename> 以取得檔案名稱建議,並將其快速附加到您的提示作為內容。這適用於支援檔案附件的聊天位置,例如聊天檢視、快速聊天、內嵌聊天和筆記本聊天。

我們已改良 Copilot 回應中提及的任何工作區檔案路徑的呈現方式。當您詢問@workspace 問題時,這些路徑非常常見。

您首先會注意到的是,工作區檔案的路徑現在包含檔案圖示。這可讓您輕鬆地區分聊天回應中的檔案路徑。檔案圖示是以您目前的檔案圖示主題為基礎。

Paths to workspace files in the response now render using file icons.

這些路徑是互動式連結,因此只需選取它們即可開啟對應的檔案。您甚至可以使用拖放來在新編輯器群組中開啟檔案,或在按住 Shift 鍵後再拖放檔案,將其插入文字編輯器。

預設情況下,這些連結僅顯示檔案名稱,但您可以將滑鼠游標停留在其上方以查看完整檔案路徑。

Hovering over a workspace path to see the full workspace path.

您也可以在其中一個路徑上按一下滑鼠右鍵,以開啟包含其他命令的上下文功能表,例如複製資源的相對路徑,或在作業系統的檔案總管中顯示檔案。

The context menu for a workspace path in chat provides options to open the file or copy its path.

我們計劃在即將到來的反覆運算中進一步改善工作區路徑呈現方式,並對回應中的符號名稱進行類似的改善。

拖放檔案以新增聊天內容

您現在可以透過將檔案或編輯器索引標籤從工作台中直接拖曳到聊天中,輕鬆地將其他檔案附加為聊天提示的內容。對於內嵌聊天,請按住 Shift 鍵並拖放檔案,以將其新增為內容,而不是在編輯器中開啟。

記錄中包含檔案附件

有多種方法可以將檔案或編輯器選取範圍附加為與聊天請求相關的內容。先前,此內容僅針對目前請求新增,且未包含在後續請求的記錄中。現在,這些附件會保留在記錄中,因此您可以繼續參考它們,而無需重新附加它們。

Chat conversation shows that Copilot keeps track of attached files across multiple prompts.

Python 原生 REPL 中的內嵌聊天和完成

Python 擴充功能使用的原生 REPL 編輯器現在直接在輸入框中支援 Copilot 內嵌聊天和程式碼完成。

接受並在筆記本中執行產生的程式碼

當您使用 Copilot 內嵌聊天在筆記本中產生程式碼時,您現在可以接受並直接從內嵌聊天執行產生的程式碼。

在筆記本聊天中附加變數

當您在筆記本中使用 Copilot 時,您現在可以將 Jupyter 核心中的變數附加到您的請求中。新增變數可讓您更精確地控制聊天請求的內容,以便從 Copilot 獲得更相關的回應。

輸入 #,後接變數名稱,或使用 📎 控制項 (⌘/ (Windows、Linux Ctrl+/)) 在內嵌聊天中新增內容變數。

重新整理的聊天使用者體驗

我們已使用全新的歡迎體驗重新整理聊天檢視,並更新了聊天輸入區域的版面配置。您現在可以使用 @ 按鈕輕鬆找到可用的聊天參與者和斜線命令的清單,包括內建的參與者和您已安裝的擴充功能的聊天參與者。您也可以透過在聊天輸入框中輸入 /@ 來尋找參與者和斜線命令。

Updated Chat view welcome experience.

語意搜尋結果 (預覽)

設定github.copilot.chat.search.semanticTextResults

搜尋檢視可讓您跨檔案執行精確搜尋。我們現在已將功能新增至搜尋檢視,此功能使用 Copilot 提供語意相關的搜尋結果。

此功能仍為預覽版,且預設情況下未啟用此設定。試用看看,並告訴我們您的想法!

修正測試失敗 (預覽)

設定github.copilot.chat.fixTestFailure.enabled

我們新增了特殊邏輯,以協助您診斷失敗的單元測試。此邏輯會在某些情況下由 /fix 斜線命令觸發,您也可以使用 /fixTestFailure 斜線命令直接叫用它。預設情況下,此命令在聊天中已啟用,但可以透過設定 github.copilot.chat.fixTestFailure.enabled 停用。

自動化測試設定 (實驗性)

設定github.copilot.chat.experimental.setupTests.enabled

我們新增了一個實驗性的 /setupTests 斜線命令,可協助您設定工作區的測試設定。此命令可以建議測試架構、提供設定和組態步驟,並建議 VS Code 擴充功能以提供 VS Code 中的測試整合。這可以節省您開始程式碼測試的時間和精力。

當您使用 /tests 命令為程式碼產生測試時,如果看起來您的工作區尚未設定此類整合,它可以建議 /setupTests 和測試擴充功能。

從聊天開始偵錯 (實驗性)

設定github.copilot.chat.experimental.startDebugging.enabled

在此里程碑中,我們改進了實驗性的 /startDebugging 斜線命令。此命令可讓您輕鬆尋找或建立啟動組態,並無縫開始偵錯應用程式。當您在 Copilot 聊天中使用 @vscode 時,預設情況下 /startDebugging 現在可用。

A user types /startDebugging flask app port 3000 in the panel chat and is provided with the launch configuration.

命令中心中的聊天 (實驗性)

設定chat.commandCenter.enabled

我們正在實驗命令中心的項目,以存取聊天。它提供快速存取所有相關的聊天命令,例如啟動不同的聊天體驗或將內容附加到您的提示。請注意,命令中心本身需要啟用,聊天命令中心項目才會顯示。

Chat Command Center button and the drop-down menu with relevant chat actions.

改良的時間內容 (實驗性)

設定github.copilot.chat.experimental.temporalContext.enabled

透過時間內容,您可以指示內嵌聊天將最近開啟或編輯的檔案視為聊天內容的一部分。我們已改良此功能,並邀請所有人試用看看。

自訂指示 (實驗性)

設定github.copilot.chat.experimental.codeGeneration.useInstructionFiles

設定github.copilot.chat.experimental.testGeneration.instructions

在上一個里程碑中,我們推出了自訂程式碼產生指示。我們已進一步擴充此功能,以在工作區的 .github/copilot-instructions.md 檔案中定義程式碼產生的共用指示。這些常見指示補充了您個人的程式碼產生指示。使用 github.copilot.chat.experimental.codeGeneration.useInstructionFiles 設定啟用程式碼產生指示檔案。

此外,您現在可以在設定中定義測試產生的指示,或從檔案匯入指示。例如,如果您始終想要為您的測試使用特定的單元測試架構。在 github.copilot.chat.experimental.testGeneration.instructions 設定中設定測試產生指示。

協助工具

開始使用

我們的說明功能表現在包含開始使用協助工具功能導覽,讓您更輕鬆地探索和使用協助工具選項。導覽向您介紹功能,例如協助工具說明對話方塊、協助工具訊號、鍵盤快速鍵等等。

Get Started with Accessibility Features product walkthrough.

註解協助工具改良功能

我們推出了註解執行緒控制項的協助工具檢視。此檢視包含相關的編輯器內容,讓您可以保持專注,而無需在編輯器和協助工具檢視之間切換。同樣地,編輯器內容現在會在註解面板的協助工具檢視中提供。

我們也推出了註解:將焦點放在目前行上的註解命令,讓您可以使用鍵盤從編輯器快速移動到註解控制項。還有新的動作可移至編輯器中下一個和上一個註解範圍:註解:移至下一個註解範圍註解:移至上一個註解範圍

工作台

變更擴充功能的帳戶喜好設定

在此反覆運算中,我們探索了如何改善變更擴充功能慣用帳戶的體驗。例如,如果您有多個 GitHub 帳戶,且您不小心使用錯誤的帳戶登入 GitHub Copilot,而現在需要使用另一個帳戶。

現在可以透過多種方式在事後變更該喜好設定。

  • 活動列中的帳戶功能表 > <您的帳戶> > 管理信任的擴充功能 > 選取擴充功能的齒輪圖示

    Manage trusted extensions Quick Pick, with gear button highlighted.

  • 擴充功能檢視 > 使用驗證的擴充功能上的上下文功能表 (或齒輪圖示) > 選取帳戶喜好設定

    Account preferences option in the context menu of an extension.

  • 擴充功能詳細資料檢視 > 齒輪圖示 > 選取帳戶喜好設定

    Account preferences option in the gear menu of an extension.

選擇上述任何選項都會將您帶到快速選取,您可以在其中變更擴充功能使用的帳戶。

The account preference Quick Pick that enables you to select extensions for a given account.

當您變更擴充功能的帳戶喜好設定時,這會將事件傳送至擴充功能,且由擴充功能自行處理。如果您沒有看到預期的行為,請針對該擴充功能回報問題,以便處理帳戶喜好設定體驗。

此外,如果您對此流程有任何意見反應,請告訴我們。

檢視與設定檔相關聯的資料夾和工作區

在此里程碑中,我們在設定檔編輯器中推出了資料夾與工作區區段。此區段從中央位置列出與特定設定檔相關聯的所有資料夾和工作區。從此區段中,您可以新增或修改資料夾,或在新視窗中開啟資料夾或工作區。

Folders & Workspaces section in the Profile editor.

跨所有設定檔更新擴充功能

在此里程碑中,我們推出了跨所有設定檔更新擴充功能的功能。如果您有多個設定檔,且想要讓擴充功能版本保持同步,這會很有用。先前,您必須切換至每個設定檔並更新該設定檔的擴充功能。

擴充功能檢視中的警告

當有任何無效的擴充功能或因版本不相容而停用的擴充功能時,擴充功能檢視現在會顯示警告徽章和相關資訊。

Extensions view shows a warning badge and description about the warning.

在檔案總管中尋找

我們已改良檔案總管檢視中的尋找功能,讓您更輕鬆地在大型專案中搜尋檔案。您可以使用 ⌥⌘F (Windows、Linux Ctrl+Alt+F) 鍵盤快速鍵,在檔案總管中開啟尋找控制項。搜尋時,您可以在模糊比對和連續比對之間切換,以獲得更彈性的結果。

請注意,在搜尋期間,某些上下文功能表動作會暫時停用。敬請期待即將推出的更多改良功能!

發行說明

我們針對在發行說明中參考設定採用了簡化的語法 (setting.name),其在發行說明編輯器中顯示時,也會具有現在熟悉的設定齒輪呈現方式。

Setting URL in release notes enables navigating to the Settings editor directly.

編輯器

內嵌提示改良功能

我們已新增 editor.inlayHints.maximumLength 設定,此設定控制在多少個字元後截斷內嵌提示。

我們也修訂了內嵌提示的更新策略,現在,在輸入時,它們應該會更快更新,但不會造成游標的任何水平移動。

實驗性編輯內容

在此里程碑中,我們推出了新的實驗性設定 editor.experimentalEditContextEnabled。此設定啟用 EditContext API,以支援 VS Code 中的編輯體驗。EditContext API 的採用讓我們能夠修正某些 IME 組成錯誤。一般而言,我們相信從長遠來看,它將改善編輯體驗,並最終預設啟用。

請務必在啟用此設定後重新載入您的 VS Code 視窗,以充分利用它。

原始碼控制

原始碼控制圖表檢視改良功能

在上一個里程碑中,我們新增了新的原始碼控制圖表檢視。在此里程碑中,我們致力於擴充新新增檢視中可用的功能,並潤飾檢視的版面配置。

存放庫選取器

當您開啟包含多個存放庫的資料夾/工作區時,原始碼控制圖表檢視標題會顯示存放庫選取器。預設情況下,原始碼控制圖表檢視會顯示使用中的存放庫,與狀態列中的資訊相符。您可以使用存放庫選取器將原始碼控制圖表檢視鎖定至特定存放庫。

Repository picker control in the title of the Source Control Graph view.

記錄項目參考選取器

在此里程碑中,我們已將新的記錄項目參考選取器新增至原始碼控制圖表檢視標題。您可以使用此參考選取器將圖表中顯示的記錄項目篩選至不同的分支,或檢視多個分支。

History item reference Quick Pick control to choose one or more items.

預設情況下,記錄項目參考選取器會設定為 Auto,這會呈現目前記錄項目參考、其遠端和選用基底的圖表。

History item reference picker control in the title of the Source Control Graph view.

記錄項目動作

在此里程碑中,我們擴充了原始碼控制記錄項目的上下文功能表中可用的動作清單。我們新增了從記錄項目建立新分支/標籤、選取要包含的記錄項目和簽出 (分離) 項目的動作。

Context menu for items in the Source Control Graph view.

原始碼控制圖表設定

在此里程碑中,我們新增了一組新的設定,以便您可以自訂圖表

  • scm.graph.badges - 控制在原始碼控制圖表檢視中顯示哪些徽章
  • scm.graph.pageOnScroll - 控制當您捲動到清單結尾時,原始碼控制圖表檢視是否載入下一頁項目
  • scm.graph.pageSize - 在原始碼控制圖表檢視中顯示的預設項目數,以及載入更多項目時的項目數

筆記本

跨儲存格的多重游標支援 (預覽)

筆記本編輯器現在支援儲存格之間的多重游標編輯,並具有設定 notebook.multiCursor.enabled。目前,這只能透過快速鍵 Ctrl+D 觸發,並支援核心編輯器動作以及編輯器命令的有限子集。

差異編輯器顯示文件中繼資料變更

筆記本差異編輯器現在也會顯示對文件後設資料所做的變更,例如核心資訊和儲存格語言。

Notebook dif editor showing side-by-side changes to the document metadata.

在差異檢視中摺疊未變更的區域

筆記本差異檢視現在會遵循設定 diffEditor.hideUnchangedRegions.enabled。啟用後,未變更的程式碼區塊預設會摺疊,這使得檢閱大型筆記本中的變更更容易。

Diff editor shows unchanged code blocks as collapsed.

Web Worker 中的筆記本序列化 (實驗性)

此版本推出了一項實驗性功能,可在 Web Worker 中啟用筆記本序列化。當您使用大型筆記本時,這有助於減少擴充功能主機程序中的主要執行緒封鎖時間。預設情況下,此功能已停用,但可以透過將 ipynb.experimental.serialization 設定為 true 來啟用。

偵錯

支援資料色彩化

VS Code 支援偵錯配接器協定的新文字樣式功能。這讓變數檢視、監看式檢視、浮動式視窗和偵錯主控台中的資料能夠透過 ANSI 逸出序列進行色彩化。

JavaScript 偵錯工具

改良 HTML 元素的顯示

我們已改良 HTML 元素在 JavaScript 偵錯工具中的顯示方式。先前,它們呈現為原始物件,難以導覽。現在,它們更密切地反映 DOM 結構,且我們利用新的色彩化功能來提供一些基本語法醒目提示。

HTML elements are colorized in the JavaScript Debug Console.

啟動組態中 Node 命令的自動完成

launch.json 檔案中,針對安裝在 node_modules 中的命令列應用程式,有一個新的自動完成協助程式可用。這讓設定 vitestnest 等工具的偵錯更容易。

更簡潔的已載入來源檢視

我們變更了 Node.js 內建模組、評估指令碼和 WebAssembly 模組的來源路徑結構,以使已載入來源檢視的雜訊更少且更易於瀏覽。

語言

TypeScript 5.6

我們的 JavaScript 和 TypeScript 支援現在使用 TypeScript 5.6。此主要更新包含許多語言和工具改良功能,以及重要的錯誤修正和效能最佳化。

您可以在 TypeScript 部落格上閱讀有關 TypeScript 5.6 發行版本的所有資訊。我們也在以下章節中包含了一些工具重點。

偵測某些常見的「永遠為 true」程式設計錯誤

假設您在 JavaScript 或 TypeScript 中使用正則運算式,並撰寫如下程式碼

const str = '...'
if (/\d+(\.\d+)?/) {
  ...
} else {
  ...
}

糟糕!看起來我們忘記在正則運算式上呼叫 .test(),這表示 if 條件式永遠評估為 true。這不是我們想要的。

即使指出此問題時很明顯,但像這樣的錯誤卻非常容易犯,甚至在 VS Code 中造成了真正的錯誤!值得慶幸的是,TypeScript 現在會報告程式中一些最常見的「永遠為 true」錯誤。這包括針對永遠不是值的條件值測試 if 條件式,或其中一側無法觸及的條件運算式,例如 /abc/ ?? /xyz/

查看 TypeScript 發行說明,以取得有關此功能運作方式的更多範例和詳細資訊。

區域優先順序診斷

在非常長的 JavaScript 或 TypeScript 檔案中工作?由於區域優先順序診斷,您應該會開始看到類型錯誤的診斷顯示速度稍快一些。這表示我們會嘗試取得目前可見程式碼的診斷,並先顯示這些診斷,即使檔案其餘部分的診斷仍在計算中。

此最佳化與具有成千上萬行的複雜檔案最相關。您可能不會注意到較小檔案有任何變更。

改良 JavaScript 和 TypeScript 的認可字元

認可字元可以透過在輸入時自動接受完成來加速編碼。例如,在 JavaScript 和 TypeScript 中,. 通常被視為認可字元。這表示要輸入 myVariable.property.,您只需輸入 myv.p.,其中第一個 . 接受 myVariable 的完成,而第二個 . 接受 property 的完成。

這些認可字元現在由 TypeScript 計算,這表示它們可以更好地考慮程式的結構。我們也可以隨著時間推移繼續改進對它們的支援。

預設情況下會啟用認可字元,但可以透過將 editor.acceptSuggestionOnCommitCharacter 設定為 false 來停用。

自動匯入的排除模式

新的 autoImportSpecifierExcludeRegexes 可讓您透過使用正則運算式,從特定套件排除自動匯入。例如,若要從模組 (例如 lodash) 的子目錄排除自動匯入,您可以設定

{
  "typescript.preferences.autoImportSpecifierExcludeRegexes": ["^lodash/.*$"]
}

您可以使用 javascript.preferences.autoImportSpecifierExcludeRegexes (適用於 JavaScript) 和 typescript.preferences.autoImportSpecifierExcludeRegexes (適用於 TypeScript) 來設定此功能。如需更多詳細資訊,請參閱 TypeScript 5.6 發行說明

遠端開發

您可以使用遠端開發擴充功能,透過 開發容器、SSH 遠端機器或遠端通道,或是 Windows Subsystem for Linux (WSL) 作為全功能開發環境。

重點功能包括

  • 透過 SSH/通道 連接到 Kubernetes 容器
  • 手動指定 GPU 可用性

您可以在遠端開發發行說明中了解更多關於這些功能的資訊。

擴充功能貢獻

Python

執行包含程式碼覆蓋率的測試

您現在可以在 VS Code 中執行包含程式碼覆蓋率的 Python 測試!若要執行包含程式碼覆蓋率的測試,請在測試總管中選取覆蓋率執行圖示,或從您通常觸發測試執行的任何選單中選取「執行程式碼覆蓋率」。如果您使用 pytest,Python 擴充功能將使用 pytest-cov 外掛程式來執行覆蓋率,否則將使用 coverage.py 進行 unittest。

程式碼覆蓋率執行完成後,程式碼行會在編輯器中以高亮度顯示,表示程式碼行級別的覆蓋率。這些高亮度顯示可以關閉,並透過底部的「執行結果」面板重新開啟,在最近一次的測試執行下方會顯示「關閉測試覆蓋率」或「檢視測試覆蓋率」。此外,「測試覆蓋率」分頁會出現在測試總管的「測試」分頁下方,同樣帶有燒杯圖示,您也可以透過命令面板中的測試:聚焦於測試覆蓋率檢視 (⇧⌘P (Windows、Linux Ctrl+Shift+P)) 導覽至此分頁。在此面板上,您可以檢視工作區中每個檔案和資料夾的程式碼行和分支覆蓋率指標。

如需更多關於執行包含程式碼覆蓋率的 Python 測試的資訊,請參閱我們的 Python 文件。如需關於測試覆蓋率的一般資訊,請參閱 VS Code 的測試覆蓋率文件

Python 預設問題比對器

Python 擴充功能現在包含預設問題比對器,簡化了 Python 程式碼中的問題追蹤,並提供更多關聯式回饋。若要整合此功能,請將 "problemMatcher": "$python" 新增至 task.json 中的任務。問題比對器會掃描任務的輸出,以尋找錯誤和警告,並將其顯示在「問題」面板中,進而強化您的開發工作流程。

以下是使用 Python 預設問題比對器的 task.json 檔案範例

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Run Python",
      "type": "shell",
      "command": "${command:python.interpreterPath}",
      "args": ["${file}"],
      "problemMatcher": "$python"
    }
  ]
}

Python 終端機 REPL 中的 Shell 整合

Python 擴充功能現在包含一個設定,可選擇是否加入 PYTHONSTARTUP 腳本,此腳本會在您輸入 python 或任何其他方式在終端機中啟動 Python REPL 之前執行。如果您選擇加入,即可使用終端機 shell 整合的功能,例如命令裝飾、重新執行命令、執行最近的命令(如果這些功能在 Mac 或 Linux 中)。您可以透過設定 python.terminal.shellIntegration.enabled 來啟用此功能。

Pylance 語言伺服器模式

有一個新的設定 python.analysis.languageServerMode,可讓您在目前的 IntelliSense 體驗或針對效能最佳化的輕量級體驗之間做選擇。

如果您不需要完整廣度的 IntelliSense 功能,並且偏好 Pylance 盡可能節省資源,您可以將 python.analysis.languageServerMode 設定為 light。否則,若要繼續使用您目前在 Pylance 中擁有的體驗,您可以將其設定為 default

此新功能會覆寫以下設定的預設值

設定 light 模式 default 模式
"python.analysis.exclude" ["**"] []
"python.analysis.useLibraryCodeForTypes" false true
"python.analysis.enablePytestSupport" false true
"python.analysis.indexing" false true

以上設定仍然可以個別變更以覆寫預設值。

GitHub Pull Requests

GitHub Pull Requests 擴充功能上已取得更多進展,此擴充功能可讓您處理、建立及管理 pull request 和 issue。請檢閱擴充功能的 0.98.0 版變更記錄,以了解重點功能。

擴充功能撰寫

移除桌面應用程式中的自訂記憶體配置器

在此版本中,我們已移除在 1.78 版中新增至桌面應用程式擴充功能主機的自訂記憶體配置器。此自訂記憶體配置器充當橋樑,以支援與 V8 沙箱不相容的 Node.js 原生附加元件,這些附加元件是針對 Electron 執行階段建置的。您可以參考此追蹤 issue 以取得更多背景資訊。

我們已確保前 5000 名擴充功能不受此變更影響。如果您的擴充功能或擴充功能的相依性受到此變更影響,您可以嘗試以下補救建議

  • 如果您的擴充功能使用 n-api,則在使用外部陣列緩衝區時,將會傳回狀態 napi_no_external_buffers_allowed。在這種情況下,您可以切換為使用 API 的複製版本 napi_create_buffer_copy
  • 如果您的擴充功能使用 node-addon-api,請參閱此文件,以取得替代 API 和編譯時間設定。
  • 如果您想避免複製造成的效能成本,可以使用 V8 記憶體配置器,以確保緩衝區後端儲存與 V8 沙箱相容。

我們也新增了遙測功能,以識別可能受到影響的擴充功能和原生附加元件,以便我們能主動聯繫擴充功能作者,並在可能的情況下提供協助。如果您的擴充功能受到影響,且以上建議皆不適用,請在我們的討論串中留言,我們將竭誠協助您。

偵錯配接器協定

我們正式規範了如何在 偵錯配接器協定中,為變數和輸出的顯示內容著色和設定樣式。著色功能透過 ANSI 控制序列運作,且用戶端和偵錯配接器都必須在其初始化請求和功能中支援 supportsANSIStyling

預覽功能

多個 GitHub 帳戶

現在可以在 VS Code 中同時登入多個 GitHub 帳戶。

此功能在 VS Code Insiders 中預設為啟用。在 VS Code 穩定組建版本中,您可以透過 github.experimental.multipleAccounts 設定來開啟此功能。

以下是您可能需要多個帳戶的幾個情境

  • 使用帳戶 1 進行設定同步,並使用帳戶 2 進行 GitHub Pull Request 擴充功能
  • 使用帳戶 1 進行 GitHub 擴充功能(用於推送),並使用帳戶 2 進行 GitHub Copilot

若要使用此功能,只需觸發登入動作(透過內建功能(例如設定同步)或透過擴充功能),您就會看到登入不同帳戶的選項。如果您稍後需要變更帳戶,此功能也與新的帳戶偏好快速選取器完美搭配。

雖然大多數項目應該能與您現有的擴充功能繼續正常運作,但有些行為可能還無法在此多帳戶世界中完美運作。如果您認為有改進空間,請在這些擴充功能上開啟 issue。藉由相對較新的 vscode.authentication.getAccounts('github') API,擴充功能有很大的能力來處理多個帳戶。

在下一個迭代中,我們計畫預設為所有使用者開啟此功能。

基於 MSAL 的 Microsoft 驗證

我們一直在朝向讓 Microsoft 驗證堆疊使用 MSAL (Microsoft 驗證程式庫) 的方向邁進。這是一項龐大的工程,但我們在此迭代中取得了重大進展。這項工作涵蓋所有 VS Code 用戶端,包括 VS Code 和 VS Code for the Web

  • 對於 vscode.dev,我們已為所有 Microsoft 驗證請求啟用基於瀏覽器的 MSAL.js。換句話說,vscode.dev 現在完全基於 MSAL。

  • 對於 VS Code 桌面用戶端,我們已將此功能置於設定 microsoft.useMsal 後方。目前此功能置於設定後方,因為我們計畫朝向 代理流程 邁進,這將使 VS Code 能夠使用作業系統的驗證狀態。因此,為了盡可能減少中斷,我們將先完成該工作,然後再廣泛啟用此功能。也就是說,如果您渴望嘗試此新驗證方式,歡迎您試用並提供我們意見反應。

您可以在 Issue #178740 中查看整個 VS Code 轉換到 MSAL 的詳細狀態。

TypeScript 5.7

此版本包含對即將推出的 TypeScript 5.7 版本的初始支援。請查看 TypeScript 5.7 計畫 以取得詳細資訊。

若要開始使用 TypeScript 5.7 的預覽組建版本,請安裝 TypeScript Nightly 擴充功能

建議的 API

語言模型工具

我們持續迭代我們的 LanguageModelTool API。此 API 包含兩個主要部分

  1. 擴充功能註冊工具的功能。工具是一項旨在由語言模型使用的功能。例如,讀取檔案的 Git 歷史記錄。

  2. 語言模型支援工具的機制,例如擴充功能在發出請求時傳遞工具、語言模型請求工具調用,以及擴充功能將工具調用的結果傳回。

在此里程碑中,我們新增了工具在執行前請求使用者確認的功能。這對於可能具有某些副作用的工具很有幫助。

請查看 issue #213274 以取得更多詳細資訊或向我們提供意見反應。

注意:API 仍在積極開發中,內容將會變更。

工程

ESM 正在為 VS Code 出貨

我們終於在 VS Code 穩定發行版本中推出 ESM 工作。這表示 VS Code 核心的所有層級 (electron、node.js、瀏覽器、工作執行緒) 都在 JavaScript 中使用 importexport 語法進行模組載入和匯出。我們所有舊版 AMD 載入器的用法皆已停用,並將在 10 月的償債週中移除。

轉換到 ESM 大幅改善了啟動效能。首先,移除了大量的 AMD 額外負荷,其次,主要工作台套件大小也縮減了 10% 以上

Graph showing the trend of the main bundle load time, showing a large drop after introducing ESM.

既然我們已完全轉換為 ESM,我們計畫改善 VS Code 的工程系統。有了 ESM,許多現代化工具將可為我們所用,我們非常興奮能在不久的將來分享更多關於此方面的詳細資訊。

注意:擴充功能不受此變更影響,且不會透過 ESM 載入,請參閱 https://github.com/microsoft/vscode/issues/130367 以取得詳細資訊。

使用 NPM 作為預設套件管理員

自 2024 年 9 月初開始,我們已完成在 microsoft/vscode 儲存庫中,將套件管理從 yarn 轉換為 npm。此決策是基於 VS Code 的特定需求,並以以下標準為中心

  • 效能:我們最初因為效能考量而轉換為 yarn,而 npm 現在也能滿足我們的需求
  • 安全性:我們透過限制暴露面並減少我們依賴的工具數量,使我們的供應鏈更安全

重要修正

  • 226401 fileWatcher 持續消耗 CPU 200%+
  • 10054 [WSL]:當 localhostForwarding = false 時,「連接埠」索引標籤錯誤地回報 WSL 中的連接埠已轉發到本機

感謝您

最後但同樣重要的是,衷心感謝您,VS Code 的貢獻者們。

Issue 追蹤

對 Issue 追蹤的貢獻

Pull request

vscode 的貢獻

vscode-docs 的貢獻

vscode-extension-samples 的貢獻

vscode-js-debug 的貢獻

vscode-jupyter 的貢獻

vscode-languageserver-node 的貢獻

vscode-pull-request-github 的貢獻

vscode-python-debugger 的貢獻

vscode-vsce 的貢獻

vscode-wasm 的貢獻

language-server-protocol 的貢獻