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

2024 年 6 月(版本 1.91)

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

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


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

如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新Insiders:想盡快嘗試新功能嗎?您可以下載每晚Insiders版本並儘快嘗試最新更新。

輔助功能

編輯器懸停的輔助功能檢視

為了提高編碼時的可訪問性,輔助功能檢視輔助功能幫助選單現在可以顯示編輯器懸停資訊的內容。根據懸停的焦點部分,它們會顯示有關焦點部分或整個懸停內容的資訊。

Accessible View showing the contents of the editor hover information.

為了使工作臺中連結更容易與常規文字區分開來,您可以啟用設定 accessibility.underlineLinks 來為連結新增下劃線。

The run and debug view showing a mix of regular text and underlined links.

工作臺

我們添加了一個新設定 search.ripgrep.maxThreads,它允許您限制 ripgrep 搜尋引擎使用的執行緒數。此設定無論核心產品是否使用搜索或透過擴充套件 API 使用搜索都適用。

search.ripgrep.maxThreads 設定為非零值以配置執行緒數。請謹慎操作,因為將此設定固定到特定值可能會減慢 ripgrep 的速度。

調整允許猜測的編碼

透過新設定 files.candidateGuessEncodings,您可以配置一組應在啟用 files.autoGuessEncoding 時考慮的編碼。配置順序決定了優先順序。此功能允許您將可能檢測到的編碼限制為更小的集合,並優先考慮一種編碼而不是另一種。

配置檔案編輯器預覽

在此里程碑中,我們引入了一個新的配置檔案編輯器,它允許您在一個位置管理配置檔案。此體驗包括建立新配置檔案、編輯和刪除現有配置檔案,以及匯入和匯出配置檔案以與他人共享。建立新配置檔案時,您可以在儲存之前預覽配置檔案並根據需要進行自定義。配置檔案編輯器還允許您使用特定配置檔案開啟新視窗,或將配置檔案設定為新視窗的預設配置檔案。

Profiles Editor showing all user profiles and their settings.

配置檔案編輯器作為實驗性功能提供,位於 workbench.experimental.enableNewProfilesUI 設定之後。啟用後,您可以從視窗左下角的“設定”齒輪圖示訪問配置檔案編輯器。

Settings menu showing the Profiles menu item to open the Profiles Editor.

試一試,並向我們提供有關如何進一步改進此體驗的反饋。

使用配置檔案選單項開啟新視窗

除了配置檔案編輯器之外,我們還在“檔案”選單中添加了操作,以使用特定配置檔案開啟新視窗。使用檔案 > 使用配置檔案開啟新視窗選單,以使用特定配置檔案開啟新視窗。

Screenshot of the File menu showing the New Window with Profile menu items.

擴充套件安裝選項

我們添加了更多選項,讓您在安裝擴充套件時擁有更大的靈活性

  • 安裝擴充套件而不進行同步。
  • 安裝特定版本的擴充套件。以前,您必須先安裝最新版本的擴充套件,然後才能選擇特定版本。

這些操作可在“擴充套件”檢視中擴充套件的上下文選單中找到

Context menu for the Extensions view, showing the additional install actions.

在自定義標籤中訪問副檔名

定義自定義標籤時,您現在可以透過使用${extname(N)}語法更靈活地訪問單個副檔名。此外,${extname(N)}還支援負索引以反向捕獲副檔名。要獲取整個副檔名,請使用${extname}

例如,對於檔案tests/editor.test.ts

  • ${filename} => editor
  • ${extname} => test.ts
  • ${extname(0)} => ts
  • ${extname(1)} => test
  • ${extname(-1)} => test
  • ${extname(-2)} => ts

合併來自多個擴充套件的自定義標籤模式

當兩個擴充套件在它們的configurationDefaults中為設定workbench.editor.customLabels.patterns提供預設配置時,貢獻的模式將合併在一起。

"workbench.editor.customLabels.patterns" : {
  "**/app/**/page.tsx": "${dirname} - Page",
  "**/app/**/layout.tsx": "${dirname} - Layout"
}
"workbench.editor.customLabels.patterns" : {
  "**/components/**/index.tsx": "${dirname} - Component"
}
擴充套件 1 的預設貢獻 擴充套件 2 的預設貢獻
"workbench.editor.customLabels.patterns" : {
  "**/app/**/page.tsx": "${dirname} - Page",
  "**/app/**/layout.tsx": "${dirname} - Layout",
  "**/components/**/index.tsx": "${dirname} - Component"
}
結果自定義標籤模式

