🚀 在 VS Code 中取得

2018 年 11 月 (版本 1.30)

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

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

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


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

如果您想線上閱讀這些版本資訊,請前往 更新,網址為 code.visualstudio.com

版本資訊安排在與 VS Code 焦點領域相關的以下章節中。以下是一些進一步的更新

  • 工作台 - 功能表捲動和改進的溢位處理、按一下即可開啟 settings.json。
  • 語言 - JS/TS 重新命名現在可以處理解構,新增遺失的「new」快速修正。
  • 偵錯 - 刪除偵錯主控台,直接從 VS Code 處理序總管進行偵錯。
  • 工作 - 清除工作終端機、工作變數的使用者輸入、重新執行上次工作命令。
  • 擴充功能撰寫 - 前往宣告支援、新的簽章說明內容。

Insiders: 想要盡快查看新功能嗎?您可以下載每夜組建的 Insiders 版本,並在最新更新可用時立即試用。如需最新的 Visual Studio Code 新聞、更新和內容,請在 Twitter 上追蹤我們 @code

工作台

多行搜尋輸入

上個月,我們新增了對多行搜尋的支援。本月,我們改進了搜尋 UX,使其更易於使用。現在,您可以使用多行文字進行搜尋,而無需撰寫正規表示式。在搜尋方塊中輸入 Shift+Enter 以插入新行,搜尋方塊將會擴大以顯示您的完整多行查詢。您也可以從編輯器複製並貼上多行選取項目到搜尋方塊中。

multiline search input

Linux 上的預設自訂標題列和功能表列

在多個版本中,我們一直在透過自訂標題列和功能表列來改進 Windows 上功能表的可存取性和主題性。雖然在 Linux 上是可選的,但在這個版本中,它現在將預設為啟用。

Custom title and menu bar on Linux

若要使用原生標題列,您可以將 window.titleBarStyle 設定為 native

捲動功能表

啟用自訂功能表列後,功能表會限制在 VS Code 視窗內呈現。先前,功能表可能會被視窗的邊界截斷。現在已透過在需要時使上下文功能表可捲動來解決此問題。

Scrolling menus

功能表列溢位功能表

當您的視窗寬度不足以同時容納功能表列和視窗標題時,功能表列也會有一個新的溢位功能表 (...)。

Menu bar overflow

移動設定編輯器動作

設定編輯器動作 (開啟 settings.json顯示已修改的設定 等) 已從設定編輯器內的 ... 功能表移動到編輯器標題列。這使其與其他編輯器類型保持一致,而且現在只需按一下大括號 {} 按鈕即可開啟 settings.json。鍵盤快速鍵編輯器也做了相同的變更。

settings editor actions

參考檢視

參考檢視已進行潤飾,不再是預覽功能。現在有兩個命令

  • 尋找所有參考,這會開啟參考檢視。
  • 預覽參考,這會在預覽檢視中開啟參考。

參考檢視在啟動時會隱藏,但一旦使用過就會保持可見。如果清除所有搜尋結果,它會顯示先前搜尋的歷程記錄。

References View

現在檢視頂端有一個結果摘要,以及一個用於清除和複製結果的上下文功能表。修正了許多錯誤,整體穩定性已獲得改進。

編輯器

程式碼片段註解變數

有新的程式碼片段變數,可插入行或區塊註解,並遵循目前的語言。針對區塊註解使用 BLOCK_COMMENT_STARTBLOCK_COMMENT_END,否則使用 LINE_COMMENT

以下程式碼片段會在 JavaScript 檔案中插入 /* Hello World */,在 HTML 檔案中插入 <!-- Hello World -->

{
  "hello": {
    "scope": "javascript,html",
    "prefix": "hello",
    "body": "$BLOCK_COMMENT_START Hello World $BLOCK_COMMENT_END"
  }
}

宣告與定義

到目前為止,VS Code 提供了用於顯示符號定義的命令,例如前往定義預覽定義。這並未考慮到某些語言在符號的宣告定義之間的區別(比其他語言更嚴格)。我們已修正此問題,現在有命令前往宣告預覽宣告來顯示符號的宣告。

