🚀 在 VS Code 中

2021 年 11 月 (版本 1.63)

更新 1.63.1:此更新解決了這些安全性問題

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

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


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

如果您想在線上閱讀這些發行說明,請前往 code.visualstudio.com 上的更新

觀看重點,了解 VS Code 團隊發行派對中此版本的新功能。您可以在我們的 YouTube 頻道上找到活動錄影

Insiders: 想要盡快試用新功能嗎?您可以下載每晚建置的 Insiders 版本,並在最新更新可用時立即試用。

工作台

安裝前預覽佈景主題

您現在可以在安裝佈景主題之前,先預覽市集上可用的佈景主題。從色彩佈景主題下拉式選單 (⌘K ⌘T (Windows、Linux Ctrl+K Ctrl+T)) 中,選取 瀏覽其他色彩佈景主題 以列出市集佈景主題。當您瀏覽下拉式選單時,VS Code UI 將會預覽色彩佈景主題。

在佈景主題項目上按下 Enter 以安裝擴充功能。

設定問題導覽順序

您現在可以定義 前往下一個問題 (⌥F8 (Windows、Linux Alt+F8)) 和 前往上一個問題 (⇧⌥F8 (Windows、Linux Shift+Alt+F8)) 導覽的順序。在先前的版本中,導覽的順序是根據嚴重性,先前往錯誤,然後是警告,然後是其餘問題。新的 問題:排序順序 (problems.sortOrder) 設定可讓您依 severityposition 導覽問題。當使用 "problems.sortOrder": "position" 時,第 5 行的警告會顯示在第 13 行的錯誤之前,依此類推。

多種語言特定的編輯器設定

您現在可以一次為多種語言設定語言特定的編輯器設定。以下範例示範如何在 settings.json 檔案中一起自訂 javascripttypescript 語言的設定

"[javascript][typescript]": {
  "editor.maxTokenizationLineLength": 2500
}

自動 2x2 編輯器格線

真正的 2x2 格線編輯器版面配置只能使用 檢視:格線編輯器版面配置 (2x2) 命令。現在,您可以手動分割編輯器,直到達到 2x2 格線,即可獲得相同的版面配置,而格線將自動鎖定為真正的 2x2 版面配置。

更佳的清單逸出處理

在清單和樹狀結構上按下 Escape 現在會先將選取範圍縮小到單一元素,然後再清除。

網頁上啟用尋找功能

當 VS Code 在瀏覽器中執行時 (以下範例中的 github.dev),網頁檢視中現在支援尋找控制項

Find widget on github.dev

由於目前瀏覽器 API 的限制,尋找功能的行為與在桌面上略有不同。例如,在網頁上,VS Code 只能反白顯示目前的尋找結果。在桌面上,所有結果都會在目前檔案中反白顯示。

螢幕廣播模式顯示命令名稱

您現在可以選擇在螢幕廣播模式中透過鍵盤快速鍵觸發命令時顯示命令名稱。使用 螢幕廣播模式:鍵盤快速鍵格式 (screencastMode.keyboardShortcutsFormat) 設定來設定此行為。

Screencast mode with command names along with keystrokes

預先發行擴充功能

VS Code 現在支援擴充功能的預先發行版本,因此您可以選擇安裝它們並試用擴充功能的最新尖端功能。VS Code 會在擴充功能 安裝 下拉式選單中顯示額外的 安裝預先發行版本 選項,以安裝預先發行版本。

Pre-Release install dropdown

佈景主題:GitHub 淺色佈景主題

安裝完成後,指示器會清楚顯示您是否正在使用擴充功能的預先發行版本

Pre-Release version indication

佈景主題:GitHub 淺色佈景主題

如果擴充功能有預先發行版本,而您已安裝,您可以輕鬆切換到該版本

Switch to Pre-Release version button

佈景主題:GitHub 淺色佈景主題

已更新的尋找動作

搜尋檢視中的尋找動作現在使用與編輯器中尋找動作相同的樣式

原始檔控制

在快速差異中忽略修剪空白字元

您現在可以使用 scm.diffDecorationsIgnoreTrimWhitespace 設定,設定 SCM 快速差異功能 (顯示在左側邊界中) 以忽略修剪空白字元。

筆記本

調整筆記本中的字型大小

新的 notebook.markup.fontSize 設定可讓您控制筆記本 Markdown 內容的字型大小。此設定的預設值是目前編輯器字型大小的 120%。

