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

2023 年 8 月 (版本 1.82)

更新 1.82.1:此更新解決了此安全問題

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

更新 1.82.3:此更新解決了此安全問題

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


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

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

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

輔助功能

視窗標題中的焦點檢視

window.title 設定現在有一個 ${focusedView} 變數,如果檢視當前獲得焦點,它會顯示標題欄中的檢視名稱。

內聯完成的輔助功能檢視

內聯完成,例如來自 GitHub Copilot 擴充套件的內聯完成,現在可以在輔助功能檢視中進行檢查。

改進了工作臺導航一致性

上一個迭代中,我們使用 ⌘↓ (Windows, Linux Ctrl+Down)⌘↑ (Windows, Linux Ctrl+Up) 在輸入控制元件(例如,搜尋或篩選輸入)及其結果之間進行導航的體驗在擴充套件檢視、鍵盤快捷方式編輯器等元件中保持一致。此功能已擴充套件到設定編輯器和 GitHub 拉取請求評論控制元件。

這也適用於終端和終端輔助緩衝區之間的導航。

更新了終端輔助緩衝區鍵繫結

以前,終端輔助緩衝區透過 Shift+Tab 開啟。這與某些 shell 中的現有鍵盤快捷方式衝突。因此,我們刪除了該鍵繫結,轉而使用 ⌘↓ (Windows, Linux Ctrl+Down)⌥F2 (Windows Alt+F2, Linux Shift+Alt+F2),以與其他輔助功能檢視保持一致。

輔助功能檢視中的操作

輔助功能檢視中的操作允許螢幕閱讀器使用者針對給定功能執行 next/previous、停用輔助功能詳細程度等操作。這些操作位於檢視上的便捷工具欄中,以便可以保留當前上下文。

輔助功能檢視中的“轉到符號”

輔助功能幫助對話方塊和一些輔助功能檢視現在具有轉到符號⇧⌘O (Windows, Linux Ctrl+Shift+O))操作,以便更快地導航內容。

執行後聚焦終端輔助緩衝區

終端現在有一個 terminal.integrated.focusAfterRun 設定,使用者可以指定在呼叫終端:在活動終端中執行選定文字時,是應聚焦終端的輔助緩衝區 (accessible-buffer)、終端本身 (terminal) 還是不聚焦任何內容 (none)。

工作臺

內建埠轉發

VS Code 現在具有內建的埠轉發系統。此功能允許您透過網際網路將本地執行的服務共享給其他人和其他裝置。要使用它,請在面板區域中選擇“”檢視中的“轉發埠”按鈕(埠:聚焦到埠檢視)。

Forward a Port button displayed in the Ports view

主題:Codesong(在vscode.dev上預覽)

埠轉發使用者指南中閱讀有關埠轉發的更多資訊。

命令中心現在預設啟用

命令中心是幾個月前推出的,作為一種快速發現和與 VS Code 互動的方式。您可以將其用作啟動板,用於在命令面板中查詢命令、執行任務以及其他快速體驗。我們一直在標題欄中顯示命令中心進行實驗,並收到了積極的反饋,所以我們覺得是時候預設啟用它了。

這是一個使用命令中心以及後退和前進按鈕的影片。

我們看到命令中心在 VS Code 中查詢任何內容方面具有巨大潛力,因此請關注未來的更多改進!

注意:如果您不想顯示命令中心,可以右鍵單擊標題欄並取消選中下拉選單中的“命令中心”條目以將其隱藏。

控制固定編輯器如何透過鍵盤或滑鼠關閉

有一個新設定 workbench.editor.preventPinnedEditorClose,可以更好地控制固定選項卡如何響應鍵盤快捷鍵或滑鼠中鍵關閉編輯器。預設情況下,固定選項卡不會因鍵盤或滑鼠互動而關閉(預設值 keyboardAndMouse)。您可以相應地更改此設定。

  • keyboardAndMouse - 固定選項卡不會因鍵盤快捷鍵或滑鼠中鍵而關閉(自 1.82.x 以來的預設值)。
  • keyboard - 固定選項卡不會透過鍵盤快捷鍵關閉(直到 1.81.x 的預設值)。
  • mouse - 固定選項卡不會透過滑鼠中鍵關閉。
  • never - 固定選項卡將始終透過鍵盤快捷鍵或滑鼠中鍵關閉。

