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

2018 年 7 月 (版本 1.26)

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

下載:Windows:x64 | Mac:Intel | Linux 64 位:deb rpm tarball | 32 位:deb rpm tarball


歡迎使用 Visual Studio Code 2018 年 7 月版。此版本中有許多重要的更新,我們希望您會喜歡,其中包括:

如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。
您還可以檢視 Cloud Developer Advocate Brian Clark 釋出的此 1.26 版本亮點影片

釋出說明按以下與 VS Code 重點領域相關的部分進行排列。以下是一些進一步的更新

  • 工作臺 - 新的“檢視”選單佈局,複製相對路徑操作,離線模式。
  • 整合終端 - 改進的多行支援,渲染改進。
  • 語言 - 將命名匯入轉換為名稱空間匯入,JSX 摺疊。
  • 除錯 - 改進的停止會話和智慧單步除錯。
  • 預覽功能 - Windows 和 Linux 的可主題化自定義工具和選單欄。
  • 擴充套件創作 - QuickInput API,extensionPack 宣告,Webview 標題欄圖示。

Insiders:想盡快看到新功能嗎?您可以下載每夜更新的 Insiders 構建版本,並第一時間嘗試最新的更新。有關最新的 Visual Studio Code 新聞、更新和內容,請在 Twitter 上關注我們 @code

工作臺

麵包屑導航

編輯器現在在其內容上方有一個導航欄 - 我們稱之為麵包屑導航。它顯示當前位置,並允許您在符號和檔案之間快速導航。要開始使用麵包屑導航,請使用檢視 > 顯示麵包屑導航命令或透過breadcrumbs.enabled設定啟用它。

使用編輯器選項卡(預設)時,麵包屑導航顯示在編輯器標題下方的單獨一行。如果您不使用編輯器選項卡,麵包屑導航會顯示為標題旁邊的互動式檔案路徑。

Breadcrumbs enabled

麵包屑導航始終顯示檔案路徑,並在擴充套件的幫助下顯示游標位置處的符號路徑。顯示的符號與“大綱”檢視和“轉到符號”中的符號相同,因此現有擴充套件將直接與麵包屑導航配合使用。

麵包屑導航的外觀可以自定義。如果您的路徑非常長,或者只對檔案路徑或符號路徑感興趣,您可以使用breadcrumbs.filePathbreadcrumbs.symbolPath設定。兩者都支援onofflast,它們定義您是否以及看到路徑的哪一部分。

要與麵包屑導航互動,請使用焦點麵包屑導航命令或按⇧⌘. (Windows、Linux Ctrl+Shift+.)。它將選擇最後一個元素並開啟一個下拉選單,允許您導航到同級檔案或符號。使用 (Windows、Linux 左箭頭) (Windows、Linux 右箭頭)鍵盤快捷鍵轉到當前元素之前或之後的元素。當下拉選單出現時,只需開始輸入 - 所有匹配的元素都將被突出顯示,並且最佳匹配將被選中以進行快速導航。

Breadcrumbs active

您還可以在沒有選擇器的情況下與麵包屑導航互動。按⇧⌘; (Windows、Linux Ctrl+Shift+;)將焦點放在最後一個元素上,使用 (Windows、Linux 左箭頭) (Windows、Linux 右箭頭)進行導航,並使用空格在編輯器中顯示元素。

“問題”面板快速修復

您現在可以從“問題”面板應用快速修復。當您將滑鼠懸停或選擇一個問題條目時,會顯示一個指示快速修復的燈泡。可以透過單擊燈泡或開啟問題條目的上下文選單來應用快速修復。

Quick fixes

注意:燈泡指示器僅在提供快速修復的擴充套件提供與快速修復相關的診斷資訊時顯示。

Windows 使用者設定

上一個版本中宣佈的 Windows 使用者設定包現已在穩定版中提供。安裝使用者設定不需要管理員許可權,因為位置將在您的使用者本地 AppData (LOCALAPPDATA) 資料夾下。使用者設定還提供更流暢的後臺更新體驗。

下載使用者設定

如果您是當前使用系統範圍 Windows 設定的使用者,您將收到安裝使用者設定的提示,我們建議您從現在開始使用。不用擔心,在過渡期間,您的所有設定和擴充套件都將保留。在安裝過程中,您還會收到解除安裝系統範圍設定的提示。

