🚀 在 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 月發行版本。此版本包含許多更新,我們希望您會喜歡,其中一些主要重點包括

如果您想在線上閱讀這些版本資訊,請前往 Updates,網址為 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" 時,將會在第 13 行的錯誤之前顯示第 5 行的警告等等。

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

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

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

自動 2x2 編輯器格線

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

清單中更佳的 Escape 處理

在清單和樹狀結構上按下 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 Light Theme

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

Pre-Release version indication

佈景主題:GitHub Light Theme

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

Switch to Pre-Release version button

佈景主題:GitHub Light Theme

已更新的尋找動作

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

原始檔控制

在快速差異中忽略尾端空白

您現在可以使用 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

您可以閱讀 「The Invisible JavaScript Backdoor」部落格文章劍橋大學文章,了解如何在 Unicode 詐騙攻擊中使用隱形或容易混淆的 Unicode 字元。

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

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

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

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

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

多個 hover 提供者

當文件有多個 hover 提供者時,hover 現在會在其中一個提供者傳回結果後立即顯示,並隨著其餘提供者的結果傳入而更新

之前 之後

工作

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 預覽現在可以在您輸入時更智慧地自行更新。預覽現在不是為每次更新取代整個 Markdown 預覽文件,而是使用 DOM diffing,只取代預覽文件中已變更的元素。這減少了有時在輸入時會發生的抖動。

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 )

核心失敗處理的改進

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

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

Python

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

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

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

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

Limited support for Python in an untrusted workspace

模組重新命名重構

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

遠端開發

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

1.63 中的功能重點包括

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

您可以在遠端開發版本資訊中了解新的擴充功能功能和錯誤修正。

GitHub Pull Requests 和 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'd 或未 SAML'd 的權杖之間的差異,因此為了修正該行為,您現在可以強制建立新的工作階段。

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

Forcing sign in

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

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

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

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

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

設定編輯器改進

已排序的設定

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

未分組的類別支援

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

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

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 現在支援擴充功能作者透過傳遞 --pre-release 旗標,透過 vsce 發佈其擴充功能的預先發行版本。這表示您可以將最新的功能提供給選擇安裝預先發行版本的使用者,並在正式擴充功能發行之前取得早期意見反應。

vsce publish --pre-release

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

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

語言伺服器協定

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

偵錯配接器協定

輸出事件的新重要類別

Debug Adapter Protocol 的 Output 事件用於將 debuggee 的 stdout 和 stderr 流,以及除錯工具的資訊訊息傳送到偵錯主控台。大量的訊息流對使用者來說可能難以處理,並且可能會忽略掉重要的資訊。基於這個原因,Output 事件新增了一個新的類別 important,除錯介面卡可以使用它來顯示需要突出顯示的重要訊息,避免使用者忽略。important 類別是對用戶端的一個提示,指示以高度可見的 UI 顯示重要資訊,例如彈出式通知。由於這個類別只是一個提示,用戶端可能會忽略這個提示,並假設為 default 類別 (console)。

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

先前 Debug Adapter Protocol 規範所有「執行控制」請求 (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 已經安裝時,要求安裝 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 追蹤

對我們的 issue 追蹤的貢獻

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 的貢獻