Go to Declaration

前往宣告等語言功能所需的資料由擴充功能計算,並且有一個新的 API,您可以在擴充功能撰寫章節中閱讀相關資訊。

平滑游標動畫

有一個新的設定 editor.cursorSmoothCaretAnimation,每當游標移動時,都會啟用轉換動畫。

Git 整合

變更預設按一下動作

現在您可以變更在來源控制檢視中按一下檔案時的預設動作。預設情況下,VS Code 會開啟差異檢視,但將 git.openDiffOnClick 設定為 false,檔案將會在一般編輯器中開啟。

在認可時推送或同步

新的設定 git.postCommitCommand 可讓您在認可後推送或同步您的存放庫。可用的值為 none (預設值)、pushsync

語言

TypeScript 3.2

VS Code 現在包含 TypeScript 3.2.2。此版本帶來了一些令人興奮的新語言功能,包括 bindcallapply 的嚴格類型,以及 BigInt 支援。TypeScript 更新也修正了一些重要的錯誤,並包含新的工具功能和改進

改進 JavaScript 和 TypeScript 回呼的顯示

JavaScript 和 TypeScript 匿名回呼先前在 [大綱] 檢視、麵包屑檢視和文件符號清單中都標示為 <function>。這使得無法分辨您真正要找的是哪個函式

VS Code 1.29 with  entries in the Outline view

透過 TypeScript 3.2+,VS Code 現在會顯示更多回呼函式的內容,以便您可以區分它們

VS Code 1.30 with much more helpful labels

重新命名正確處理 JS/TS 解構

重新命名現在可以處理 JavaScript 和 TypeScript 解構,並在需要時引入別名

Rename with destructuring

新增遺失的 new JS/TS 快速修正

忘記在具現化類別時使用 new 嗎?TypeScript 3.2 帶來了新的快速修正來協助您

The add missing 'new' quick fix

此快速修正適用於 TypeScript 和 類型檢查的 JavaScript

JS/TS 路徑建議的檔案圖示

VS Code 1.29 中的工作的基礎上,IntelliSense 小工具現在會針對 JavaScript 和 TypeScript 路徑建議顯示檔案圖示

Icons in path IntelliSense

JSDoc 註解中 Markdown 元素的醒目提示

JSDoc 區塊內的圍欄程式碼區塊和其他 Markdown 元素現在會進行語法醒目提示

JSDoc Syntax highlighting

此內嵌醒目提示更符合 VS Code 的 JSDoc Markdown 轉譯,適用於懸停和 IntelliSense 文件。

偵錯

簡化的初始偵錯組態

在這個里程碑中,我們研究了如何簡化最熱門偵錯擴充功能產生的 launch.json 檔案。我們的目標是讓使用者更輕鬆地開始和設定偵錯。這表示隱藏不必要的啟動組態屬性,並使用快速選取 UI 來改善在產生初始 launch.json 時的使用者互動。關於這項工作的更多詳細資訊,請參閱 問題 #62851

偵錯主控台可以刪除

自上次里程碑以來,當偵錯多個偵錯工作階段時,我們會顯示多個偵錯主控台,每個工作階段一個。現在可以透過清除該偵錯主控台的內容,在對應的工作階段不再作用時刪除這些主控台。我們沒有新增用於管理偵錯主控台生命週期的明確命令,因為我們相信目前的方法會更直覺且更易於使用。

改進偵錯組態的使用者輸入變數

我們已改進並概括了提示使用者輸入的 launch.json 變數概念。您可以在工作章節中找到詳細資訊。

從處理序總管進行偵錯

現在可以從 VS Code 處理序總管 (開發人員:開啟處理序總管) 使用偵錯上下文功能表動作,開始偵錯 Node.js 處理序。

您可以在下方看到附加到從整合式終端機啟動的 Node.js 處理序。

debugging a Node.js process started from the terminal

Node/Chrome 偵錯

smartStep 現在預設為啟用

在幾個版本之前,我們變更了 smartStep 的行為,使其更有用。使用 smartStep 會產生更好的偵錯體驗,特別是對於 TypeScript,因此我們已將行為變更為始終開啟。