網格:最小化編輯器的自動最大化

在上一個里程碑中引入網格編輯器佈局時,我們失去了一個功能,即當您聚焦編輯器且它們處於最小化狀態時,編輯器會自動最大化。此功能現在與以前一樣工作。

Grid maximize

注意:您始終可以透過檢視:最大化編輯器組 (workbench.action.minimizeOtherEditors) 最大化活動編輯器,或者透過檢視:重置編輯器組大小 (workbench.action.evenEditorWidths) 重置所有編輯器大小。

檢視選單清理

檢視選單變得非常龐大,我們決定將許多條目移到一個單獨的外觀子選單中進行清理。

View menu

複製相對路徑

VS Code 始終有一個操作可以將檔案的絕對路徑複製到剪貼簿(⌘K ⌥⌘C (Windows Shift+Alt+C, Linux Ctrl+K Ctrl+Alt+C))。現在有一個新的操作複製相對路徑⌘K ⇧⌥⌘C (Windows Ctrl+K Ctrl+Shift+C, Linux Ctrl+K Ctrl+Shift+Alt+C))來複制相對於工作區資料夾根目錄的檔案路徑。

注意:您可以透過按住Shift鍵(macOS 上為Alt鍵)再開啟選單,從上下文選單(例如,在檔案資源管理器中的選項卡或檔案上)訪問此操作。

自定義檢視:檔案資源裝飾

顯示檔案資源的自定義檢視現在將顯示檔案裝飾(Git,問題)。您可以使用設定explorer.decorations.colorsexplorer.decorations.badges停用它們,這會在檔案資源管理器、開啟的編輯器和自定義檢視中停用它們。

Custom view decorations

從 package.json 執行 npm 指令碼

您現在可以從懸停(如下所示)或從上下文選單中執行package.json檔案中的 npm 指令碼。

npm script hover

開啟資料夾 URI

如果存在為該 URI 貢獻FileSystemProvider的擴充套件,您現在可以將 URI 作為資料夾在 VS Code 中開啟。我們引入了一個新的命令列引數--folder-uri來執行此操作。

如果您安裝了RemoteHub擴充套件,以下 CLI 命令將開啟 VS Code GitHub 儲存庫作為資料夾。

code --folder-uri remotehub://github.com/microsoft/vscode

Open folder URI

快速渲染

在啟動時,基本工作臺佈局現在恢復得更快。恢復順序是活動欄、側邊欄和狀態列,然後是標題和圖示,最後填充資源管理器和編輯器區域。

Rapid render

快速渲染旨在提高感知效能,因為您看到空白畫布的時間減少了。我們有更多關於如何提高渲染效能的想法,我們很樂意聽取您的反饋。

輸出面板

VS Code 的主程序、視窗程序和共享程序都有自己的日誌通道,您現在可以在日誌級別設定為“Trace”時檢視傳送的遙測事件。為了簡潔起見,所有遙測事件共有的資料將不可見。每個遙測事件的完整有效負載將記錄在名為telemetry.log的單獨日誌檔案中,您可以透過開發者:開啟日誌檔案...命令訪問該檔案。

離線模式

有些使用者不希望 VS Code 發出任何傳出網路請求,除非他們明確呼叫需要線上訪問的功能。為了支援此離線模式,我們添加了新設定來關閉諸如自動擴充套件更新檢查、查詢 A/B 實驗設定以及獲取線上資料以進行自動完成等功能。

以下是控制 VS Code 發出網路請求功能的完整設定列表

  • update.mode
  • update.showReleaseNotes
  • extensions.autoupdate
  • extensions.autoCheckUpdates
  • extensions.showRecommendationsOnlyOnDemand
  • workbench.settings.enableNaturalLanguageSearch
  • workbench.enableExperiments
  • telemetry.enableTelemetry
  • telemetry.enableCrashReporter
  • git.autofetch
  • npm.fetchOnlinePackageInfo

輔助功能改進

我們修復了大量輔助功能問題——主要圍繞鍵盤導航、螢幕閱讀器支援和顏色對比度。完整列表可在此處找到:此處

整合終端

列選擇

整合終端現在透過Alt+click支援列選擇。

Terminal column selection

改進的多行支援