狀態列的新主題顏色和更新的主題顏色

狀態列已為其專案提供了許多可主題化的顏色。現在有更多顏色允許主題化懸停前景和背景顏色。

  • statusBarItem.errorHoverBackground
  • statusBarItem.errorHoverForeground
  • statusBarItem.warningHoverBackground
  • statusBarItem.warningHoverForeground
  • statusBarItem.remoteHoverBackground
  • statusBarItem.remoteHoverForeground
  • statusBarItem.offlineHoverBackground
  • statusBarItem.offlineHoverForeground

以下兩個顏色名稱已更新,因為該顏色不再適用於整個狀態列,而僅適用於遠端指示器。

  • statusBar.offlineBackground 重新命名為 statusBarItem.offlineBackground
  • statusBar.offlineForeground 重新命名為 statusBarItem.offlineForeground

編輯器

粘滯滾動

此迭代中,粘性滾動 UI(位於編輯器頂部,檢視:切換粘性滾動)進行了多項改進。

  • 現在,預設情況下,當編輯器水平捲軸滾動時,粘性滾動會隨之橫向滾動。可以透過停用 editor.stickyScroll.scrollWithEditor 來關閉此功能。
  • 可以透過按住 Shift 鍵並懸停在粘性滾動行上來檢視範圍的最後一行。按住 Shift 鍵單擊一行會將編輯器游標移動到範圍的最後一行。
  • 摺疊圖示已新增到粘性滾動邊欄中。這些圖示的呈現遵循控制編輯器邊欄中摺疊圖示呈現的設定 editor.showFoldingControls

儲存時排序 JSON

現在可以在儲存時對 JSON 或 JSONC(帶註釋的 JSON)檔案進行排序。使用設定 json.sortOnSave.enable 啟用此功能。

透過鍵盤導航程式碼操作和快速修復

您現在可以透過輸入與可用選單選項對應的任何關鍵字或字母來快速瀏覽快速修復、程式碼操作或原始碼管理選單(它們使用“操作”控制元件)。篩選器使用模糊匹配,搜尋不限於首字母或字首,而是包括整個標籤文字。

Example of searching "Surround" or "Read" in the Refactor menu

差異編輯器

在此版本中,我們預設啟用了新的差異編輯器。我們還改進了一些新的差異編輯器功能並修復了許多錯誤。

移動程式碼檢測

此迭代中,我們完善了移動程式碼檢測功能。可以透過 "diffEditor.experimental.showMoves": true 或在差異編輯器上下文選單中啟用它。啟用後,將檢測從一個位置移動到同一檔案中的不同位置的程式碼塊,並繪製箭頭以指示程式碼塊移動到的位置。

即使程式碼塊略有修改,也會檢測到程式碼移動。“比較”按鈕可用於比較移動前後的程式碼塊。

Moved code detection demo

摺疊未更改的程式碼標題

使用 "diffEditor.hideUnchangedRegions.enabled": true 或選擇編輯器上下文選單中的地圖圖示以啟用摺疊未更改的程式碼塊。

在此版本中,現在為摺疊的程式碼塊提供了麵包屑,以指示哪些符號已摺疊。單擊麵包屑項會顯示選定的項。

Collapsed code headers

動態佈局

如果差異編輯器的寬度太小,編輯器會自動切換到內聯檢視。如果編輯器再次足夠寬,則會恢復以前的佈局。將 "diffEditor.useInlineViewWhenSpaceIsLimited": false 設定為停用此行為。

按鈕切換狀態

我們更新了差異編輯器中按鈕的切換樣式,使其更醒目。