localRoot 的自動預設值

在 Node.js 遠端偵錯案例中,偵錯組態屬性 localRoot 現在會自動預設為 ${workspaceFolder},而且只需要指定 remoteRoot

工作

在資料夾開啟時執行

如果您有一個在開啟資料夾時總是執行的工作,您可以將其設定為在該資料夾開啟時自動執行,方法是設定其 "runOn" 屬性。我們發現這對於確保沒有人破壞我們在 VS Code 存放庫中的新嚴格 Null 檢查很有用。透過新增 "runOn": "folderOpen",每個允許自動執行工作的人員在違反嚴格 Null 檢查時都會收到標記

{
  "type": "npm",
  "script": "strict-null-check-watch",
  "label": "TS - Strict Null Checks",
  "isBackground": true,
  "problemMatcher": {
    "base": "$tsc-watch",
    "owner": "typescript-strict-null",
    "applyTo": "allDocuments"
  },
  "runOptions": {
    "runOn": "folderOpen"
  }
}

清除工作終端機

若要在執行工作之前清除終端機,您可以使用 "clear": true 設定工作的 presentation 選項。

{
  "type": "gulp",
  "task": "tslint",
  "label": "Run tslint",
  "presentation": {
    "clear": true
  }
}

重新執行工作

現在可以使用工作:重新執行上次工作命令 (workbench.action.tasks.reRunTask) 重新執行工作。預設情況下,重新執行工作會重新評估其執行變數,包括其輸入。若要使用先前執行中已評估的變數,請設定 "reevaluateOnRerun" 選項

{
  "type": "gulp",
  "task": "tslint",
  "label": "Run tslint",
  "runOptions": {
    "reevaluateOnRerun": false
  }
}

改進工作和偵錯組態的使用者輸入變數

長期以來,VS Code 一直支援透過 ${variableName} 語法在 tasks.jsonlaunch.json 中進行變數替換

對於 launch.json,甚至可以使用提示使用者輸入的變數 (例如 ${command:pickNodeProcess},這會開啟基於快速選取的處理序選取器)。此功能不適用於 tasks.json,而且基於命令的變數也有其他限制 (請參閱問題 #9297#9544#30588)。

在這個里程碑中,使用者輸入變數已獲得概括和改進,現在適用於 launch.json tasks.json。這項工作也將命令語法帶到了 tasks.json

對於使用者輸入變數,我們引入了一個新的變數類別 input,這會產生以下語法:${input:variableName}。這個簡單的語法不足以向使用者呈現有意義的 UI,因此我們在 launch.jsontasks.json 中引入了一個新的 inputs 區段,其中指定了其他組態屬性。

使用 Angular CLI 的範例

Tasks input

以下是支援的屬性清單

  • id - 這些屬性所用的對應變數名稱。
  • type - 使用者輸入小工具的類型。在此版本中,支援 promptString (用於字串輸入方塊) 和 pickString (用於字串快速選取)。
  • description - 向使用者顯示的描述性文字。
  • default - 如果使用者只按下 Enter 鍵,則要使用的預設值。

第一個範例示範如何在工作組態 (tasks.json) 中使用使用者輸入變數

{
  "tasks": [
    {
      "label": "Echo input",
      "type": "shell",
      "command": "echo ${input:echoPrompt}"
    }
  ],
  "inputs": [
    {
      "id": "echoPrompt",
      "description": "Please enter a value",
      "default": "default echo text",
      "type": "promptString"
    }
  ]
}

另一個範例示範如何在偵錯組態 (launch.json) 中使用使用者輸入變數來選取兩個選項之間的選項

{
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "program": "${workspaceFolder}/${input:pickProgram}"
    }
  ],
  "inputs": [
    {
      "id": "pickProgram",
      "description": "Select client or server",
      "type": "pickString",
      "options": ["client.js", "server.js"],
      "default": "client.js"
    }
  ]
}

我們計劃將使用者輸入變數與現有的基於命令的變數結合,以便擴充功能可以貢獻使用者輸入變數。

擴充功能

安裝先前版本