現在,在終端中雙擊選擇單詞會選擇跨行拆分的單詞。

前端和後端現在同步

進入整合終端的資料流現在與支援的偽終端/shell 程序同步。這意味著進入終端的資料不再會淹沒 UI 執行緒並導致無響應,SIGINT (Ctrl+C) 應該始終響應,並且time命令應該返回準確的結果。

動態紋理圖集

整合終端現在預設為畫布渲染使用“動態紋理圖集”。這改變了終端用於儲存字元字形的快取策略。字形不再是預設背景上的固定字形集,而是根據需要新增到紋理圖集,無論使用什麼背景。這應該會減少首次終端啟動時間以及不使用預設背景的字元的渲染時間,並提高整體渲染效能。

這是xterm.js的社群上游貢獻。

語言

TypeScript 3.0

VS Code 現在附帶 TypeScript 3.0.1。此主要更新帶來了對專案引用的支援、對元組的更好支援以及其他語言和工具功能。您可以在此處閱讀有關 TypeScript 3.0 的更多資訊。

更好的錯誤報告

TypeScript 團隊做了大量工作,使 JavaScript 和 TypeScript 錯誤訊息更智慧、更清晰。一些錯誤訊息現在包含指向原始碼中相關位置的連結。

Related locations showing in a diagnostic. Clicking on 'box.ts' will show the definition of 'width' in 'box'

聯合型別和其他複雜型別的訊息也應該更簡潔和有用。例如,JSX 中一個簡單的型別錯誤有時會產生一個複雜的錯誤訊息,如下所示:

How this simple type error used to be reported by TypeScript 2.8

得益於 TypeScript 3.0,VS Code 1.26 中的錯誤更容易閱讀。

How the error is now reported

JSX 標籤完成

在 JavaScript 或 TypeScript 檔案中鍵入>時,JSX 標籤現在會自動關閉。

Tag completion of JSX tags

此行為與 VS Code 在 HTML 檔案中已提供的功能匹配。可以透過設定"javascript.autoClosingTags": false"typescript.autoClosingTags": false來停用標籤的自動關閉。

新增所有缺失的匯入快速修復

新增缺失匯入”快速修復現在可以應用於 JavaScript/TypeScript 檔案中的所有缺失匯入。

Adding multiple missing imports with a single quick fix

此快速修復將僅為具有單個潛在定義的符號新增匯入。如果當前專案中存在符號的多個潛在定義,例如有兩個不同的檔案匯出名為Button的符號,則必須快速修復單個錯誤並選擇您想要的特定匯入。

要在 JavaScript 檔案中使用此快速修復,請啟用語義檢查

JSX 摺疊

使用語法感知摺疊時,JSX 標籤現在可以摺疊。

Folding JSX tags

命名匯入和名稱空間匯入之間的轉換

兩個新的重構功能讓您可以在 JavaScript 和 TypeScript 中快速在命名匯入和名稱空間匯入之間進行轉換。

convert to namespace import

透過Ctrl點選專案引用路徑(macOS 上為Cmd+click)快速導航jsconfig.jsontsconfig.json專案引用。

Cmd click on the path to open the referenced project's tsconfig

extends路徑現在也可以點選。

除錯

改進的停止除錯行為

在以前的版本中,除錯:停止操作(在除錯工具欄上找到)總是會立即殺死被除錯物件及其子程序,而不給被除錯物件機會進行優雅清理。一些使用者不喜歡這種行為,因為他們在停止除錯會話後被迫手動清理。

在此版本中,我們透過以下方式改進了除錯:停止操作:

  1. 首次按下停止時,被除錯物件不再立即被殺死,而是被要求優雅關閉(並根據需要清理所有內容)。

  2. 如果在該關閉程式碼中沒有斷點(或問題),被除錯物件和除錯會話將終止。使用者將看不到與以前版本的 VS Code 有任何行為差異。

  3. 但是,如果偵錯程式在關閉程式碼中遇到斷點,或者被除錯物件本身沒有正確終止,則除錯會話將不會結束。

  4. 在這種情況下,再次按下停止按鈕將強制終止被除錯物件。因此,如果您發現按下紅色停止按鈕時除錯會話沒有結束,請再次按下該按鈕以強制關閉被除錯物件。