取消設定主題顏色

如果某個主題設定了您不喜歡的顏色或邊框,您現在可以使用default將其設定回原始值

  "workbench.colorCustomizations": {
      "diffEditor.removedTextBorder": "default"
  }

更改摺疊佔位符顏色

摺疊佔位符(省略號)現在可以使用顏色editor.foldPlaceholderForeground進行主題化。

編輯器

儲存時程式碼操作

透過editor.codeActionsOnSave設定,您可以配置一組在儲存檔案時自動應用的程式碼操作,例如組織匯入。我們透過提供基於工作區檔案和活動擴充套件的可用程式碼操作列表,改進了配置此設定的智慧感知。

注意:請注意,儘管truefalse目前仍然是有效配置,但它們將棄用,取而代之的是explicitalwaysnever。有關示例,請參閱儲存時程式碼操作文件

快速關閉只讀檔案狀態

如果您已透過files.readonlyInclude設定將檔案配置為只讀,您現在可以從只讀編輯器訊息中快速關閉檔案的只讀狀態。

Read-only editor message enabling you to toggle the read-only status.

原始碼管理

傳入/傳出更改圖預覽

我們一直在探索使用傳入和傳出更改的替代視覺化。此里程碑包含一個實驗性功能,它使用圖表來視覺化傳入和傳出更改。該圖表包含當前分支、當前分支的上游分支以及可選的基礎分支。圖表的根是這些分支的公共祖先。

您可以使用scm.experimental.showHistoryGraph設定啟用此新視覺化。試一試,並告訴我們您的想法,因為我們將繼續改進和擴充套件此視覺化中可用的功能。

Source control view showing a graph visualization of the incoming and outgoing changes.

Notebook

在文字選擇中查詢

筆記本查詢控制元件現在具有用於文字選擇和單元格選擇的“在選擇中查詢”。此行為預設啟用,並可透過控制元件內的按鈕進行控制。根據您的選擇上下文,切換此按鈕會將您的查詢查詢範圍限定為選擇的一個或多個單元格,或單元格中的行。

從上下文選單複製或開啟文字輸出

在筆記本中處理文字輸出時,您現在可以使用文字輸出的上下文選單複製輸出值或在新編輯器中開啟輸出。此功能使得審查大型流式輸出變得更加容易。

終端

支援複製和貼上轉義序列 (OSC 52)

現在支援作業系統命令 (OSC) 52 轉義序列。這可以由終端中執行的任何程式使用,但主要用例是tmux的剪貼簿訪問。

新的自定義字形

終端現在支援分支、行號和鎖定 Powerline 符號的自定義字形。與其他我們支援的自定義字形一樣,當啟用GPU 加速時,這些符號無需配置字型即可工作。

Characters 0xe0a0, 0xe0a1 and 0xe0a2 render with their Powerline symbols.

當調整字型大小、行高或字間距時,這些符號也與單元格完美縮放。

The new symbols scale vertically and horizontally when a custom font size, line height or letter spacing is used.

除錯

JavaScript 偵錯程式

JavaScript 偵錯程式現在在懸停和內聯值(透過debug.inlineValues設定啟用)中顯示隱藏變數的正確值,基於程式的範圍。

JavaScript code snippet that shows an overlay with the value of shadowed variables.

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

語言

TypeScript 5.5

我們現在包含 TypeScript 5.5。此重大更新帶來了許多新的語言功能和工具改進。檢視TypeScript 5.5 部落格文章以獲取此版本的詳細資訊。

正則表示式的語法檢查

得益於 TypeScript 5.5,我們現在報告 JavaScript 和 TypeScript 正則表示式文字中的許多語法錯誤。這包括未關閉的組、不正確的反向引用或無效轉義等錯誤

Editor showing a regex error for an invalid group caused by an extra parenthesis.

Editor showing a regex error for an invalid escape sequence