如果目前版本的擴充功能有問題,您現在可以返回到擴充功能的先前版本。VS Code 在已安裝的擴充功能上提供安裝其他版本動作,其中會顯示可用版本的下拉式清單。

Downgrade Extension

未回應的擴充功能主機

VS Code 在個別的 Node.js 處理序中執行擴充功能 - 擴充功能主機。這將擴充功能程式碼與 VS Code 本身隔離,但不會將不同的擴充功能彼此隔離。由於 JavaScript 的單一執行緒性質,擴充功能可能會有意或無意地獨佔擴充功能主機執行緒、封鎖所有其他擴充功能,並使作業顯示為未回應。

VS Code 現在會監控擴充功能主機,當它變得未回應時,VS Code 會開始分析擴充功能主機。當擴充功能被識別為導致未回應的原因時,會顯示最小化的通知,鼓勵使用者提出問題

Slow Extension Identified

身為使用者,請注意狀態列中的鈴鐺圖示,因為通知很小。身為擴充功能作者,如果您收到未回應的問題,請檢閱此指南,其中說明了發生的情況以及如何開啟附加到問題的 CPU 設定檔。

預覽功能

預覽功能尚未準備好發行,但功能已足夠使用。我們歡迎您在開發期間提供早期意見反應。

HTML 自訂標籤/屬性支援

新的 html.experimental.custom.tagshtml.experimental.custom.attributes 設定可讓您指定 VS Code 在啟動期間載入的標籤和屬性清單。當您編輯 HTML 檔案時,VS Code 將為這些標籤和屬性提供自動完成和懸停功能。這與 Web Components 非常搭配,例如

HTML custom tags and attributes

您可以開啟 octref/web-components-examples 存放庫來測試此功能。此功能為預覽版,設定名稱和 JSON 格式都可能會變更

如果您有意見反應或功能要求,請在問題 #62976 中追蹤。

擴充功能的網路 Proxy 支援

有一個實驗性設定 Http: Proxy Support,用於為所有擴充功能啟用網路 Proxy 支援。雖然我們仍在處理一些細節,但我們邀請您試用並告訴我們它是否適用於您。(請注意,啟用網路 Proxy 支援目前會中斷 GitHub Pull-Request 擴充功能的登入。)

HTTP Proxy Support

將其設定為 override 應該最適合大多數設定,當效果不佳時,請嘗試 on 以進行比較。

擴充功能撰寫

前往宣告

我們新增了 DeclarationProvider 介面,擴充功能可以實作此介面以支援前往宣告功能。宣告提供者應傳回作為符號宣告的位置。當為相同檔案註冊多個提供者時,其結果會合併。

簽章說明內容

SignatureHelpProviders 現在採用 context 參數,其中提供有關簽章說明如何觸發的資訊。內容包括

  • 簽章說明的觸發方式 (觸發字元、命令或文件上下文變更)。
  • 導致簽章說明觸發的字元。
  • 觸發時簽章說明先前是否正在顯示?
import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
  vscode.languages.registerSignatureHelpProvider(
    'markdown',
    new (class implements vscode.SignatureHelpProvider {
      provideSignatureHelp(
        document: vscode.TextDocument,
        position: vscode.Position,
        token: vscode.CancellationToken,
        context: vscode.SignatureHelpContext
      ): vscode.ProviderResult<vscode.SignatureHelp> {
        // Return fake signature help result
        const sigHelp = new vscode.SignatureHelp();
        sigHelp.activeParameter = 0;
        sigHelp.activeSignature = 0;
        sigHelp.signatures = [new vscode.SignatureInformation(getLabel(context))];
        return sigHelp;
      }
    })(),
    {
      triggerCharacters: ['('],
      retriggerCharacters: [',']
    }
  );
}

function getLabel(context: vscode.SignatureHelpContext): string {
  const parts = [];
  // How was signature help triggered
  switch (context.triggerKind) {
    case vscode.SignatureHelpTriggerKind.Invoke:
      parts.push('invoke');
      break;
    case vscode.SignatureHelpTriggerKind.ContentChange:
      parts.push('change');
      break;
    case vscode.SignatureHelpTriggerKind.TriggerCharacter:
      parts.push('character');
      break;
  }

  // The character (if any) that caused signature help to be triggered
  if (context.triggerCharacter) {
    parts.push(context.triggerCharacter);
  }

  // Was signature help already showing when it was triggered again?
  if (context.isRetrigger) {
    parts.push('retrigger');
  }

  return parts.join(' ');
}