舊的切換樣式(未切換和已切換),未切換的按鈕顏色較暗。

Old, untoggled dim buttons, Old, toggled

新的切換樣式(未切換和已切換),已切換的背景有陰影。

New, untoggled visible buttons, New, toggled with shaded background

終端

控制終端在啟動時如何恢復

新設定 terminal.integrated.hideOnStartup 控制在應用程式啟動時是否自動建立終端。以下選項可用:

  • never(預設值):在啟動時從不隱藏終端檢視。
  • whenEmpty:僅當沒有持久會話恢復時才隱藏終端。
  • always:始終隱藏終端,即使有持久會話恢復也是如此。

停用帶括號的貼上模式

帶括號的貼上模式是終端中的一個功能,它將貼上的文字包裝在特殊序列中,以便 shell 可以使用該資訊。啟用此功能的 shell 應該正確支援此功能,但有時可能會出現問題,此時您可能會在貼上時意外看到 [201~ 等文字。此功能現在可以明確停用,即使 shell 請求它,此功能也會停用。

執行後終端聚焦設定

終端現在有一個 terminal.integrated.focusAfterRun 設定,以便使用者可以指定在呼叫終端:在活動終端中執行選定文字時是否應該聚焦終端。其他選項是聚焦終端的輔助緩衝區 (accessible-buffer) 或不聚焦任何內容 (none)。

可調整大小的查詢

終端的查詢控制元件現在可以使用左側的調節器進行調整大小,類似於編輯器。

Hover the left border of the Find control to see the resize handle

懸停或拖動調節器以調整查詢控制元件大小時,調節器會高亮顯示。

停用 GPU 加速時渲染速度更快

當停用 GPU 加速時使用的“DOM 渲染器”的效能已透過元件重寫得到顯著改善。重寫側重於減少使用的 DOM 元素數量,並且隨著終端尺寸的增大,節省的效能也會更好。

在具有 117 列和 36 行的終端上測試典型的渲染呼叫時,之前大約需要 10 毫秒,之後大約需要 2 毫秒。在測試機器上將終端尺寸增加到 300x100 時,渲染時間記錄為之前約 25-35 毫秒,之後約 4-5 毫秒。

更好的選擇渲染

當 GPU 加速關閉時,選擇渲染現在與 webgl 渲染器相同,所有背景都更改為主題的選擇背景顏色,以確保良好的對比度和一致性。

The background when selected will now be the same as the rest of the selection

對調暗文字尊重一半的最小對比度

最小對比度功能允許終端更好地控制終端中的前景顏色,以確保它們以特定的對比度顯示。過去此功能的一個問題是調暗的文字 (CSI 2 m) 也會尊重對比度,這意味著它可能與普通文字一樣突出。PowerShell 的自動完成鬼影文字就是一個不適用的例子。

調暗的文字現在將具有一半的對比度要求。雖然這意味著文字可能不再滿足最小對比度,但它現在與普通文字明顯不同,這更重要。

Now dimmed text should be visually different for typical minimum contrast ratios

配置失焦時游標外觀

當終端未聚焦時,游標的外觀現在可以透過 terminal.integrated.cursorStyleInactive 進行配置。這支援現有 terminal.integrated.cursorStyle 的所有樣式,以及 outline(預設值)和 none

The new inactive cursor styles are underline, block, line, outline and none

開啟檢測到的連結命令(⇧⌘O (Windows, Linux Ctrl+Shift+O))的行為已更改,以在保持高效能的同時,更容易搜尋整個終端緩衝區中的連結。以前,它只為視口和上方一點提供連結,並在末尾有一個笨重的“顯示更多連結”按鈕來搜尋緩衝區的其餘部分。

Previously the last entry must have been selected to search everything

現在,視口中的連結會立即呈現,因此 Quick Pick 可以儘快顯示。

Now initial results are restricted to the initial viewport

一旦 Quick Pick 顯示,就會在後臺檢測終端緩衝區的其餘部分的連結。輸入以篩選時,VS Code 會等待所有結果並將其包含在篩選結果中。

Results from the entire buffer are included in the search when filtering begins

請注意,CodeQL.yml 在輸入篩選器之前沒有包含,因為它在視口之外。

終端現在可以檢測以下 GNU 風格的連結格式:

  • sourcefile:lineno.column
  • sourcefile:line1-column1.column2
  • sourcefile:line1.column1-line2.column2

除錯

JavaScript 偵錯程式

WebAssembly 除錯

JavaScript 偵錯程式現在將自動將 WebAssembly 模組反編譯為 WebAssembly 文字格式,並允許您在反編譯的模組中逐步執行和設定斷點。

Breakpoint hit during a WebAssembly debug session

主題:Codesong(在vscode.dev上預覽)

源對映載入改進

在此版本中,我們對源對映的載入方式進行了許多改進:

  • 在某些常見情況下,例如使用 tsc 命令列編譯的應用程式中,源對映的載入速度提高了 3-5 倍。
  • 現在支援 Vite 開發伺服器的熱模組重新載入。
  • 現在可以從經過身份驗證的端點自動載入源對映。

測試

改進的狀態區域

測試檢視中篩選框下方的“狀態區域”現在更加簡潔,並提供了一個可點選的操作,用於重新執行最近執行的測試。在點選重新執行按鈕時按住 Alt 將改為除錯這些測試。

Testing view status area displaying test result count, test timing, and rerun button

連結檢測現在在顯示測試輸出的終端中執行。檔名、路徑和 URI 現在都可以點選。

改進了測試相關輸出的體驗

測試擴充套件可以將控制檯輸出與特定測試或位置相關聯。以前,以這種方式建立的每個輸出都會在“測試結果”檢視中顯示為自己的項,並在選擇時在文字編輯器中開啟。

現在,它們顯示在適當的終端中,導航到輸出訊息會開啟該測試輸出的終端,並選中該訊息。

Notebook

複製單元格輸出

單元格輸出選單現在包含將輸出複製到系統剪貼簿的選項。也可以透過右鍵單擊影像並選擇“複製輸出”命令來用於影像輸出。

主題:Bearded Theme feat. Gold D Raynh(在 vscode.dev 上預覽)

語言

TypeScript 5.2

VS Code 現在隨附 TypeScript 5.2.2。此重大更新帶來了新的 TypeScript 語言功能、更好的效能以及許多重要的改進和錯誤修復。您可以在 TypeScript 部落格上閱讀有關 TypeScript 5.2 的資訊。

移動到檔案重構

JavaScript 和 TypeScript 的移動到檔案重構允許您將類、函式或常量移動到現有檔案。這還將自動更新對符號的所有引用並根據需要更新匯入。

當您選擇移動到檔案時,VS Code 會向您顯示當前 TypeScript 或 JavaScript 專案中所有檔案的列表。您可以開始鍵入以快速篩選到所需檔案。

或者,您可以使用選擇現有檔案... 使用普通檔案選擇器選擇檔案,或使用輸入新檔案路徑... 指定要建立的新檔案。

內聯變數重構

JavaScript 和 TypeScript 的內聯變數重構將變數的所有出現替換為其常量值。

此重構在重寫現有程式碼時通常最有用。例如,當一個變數被宣告然後立即返回時,您可以使用內聯變數來刪除額外的宣告並直接返回值。

function add(a, b) {
  const result = a + b;
  return result;
}

result 上執行 inline variable 之後:

function add(a, b) {
  return a + b;
}

可點選的引數提示

您現在可以點選引數提示以快速跳轉到引數宣告。在開啟內聯提示後:

"editor.inlayHints.enabled": "on",
"typescript.inlayHints.parameterNames.enabled": "all",
"javascript.inlayHints.parameterNames.enabled": "all"

按住 Ctrl/Cmd 並單擊引數名稱以跳轉到該引數的宣告。

我們計劃在即將釋出的版本中為其他 JavaScript 和 TypeScript 內聯提示啟用轉到定義

遠端開發

遠端開發擴充套件允許您透過 SSH 或遠端隧道使用開發容器、遠端機器或適用於 Linux 的 Windows 子系統 (WSL) 作為功能齊全的開發環境。

亮點包括:

  • 改進了遠端 - 隧道連線可靠性。
  • 新的在 WSL 中安裝 Docker 命令。
  • 預構建的開發容器指導手冊。

您可以在遠端開發釋出說明中瞭解新的擴充套件功能和錯誤修復。

對擴充套件的貢獻

GitHub Copilot

從聊天檢視建立工作區

您現在可以使用 /createWorkspaceGitHub Copilot Chat 擴充套件的穩定版本中的自然語言描述建立工作區。

我們還進行了以下改進:

  1. 建議的工作區現在以檔案樹的形式呈現在聊天響應中。
  2. 您可以點選檔案以在編輯器中開啟只讀預覽。
  3. 如果 Copilot 的初步建議不太正確,您可以提出後續問題以幫助 Copilot 迭代和改進。

在未命名編輯器中使用內聯聊天開始編碼

當您開啟未命名文字編輯器時,現在有一個提示,說明如何透過 ⌘I (Windows, Linux Ctrl+I) 啟動內聯聊天會話。螢幕閱讀器使用者可以聽到此提示,並選擇使用 accessibility.verbosity.untitledHint 設定停用它。

快速聊天改進

我們幾個月前推出了快速聊天,並一直在快速迭代,以提供一種專為 VS Code 設計的體驗。

此迭代的亮點:

  • 更緊湊的使用者體驗。
  • 快速聊天現在在失去焦點時保持開啟狀態。
  • 調節器和“滾動增長”行為以調整視窗大小。
  • 開啟快速聊天”現在在命令中心。

The Quick Chat window with a question and answer displayed

總的來說,使用者體驗更加緊湊,以與其他“快速開啟”體驗保持一致,例如命令面板(到處都減少了填充,使用者和 Copilot 圖示更小,按鈕是內聯的而不是在標題欄中)。

預設情況下,當您提問時,快速聊天會調整大小以聚焦於該問題和答案,以最大程度地減少螢幕空間。我們還認為它有助於專注於您可能想問 Copilot 的那些快速問題。您的對話歷史仍然可用,您可以向上滾動以返回到過去。

由於這種動態高度,我們還希望提供一種在需要更多或更少空間時調整視窗大小的方法。有兩種選項可以調整視窗大小。第一個是我們所說的“滾動增長”。如果您的快速聊天視窗因短答案而變小,但您想檢視之前的長答案,當您向上滾動時,快速聊天會增長到最大高度。

可以透過執行以下任一操作將快速聊天的高度重置為僅顯示最後一個問題和答案:

  • 關閉快速聊天並等待 30 秒。
  • 提出另一個問題或執行 /clear(請記住,/clear 會永久清除您的聊天曆史記錄)。
  • 雙擊底部調節器。

說到調節器……我們快速聊天的底部也有一個調節器,可用於手動調整快速聊天的高度。當您使用調節器時,您就放棄了預設的動態行為,並且表示“我希望這個高度在此處固定直到重置。”

注意:如果您想恢復動態行為,請雙擊調節器或在聊天中鍵入 /clear/clear 會清除您的聊天曆史記錄)。