Markdown 儲存格中的語法反白顯示

VS Code 現在支援圍籬程式碼區塊在 Markdown 儲存格內部的語法反白顯示

A fenced code block in a notebook with syntax highlighting

筆記本內部的 Markdown 現在可以連結到目前工作區中的其他檔案

/ 開頭的連結會相對於工作區根目錄解析。以 ./ 開頭或僅以檔案名稱開頭的連結會相對於目前的筆記本解析。

此外,包含 httphttps 的 Markdown 文字現在會自動轉換為連結

A link automatically created from Markdown text

這與其他筆記本轉譯器 (例如 JupyterLab) 的行為一致。

筆記本工具列標籤的動態可見性

筆記本工具列可以根據編輯器群組的寬度,決定是否應該顯示動作的標籤,方法是將 notebook.globalToolbarShowLabel 設定為 dynamic。它會先隱藏最右側動作群組的標籤,然後再隱藏左側的標籤。如果編輯器群組在隱藏所有標籤後仍然太窄,則動作會移至溢位功能表。

notebook.globalToolbarShowLabel 的其他值現在為 alwaysnever

編輯器

Unicode 反白顯示

來源程式碼中所有不常見的不明顯字元現在預設都會反白顯示

Unicode Highlighting Example: Invisible character is highlighted with hover explanation

此外,也反白顯示可能與 ASCII 字元混淆的字元

Unicode Highlighting Example: Confusing character is highlighted with hover explanation

您可以閱讀「看不見的 JavaScript 後門」部落格文章這篇劍橋大學文章,了解如何在 Unicode 詐騙攻擊中使用不明顯或容易混淆的 Unicode 字元。

請注意,此功能無法偵測所有可能的 Unicode 詐騙攻擊,因為這取決於您的字型和地區設定。此外,模糊字元的偵測是以啟發式方式完成。為了安全起見,應使用 VS Code 的工作區信任限制模式來檢閱原始程式碼,因為在不受信任的工作區中會反白顯示所有非 ASCII 字元。

可以將設定 editor.unicodeHighlight.invisibleCharacterseditor.unicodeHighlight.ambiguousCharacterseditor.unicodeHighlight.nonBasicASCII 設定為 false 以停用對應的功能。

可以使用下列設定,將個別字元排除在反白顯示之外,以及註解或文字中的字元

  • editor.unicodeHighlight.allowedCharacters - 不反白顯示的特定字元清單。
  • editor.unicodeHighlight.includeComments - 啟用反白顯示註解中的字元。

此外,Markdown 文件預設不會反白顯示。

多個暫留提供者

當文件有多個暫留提供者時,只要其中一個提供者傳回結果,暫留就會立即顯示,並在其餘提供者的結果傳入時更新

之前 之後

工作

automationProfile 設定

舊設定 terminal.integrated.automationShell.* 已被取代,並新增了新的 terminal.integrated.automationProfile.* 設定。這讓指定用於工作的終端機屬性 (包括 Shell、圖示、色彩和 Shell 引數) 時,具有更大的自由度。

gulpfile.ts 支援

內建的 gulp 擴充功能現在支援從 gulpfile.ts 檔案偵測工作。

NPM 腳本檢視改進

NPM 腳本檢視會顯示有關腳本的更多詳細資訊。

NPM Scripts view with script details

還有一個新的設定 npm.scriptExplorerExclude,可讓您指定要從 NPM 腳本檢視中排除的腳本。

語言

TypeScript 4.5

VS Code 現在隨附 TypeScript 4.5。此更新帶來了許多新的語言功能,以及工具改進和錯誤修正。

您可以在 TypeScript 部落格上閱讀有關 TypeScript 4.5 的更多資訊。

方法簽名完成

方法簽名完成可讓您快速覆寫方法並實作介面方法。使用此功能時,當您在類別主體內部時,方法的建議 (例如來自父類別的方法) 在接受時會插入方法的完整簽名

如果您正在撰寫 TypeScript,接受建議也會新增簽名中參考之類型所需的所有匯入。

此功能需要在工作區中使用 TypeScript 4.5,並且可以使用 typescript.suggest.classMemberSnippets.enabledjavascript.suggest.classMemberSnippets.enabled 啟用/停用。

JSX 屬性完成

在 JavaScript 和 TypeScript 中完成 JSX 屬性時,VS Code 現在會自動插入屬性值