此外,SignatureHelpProviders 現在可以使用一組不同的觸發字元和重新觸發字元來註冊。重新觸發字元只會在簽章說明已顯示時觸發簽章說明。

以下是實際運作中的上述 SignatureHelpProvider

The above signature help provider in action

設定貢獻的 TypeScript 伺服器外掛程式

擴充功能現在可以透過 VS Code 內建 TypeScript 擴充功能提供的 API,將組態資料傳送至 貢獻的 typescript 伺服器外掛程式

// In your VS Code extension

export async function activate(context: vscode.ExtensionContext) {
  // Get the TS extension
  const tsExtension = vscode.extensions.gettsExtension(
    'vscode.typescript-language-features'
  );
  if (!tsExtension) {
    return;
  }

  await tsExtension.activate();

  // Get the API from the TS extension
  if (!tsExtension.exports || !tsExtension.exports.getAPI) {
    return;
  }

  const api = tsExtension.exports.getAPI(0);
  if (!api) {
    return;
  }

  // Configure the 'my-typescript-plugin-id' plugin
  api.configurePlugin('my-typescript-plugin-id', {
    someValue: process.env['SOME_VALUE']
  });
}

TypeScript 伺服器外掛程式會透過 onConfigurationChanged 方法接收組態資料

// In your TypeScript plugin

import * as ts_module from 'typescript/lib/tsserverlibrary';

export = function init({ typescript }: { typescript: typeof ts_module }) {
  return {
    create(info: ts.server.PluginCreateInfo) {
      // Create new language service
    },
    onConfigurationChanged(config: any) {
      // Receive configuration changes sent from VS Code
    }
  };
};

此 API 允許 VS Code 擴充功能將 VS Code 設定與 TypeScript 伺服器外掛程式同步,或動態變更外掛程式的行為。查看 TypeScript TSLint 外掛程式lit-html 擴充功能,以了解如何在實務中使用此 API。

自訂檢視

用於將全部摺疊動作新增至檢視的建議 API 現在已穩定。

樹狀項目描述

您現在可以使用 TreeItem 中的 description 屬性,將描述新增至您的樹狀項目。如果樹狀項目由資源支援,您也可以透過將 description 設定為 true,讓 VS Code 從資源衍生描述。

/**
 * A human readable string which is rendered less prominently.
 * When `true`, it is derived from [resourceUri](#_TreeItem.resourceUri), and when `falsy`, it is not shown.
 */
description?: string | boolean;

Tree Item Description

偵錯 API

更豐富的 DebugSession

DebugSession API 現在會呈現工作區資料夾和已解析的偵錯組態。已解析表示所有變數都已替換,且特定於平台的屬性區段已針對相符的平台「扁平化」,並針對不相符的平台移除。

中斷點的唯一 ID

Breakpoint 類別現在會呈現在其整個生命週期中不會變更的唯一 ID (id)。

用於控制偵錯配接器建立的已完成 API

在這個里程碑中,我們已完成用於控制偵錯配接器建立的擴充功能 API。API 使用新的 DebugAdapterDescriptorFactory,必須使用 vscode.debug.registerDebugAdapterDescriptorFactory 為特定偵錯類型註冊。Factory 有一個單一方法 createDebugAdapterDescriptor,每當需要偵錯配接器時,VS Code 就會呼叫此方法。由於偵錯工作階段是作為引數傳遞的 (而且工作階段現在會呈現工作區資料夾和已解析的組態),因此實作在要求建立偵錯配接器時可以存取完整內容。createDebugAdapterDescriptor 必須傳回一個物件,向 VS Code 描述如何建立和/或連線到偵錯配接器

  • DebugAdapterExecutable 描述元會讓 VS Code 針對每個工作階段將偵錯配接器作為外部處理序啟動,並透過 stdin/stdout 與其通訊。選項屬性包可以指定工作目錄和環境變數。
  • DebugAdapterServer 會讓 VS Code 連線到處理多個工作階段並透過 Socket 通訊的伺服器處理序。