有關更多詳細資訊,請檢視TypeScript 5.5 部落格文章

對擴充套件的貢獻

GitHub Copilot

緊湊型內聯聊天

內聯聊天渲染現在更加緊湊,這使得閱讀和理解建議變得更容易。我們還在試驗一種更具敘述性的按鈕文字樣式,您可以透過inlineChat.experimental.textButtons啟用它。

Sample of more compact inline chat in the editor.

終端初始提示

終端中會顯示一個新提示,以幫助發現內聯聊天。

The terminal will say "Press Ctrl+I to ask GitHub Copilot to do something. Start typing to dismiss"

此提示僅在安裝了 Copilot 擴充套件且存在未進行任何互動的單個終端時顯示。透過右鍵單擊可以輕鬆永久關閉該訊息。您首次使用終端內聯聊天后,該訊息也會消失。

應用程式碼塊

“聊天”檢視中程式碼塊上的在編輯器中應用命令使用語言模型來確定將更改應用到當前編輯器的最佳方法。

Chat view showing the Apply In Editor command for a code block in a chat response.

Python

使用 python-environment-tools 發現 Python 環境

我們很高興推出一種新工具,python-environment-tools,旨在顯著提高檢測全域性 Python 安裝和 Python 虛擬環境的速度。此工具使用 Rust 來確保快速準確的發現過程。

我們目前正在測試此新功能,將其與現有支援並行執行,以評估 Python 擴充套件中新發現的效能。因此,您將看到一個名為Python Locator的新日誌通道,其中顯示了此新工具的發現時間。

此增強功能是我們持續最佳化 VS Code 中 Python 支援的效能和效率的一部分。訪問python-environment-tools 倉庫,瞭解有關此功能、正在進行的工作並提供反饋。

本機 REPL 中的智慧傳送

Python 擴充套件現在已在VS Code 本機 REPL中啟用了智慧傳送

以前,當您將游標放在一行 Python 程式碼上並按下Shift+Enter時,Python 擴充套件會將確切的行內容傳送到本機 REPL,即使它會失敗,例如因為它是一個多行命令的一部分。

現在,Shift+Enter在非巢狀場景中傳送最小可執行程式碼,或者在巢狀場景中傳送最高級別的程式碼塊。這使得使用者可以快速地在檔案中Shift+Enter以最小的努力執行最大量的可執行程式碼。

支援 reStructuredText 文件字串

Pylance 現在支援在懸停時渲染 reStructuredText 文件字串 (docstrings)!

此功能處於早期階段,目前在標誌後面,因為我們正在努力確保它能有效地處理各種 Sphinx、GoogleDoc 和 Epytext 場景。要試用它,您可以啟用實驗性設定python.analysis.supportRestructuredText

Docstring displayed when hovering over the panel module.

試用此更改,並在Pylance GitHub 儲存庫報告任何問題或反饋。

注意:此設定是實驗性的,未來可能會被刪除,因為我們將穩定此新功能並預設啟用它。

GitHub 拉取請求和議題

GitHub Pull Requests 擴充套件取得了更多進展,該擴充套件使您能夠處理、建立和管理拉取請求和問題。新功能包括:

  • 已簽出 PR 的提交子樹中顯示提交日期。
  • 大量錯誤修復。

檢視擴充套件 0.92.0 版本的更新日誌以瞭解其他亮點。

ESLint

ESLint 擴充套件現在支援平面配置檔案格式。該擴充套件仍然支援eslintrc檔案,您可以使用eslint.useFlatConfig設定來控制使用哪種配置檔案格式。

請查閱ESLint 平面配置推出計劃,以瞭解 ESLint 棄用和刪除對eslintrc檔案格式支援的計劃。

擴充套件創作

聊天和語言模型 API

上個月,我們最終確定了使擴充套件能夠參與聊天並訪問語言模型的 API,但它們僅在 VS Code Insiders 中可用。在此版本中,這些 API 現在已在 VS Code Stable 中完全可用。

檢視我們的公告部落格文章,瞭解有關這些 API 的更多資訊,並檢視一些早期採用者如何使用它們。

要開始使用,請訪問我們的擴充套件示例聊天可擴充套件性文件

物件設定預設值的處理