可以使用 javascript.preferences.jsxAttributeCompletionStyletypescript.preferences.jsxAttributeCompletionStyle 設定這些完成的行為。

可能的設定值為

  • auto - 根據屬性的類型推斷屬性樣式。字串使用 attr="",而其他類型使用 attr={}
  • braces - 永遠使用大括號。
  • None - 僅完成屬性名稱。

移除舊版 TS 的語意反白顯示

此更新移除了在使用 TypeScript 4.1 或更舊版本的工作區中使用語意反白顯示的支援。

TypeScript 4.2 新增了對語意反白顯示的原生支援。在舊版本中,語意反白顯示是作為 VS Code 提供的 TypeScript 語言外掛程式實作的。移除外掛程式可減少要維護和發行的程式碼量。

Markdown 預覽自訂編輯器

您現在可以使用 重新開啟方式 命令,讓 Markdown 檔案顯示為 Markdown 預覽,而不是文字

Markdown:開啟預覽 命令不同,重新開啟方式 不會開啟新的編輯器索引標籤,而是變更已開啟之編輯器索引標籤的顯示方式。再次使用 重新開啟方式 將檔案切換回預設文字檢視。

此外,您現在可以使用 workbench.editorAssociations 設定,將 VS Code 設定為自動將任何 Markdown 檔案開啟為預覽

"workbench.editorAssociations": {
  "*.md": "vscode.markdown.preview.editor"
}

Markdown 預覽增量更新

內建的 Markdown 預覽現在在您輸入時,會更智慧地自行更新。預覽現在使用 DOM 差異,僅取代預覽文件中已變更的元素,而不是針對每次更新取代整個 Markdown 預覽文件。這減少了有時在輸入時會發生的抖動。

JSON 語言指示器

在 JSON 檔案中編輯時,現在有一個語言指示器 {},顯示內容是否已針對一個或多個 JSON 結構描述進行驗證。將滑鼠游標停留在指示器上方會顯示驗證狀態,以及開啟結構描述的連結。

JSON language selector

JSON 結構描述快取

來自結構描述存放區 (json.schemastore.org) 的 JSON 結構描述現在會在本機快取。這可節省網路頻寬,並在離線工作時提供協助。

Emmet 移除標籤命令改進

當標籤在移除之前的單獨一行時,Emmet:移除標籤 命令現在會移除包含標籤的行,以及適用的多餘空白行。當要移除的標籤之間有空白行時,它也會正確地重新縮排剩餘的行。

適用於 Web 的 VS Code

Azure Repos

在此里程碑中,我們已與 Azure DevOps 工程團隊合作,在 Azure Repos 的 檔案 中心新增鍵盤快速鍵。在 檔案 中心瀏覽存放庫時,您可以按下 . 以在 https://vscode.dev 中開啟存放庫。

我們也為您的 Azure Repos 存放庫新增了一個新的進入點。您現在可以使用遠端選取器中 開啟遠端存放庫... 功能表項目下的新 從 Azure Repos 開啟存放庫... 功能表項目,從 https://vscode.dev 內連線到您的 Azure Repos 存放庫。