注意:此功能僅受已選擇實現它的偵錯程式擴充套件支援。目前這僅限於內建的 Node.js 偵錯程式。我們期望其他除錯擴充套件很快支援此功能。

Node/Chrome 除錯的 smartStep 行為已更改

以前,"smartStep": true會導致 Node.js 偵錯程式在沒有源對映的原始碼中不停止。這可以透過兩種方式發生:

  • 完全沒有源對映的檔案(未經轉譯的原始碼或隨節點模組提供的 .js 檔案)。
  • 有源對映的轉譯檔案,但有些行沒有對映(TypeScript 在編譯某些功能(如 async/await)時插入的額外行)。

在 VS Code 1.26 中,"smartStep": true將隻影響第二種型別,即源對映中缺失的行。現在您將能夠進入 .js 檔案,同時仍然跳過 TS async/await 程式碼。

我們之所以更改此設定,是因為我們意識到舊的 smartStep 行為過於激進。跳過插入的程式碼通常是正確的,但在第一種情況下跳過僅對某些專案和使用者有意義。此外,在您的launch.json配置檔案中使用skipFiles選項可以更好地覆蓋整個檔案的情況,因為它可以更精確地定位檔案並且速度更快。

因此,如果您正在使用smartStep並注意到偵錯程式不再自動跳過沒有源對映的檔案,您可以使用skipFiles來恢復以前的行為。有關如何配置skipFiles以跳過 node_modules、內部節點檔案或您不想單步執行的任何其他檔案中的原始碼的示例,請參閱跳過不相關的程式碼

擴充套件

此版本透過向擴充套件搜尋欄位新增 IntelliSense 自動完成功能,使擴充套件搜尋更加容易。這將幫助您最佳化擴充套件搜尋,以根據類別和安裝狀態等篩選結果;或者按名稱、評分或安裝次數對結果進行排序。鍵入“@”或⌃Space (Windows, Linux Ctrl+Space)以觸發受支援查詢引數的建議。

Extension Search IntelliSense

擴充套件包管理

此版本中,擴充套件包管理變得更加流暢。擴充套件包的安裝、解除安裝、啟用或停用始終作為一個整體進行。您現在也可以解除安裝或停用屬於擴充套件包的單個擴充套件,而無需解除安裝或停用整個擴充套件包。

當您開啟擴充套件詳情時,還會有一個新的擴充套件包選項卡,顯示擴充套件包中捆綁了哪些擴充套件。

Extension Pack

注意:這需要擴充套件包的採用。有關詳細資訊,請參閱擴充套件包重新審視

從命令列停用擴充套件

您現在可以使用新引數--disable-extension從命令列停用擴充套件。

  • code <folder_path> --disable-extension ms-python.python - 以停用ms-python.python擴充套件的方式開啟資料夾。
  • code <folder_path> --disable-extension ms-python.python --disable-extension ms-dotnettools.csharp - 以停用ms-python.pythonms-dotnettools.csharp擴充套件的方式開啟資料夾。

預覽功能

預覽功能尚未準備好釋出,但已足夠實用。我們歡迎您在這些功能開發期間提供早期反饋。

新設定編輯器

在此里程碑中,我們繼續開發用於編輯設定的 GUI。它仍然是預覽版,但如果您想嘗試一下,可以使用“首選項:開啟設定(預覽)”命令開啟它。我們很樂意聽取您的任何反饋意見——您可以在此 GitHub 問題上留下反饋。

New Settings editor

與上月相比的一些新變化是:

  • 標題 UX 已重新整理和清理,並且僅顯示修改過的設定和開啟 JSON 編輯器的操作已移至右側的...選單下。
  • 左側的目錄現在預設摺疊,並隨著您的滾動展開以顯示當前部分。
  • 設定描述現在以 Markdown 格式呈現。一些設定具有指向相關文件的外部連結,對其他設定的引用現在是可點選的連結,可以滾動到該設定。列舉型別設定的enumDescriptions現在顯示在設定描述之後(在 JSON 編輯器中也是如此)。

setting links and Markdown

  • files.excludesearch.exclude設定的新控制元件使新增或刪除全域性模式以及檢視當前範圍適用了哪些模式變得更容易。

new exclude control

  • 設定編輯器中的控制元件現在支援主題化。請參閱新主題顏色下的新主題顏色。

