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

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": {
    "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 匿名回撥以前在“大綱”檢視、麵包屑檢視和文件符號列表中都被標記為。這使得無法分辨您真正想要的是哪個函式。

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

新增缺失的 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 對懸停和 IntelliSense 文件的 JSDoc Markdown 渲染。

除錯

簡化的初始除錯配置

在這個里程碑中,我們著手簡化為我們最流行的除錯擴充套件生成的launch.json檔案。我們的目標是讓使用者更輕鬆地啟動和配置除錯。這意味著隱藏不必要的啟動配置屬性,並使用 Quick Pick 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 儲存庫中的新嚴格空檢查非常有用。透過新增"runOn": "folderOpen",所有允許任務自動執行的人在違反嚴格空檢查時都會收到標記。

{
  "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"
  }
}

清除任務終端

要在執行任務之前清除終端,您可以透過將任務的presentation選項配置為"clear": true

{
  "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},它會開啟一個基於 Quick Pick 的程序選擇器)。此功能不適用於tasks.json,並且基於命令的變數也有其他限制(請參閱問題#9297#9544#30588)。

在這個里程碑中,使用者輸入變數已被泛化和改進,現在可用於launch.jsontasks.json。這項工作還將命令語法引入了tasks.json

對於使用者輸入變數,我們引入了一個新的變數類別input,其語法為:${input:variableName}。這個簡單的語法不足以向用戶呈現有意義的 UI,因此我們在launch.jsontasks.json中引入了一個新的inputs部分,其中指定了額外的配置屬性。

使用 Angular CLI 的示例

Tasks input

這是支援的屬性列表:

  • id - 使用這些屬性的相應變數名。
  • type - 使用者輸入小部件的型別。在此版本中,支援promptString(用於字串 InputBox)和pickString(用於字串 Quick Pick)。
  • 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中跟進。

擴充套件的網路代理支援

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

HTTP Proxy Support

對於大多數設定,將其設定為override應該效果最佳,如果效果不好,請嘗試on進行比較。

擴充套件開發

轉到宣告

我們添加了一個DeclarationProvider介面,擴充套件可以實現它來支援轉到宣告功能。宣告提供程式應返回符號宣告的位置。當為同一個檔案註冊多個提供程式時,它們的S結果將合併。

簽名幫助上下文

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),該 ID 在其整個生命週期內不會更改。

用於控制除錯介面卡建立的最終 API

在此里程碑中,我們已最終確定用於控制除錯介面卡建立的擴充套件 API。該 API 使用一個新的DebugAdapterDescriptorFactory,必須使用vscode.debug.registerDebugAdapterDescriptorFactory為特定除錯型別註冊。工廠有一個方法createDebugAdapterDescriptor,VS Code 在需要除錯介面卡時呼叫該方法。由於除錯會話作為引數傳遞(並且會話現在顯示工作區資料夾和已解析的配置),因此在要求建立除錯介面卡時,實現可以訪問完整的上下文。createDebugAdapterDescriptor必須返回一個描述如何建立和/或連線到除錯介面卡的物件。

  • DebugAdapterExecutable描述符使 VS Code 為每個會話將除錯介面卡作為外部程序啟動,並透過 stdin/stdout 與其通訊。選項屬性包可以指定工作目錄和環境變數。
  • DebugAdapterServer使 VS Code 連線到處理多個會話並透過套接字通訊的伺服器程序。

請注意:隨著此 API 的最終確定,我們正在棄用舊的(提議的)APIDebugConfigurationProvider.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為除錯型別註冊。工廠有一個方法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:。如果省略除錯型別,則為所有除錯型別啟用擴充套件。

{
  "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 沒有細粒度許可權,我們正在使用我們的問題機器人來識別某些評論併為它們新增標籤。請參閱下面的感謝部分以瞭解致謝。

嚴格空檢查

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

您可以在問題 #60565中跟蹤這項工程工作並瞭解更多有關該過程的資訊。

對擴充套件的貢獻

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

GitHub 拉取請求

在此里程碑中,我們致力於改進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。