請注意:隨著此 API 的完成,我們正在棄用舊的 (建議) API DebugConfigurationProvider.debugAdapterExecutable 和非常舊的基於命令的方法 (貢獻點 Debuggers,屬性:adapterExecutableCommand)。請移轉到這些 API,因為我們計劃在下一個版本中移除對它們的支援。

此程式碼片段示範如何使用此 API 來執行內嵌在其包含擴充功能中的偵錯配接器

let server: Net.Server;
vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
  createDebugAdapterDescriptor(session: DebugSession, executable: DebugAdapterExecutable) {
    // start server on launch of first debug session
    if (!server) {
      // start listening on a random port
      server = Net.createServer(socket => {
        const s = new MockDebugSession();
        s.setRunAsServer(true);
        s.start(<NodeJS.ReadableStream>socket, socket);
      }).listen(0);
    }
    // make VS Code connect to debug server instead of launching debug adapter
    return new DebugAdapterServer(server.address().port);
  }
});

已完成的偵錯配接器追蹤器 API

在這個里程碑中,我們已完成用於追蹤 VS Code 和偵錯工具擴充功能之間使用的 偵錯配接器通訊協定 的擴充功能 API。API 使用新的 DebugAdapterTrackerFactory,必須使用 vscode.debug.registerDebugAdapterTrackerFactory 為偵錯類型註冊。Factory 有一個單一方法 createDebugAdapterTracker,VS Code 會在開始與偵錯配接器通訊之前呼叫此方法。createDebugAdapterDescriptor 必須傳回 DebugAdapterTracker 的實作 (或 undefined 以防止追蹤)。

此程式碼片段示範如何使用此 API 來記錄 Node.js 偵錯工具的偵錯配接器通訊協定

vscode.debug.registerDebugAdapterTrackerFactory('node', {
  createDebugAdapterTracker(session: DebugSession) {
    return {
      onWillReceiveMessage: m => console.log(`> ${JSON.stringify(m, undefined, 2)}`),
      onDidSendMessage: m => console.log(`< ${JSON.stringify(m, undefined, 2)}`)
    };
  }
});

為了確保在需要時啟用擴充功能,可以在 package.json 中使用啟用事件 onDebugAdapterProtocolTracker:<debug type>。如果省略偵錯類型,則會為所有偵錯類型啟用擴充功能。

{
  "activationEvents": ["onDebugAdapterProtocolTracker:node"]
}

偵錯配接器通訊協定

runInTerminal 回應的新 shellProcessId 屬性

如果偵錯配接器需要在終端機中執行目標,則可以使用 DAP runInTerminal 要求。此要求可以選擇性地傳回目標處理序的 processId,但實際上沒有前端實作能夠提供此資訊。因此,我們引入了一個新的屬性 shellProcessId,用於傳回終端機 Shell 的處理序 ID (這更容易判斷)。

剪貼簿

剪貼簿 API 已完成,現在可以由所有擴充功能使用。它允許擴充功能將字串複製和貼上到作業系統剪貼簿。

完成項目

當插入跨越多行的完成項目時,VS Code 會調整縮排。這並非總是需要的,因此我們新增了 vscode.CompletionItem.keepWhitespace 來控制此行為。

符號提供者的標籤

當註冊文件符號提供者時,現在可以提供標籤 (DocumentSymbolProviderMetadata)。當文件有多個符號提供者時,此標籤會顯示在麵包屑和 [大綱] 檢視中。

建議的擴充功能 API

每個里程碑都帶有新的建議 API,擴充功能作者可以試用它們。與往常一樣,我們熱切期待您的意見反應。以下是您試用建議 API 必須執行的操作

  • 您必須使用 Insiders 版本,因為建議 API 經常變更。
  • 您的擴充功能的 package.json 檔案中必須有這一行:"enableProposedApi": true
  • 將最新版本的 vscode.proposed.d.ts 檔案複製到您的專案中。