最後但同樣重要的是,您可以使用“開啟快速聊天”選項從命令中心啟動快速聊天。

Open Quick Chat command in the Command Center

解釋終端選擇

Copilot 現在能夠透過在終端的上下文選單中選擇“Copilot:解釋此內容”來解釋當前的終端選擇(根據平臺,右鍵單擊Shift + 右鍵單擊)。

The terminal context menu's first entry is Copilot: Explain This

Copilot:解釋此內容命令將彈出聊天檢視,Copilot 將返回詳細的解釋。

Copilot goes into detail in the explanation, for example it explains that a git push uses LFS, what delta compression is

設定的自然語言搜尋

設定編輯器現在允許使用 GitHub Copilot Chat 進行自然語言搜尋。

自然語言搜尋結果目前放置在關鍵字匹配結果下方,並按相似度得分降序排列,但我們計劃下個月修復排序,以便搜尋結果繼續按其目錄組排列。

自然語言搜尋目前依賴於 Copilot 嵌入。因此,在嵌入可用之前(即 GitHub Copilot Chat 擴充套件啟用幾秒鐘後),設定編輯器中將不會顯示自然語言搜尋結果。

Searching "make text bigger" in the Settings editor shows editor.fontSize as a result

主題:淺粉色(在 vscode.dev 上預覽)