Windows/Linux 自定義標題欄和選單

在此里程碑中,當啟用自定義標題欄時,我們改進了 Windows 和 Linux 上的自定義選單。雖然仍處於預覽階段,但您可以透過在settings.json中將window.titleBarStyle設定為custom來嘗試。

一些亮點包括:

  • 選單現在支援主題化。請參閱新主題顏色下的新主題顏色。

    Themed Menus

  • 鍵盤和滑鼠與選單的互動更加連貫。以前,有多個焦點指示器使選單不清晰。現在,選單的功能方式更加熟悉。

  • 許多輔助功能問題已得到解決,以改善那些需要更大縮放級別或使用螢幕閱讀器的人的體驗。

我們將繼續改進新選單和標題欄,並解決標記有workbench-titleworkbench-menu標籤的問題。

擴充套件開發

QuickInput API

QuickPickInputBox API 現在穩定。它們允許比現有showQuickPickshowInputBox API 更靈活地收集使用者輸入。在示例擴充套件中提供了 QuickInput API 使用示例。

Multi-step input sample

擴充套件包重新審視

現在定義擴充套件包使用一個名為extensionPack的新屬性,而不是package.json中的extensionDependencies。這是因為extensionDependencies主要用於定義擴充套件之間的功能依賴,這會阻止在不解除安裝或停用依賴擴充套件的情況下解除安裝或停用擴充套件依賴。

擴充套件包不應與其捆綁的擴充套件有任何功能依賴,並且它們應該能夠獨立於包進行管理。下面是一個示例extensionPack條目,它定義了一個捆綁了多個偵錯程式擴充套件的擴充套件包。

"extensionPack": [
    "andreweinand.mock-debug",
    "ms-vscode.mono-debug",
    "ms-vscode.cpptools",
    "ms-dotnettools.csharp",
    "vscjava.vscode-java-debug"
]

這將使使用者更容易管理擴充套件包及其捆綁的擴充套件。請參閱擴充套件包管理

更好的工作區編輯

WorkspaceEditapplyEdit API 已經擴充套件,允許擴充套件建立、重新命名和刪除檔案。在此之前,只能進行文字編輯。新的 API 允許更好的重構;例如,在類名更改時重新命名檔案。

新主題顏色

麵包屑導航有新的主題顏色:

  • breadcrumb.foreground:麵包屑項的顏色。
  • breadcrumb.focusForeground:聚焦麵包屑項的顏色。
  • breadcrumb.activeSelectionForeground:選定麵包屑項的顏色。
  • breadcrumbPicker.background:麵包屑項選擇器的背景顏色。

新設定編輯器中的控制元件現在支援主題化

  • settings.headerForeground:部分標題或活動標題的前景顏色。
  • settings.modifiedItemForeground:已修改設定指示器的前景顏色。
  • settings.inactiveSelectedItemBorder:當設定列表沒有焦點時,選定設定行邊框的顏色。
  • settings.dropdownBackground:下拉選單背景。
  • settings.dropdownForeground:下拉選單前景。
  • settings.dropdownBorder:下拉選單邊框。
  • settings.checkboxBackground:複選框背景。
  • settings.checkboxForeground:複選框前景。
  • settings.checkboxBorder:複選框邊框。
  • settings.textInputBackground:文字輸入框背景。
  • settings.textInputForeground:文字輸入框前景。
  • settings.textInputBorder:文字輸入框邊框。
  • settings.numberInputBackground:數字輸入框背景。
  • settings.numberInputForeground:數字輸入框前景。
  • settings.numberInputBorder:數字輸入框邊框。

Windows 和 Linux 上的自定義選單現在支援主題化

  • menu.background:選單和上下文選單的背景。
  • menu.foreground:選單和上下文選單的前景。
  • menu.selectionBackground:選單和上下文選單中選定項的背景。
  • menu.selectionForeground:選單和上下文選單中選定項的前景。
  • menu.selectionBorder:選單和上下文選單中選定項的邊框。
  • menubar.selectionBackground:選單欄中選定的頂級選單的背景。
  • menubar.selectionForeground:選單欄中選定的頂級選單的前景。
  • menubar.selectionBorder:選單欄中選定的頂級選單的邊框。

更新了預設主題顏色