請注意,您無法發行使用建議 API 的擴充功能。我們可能會在下一個版本中進行重大變更,而且我們絕不希望中斷現有的擴充功能。

自訂檢視支援訊息文字

樹狀檢視訊息

您現在可以使用 TreeView 中的 message 屬性,在樹狀檢視中設定訊息。

/**
 * An optional human-readable message that will be rendered in the view.
 */
message?: string | MarkdownString;

Tree View Message

智慧選取和擴充功能

我們新增了一個建議 API 來支援智慧選取功能。今天,當您執行展開選取縮小選取命令時,選取範圍是根據弱啟發式演算法計算的。雖然我們正在努力改進該啟發式演算法,但我們也希望讓擴充功能作者參與其中。因此,我們為 SelectionRangeProvider 新增了一個建議 API。

工程

WinJS-Promise 移除

當 VS Code 啟動時,JavaScript 與今天的情況不同。例如,當時沒有 原生 Promise,當時團隊決定使用 WinJS.Promise。快轉到今天,情況已有所不同:原生 Promise 是真實存在的,而 WinJS.Promise 已過時。

因此,我們正在逐步從 WinJS.Promise 移轉出來。由於 API 和執行階段行為的差異,這並非易事。我們從大約 10000 個對 WinJS.Promise 的參考開始,現在已降至 1471 個,其中約 500 個是具現化,而不是純粹的類型註釋。我們相信我們很快就會完成這趟史詩般的旅程!

持續探索 Electron 3.0

在這個里程碑期間,我們繼續探索將 Electron 3.0.0 捆綁到 VS Code 中。這是 Electron 的主要版本,隨附 Chrome 66 和 Node.js 10.x (與我們目前的版本相比,向前邁進了一大步,目前的版本具有 Chrome 61 和 Node.js 8.x)。我們計劃在 12 月將更新推送給我們的 Insiders 使用者,以收集更多意見反應。如果您有興趣提供協助,請務必安裝 VS Code Insiders 版本

社群問題追蹤

長期以來,社群定期協助我們進行問題追蹤。隨著我們看到越來越多的問題被提交 (目前平均每天 70 個),我們已開始邀請最活躍的社群成員新增特定標籤到他們正在處理的問題。由於 GitHub 沒有細緻的權限,我們正在使用我們的問題機器人來擷取某些註解,並為它們新增標籤。請參閱下方的感謝您章節以取得致謝。

嚴格 Null 檢查

我們嚴格 Null 檢查主要 VS Code 程式碼庫的工作仍在繼續。我們現在正在嚴格 Null 檢查大約 800 個檔案,並將繼續這項工作,直到涵蓋整個程式碼庫。

您可以追蹤這項工程工作,並在問題 #60565 中了解有關此程序的更多資訊。

擴充功能的貢獻

我們的團隊維護或貢獻了許多 VS Code 擴充功能。本月最值得注意的是

GitHub Pull Requests

在這個里程碑中,我們致力於改進 GitHub Pull Requests 擴充功能。

以下是一些新功能

  • 直接從您的本機分支建立提取要求。
  • 在已簽出的提取要求中建議一系列原始碼變更。
  • 在提取要求描述頁面上檢視狀態檢查資訊。

您可以在vscode-pull-request-github releases閱讀此擴充功能的完整發行說明。

值得注意的修正

  • 37929:建立偵錯環境下拉式選單時,不要啟動偵錯工具
  • 60187:偵錯工具在 jest 測試中無法命中断點
  • 61590:使設定和按鍵綁定編輯器在顯示編輯器動作時保持一致
  • 62370:改善編輯器中的診斷懸停資訊
  • 62500:將「執行到游標處」新增至命令面板
  • 62778:置中版面配置無法還原大小
  • 63618:偵錯 Electron 2.0.13 64 位元失敗,錯誤訊息為「無法連線到執行階段程序,於 10000 毫秒後逾時」。但在 Electron 32 位元上成功。

感謝您

最後但同樣重要的是,衷心感謝!以下人士讓 VS Code 變得更好