此外,您現在可以使用舊版 Azure DevOps URL 格式 (例如,https://<org>.visualstudio.com) 在 vscode.dev 中開啟 Azure Repos 存放庫,方法是在 URL 前面加上 https://vscode.dev

已改進的遠端功能表

遠端功能表中現在會顯示三個額外的命令

擴充功能的貢獻

Java

Java 擴充功能套件現在具有產品內歡迎體驗,可協助您在 VS Code 中設定和了解 Java。逐步解說涵蓋安裝 Java 執行階段和有用的架構、開啟和偵錯您的專案,以及直接在 VS Code 內部執行測試。

Extension Pack for Java walkthrough

您也可以查看 https://vscode.dev.org.tw/docs/java 上的 Java 教學課程和使用者指南,以協助您入門。

Jupyter

效能改進

Jupyter 核心啟動 (特別是 Python) 的效能已進行多項改進。先前開啟過筆記本的使用者在啟動核心時,將會看到 2 倍的速度提升。重新啟動 Python 核心也應該更快。

如需有關為提升效能所做變更的更多詳細資訊,您可以檢閱下列問題

  • 支援預先暖機核心,以改善筆記本的啟動體驗。(<#7903>)
  • 更快地啟動 Python 環境,例如 Conda。(<#8342>)
  • 在啟動 jupyter 時,避免啟動預設核心。(<#8185>)
  • 當我們之前找到 IPyKernel 時,避免再次尋找它。(<#8196>)
  • 當啟動核心不需要 Jupyter 執行階段時,避免不必要地搜尋 Jupyter 套件。(<#8350, #8352)

處理核心失敗的改進

已新增診斷訊息和快速修正,以警告在使用 !pip install 安裝 Python 套件時。快速修正將協助使用者選擇正確的命令 %pip install

已進行多項改進,以在核心在執行期間無法啟動或停止時,提供更好且更有意義的錯誤訊息。錯誤現在會顯示在儲存格輸出中,並提供有關如何修正問題的指示。這可確保使用者知道問題,並且可以在錯過 VS Code 右下角顯示的錯誤時修正問題。

Python

對不受信任和虛擬工作區的有限支援

Python 擴充功能現在對不受信任的工作區 (請參閱 工作區信任) 或虛擬檔案系統 (例如,如果開啟遠端 GitHub 存放庫) 具有有限的支援。在這種情況下,僅提供部分 IntelliSense,並且擴充功能的其他功能無法使用

  • 暫留、相同檔案完成以及內建函式 (例如 print) 的完成功能可用,但擴充功能僅限於處理您目前開啟的檔案。
  • 對於不受信任的工作區,僅支援 Pylance 語言伺服器。
  • 對於虛擬工作區,僅支援 Jedi 和 Pylance。

狀態列中的語言項目已更新,以指示這些情況

Limited support for Python in an untrusted workspace

模組重新命名重構

您現在可以使用 Python 和 Pylance 擴充功能更輕鬆地重新命名模組。重新命名 Python 模組後,系統會提示您選擇是否要變更程式碼中的所有匯入和參考。如果您不確定,您可以先預覽變更的外觀,再做出決定。一旦您有信心,您可以選取 套用重構捨棄重構,以避免套用建議的變更。

遠端開發

持續開發遠端開發擴充功能,可讓您使用容器、遠端電腦或 Windows Linux 子系統 (WSL) 作為功能完整的開發環境。

1.63 版中的功能重點包括

  • 您現在可以在 SSH 伺服器上工作時,使用 在容器中重新開啟 命令在容器中開啟資料夾。
  • 已改進的轉送連接埠安全性可避免不安全的連接埠。
  • 可設定的 WSL 連線方法可讓您使用 wsl.exe 或 Socket 連線與伺服器通訊。
  • 進階容器設定影片涵蓋如何變更專案的預設位置改善 Windows 上的效能

您可以在遠端開發發行說明中,了解新的擴充功能功能和錯誤修正。

GitHub Pull Requests and Issues

持續開發GitHub Pull Requests and Issues 擴充功能,可讓您處理、建立和管理提取要求和問題。查看擴充功能 0.34.0 版本的變更記錄,以查看重點。

擴充功能撰寫

已更新的 API 提案結構

我們已變更 API 提案的管理方式。之前,有一個包含所有提案的單一檔案 vscode.proposed.d.ts。此檔案已變得龐大,很難判斷擴充功能正在使用哪些提案,以及特定提案是否已在穩定 API 中。現在每個提案都有一個檔案。

例如

每個提案都有唯一的名稱,想要使用建議的 API 的擴充功能需要在其 package.json 中列出這些名稱。package.json 中的 enableProposedApi 屬性已取代為新的 enabledApiProposals,後者是提案名稱的字串陣列,並具有 IntelliSense 和驗證支援。

IntelliSense when authoring the enabledApiProposals property

API 提案的更新流程應該如下所示

  1. 尋找您想要試用的提案,並將其名稱新增至 package.json#enabledApiProposals
  2. 使用最新的 vscode-dts 並執行 vscode-dts dev。它會將對應的 d.ts 檔案下載到您的工作區。
  3. 您現在可以針對提案進行程式設計。

詳細的移轉指南和範例移轉可以在問題 #136964 中找到。另請注意,圍繞建議 API 使用的限制並未變更。使用建議 API 的擴充功能無法發佈,也無法按原樣使用。

快速選取 API 改進

在此反覆運算中,我們正在最終確定 VS Code 中 QuickPick 的幾個 API。

QuickPickItem 內嵌按鈕

能夠提供豐富的輸入體驗是我們擴充功能 API 的目標,而使用 VS Code Quick Pick 的熟悉度可實現強大而簡單的 UI 流程。其中一個新增功能是,擴充功能現在可以將按鈕新增至個別 QuickPickItem

QuickPickItem buttons

按一下按鈕會觸發 QuickPick 物件上存在的 onDidTriggerItemButton 事件。我們期待看到您如何在擴充功能中使用這些按鈕。

更新項目時能夠保留捲動位置

除了能夠將按鈕新增至 QuickPickItem 之外,您可能也希望在更新項目時保留捲動位置。對於想要執行下列動作的擴充功能來說,這是一個常見的使用案例

  • 實作「從清單中移除此項目」(例如,Ctrl/Cmd + P x QuickPickItemButton)。
  • 實作「以某種方式切換此項目」(例如「插入程式碼片段」命令)。
  • 在 Quick Pick 中非同步載入項目。

window.createQuickPick() 傳回的 QuickPick 物件上的 keepScrollPosition 屬性可讓您控制 Quick Pick 中的捲動位置 (cursorTop) 是否移回清單頂端。

驗證 API 改進

在此反覆運算中,我們正在最終確定 VS Code 中與驗證相關的幾個 API。

強制建立新的工作階段

有時,當您使用 authentication.getSession() 取得工作階段時,它可能對某些資源有效,但對其他資源無效,而透過再次執行登入流程,可以修正這種情況。

GitHub 單一登入安全性判斷標記語言 (SAML) 支援就是一個範例。預設情況下,為您產生的具有 repo 範圍的權杖將具有存取您自己的個人存放庫的能力。但是,如果您在已開啟 GitHub 單一登入的組織中,您必須明確授與工作階段存取該組織中存放庫的能力。

在此範例中,GitHub 驗證提供者不會知道權杖是否已針對您嘗試存取的內容正確地進行 SAML 處理,因此為了修正該行為,您現在可以強制建立新的工作階段。

AuthenticationGetSessionOptions 現在具有 forceNewSession 屬性,可讓您要求使用者再次登入。如果您將此屬性設定為 true,使用者將會看到

Forcing sign in

如果您想要向使用者顯示更具描述性的訊息,您也可以指定具有 detail 字串的物件。

如果擴充功能具有工作階段,則以無訊息方式擷取工作階段

我們看到的常見模式是,某些擴充功能在啟動時,會檢查以查看它們是否有可用的驗證工作階段。如果有的話,它們會使用它來預先載入資料,並提前執行其他工作,以加快稍後的效能。這樣做的缺點是,如果使用者尚未授與該擴充功能存取驗證工作階段的權限,則會在帳戶功能表上顯示徽章,並在功能表中新增一個項目,要求使用者登入。

這在某些情況下很好,但在其他情況下並不理想,並且會讓使用者的畫面雜亂。為了協助解決此問題,AuthenticationGetSessionOptions 上有一個名為 silent 的新屬性,可讓您要求工作階段,而不會顯示任何擴充功能要求它的跡象。這樣一來,如果擴充功能能夠取得工作階段,它就可以執行它想要執行的動作,但如果不能,它就不會騷擾使用者。

注意:只有在擴充功能過去已被授與存取工作階段的權限 (換句話說,它是「受信任的擴充功能」) 的情況下,此 API 才會傳回已驗證的工作階段。永遠不會將使用者未同意的工作階段授與擴充功能。

設定編輯器改進

已排序的設定

現在可以使用 order 欄位排序個別設定。已排序的設定永遠位於相同類別中未排序的設定之前,且排序是相對的。

未群組的類別支援

設定也可以群組在主要擴充功能標題下,而不是特定類別下。若要執行此動作,請將其中一個類別的類別標題設定為與擴充功能顯示名稱相同。

請注意,在以下範例中,Conf > 語言:顯示大小 設定直接位於 Configuration Sample 標題下。

Settings appearing directly under the extension header

支援數字和整數物件

設定編輯器現在支援具有不可為 Null 的數字/整數值的物件。

An object setting in the Settings editor with number/integer values

executeCommand 的新類型簽名

在先前版本的 VS Code 中,vscode.commands.executeCommand 的類型設定為永遠傳回可能未定義值的 Promise

export function executeCommand<T>(command: string, ...rest: any[]): Thenable<T | undefined>;

但是,並非所有命令都可以傳回 undefined。例如,傳回項目陣列的命令通常會傳回空陣列,而不是 undefined (如果沒有結果)。在這些情況下,您必須使用難看的轉換或新增不必要的檢查,才能撰寫類型正確的程式碼。

為了修正此問題,我們已更新 executeCommand 的類型,使其更明確

export function executeCommand<T = unknown>(command: string, ...rest: any[]): Thenable<T>;

這表示如果命令可以傳回 undefined,您必須明確傳入 | undefined 作為類型參數的一部分

vscode.commands.executeCommand<vscode.CallHierarchyItem | undefined>('vscode.prepareCallHierarchy', ...);

此變更僅影響 executeCommand 的類型,且不會變更此函式的行為。

更新 vscode.d.ts 以取得 exactOptionalPropertyTypes

我們已更新 vscode.d.ts 中的類型,以更好地支援 TypeScript 的 exactOptionalPropertyTypes 嚴格性選項。此工作包括

  • 釐清哪些選擇性屬性可以指派 undefined
  • 在我們如何使用 ?| undefined 方面更加一致。

如果您正在將 exactOptionalPropertyTypes 與您的擴充功能搭配使用,如果您遇到 vscode.d.ts 類型的任何問題,請告訴我們。

來自 URI 的 HTML 自訂資料

自訂資料 允許使用者和擴充功能透過新的 HTML 標籤和屬性來擴充 HTML 語言支援。

在此版本中,HTML 自訂資料貢獻也接受文件 URI。您可以使用此功能,透過 TextDocumentContentProvider 的文件,在執行階段提供自訂資料。

組態預設值覆寫

現在,您可以透過 package.json 中的 configurationDefaults 貢獻點,覆寫其他已註冊組態的預設值。例如,以下程式碼片段會將 files.autoSave 設定的預設行為覆寫為在焦點變更時自動儲存檔案。

"configurationDefaults": {
      "files.autoSave": "onFocusChange"
}

注意: 具有 applicationmachine 範圍的組態無法被覆寫。

取代輸出通道中的內容

在此里程碑中,OutputChannel 物件上的新 replace API 可以取代輸出通道中的內容。

/**
 * Replaces all output from the channel with the given value.
 *
 * @param value A string, falsy values will not be printed.
 */
replace(value: string): void;

workspaceContains 的逾時

當搭配 glob 模式使用 workspaceContains: 啟動事件時,VS Code 會在工作區中啟動檔案名稱搜尋,尋找符合所提供 glob 模式的檔案名稱。一旦找到符合的檔案名稱,擴充功能就會啟動。如果在 7 秒內未找到符合的檔案名稱,VS Code 現在將取消搜尋,且擴充功能將不會啟動。

發佈預先發行版本的擴充功能

VS Code 現在支援擴充功能作者透過 vsce 並傳遞 --pre-release 旗標來發佈其擴充功能的預先發行版本。這表示您可以讓選擇安裝預先發行版本的使用者可以使用最新的功能,並在正式擴充功能發佈前獲得早期回饋。

vsce publish --pre-release

VS Code Marketplace 僅支援擴充功能版本的 major.minor.patch,且尚不支援 semver 預先發行標籤。因此,我們建議擴充功能針對發行版本使用 major.EVEN_NUMBER.patch,針對預先發行版本使用 major.ODD_NUMBER.patch。例如:0.2.* 用於發行版本,0.3.* 用於預先發行版本。VS Code 會自動將擴充功能更新到可用的最高版本,因此即使使用者選擇加入預先發行版本,一旦有發行版本具有更高的版本,該使用者仍將更新到發行版本。

關於預先發行版本擴充功能的更多資訊,請參閱預先發行版本擴充功能主題。

語言伺服器協定

新一代的 語言伺服器協定 以及對應的 npm 模組已發佈。除了各種次要改進之外,新版本還包含內嵌值的建議實作。

偵錯配接器協定

輸出事件的新重要類別

偵錯配接器協定的 Output 事件用於傳送 debuggee 的 stdout 和 stderr 串流,以及從偵錯工具到偵錯主控台的資訊訊息。此訊息串流對於使用者來說可能難以處理,且重要的事項可能會被忽略。因此,Output 事件新增了一個新的類別 important,偵錯配接器可以使用它來顯示需要突出顯示且不會被使用者忽略的重要訊息。important 類別是客戶端的一個提示,用於在高可見性的 UI 中顯示重要資訊,例如彈出式通知。由於此類別是提示,因此客戶端可能會忽略提示並假設 default 類別 (console)。

執行控制請求的澄清和改進

先前,偵錯配接器協定指定所有「執行控制」請求(continuenextstepInstepOutstepBackreverseContinue)都在單一執行緒上運作,但實作可以決定忽略執行緒引數並在所有執行緒上運作。由於這種模糊的「單一執行緒」語意並非真正有用,因此偵錯配接器通常會實作更有用的功能

  • 「step」請求,用於單步執行目前執行緒,同時允許其他執行緒透過恢復執行來自由運作。
  • 「continue」請求,用於恢復所有執行緒。

由於目前的規格對於執行控制請求來說不切實際,我們已變更所有執行控制請求(continuenextstepInstepOutstepBackreverseContinue)的規格,使其符合通常的實作方式。

此外,某些偵錯配接器需要一種「替代語意」,其中 stepcontinue 僅在目前執行緒上運作,但將所有其他執行緒保持在暫停狀態。對於此「替代行為」,已在所有執行控制請求中新增一個新的選用 singleThread 屬性。偵錯配接器必須使用對應的新功能 supportsSingleThreadExecutionRequests 來向客戶端指示執行控制請求支援 singleThread 屬性。

建議的擴充功能 API

每個里程碑都附帶新的建議 API,擴充功能作者可以試用。與往常一樣,我們希望收到您的回饋。以下是試用建議 API 的步驟

  1. 尋找您想要試用的提案,並將其名稱新增至 package.json#enabledApiProposals
  2. 使用最新的 vscode-dts 並執行 vscode-dts dev。它會將對應的 d.ts 檔案下載到您的工作區。
  3. 您現在可以針對提案進行程式設計。

您無法發佈使用建議 API 的擴充功能。下一個版本中可能會出現重大變更,而且我們絕不希望破壞現有的擴充功能。

QuickPickItem 分隔符號

在此迭代中,我們引入了擴充功能透過建議 API (vscode.proposed.quickPickSeparators.d.ts) 將分隔符號(也稱為「類別」)新增至 Quick Pick 的功能。這對於將項目分組或僅在項目之間留出一些空間非常有用

Quick Pick separators

若要將分隔符號新增至現有的 Quick Pick,您可以將新的 QuickPickItem 新增至現有的項目清單,但請指定 QuickPickItem 上的 kind 屬性,並將其設定為 QuickPickItemKind.Separator

在上面的範例中,您會將以下物件新增至您的項目清單

{
    label: 'APIs',
    kind: QuickPickItemKind.Separator
}

如果您未指定 kind 屬性,或將其設定為 QuickPickItemKind.Default,則該項目將被視為一般的 QuickPickItem

您可以在issue #74967 中提供關於此 API 的回饋。

值得注意的修正

  • 5989 無法在使用 openssh 的遠端 Windows 機器上執行任何工作
  • 45629 Mac 上的 Google 日文輸入法 (IME) - 建議與文字重疊
  • 131345 具有 \n 的預設設定棄用警告會破壞 json
  • 133521 要求安裝 nvm,即使它已經安裝了
  • 133623 如果焦點執行緒不再存在,偵錯工具列不會更新
  • 134254 無法輸入韓文。自我分割或遺失
  • 134429 Zlib 錯誤:無效距離太遠
  • 135838 當有另一個名稱更長的檔案時,我無法儲存檔案
  • 136684 呼叫堆疊項目未以正確的內容開啟索引標籤
  • 137012 Emmet 在 VS Code 1.62.2(Universal) 的 js/jsx 檔案中無法運作
  • 138153 效能:_removePropertiesWithPossibleUserInfo 約佔載入渲染器成本的 10%
  • 138302 效能:僅在註冊擴充功能後更新編輯器組態
  • 138517 vscode.dev 無法在私人儲存庫中切換分支

感謝您

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

Web 擴充功能

擴充功能作者啟用以 Web 擴充功能 形式執行程式碼的擴充功能 (以下列表介於 11 月 2 日至 12 月 6 日之間)

Issue tracking

對我們的 issue tracking 的貢獻

Pull requests

vscode 的貢獻

vscode-codicons 的貢獻

vscode-css-languageservice 的貢獻

vscode-eslint 的貢獻

vscode-extension-samples 的貢獻

vscode-html-languageservice 的貢獻

vscode-json-languageservice 的貢獻

vscode-languageserver-node 的貢獻

vscode-pull-request-github 的貢獻

vscode-vsce 的貢獻

language-server-protocol 的貢獻

monaco-editor 的貢獻