當多個擴充套件為同一物件設定貢獻預設值時,這些預設值現在將合併。這可以防止擴充套件之間的衝突。

最終確定DebugSessionOptions.testRun API

從測試執行啟動除錯會話的擴充套件現在可以在呼叫vscode.debug.startDebugging時將該執行傳遞給DebugSessionOptions。傳遞後,生命週期操作(例如重新啟動除錯會話)也會建立新的測試執行。

除錯介面卡協議

除錯介面卡協議進行了一些值得注意的更改

  • 透過新的Scope.presentationHint = returnValue選項表示返回值。
  • evaluate請求中新增源位置。VS Code 實現此功能並在評估懸停和內聯值時傳遞位置。

提議的 API

語言模型的工具和函式

我們添加了一個 API 提案,支援工具或函式呼叫。該 API 包含兩個主要部分

  1. 擴充套件註冊“工具”的能力。工具是旨在供語言模型使用的功能。例如,讀取檔案的 Git 歷史記錄。

  2. 語言模型支援工具的機制,例如:擴充套件在發出請求時傳遞工具,語言模型請求工具呼叫,以及擴充套件傳回工具呼叫的結果。

該提案可在vscode.proposed.lmTools.d.ts中找到。

注意:API 仍在積極開發中,內容將發生變化。另請注意,VS Code 將附帶合理的預設工具。

身份驗證getSessions現在是getAccounts

雖然我們支援多賬戶身份驗證提供程式,但一直缺少的是獲取所有會話並對特定會話執行操作的能力。以前,我們有一個getSessions API 提案試圖解決這個問題,但在實驗並借鑑流行的身份驗證庫的啟發後,我們正在採用不同的方法來解決這個問題。

我們從以前提議的getSessions API 轉向了將“賬戶”和“會話”概念分離的方法。

希望使用身份驗證會話的擴充套件作者可以執行以下程式碼來獲取使用者已登入賬戶的AuthenticationSessionAccountInformation

const accounts = vscode.authentication.getAccounts('microsoft');

從那裡,您可以使用這些賬戶專門為這些賬戶鑄造會話

const session = vscode.authentication.getSession('microsoft', scopes, {
  account: accounts[0]
});

注意:為此,身份驗證提供程式需要處理一個新引數,您可以在下面的 API 提案中閱讀有關它的資訊

我們相信這是一種處理多個身份驗證會話的更清晰方式,並且將能夠處理我們以前無法支援的各種場景。

該提案可在vscode.proposed.authGetSessions.d.ts中找到,它使用了此提案的舊名稱,以免破壞依賴此提案的現有程式碼。

評論執行緒顯示

我們添加了一個 API 提案,使提供評論的擴充套件能夠在編輯器中顯示自己的評論執行緒。此 API 提供了選項,用於在顯示執行緒時是否保留焦點,或將焦點集中到執行緒的回覆框中。

該提案可在vscode.proposed.commentReveal.d.ts中找到。

可歸因測試覆蓋率

我們正在開發一個 API,該 API 允許按每個測試歸因測試覆蓋率。這使使用者能夠檢視哪些測試運行了哪些程式碼,從而篩選編輯器中顯示的覆蓋率以及測試覆蓋率檢視中顯示的覆蓋率。

檢視vscode#212196以獲取更多資訊和更新。

工程

將 NLS 從 AMD 載入器中解耦

在此里程碑中,我們開始移除 VS Code 核心本機語言支援 (NLS) 與我們附帶的非同步模組定義 (AMD) 載入器之間的依賴關係。我們未來的目標是使用 ECMAScript 模組 (ESM) 載入並完全放棄 AMD。為了朝著這個方向取得進展,我們刪除了我們的 AMD 載入器外掛依賴項。您應該不會注意到任何行為差異,並且我們曾經支援的所有翻譯在 Web 和桌面中仍然受支援。

值得注意的修復

感謝

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

問題跟蹤

對我們問題跟蹤的貢獻

拉取請求

vscode 的貢獻

vscode-css-languageservice 的貢獻

vscode-extension-samples 的貢獻

vscode-html-languageservice 的貢獻

vscode-languageserver-node 的貢獻

vscode-python-tools-extension-template的貢獻

node-jsonc-parser 的貢獻