對於我們的問題追蹤的貢獻

對於 vscode 的貢獻

對於 vscode-vsce 的貢獻

對於 vscode-eslint 的貢獻

對於 language-server-protocol 的貢獻

對於 vscode-languageserver-node 的貢獻

對於 vscode-html-languageservice 的貢獻

對於 vscode-generator-code 的貢獻

對於 debug-adapter-protocol 的貢獻

對於 vscode-chrome-debug-core 的貢獻

對於 vscode-chrome-debug 的貢獻

對於 vscode-azure-account 的貢獻

對於 vscode-recipes 的貢獻

對於 localization 的貢獻

Transifex VS Code 專案團隊中幾乎有 1400 名成員,每月約有 100 位活躍貢獻者。我們感謝您的貢獻,無論是提供新的翻譯、針對翻譯投票或建議流程改進。

以下是此版本貢獻者的快照。如需專案的詳細資訊,包括貢獻者名稱清單,請造訪專案網站:https://aka.ms/vscodeloc

  • 保加利亞語: Любомир Василев。
  • 加泰隆尼亞語: Adolfo Jayme-Barrientos、Enric Soler Rastrollo (MaDDoGo)、Oriol Torrillas。
  • 捷克語: Vít Staniček、Ondra Kalousek、Kryštof Černý。
  • 丹麥語: Johan Fagerberg。
  • 芬蘭語: Feetu Nyrhinen、Jussi Palo、Ahto Simakuutio。
  • 法語: Antoine Griffard、Thierry DEMAN-BARCELO、Adrien Clerbois。
  • 德語: Carsten Kneip。
  • 希臘語: George Xenakis、Christos Koutsiaris、dimipapaioan。
  • 印地語: Anand Chalakkal Jose Mohan、Kiren Paul、Ashwini Gupta、amgusain、Pointless Banter、Shaswat Rungta、Adnan Shaikh、Shashida Nand Jha。
  • 匈牙利語: Tar Dániel。
  • 簡體中文: feiyun0112 feiyun0112、Tingting Yi、XIANG ZUO、Tony Xia、G.Y. Z、Dave Young、Jessica Zhang、驰 雷、Liam Kennedy、bh wu、WangCG duoduobear、ziqiang sun、正元 刘、越 郑、peng wei、xiong Fu、吉姆 舒、瑜 周、仁松 陈、Jiang LI。
  • 繁體中文: Winnie Lin 、Duran Hsieh、Hans Chiu、Alan Liu。
  • 印尼語: Laurensius Dede Suhardiman、Wildan Mubarok、Joshua Siagian、Rizki A. Wibowo。
  • 日語: Satoshi Kajiura、Shunya Tajima、Yuichi Nukiyama、Yoshihisa Ozaki、dkp sk、Hiroyuki Mori。
  • 卡納達語: Sanjay !、Sushmit Patil。
  • 馬拉雅拉姆語: Kiren Paul、Anand Chalakkal Jose Mohan。
  • 挪威語: Espen Klein Nilsen、Ivar L、Simen Dæhlin、Daniel Bjørnbakk。
  • 波蘭語: Artur。
  • 葡萄牙語 (巴西): Danilo Dantas、Thiago Custodio、Vinicius Ribeiro、Lucas Santos、Gabriel Henrique Oliveira de Mello。
  • 羅馬尼亞語: Szauka。
  • 俄語: Mikhail Zabaluev、Acupofspirt、Ilya Umnov。
  • 僧伽羅語: Anand Chalakkal Jose Mohan。
  • 西班牙語: Jorge Serrano Pérez、Alejandro Medina、Alberto Poblacion、Carlos Longarela、Carlos Mendible、Guillermo Callaghan、Alfonso Jesus Flores Alvarado、Andy Gonzalez。
  • 坦米爾語: Vijay Nirmal、Avinash、Jeyanthinath Muthuram、Narayanan Singaram。
  • 泰盧固語: Raja Tirumala Rao Guna。
  • 土耳其語: Eyüp DALAN、Mustafa Turhan、Türker YILDIRIM。
  • 越南語: Nguyễn Nhật Tân。