Python

新的 Python 格式化文章

有一個新的專門主題關於Python 格式化,您將學習如何設定預設格式化工具,例如 autopep8Black,並透過各種設定對其進行自定義。

使用環境變數啟用終端

Python 擴充套件現在有一個新的啟用機制,可以在不執行任何顯式啟用命令的情況下啟用終端中選定的環境。本月,我們開始將其作為一項實驗推出,使其成為預設體驗。透過新方法,我們使用環境變數來啟用終端,這在終端啟動時隱式完成,因此可以更快,特別是對於 conda 環境。您可以新增以下使用者設定:"python.experiments.optInto": ["pythonTerminalEnvVarActivation"] 來嘗試它。

如果您對此實驗有任何評論或建議,請隨時在vscode-python 問題 #11039 中分享。

重新建立或使用現有 .venv 環境

在包含 .venv 資料夾的工作區中工作時,“Python:建立環境”命令已更新,提供了重新建立或使用現有環境的選項。如果您決定重新建立環境,則會刪除當前的 .venv,允許您重新建立一個名為 .venv 的新環境。然後,您可以按照“Python:建立環境”流程選擇您首選的直譯器並指定任何依賴檔案進行安裝,從而自定義此新環境。如果環境無法刪除,例如,因為它處於活動狀態,系統會提示您手動刪除環境。

