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 月發行版本。此版本中有許多重大更新,我們希望您會喜歡,其中一些主要重點包括
- 多行搜尋改進 - 輕鬆建立多行搜尋模式,無需使用正規表示式。
- Linux 上的自訂標題列 - 自訂標題列和功能表列現在是 Linux 上的預設設定。
- 參考檢視 - 尋找所有參考檢視包含最近搜尋的歷程記錄。
- 程式碼片段註解變數 - 程式碼片段變數會根據語言插入正確的註解。
- JS/TS 回呼顯示改進 - 現在您可以查看匿名回呼的內容。
- JSDoc Markdown 醒目提示 - 包括 JSDoc 中 Markdown 程式碼區塊的語法醒目提示。
- 簡化的初始偵錯組態 - 更好的預設值和快速選取 UI,用於初始啟動組態。
- 在資料夾開啟時執行工作 - 設定在您首次開啟專案資料夾時執行的工作。
- 選擇擴充功能版本 - 安裝 Marketplace 擴充功能的較早版本。
如果您想線上閱讀這些版本資訊,請前往 更新,網址為 code.visualstudio.com。
版本資訊安排在與 VS Code 焦點領域相關的以下章節中。以下是一些進一步的更新
- 工作台 - 功能表捲動和改進的溢位處理、按一下即可開啟 settings.json。
- 語言 - JS/TS 重新命名現在可以處理解構,新增遺失的「new」快速修正。
- 偵錯 - 刪除偵錯主控台,直接從 VS Code 處理序總管進行偵錯。
- 工作 - 清除工作終端機、工作變數的使用者輸入、重新執行上次工作命令。
- 擴充功能撰寫 - 前往宣告支援、新的簽章說明內容。
Insiders: 想要盡快查看新功能嗎?您可以下載每夜組建的 Insiders 版本,並在最新更新可用時立即試用。如需最新的 Visual Studio Code 新聞、更新和內容,請在 Twitter 上追蹤我們 @code!
工作台
多行搜尋輸入
上個月,我們新增了對多行搜尋的支援。本月,我們改進了搜尋 UX,使其更易於使用。現在,您可以使用多行文字進行搜尋,而無需撰寫正規表示式。在搜尋方塊中輸入 Shift+Enter
以插入新行,搜尋方塊將會擴大以顯示您的完整多行查詢。您也可以從編輯器複製並貼上多行選取項目到搜尋方塊中。
Linux 上的預設自訂標題列和功能表列
在多個版本中,我們一直在透過自訂標題列和功能表列來改進 Windows 上功能表的可存取性和主題性。雖然在 Linux 上是可選的,但在這個版本中,它現在將預設為啟用。
若要使用原生標題列,您可以將 window.titleBarStyle
設定為 native
。
捲動功能表
啟用自訂功能表列後,功能表會限制在 VS Code 視窗內呈現。先前,功能表可能會被視窗的邊界截斷。現在已透過在需要時使上下文功能表可捲動來解決此問題。
功能表列溢位功能表
當您的視窗寬度不足以同時容納功能表列和視窗標題時,功能表列也會有一個新的溢位功能表 (...)。
移動設定編輯器動作
設定編輯器動作 (開啟 settings.json、顯示已修改的設定 等) 已從設定編輯器內的 ... 功能表移動到編輯器標題列。這使其與其他編輯器類型保持一致,而且現在只需按一下大括號 {}
按鈕即可開啟 settings.json。鍵盤快速鍵編輯器也做了相同的變更。
參考檢視
參考檢視已進行潤飾,不再是預覽功能。現在有兩個命令
- 尋找所有參考,這會開啟參考檢視。
- 預覽參考,這會在預覽檢視中開啟參考。
參考檢視在啟動時會隱藏,但一旦使用過就會保持可見。如果清除所有搜尋結果,它會顯示先前搜尋的歷程記錄。
現在檢視頂端有一個結果摘要,以及一個用於清除和複製結果的上下文功能表。修正了許多錯誤,整體穩定性已獲得改進。
編輯器
程式碼片段註解變數
有新的程式碼片段變數,可插入行或區塊註解,並遵循目前的語言。針對區塊註解使用 BLOCK_COMMENT_START
和 BLOCK_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 提供了用於顯示符號定義的命令,例如前往定義和預覽定義。這並未考慮到某些語言在符號的宣告和定義之間的區別(比其他語言更嚴格)。我們已修正此問題,現在有命令前往宣告和預覽宣告來顯示符號的宣告。
前往宣告等語言功能所需的資料由擴充功能計算,並且有一個新的 API,您可以在擴充功能撰寫章節中閱讀相關資訊。
平滑游標動畫
有一個新的設定 editor.cursorSmoothCaretAnimation
,每當游標移動時,都會啟用轉換動畫。
Git 整合
變更預設按一下動作
現在您可以變更在來源控制檢視中按一下檔案時的預設動作。預設情況下,VS Code 會開啟差異檢視,但將 git.openDiffOnClick
設定為 false
,檔案將會在一般編輯器中開啟。
在認可時推送或同步
新的設定 git.postCommitCommand
可讓您在認可後推送或同步您的存放庫。可用的值為 none
(預設值)、push
和 sync
。
語言
TypeScript 3.2
VS Code 現在包含 TypeScript 3.2.2。此版本帶來了一些令人興奮的新語言功能,包括 bind
、call
和 apply
的嚴格類型,以及 BigInt 支援。TypeScript 更新也修正了一些重要的錯誤,並包含新的工具功能和改進
改進 JavaScript 和 TypeScript 回呼的顯示
JavaScript 和 TypeScript 匿名回呼先前在 [大綱] 檢視、麵包屑檢視和文件符號清單中都標示為 <function>
。這使得無法分辨您真正要找的是哪個函式
透過 TypeScript 3.2+,VS Code 現在會顯示更多回呼函式的內容,以便您可以區分它們
重新命名正確處理 JS/TS 解構
重新命名現在可以處理 JavaScript 和 TypeScript 解構,並在需要時引入別名
新增遺失的 new JS/TS 快速修正
忘記在具現化類別時使用 new
嗎?TypeScript 3.2 帶來了新的快速修正來協助您
此快速修正適用於 TypeScript 和 類型檢查的 JavaScript。
JS/TS 路徑建議的檔案圖示
在 VS Code 1.29 中的工作的基礎上,IntelliSense 小工具現在會針對 JavaScript 和 TypeScript 路徑建議顯示檔案圖示
JSDoc 註解中 Markdown 元素的醒目提示
JSDoc 區塊內的圍欄程式碼區塊和其他 Markdown 元素現在會進行語法醒目提示
此內嵌醒目提示更符合 VS Code 的 JSDoc Markdown 轉譯,適用於懸停和 IntelliSense 文件。
偵錯
簡化的初始偵錯組態
在這個里程碑中,我們研究了如何簡化最熱門偵錯擴充功能產生的 launch.json
檔案。我們的目標是讓使用者更輕鬆地開始和設定偵錯。這表示隱藏不必要的啟動組態屬性,並使用快速選取 UI 來改善在產生初始 launch.json
時的使用者互動。關於這項工作的更多詳細資訊,請參閱 問題 #62851。
偵錯主控台可以刪除
自上次里程碑以來,當偵錯多個偵錯工作階段時,我們會顯示多個偵錯主控台,每個工作階段一個。現在可以透過清除該偵錯主控台的內容,在對應的工作階段不再作用時刪除這些主控台。我們沒有新增用於管理偵錯主控台生命週期的明確命令,因為我們相信目前的方法會更直覺且更易於使用。
改進偵錯組態的使用者輸入變數
我們已改進並概括了提示使用者輸入的 launch.json
變數概念。您可以在工作章節中找到詳細資訊。
從處理序總管進行偵錯
現在可以從 VS Code 處理序總管 (開發人員:開啟處理序總管) 使用偵錯上下文功能表動作,開始偵錯 Node.js 處理序。
您可以在下方看到附加到從整合式終端機啟動的 Node.js 處理序。
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.json
和 launch.json
中進行變數替換。
對於 launch.json
,甚至可以使用提示使用者輸入的變數 (例如 ${command:pickNodeProcess}
,這會開啟基於快速選取的處理序選取器)。此功能不適用於 tasks.json
,而且基於命令的變數也有其他限制 (請參閱問題 #9297、#9544 和 #30588)。
在這個里程碑中,使用者輸入變數已獲得概括和改進,現在適用於 launch.json
和 tasks.json
。這項工作也將命令語法帶到了 tasks.json
。
對於使用者輸入變數,我們引入了一個新的變數類別 input
,這會產生以下語法:${input:variableName}
。這個簡單的語法不足以向使用者呈現有意義的 UI,因此我們在 launch.json
和 tasks.json
中引入了一個新的 inputs
區段,其中指定了其他組態屬性。
使用 Angular CLI 的範例
以下是支援的屬性清單
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 在已安裝的擴充功能上提供安裝其他版本動作,其中會顯示可用版本的下拉式清單。
未回應的擴充功能主機
VS Code 在個別的 Node.js 處理序中執行擴充功能 - 擴充功能主機。這將擴充功能程式碼與 VS Code 本身隔離,但不會將不同的擴充功能彼此隔離。由於 JavaScript 的單一執行緒性質,擴充功能可能會有意或無意地獨佔擴充功能主機執行緒、封鎖所有其他擴充功能,並使作業顯示為未回應。
VS Code 現在會監控擴充功能主機,當它變得未回應時,VS Code 會開始分析擴充功能主機。當擴充功能被識別為導致未回應的原因時,會顯示最小化的通知,鼓勵使用者提出問題
身為使用者,請注意狀態列中的鈴鐺圖示,因為通知很小。身為擴充功能作者,如果您收到未回應的問題,請檢閱此指南,其中說明了發生的情況以及如何開啟附加到問題的 CPU 設定檔。
預覽功能
預覽功能尚未準備好發行,但功能已足夠使用。我們歡迎您在開發期間提供早期意見反應。
HTML 自訂標籤/屬性支援
新的 html.experimental.custom.tags
和 html.experimental.custom.attributes
設定可讓您指定 VS Code 在啟動期間載入的標籤和屬性清單。當您編輯 HTML 檔案時,VS Code 將為這些標籤和屬性提供自動完成和懸停功能。這與 Web Components 非常搭配,例如
您可以開啟 octref/web-components-examples 存放庫來測試此功能。此功能為預覽版,設定名稱和 JSON 格式都可能會變更。
如果您有意見反應或功能要求,請在問題 #62976 中追蹤。
擴充功能的網路 Proxy 支援
有一個實驗性設定 Http: Proxy Support
,用於為所有擴充功能啟用網路 Proxy 支援。雖然我們仍在處理一些細節,但我們邀請您試用並告訴我們它是否適用於您。(請注意,啟用網路 Proxy 支援目前會中斷 GitHub Pull-Request 擴充功能的登入。)
將其設定為 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
設定貢獻的 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;
偵錯 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;
智慧選取和擴充功能
我們新增了一個建議 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
的貢獻
- Adrien Becchis (@AdrieanKhisbe):語法注入 - 考慮更廣泛的範圍 PR #50534
- David Bailey (@davidbailey00):從 URL 處理常式桌面檔案中移除 StartupWMClass PR #63750
- Anuj (@desaianuj):使用 representation 而非 presentation PR #63477
- Donald Pipowitch (@donaldpipowitch):新增 .hintrc 並將 .babelrc 移至 jsonc 語法 PR #63759
- Eric Amodio (@eamodio)
- Alexandr Fadeev (@fadeevab):根據最新的語法更新 makefile 彩色化測試 PR #61961
- Guillaume Poussel (@gpoussel):修正 #62278:IPv6 連結支援 PR #62293
- Aleksandr Filatov (@greybax):修正問題 #46816 PR #60404
- Napoleon Oikonomou (@iamnapo):如果 README 存在,則顯示 README 而非歡迎頁面 PR #60061
- Raul Humberto Lopez Lopez (@iBlackShadow):當搜尋由選項變更觸發時,在搜尋歷史記錄中新增項目 PR #61993
- Andrii Dieiev (@IllusionMH):控制搜尋結果中動作對齊方式的選項 PR #63457
- joan xie (@infinnie):選單水平對齊 PR #61454
- Matt Q (@irrationalRock):修正 #34345 - 新增可將多個游標新增至檔案結尾/開頭的命令 PR #50312
- Jeffrey (@JeffreyCA)
- @jokurz:自動偵測 ksh 腳本為 shellscript PR #62838
- karan verma (@karanisverma):修正:#55946 新增註解程式碼片段變數 PR #63572
- Krish De Souza (@Kedstar99):修正 updateService.linux.ts 中的 checkForSnapUpdate 以正確識別 snap 版本 PR #63716
- Benjamin Lannon (@lannonbr):新增將擴充功能資訊輸出至剪貼簿的功能 PR #56514
- Luo Wenqing (@laphets):啟用 autoNavigateNextConflict 時,修正最後一個合併衝突警告 PR #62788
- Matthew Leon (@leonm1):修正 #62785 偵錯主控台 copyAll 中的空白行 PR #62823
- Bruno Logerfo (@Logerfo):keyboardMapperTestUtils 的嚴格空值檢查 PR #63027
- Mathias Rasmussen (@mathiasvr):修正 #60002 還原上次提交:保留已暫存的檔案 PR #60104
- Matt Crupi (@mmcru):修正 #63295:在 Linux 儲存錯誤訊息中參考 Sudo PR #63394
- Philip Arola (@philiparola):在設定畫面中將「overwrite」變更為「override」 PR #61926
- Samuel Toriel (@riltsken):[修正] #27649 將 intellisense 文件小工具釘選到頂端 PR #62115
- Ryan Scott (@rscott):新增 Git:Fetch (prune) PR #59735
- Prabhanjan S Koushik (@skprabhanjan)
- SlaneR (@slaner):修正註解中的錯字 PR #62117
- Thomas Struller-Baumann (@Thomas-S-B):移除不必要的轉換 PR #63947
- Alexander (@usernamehw)
- Konrad Borowski (@xfix):修正快照載入器中意外的 fallthrough PR #62294
- Yisrael Veller (@YisraelV)
對於 vscode-vsce
的貢獻
- Nikolay Kondratyev (@kondratyev-nv):修正以特定版本發佈 PR #307
對於 vscode-eslint
的貢獻
對於 language-server-protocol
的貢獻
- Jan Keromnes (@jankeromnes):小幅改進:錯字、文法、措辭。 PR #579
- Adolfo Ochagavía (@aochagavia):修正規格中的錯字 PR #597
對於 vscode-languageserver-node
的貢獻
- Remy Suen (@rcjsuen):使用 DefinitionLink 提供關於符號的元數據 PR #415
- Guillaume Martres (@smarter):將 asVersionedTextDocumentIdentifier 新增至 Converter 介面 PR #421
對於 vscode-html-languageservice
的貢獻
對於 vscode-generator-code
的貢獻
- Graham Bartley (@grabartley):當不建立 git 儲存庫時,不再建立 git 相關檔案 PR #141
對於 debug-adapter-protocol
的貢獻
- Danny Tuppeny (@DanTup):修正 Dart 外掛程式的連結 PR #16
對於 vscode-chrome-debug-core
的貢獻
- @digeff:請勿為儲存來源傳送 src 已變更事件 PR #378
- Shennie Yao (@Shenniey)
對於 vscode-chrome-debug
的貢獻
- Shennie Yao (@Shenniey):為 chrome 命令列參數新增執行階段引數遙測 PR #749
- Leslie Leigh (@shrinktofit):修正 targetTypes 選項 PR #760
對於 vscode-azure-account
的貢獻
- Yujin Hong (@yujhongmicrosoft):為主權雲新增登入支援 PR #79
- Zhe Li (@Sneezry):修正 Azure 中國登入問題 PR #104
- Mateus Amin (@MateusAmin):使用設定更新 README PR #107
對於 vscode-recipes
的貢獻
- Damon Jablons (@blackrobot):清理 Python 配方 的 markdown 格式 PR #172
- Vinícius Salomão (@vizeke):使用 vscode 執行和偵錯 PHP PR #169
對於 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。