作為我們輔助功能改進的一部分,我們更新了一些預設主題顏色,以確保它們符合顏色對比度要求。顏色對比度修復的完整列表可在此處找到。

定義提供程式現在可以返回DefinitionLink物件。定義連結提供了比普通位置定義更多的元資料,包括定義符號的範圍。

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
  vscode.languages.registerDefinitionProvider('markdown', new LineLinkDefinitionProvider());
}

export class LineLinkDefinitionProvider implements vscode.DefinitionProvider {
  async provideDefinition(
    document: vscode.TextDocument,
    position: vscode.Position,
    token: vscode.CancellationToken
  ): Promise<vscode.DefinitionLink[]> {
    const wordRange = document.getWordRangeAtPosition(position, /<\d+>/);
    if (wordRange.isEmpty) {
      return [];
    }

    const targetLine = +document.getText(wordRange).slice(1, -1);
    return [
      {
        // Definition location
        targetRange: new vscode.Range(targetLine - 1, 0, targetLine, 0),
        targetUri: document.uri,

        // Range of the defining symbol
        originSelectionRange: new vscode.Range(
          wordRange.start.translate({ characterDelta: 1 }),
          wordRange.end.translate({ characterDelta: -1 })
        )
      }
    ];
  }
}

除錯擴充套件

除錯介面卡協議的新家

我們已將除錯介面卡協議從其舊位置移至新網站https://microsoft.github.io/debug-adapter-protocol和相應的儲存庫https://github.com/microsoft/debug-adapter-protocol

配套部落格文章《除錯介面卡協議的新家》提供了有關此次遷移的背景和更多詳細資訊。

所有從舊位置https://raw.githubusercontent.com/Microsoft/vscode-debugadapter-node/main/debugProtocol.json以程式設計方式使用 DAP JSON-schema 的使用者都應將其原始碼更新到新位置。

https://microsoft.github.io/debug-adapter-protocol/debugAdapterProtocol.json

在接下來的兩個版本(八月和九月)中,我們將保持舊位置的模式是最新的,但我們計劃在十月將其刪除。

除錯介面卡協議的新terminate請求

除錯介面卡協議已新增新的terminate請求和相應的supportsTerminateRequest功能,以支援上面解釋的被除錯物件的優雅關閉。如果除錯介面卡針對supportsTerminateRequest功能返回true,VS Code 將在停止除錯會話時首先向除錯介面卡傳送terminate請求。除錯介面卡中terminate請求的實現應請求被除錯物件自行終止。在基於 Unix 的作業系統上,這可以透過向被除錯物件傳送SIGINT訊號輕鬆實現。

Webview 圖示

Webviews現在可以提供一個自定義圖示,該圖示顯示在標籤欄和“開啟編輯器”檢視中。

import * as vscode from 'vscode';
import * as path from 'path';