或者,如果您選擇使用現有環境,則會為您的工作區選擇該環境。

預覽功能

我們正在試驗在快速訪問選單中顯示工作區搜尋結果。要嘗試此操作,請執行搜尋:快速文字搜尋(實驗性)。此命令將設定快速開啟以接受搜尋查詢。鍵入一些文字以檢視不同工作區檔案中的匹配項。

調暗未聚焦的編輯器和終端

有一個新的實驗性功能,可以調暗當前未聚焦的編輯器和終端。此功能的目標是與典型的閃爍游標相比,使文字的去向更加清晰。

When dim unfocused is enabled in a 2x2 grid editor group layout, only one will be fully opaque

上圖顯示了啟用了調暗未聚焦功能,不透明度設定為 0.5,以便更清楚地顯示 terminalService.ts 的編輯器具有焦點。

這可以透過 accessibility.dimUnfocused.enabled 啟用,調暗程度由 accessibility.dimUnfocused.opacity 控制。

此功能目前僅涵蓋編輯器和終端,但計劃將其擴充套件到允許使用者自行配置他們想要調暗哪些檢視

擴充套件創作

支援批次範圍格式化

DocumentRangeFormattingEditProvider API 現在支援批次格式化。這意味著擴充套件可以可選地向編輯器發出訊號,表示它支援一次使用多個範圍進行呼叫。這有助於減少對格式化提供程式的呼叫次數,從而提高效能。

要選擇批次格式化,提供程式必須實現一個新的可選函式:provideDocumentRangesFormattingEdits

EnvironmentVariableCollection 作用域限定到工作區資料夾

EnvironmentVariableCollection API 現在支援建立一個作用域限定到特定工作區資料夾的新集合,並且將作為“全域性”集合的補充應用。

// Get a scoped collection for the first workspace folder
const scoped = context.environmentVariableCollection.getScoped({
  workspaceFolder: workspace.workspaceFolders[0]
});
scoped.replace('SCOPED', '1');
// Only terminals created in the first workspace folder will have SCOPED=1 set

Python 擴充套件使用此機制根據終端在多根工作區中所屬的資料夾設定不同的虛擬環境。

配置 EnvironmentVariableMutator 何時應用

EnvironmentVariableCollection API 現在能夠將更改應用於 shell 整合指令碼中,該指令碼將在 shell 初始化指令碼之後執行。這僅在啟用 shell 整合時才有效,因此如果更改至關重要,則可以在 shell 建立時和 shell 整合內部應用更改。

context.environmentVariableCollection.prepend('PATH', '/my/custom/path', {
  applyAtProcessCreation: true,
  applyAtShellIntegration: true
});

當相關變數可能被 shell 初始化指令碼修改時,此功能非常有用。

提議的 API

每個里程碑都會帶來新的提議 API,擴充套件作者可以嘗試這些 API。一如既往,我們希望得到您的反饋。以下是嘗試提議 API 的步驟

  1. 查詢您要嘗試的提議並將其名稱新增到 package.json#enabledApiProposals
  2. 使用最新的 @vscode/dts 並執行 npx @vscode/dts dev。它會將相應的 d.ts 檔案下載到您的工作區。
  3. 您現在可以根據該提議進行程式設計。

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

TestMessage 的 contextValue 和貢獻點

您可以在 TestMessage 上提供 contextValue,以便在使用者對這些訊息執行操作時顯示。此外,還提供了兩個新的選單貢獻點:testing/message/contexttesting/message/content。前者顯示在測試結果樹檢視中的訊息上,後者顯示在編輯器中的訊息上方。

問題 #190277 中閱讀有關 contextValue 的更多資訊。

終端上下文選單貢獻

正在提出兩個新選單,允許擴充套件將其自己的上下文選單操作整合到終端中:

  • terminal/context - 終端上下文選單
  • terminal/title/context - 終端選項卡上下文選單

監聽終端命令執行

一個關於擴充套件監聽終端命令執行 API 的早期提案已可用於測試,該功能長期以來一直被請求。此 API 使用shell 整合實現,並且僅在啟用並正常工作的終端上觸發。

export interface TerminalExecutedCommand {
  /**
   * The {@link Terminal} the command was executed in.
   */
  terminal: Terminal;
  /**
   * The full command line that was executed, including both the command and the arguments.
   */
  commandLine: string | undefined;
  /**
   * The current working directory that was reported by the shell. This will be a {@link Uri}
   * if the string reported by the shell can reliably be mapped to the connected machine.
   */
  cwd: Uri | string | undefined;
  /**
   * The exit code reported by the shell.
   */
  exitCode: number | undefined;
  /**
   * The output of the command when it has finished executing. This is the plain text shown in
   * the terminal buffer and does not include raw escape sequences. Depending on the shell
   * setup, this may include the command line as part of the output.
   */
  output: string | undefined;
}

export namespace window {
  /**
   * An event that is emitted when a terminal with shell integration activated has completed
   * executing a command.
   *
   * Note that this event will not fire if the executed command exits the shell, listen to
   * {@link onDidCloseTerminal} to handle that case.
   */
  export const onDidExecuteTerminalCommand: Event<TerminalExecutedCommand>;
}

此 API 的形式尚未最終確定,但基本思想將保持不變。

這是一個示例用法,它監聽任何成功的 git push 命令並在擴充套件中觸發重新整理:

const disposables = [];
disposables.push(
  window.onDidExecuteTerminalCommand(command => {
    if (command.commandLine.startsWith('git push') && command.exitCode === 0) {
      refreshState();
    }
  })
);
function refreshState() {
  /* ... */
}

終端選擇訪問

一個用於訪問終端選擇的簡單建議 API:

export interface Terminal {
  /**
   * The selected text of the terminal or undefined if there is no selection.
   */
  readonly selection: string | undefined;
}

此 API 在最終確定之前可能會包含相應的更改事件,並且 API 名稱可能會更改,以使其更清楚地表明它是一個簡單的字串,而不是像 TextEditor.selection 那樣基於 Range