export function activate(context: vscode.ExtensionContext) {

    context.subscriptions.push(vscode.commands.registerCommand('catCoding.start', () => {
        const panel = vscode.window.createWebviewPanel('catCoding',
            "Coding Cat", vscode.ViewColumn.One, { });

        panel.iconPath = vscode.Uri.file(path.join(context.extensionPath, 'media', 'cat.png'));
    });
}

A webview with a custom icon

終端訪問 API

終端訪問 API 現已穩定。它們允許擴充套件訪問Terminal物件,無論擴充套件是否建立它們。

export namespace window {
  export const terminals: ReadonlyArray<Terminal>;
  export const onDidOpenTerminal: Event<Terminal>;
}

URI 處理程式 API

URI 處理程式 API 現已穩定。它允許擴充套件處理系統範圍的URI

export interface UriHandler {
  handleUri(uri: Uri): ProviderResult<void>;
}

export namespace window {
  export function registerUriHandler(handler: UriHandler): Disposable;
}

它附帶一個onUri啟用事件,每當作業系統開啟指向自身的 URI 時,該事件就會啟用擴充套件。

請參閱 Git 擴充套件的GitProtocolHandler以獲取參考實現。

Node.js 更新

VS Code 執行的 Electron 版本已更新,隨之而來的是 VS Code 附帶的 Node.js 從 7.9 更新到 8.9。所有擴充套件現在都將在新版本的 Node.js 上執行。

有一些變化可能會影響擴充套件:

  • natives節點模組不再起作用(請參閱#47569)。
  • 不再支援舊版除錯協議和--debug標誌(請參閱#55907)。
  • 如果使用 stdio 作為傳輸協議的 Node.js 語言伺服器在 VS Code 1.26 中遇到問題,則使用 LSP 客戶端伺服器庫的擴充套件作者的修復方法是將傳輸協議切換到TransportKind.ipc而不是TransportKind.stdio,並重新發布其擴充套件。

提議的擴充套件 API

每個里程碑都附帶新的提議 API,擴充套件作者可以試用它們。一如既往,我們渴望您的反饋。以下是試用提議 API 所需的操作:

  • 您必須使用 Insiders 版本,因為提議的 API 經常更改。
  • 您的擴充套件的 package.json 檔案中必須包含以下行:"enableProposedApi": true
  • 將最新版本的 vscode.proposed.d.ts 檔案複製到您的專案中。

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

TextSearchProvider, FileSearchProvider, FileIndexProvider

我們添加了一組 API,允許擴充套件在 VS Code 中實現文字搜尋和檔案搜尋。

當用戶使用“搜尋”檢視或擴充套件使用新 APIworkspace.findTextInFiles時,會呼叫TextSearchProvider。它透過progress回撥以增量方式返回文字匹配項。

有兩種方法可以實現檔案搜尋,涵蓋兩種常見用例:透過FileIndexProviderFileSearchProvider。當用戶開啟“快速開啟”時,FileIndexProvider被呼叫一次,並且必須返回工作區中每個檔案的陣列。然後,VS Code 在此列表中搜索並應用其自身的模糊匹配邏輯,以向用戶返回正確的搜尋結果集。如果您的擴充套件能夠提供工作區中每個檔案的列表,那麼實現FileIndexProvider是支援檔案搜尋的更簡單方法。

如果您的擴充套件需要處理使用者的搜尋查詢並返回其自己的過濾結果列表,請實現FileSearchProvider。它會在使用者在“快速開啟”中每次按鍵時被呼叫,並且必須返回一個經過過濾和排序的檔案匹配集。

export interface TextSearchProvider {
  provideTextSearchResults(
    query: TextSearchQuery,
    options: TextSearchOptions,
    progress: Progress<TextSearchResult>,
    token: CancellationToken
  ): Thenable<void>;
}

export interface FileIndexProvider {
  provideFileIndex(options: FileIndexOptions, token: CancellationToken): Thenable<Uri[]>;
}

export interface FileSearchProvider {
  provideFileSearchResults(
    query: FileSearchQuery,
    options: FileSearchOptions,
    token: CancellationToken
  ): Thenable<Uri[]>;
}

export namespace workspace {
  export function registerTextSearchProvider(
    scheme: string,
    provider: TextSearchProvider
  ): Disposable;
  export function registerFileIndexProvider(
    scheme: string,
    provider: FileIndexProvider
  ): Disposable;
  export function registerFileSearchProvider(
    scheme: string,
    provider: FileSearchProvider
  ): Disposable;
}

findTextInFiles API

已新增新的提議 API,允許擴充套件在工作區中搜索文字模式。

export namespace workspace {
  export function findTextInFiles(
    query: TextSearchQuery,
    options: FindTextInFilesOptions,
    callback: (result: TextSearchResult) => void,
    token?: CancellationToken
  ): Thenable<void>;
}

這與在工作區中搜索檔案的workspace.findFiles相對應。

雜項

Electron 更新

在此版本中,我們從 Electron 1.7.12 更新到 2.0.5。這帶來了 Chromium 從版本 58 更新到 61,Node.js 從 7.9 更新到 8.9。

新文件

日誌點部落格文章

您可以閱讀 Kenneth 最近的部落格文章,瞭解 Node.js 除錯日誌點和自動附加。日誌點讓您無需更改原始碼或中斷除錯會話即可快速輸出日誌資訊。

IntelliCode 常見問題解答

如果您是一名 Python 開發人員,請檢視IntelliCode,這是一款利用人工智慧 (AI) 增強軟體開發的新工具。IntelliCode 擴充套件為 Python 中的 IntelliSense 提供了一組 AI 輔助功能,例如根據當前原始碼上下文推斷最相關的自動完成。

IntelliCode extension

顯著變化

  • 53532: 編輯器:如果檔案已載入,則在後臺載入檔案的更改
  • 53586: Node 除錯:不記住自動附加模式
  • 53022: 編輯器選項卡中檔案的“只讀”標籤
  • 48275: 不再支援resourceIsFile上下文鍵

感謝

最後但同樣重要的是,衷心感謝!以下幫助使 VS Code 變得更好的各位:

vscode 的貢獻

language-server-protocol 的貢獻

vscode-chrome-debug 的貢獻

vscode-chrome-debug-core 的貢獻

vscode-vsce 的貢獻

vscode-recipes 的貢獻

localization 的貢獻

Transifex VS Code 專案團隊中有超過 800 名成員,每月約有 100 名活躍貢獻者。我們感謝您的貢獻,無論是提供新的翻譯、對翻譯進行投票,還是提出流程改進建議。

以下是此版本的貢獻者快照。有關專案(包括貢獻者名單)的詳細資訊,請訪問專案網站:https://aka.ms/vscodeloc

  • 中文 (簡體): Joel Yang, Yusong, pluwen, Liu Dingming 劉丁明, hackereric, Simon Chan, 韋煊 王, gzponline, Ziming Wang。
  • 中文 (繁體): Duran Hsieh, Will 保哥, Poy Chang, Alan Tsai, Kevin Yang, Winnie Lin, MartinLau, Ben Tsai 蔡和恩, Alan Liu。
  • 法語: Antoine Griffard, Ludovic P, William Thibodeau, Adrien Clerbois, Alain BUFERNE。
  • 德語: Carsten Siemens, Carsten Kneip, Markus Hatvan, Väinämö Lumikero, Ettore Atalan, AlCalzone, Levin Rickert。
  • 義大利語: Alessandro Alpi, Andrea Dottor, Emilie Rollandin, Riccardo Cappello, Aldo Donetti, Massimo。
  • 日語: Satoshi Kajiura, Yuichi Nukiyama, Shunya Tajima, yoshioms, Nakamura Yuta。
  • 韓語: Helloyunho。
  • 俄語: Michel Ace。
  • 西班牙語: Alberto Poblacion, Julián Martínez, Alejandro Medina, José M. Aguilar, Carlos Mendible, Pedro Sanchez, Lio Fleishman。
  • 波斯尼亞語: Bahrudin Hrnjica。
  • 保加利亞語:Любомир Василев。
  • 捷克語: Ľuboš Uličný, Ľubomír Kováč, Frantisek Veris。
  • 荷蘭語: Gerald Versluis, RubenJacobse, Armand Duijn, Dirk Doesburg, Maarten van Stam, Dean Wyns。
  • 英語 (英國): Matthew John Cheetham, Swotboy2000。
  • 芬蘭語: Feetu Nyrhinen, Petri Niinimäki, Make。
  • 希臘語: Ioannis Paraskevopoulos, Theodore Tsirpanis。
  • 匈牙利語: Dóczi Dominik。
  • 印度尼西亞語: Laurensius Dede Suhardiman, Wildan Mubarok, Riwut Libinuko, Bagus Ilman, Lundy Orlando。
  • 挪威語: andreona, Daniel Bjørnbakk。
  • 波蘭語: Patryk Brejdak, Sebastian Baran, Igor Śpiączka, Lukasz Woznicki。
  • 葡萄牙語 (巴西): Lucas Miranda, Otacilio Saraiva Maia Neto, Roberto Fonseca, Marcelo Camargo, Marcelo Novaes, Victor Hugo Schmidt, Pedro Sereno, Rafael Oliveira, Danilo Dantas, Vitor Dutra Freire, Luan Moreno Medeiros Maciel, Fabio Correia。
  • 葡萄牙語 (葡萄牙): Daniel Correia, Pavlo Zakharuk, António Santos, João Mata, Diogo Barros, Danilo Dantas。
  • 羅馬尼亞語: Schiriac Robert, Cornel Cocioaba, Dan Ichim, Alexandru Spinu, ovisan, Bogdan Mateescu。
  • 泰米爾語: Jeyanthinath Muthuram, Jam Station。
  • 烏克蘭語: Oleksandr, Fedir Gordiienko, Volodymyr Holovka。