終端快速修復進度

終端快速修復提案現在可以觸發常規的 VS Code 命令,而不是終端命令。此更改也導致終端命令介面名稱發生更改。

export interface TerminalQuickFixProvider {
  /**
   * Provides terminal quick fixes
   * @param commandMatchResult The command match result for which to provide quick fixes
   * @param token A cancellation token indicating the result is no longer needed
   * @return Terminal quick fix(es) if any
   */
  provideTerminalQuickFixes(
    commandMatchResult: TerminalCommandMatchResult,
    token: CancellationToken
  ): ProviderResult<
    SingleOrMany<TerminalQuickFixExecuteTerminalCommand | TerminalQuickFixOpener | Command>
  >;
}
export class TerminalQuickFixExecuteTerminalCommand {
  /**
   * The terminal command to run
   */
  terminalCommand: string;
  constructor(terminalCommand: string);
}

工程

Electron 25 更新

在此里程碑中,我們將 Electron 25 更新推廣到我們的穩定版使用者。此更新隨附 Chromium 114.0.5735.289 和 Node.js 18.15.0。我們要感謝所有在 Insiders 版本上自託管並提供早期反饋的人。

Node.js 的更新亮點

我們桌面應用程式中捆綁的 Node.js 和與我們的伺服器捆綁的獨立可執行檔案已從 v16 -> v18 更新。鑑於這是一個主要版本升級,存在一些行為和相容性更改:

  • 來自作業系統的 DNS 結果順序不再排序。我們已在本地和伺服器場景中為擴充套件主機添加了 --dns-result-order=ipv4first,以避免破壞可能尚未採用此更改的擴充套件。展望未來,我們建議擴充套件在 socket.connect API 中使用 autoSelectFamily 選項,以適應結果順序更改。

  • 官方 Node.js 倉庫中適用於 Linux 的預構建二進位制檔案現在與基於 glibc 2.28 或更高版本的 Linux 發行版相容。這意味著我們的伺服器將放棄對 Ubuntu 18、CentOS 7、RHEL 7 等的支援。我們現在為 Linux 伺服器提供自定義構建的 Node.js,以保持 glibc 2.17 或更高版本的相容性。隨著我們無法在 CentOS 7 映像上構建更新的 Node.js 版本,此支援將在未來的更新中發生變化,因此我們建議受此更改影響的伺服器使用者更新其作業系統版本。

Chromium 的更新亮點

  • Mesa 版本更新之後,Chromium 著色器編譯可能會中斷,導致應用程式 UI 中出現偽影。此問題在問題 #190437 中進行了跟蹤,其中還包含指向 Chromium 錯誤報告的連結。您可以透過執行 --verbose 並在日誌中查詢以下行 ERROR:shared_context_state.cc(81)] Skia shader compilation error 來識別此問題。如果您受此問題影響,當前的解決方法是刪除位於 ~/.config/Code/GPUCache 的 GPU 快取。
  • 當 Chromium 為 webgl 使用 SwiftShader 後端時,它似乎在 Windows 和 Linux 上都降低了我們整合終端的效能。作為一種解決方法,我們根據 GL_RENDERER 字串檢測受影響的使用者,並切換到終端的 DOM 後端。更多詳細資訊可以在問題 #190195 中找到,其中還包含指向 Chromium 錯誤報告的連結。

感謝

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

問題跟蹤

對我們問題跟蹤的貢獻

拉取請求

vscode 的貢獻

vscode-css-languageservice 的貢獻

vscode-hexeditor 的貢獻

vscode-js-debug 的貢獻

vscode-pull-request-github 的貢獻

vscode-vsce 的貢獻

  • @bandantonio (Antonio)
    • 功能:為 --help 新增使用者友好資訊 PR #884
    • 功能:新增對不帶許可證檔案打包和釋出的 PR #887 支援
    • 重新措辭清單中定價值不匹配的錯誤訊息 PR #890