March 2020 (version 1.44)

April 5, 2020 · View on GitHub

Welcome to the Insiders build. These are the preliminary notes for the March 1.44 release of Visual Studio Code. As we get closer to the release date, you'll find details below about new features and important fixes.

Until the March milestone release notes are available, you can still track our progress:

We really appreciate people trying our new features as soon as they are ready, so check back here often and learn what's new.

If you find issues or have suggestions, you can enter them in the VS Code repository on GitHub.

Workbench

Quick Open rewrite

The Quick Open (kb(workbench.action.quickOpen)) control was using an old version of our tree widget, and in this iteration it was migrated to use our latest list control, already used in the rest of the VS Code UI. Functionally, you should not be able to tell the difference, as all commands will work as before.

We did take this opportunity to add some features that you might find useful.

Quick Open

Navigate from files to symbols

You can now continue to navigate to the symbols of a file result simply by typing @. For the file that is currently selected, all symbols will appear and the editor will open in the background to reveal the active symbol.

Quick Open navigate to symbols

Filter results by separating multiple queries with spaces

If you are getting too many results for a file search, you can add more search patterns after typing a space. For example, you can narrow down results by folder if you type <file name> <folder name> one after the other.

Quick Open filtering

Note: This also works for the editor (kb(workbench.action.gotoSymbol)) and workspace (kb(workbench.action.showAllSymbols)) symbol picker. Any filter after a space character will be used to filter by the container of that symbol.

Input is preserved when switching providers

If you leave Quick Open visible and switch to another provider (for example, from file search to symbol search), VS Code will apply whatever filter is typed and use it for the new provider. This allows you to quickly reuse the typed input for symbol search when it was previously used for a file search.

Sort editor history strictly by recency

A new setting "search.quickOpen.history.filterSortOrder": "recency" allows you to sort editor history by the most recently opened items, even when starting to search. By default, editor history results will be sorted by relevance based on the filter pattern that was used.

Control height of tabs scroll bar

A new setting workbench.editor.titleScrollbarSizing lets you increase the size of the scroll bar for editor tabs and breadcrumbs.

Configure it to large for a larger scroll bar:

Large Scrollbar

Explorer shows hidden files and their path if they are opened and visible

If a file is hidden (via files.exclude) and it is open and visible in the editor area Explorer will now show it and its parent chain. Those files and their parents are shown in the Explorer using a dimmed color as long as the file is visible in the editor area.

Improved Extension Pack display

To identify Extension Packs in the Extensions view, a number badge now shows the number of extensions included in the Extension Pack.

Extension Pack Badge

Theme: GitHub Sharp with Customizations

The Extension details page now shows all extensions included in the Extension Pack.

Extension Pack Editor

Theme: GitHub Sharp with Customizations

View: Reopen with

The new View: Reopen with command lets you reopen the currently active file using a different custom editor.

Using 'Reopen With' with the custom editor example extension

You can use this command to switch between VS Code's standard text editor and the custom editor, or to switch between multiple custom editors for a resource.

The workbench.editorAssociations setting

Also for custom editor, the new workbench.editorAssociations setting lets you configure which editor is used for a specific resource.

The example below configures all files ending in .catScratch to open using the example custom text editor from our extension samples.

"workbench.editorAssociations": [
  {
    "viewType": "catCustoms.catScratch",
    "filenamePattern": "*.catScratch"
  }
]

Editor

Explicit ordering for editor.codeActionsOnSave

You can now set editor.codeActionsOnSave to an array of code actions to execute in order. You can use this to guarantee that a specific code action is always run before or after another one that may conflict with it

The following editor.codeActionsOnSave will always run Organize Imports followed by Fix All once organize imports finishes:

"editor.codeActionsOnSave": [
    "source.organizeImports",
    "source.fixAll"
]

Accessibility

This milestone we received great feedback from our community, which helped us identify and tackle many accessibility issues.

Highlights are:

  • Diff view is now more accessible. Use kb(editor.action.diffReview.next) and kb(editor.action.diffReview.prev) to navigate through changes and use the Stage / Unstage / Revert Selected Ranges commands to stage, unstage, or revert the current change.
  • Better roles used across our widgets. The listbox role is used for the Suggest widget and Quick Pick, list for static lists, and document for read-only content such as the Welcome view and Markdown preview.
  • Tuned the behavior of our Quick Pick widget
  • The current line CodeLens can now be shown in the Quick Pick with the Show CodeLens Commands For Current Line.

The full list of issues fixed can be found here.

Debugging

Call stack view improvements

The CALL STACK view is a complex view because it shows different types of objects (sessions, processes, threads, stack frames, and separator elements) and provides different actions for different types. In order to make it easier to differentiate the object types and to understand their supported interactions, we have started to make some visual improvements:

  • Debug sessions are now decorated with an icon.
  • Clickable elements use the link color.
  • Smaller separator and presentation elements.

call stack

Progress feedback UI for debug extensions

VS Code now supports the "progress events" that were proposed for the Debug Adapter Protocol (DAP) in the last milestone. With progress events, a debug extension can provide feedback to users for long running operations.

The VS Code debugging UI shows progress feedback in two locations:

  • As a progress bar at the top of the debug view.
  • As a "silent notification", which means that progress is shown "silently" (without interrupting the user) in the Status bar and can be opened into a notification by clicking on it. The notification shows more detailed information and allows cancellation of the underlying long running operation (if the operation supports this).

In order to avoid flicker for short operations, the progress UI only starts after a 0.5 second delay.

The following video shows the new progress UI for a (simulated) long running operation in Mock Debug (the only supporting debug extension as of today). We expect that other debug extensions will adopt the progress support soon.

debug progress

Code completion in the debug console now supports to control the selection

In the last milestone, we added "selection control" to the "completion" request of the Debug Adapter Protocol. With this release, VS Code now fully supports the protocol addition and a debug extension can adjust the selection (or insertion point) after a completion item has been inserted.

Integrated Terminal

All menu bar mnemonics to skip terminal

When the new setting terminal.integrated.allowMenubarMnemonics is enabled, all keystrokes using Alt will skip the terminal so they get processed by VS Code's keybinding manager, making all menu mnemonics work at the cost of Alt hotkeys within the terminal. This is disabled by default.

Languages

Finer grained control over auto import style in JavaScript

The new javascript.preferences.importModuleSpecifierEnding setting lets you control the style of imports that VS Code's auto imports use. This can be useful if you are writing code for platforms such as browsers that support native ES6 modules.

Possible values are:

  • auto — The default. Uses the project's jsconfig to determine the import style to use
  • minimal — Use's node.js style imports. This shortens imports for src/component/index.js to src/component.
  • index — Include the index part of the path as well. This shortens src/component/index.js to src/component/index.
  • js — Use the full path, including the file extension (.js).

Preview features

Preview features are not ready for release but are functional enough to use. We welcome your early feedback while they are under development.

Settings Sync

In this milestone, we enabled synchronizing User Snippets and more UI State.

Sync Configure

Theme: GitHub Sharp with Customizations

Currently following UI State is synchronized:

  • Display Language
  • Activity Bar entries
  • Panel entries
  • Views layout and visibility
  • Recently used commands
  • Do not show again notifications

Note: Currently only user language snippets are synchronized and global snippets will be supported in next milestone.

We also added remote and local sync backup views for restoring your data and trouble shooting. You can access these views using commands Preferences Sync: Show Remote Backup and Preferences Sync: Show Local Backup.

Sync Backup Views

Theme: GitHub Sharp with Customizations

To learn more, you can go to the Settings Sync Documentation.

Accounts Management

Extensions that contribute an Authentication Provider will now have their accounts appear under a new accounts context menu by the settings gear. You can view all accounts you are currently signed into, sign out of them, and manage trusted extensions. Signing into a Microsoft account from here is another way to start settings sync.

Accounts Context Menu

Theme: Pop Light with Customizations

TypeScript 3.9 beta support

This iteration we added support the new TypeScript 3.9-beta features. Some highlights of TypeScript 3.9 include:

  • Suggestions for the // @ts-expect-error directive.
  • Refactorings that better preserve newlines and formatting.
  • Auto imports in JavaScript can now add common JS style imports (require(...))

You can easily try all the new TypeScript 3.9 features today by installing the TypeScript Nightly extension. Please share feedback and let us know if you run into any bugs with the TypeScript 3.9 beta!

Contributions to extensions

Docker

The 1.0 version of the Microsoft Docker extension is now available. The Docker extension helps you build applications using Docker containers. The extension can add required Docker files to your project, build Docker images, let you debug your app inside a container, and includes an Explorer that makes it easy to start, stop, inspect, and remove containers and images.

Docker extension

Feature highlights in 1.0 include:

  • Improved Dockerfile scaffolding for Python Django & Flask web frameworks.
  • A Compose.yml file is now optional when adding Docker files to a workspace.
  • Node.js, Python, and .NET Core support integrated debugging of a single service using a Dockerfile.
  • Work easily with multiple containers and images.

Extension authoring

Welcome View Content API

Certain views now support Welcome content contributed from extensions. Refer to the original issue for more information.

This API was added as proposed in the last milestone and we have now finalized it.

Semantic Token Theming

Color themes can now write rules to theme semantic tokens reported by language extension like TypeScript.

"semanticTokenColors": {
    "variable.readonly:java": "#ff0000"
}

This rule above colors all readonly variables in a Java file red.

Other examples of rules:

  • "*.declaration": { "fontStyle": "bold" }
  • "class.defaultLibrary:typescript": { "foreground": "#00ff00" "fontStyle": "bold" }

See the Semantic Highlighting Wiki Page for more information.

File system error code

We have added FileSystemError#code, which is a string identifying the error. When a file system error is created through any of its factory functions, then code is the name of that function, for example FileSystemError.FileNotFound(msg).code === 'FileNotFound'

Arguments for StatusBarItem.command

StatusBarItem.command now accepts a full Command object instead of just a command id. This lets you pass arguments to the command when the status bar item is activated.

Custom Text Editors

With custom text editors, extensions can now replace VS Code's standard editor with a custom webview based view for specific text based resources. Potential use case include:

  • Previewing assets, such as shaders or .obj files.
  • Creating WYSIWYG editors for markup languages such as XAML.
  • Providing alternative, interactive views of data files such as json or csv.

The custom editors documentation covers how to use the new custom text editor API and how to make sure your new editor works well with VS Code. Also be sure to check out the custom editors extension sample.

The custom editor example extension

Next iteration, we're hoping to finalize the full custom editor proposal that extends custom editors to also support binary files.

Debug Adapter Protocol

New progress events

We've finalized support for reporting progress in the Debug Adapter Protocol. Debug adapters can now send progress events (progressStart, progressUpdate, and progressEnd) to the frontend client, in order to display progress for long running debug adapter operations. The progressStart event can be marked as cancellable to make the client present a cancellation UI and send an cancel request. In order to enable progress events in a supporting debug adapter, the frontend client needs to include the new client capability supportsProgressReporting in the initialize request.

More details can be found in the corresponding DAP feature request. VS Code supports progress events starting with this milestone.

Clipboard context value for the "evaluate" request

DAP clients (frontends) use the evaluate request when copying variable and expression values to the clipboard. To help debug adapters detect this scenario, a new value clipboard has been added to the value set for the context argument that is passed to the evaluate request. To ensure backward compatibility, a client is only allowed to pass the new value if the debug adapter returns a supportsClipboardContext capability.

Proposed extension APIs

Every milestone comes with new proposed APIs and extension authors can try them out. As always, we are keen on your feedback. This is what you have to do to try out a proposed API:

  • You must use Insiders because proposed APIs change frequently.
  • You must have this line in the package.json file of your extension: "enableProposedApi": true.
  • Copy the latest version of the vscode.proposed.d.ts file into your project's source location.

Note that you cannot publish an extension that uses a proposed API. There may be breaking changes in the next release and we never want to break existing extensions.

This new API allows extensions to intercept and handle links that are clicked in the terminal.

window.registerTerminalLinkHandler({
  handleLink((terminal, link) => {
    if (link === 'https://code.visualstudio.com') {
      window.showInformationMessage('Handled');
      return true;
    }
    return false;
  });
});

Contribute to terminal environments

This new API allows extensions to change environment variables when the terminal is starting up.

const collection = window.getEnvironmentVariableCollection(true);
const separator = process.platform === 'win32' ? ';' : ':';
collection.prepend('PATH', `/foo${separator}`);
collection.replace('JAVA_HOME', '/bar');

These collections are extension and workspace-specific and VS Code handles how conflicts between multiple extensions are dealt with. They can optionally be persisted across window reloads, care was taken to ensure this is done in such a way that terminals created immediately after the window is loaded do not block on the extension host launching but instead use the last known version. These persisted collections can get removed by disposing of the collection or create a new non-persistent collection, or when the extension is uninstalled.

The plan is to surface these environment modifications to the user and some indicator that allows updating or "stale" terminal environments but this is still a work in progress. You can follow the discussion in #46696.

Browser support

Remote indicator

When using VS Code in a browser, there is now a remote indicator. This lets you know the remote environment you are connected to and allows extensions to add additional commands associated with the remote. With this change, the Open in Desktop link was removed from the Status bar and will move into the remote picker.

Note: VS Code currently does not support connecting to a different remote - such as SSH, a container, or WSL - from the browser.

Web remote indicator

A new menu location lets extensions running in the browser contribute links to the hamburger menu in the upper left.

Web navigational links

New Commands

We now expose commands for navigating through search results in the Find control from the Editor, Integrated Terminal, Extension Details view, and Webviews.

KeyCommandCommand ID
kb(workbench.action.alternativeAcceptSelectedQuickOpenItem)Alternate Accept Quick Open Item (such as Open to Side)workbench.action.alternativeAcceptSelectedQuickOpenItem
kb(codelens.showLensesInCurrentLine)Show CodeLens for Current Linecodelens.showLensesInCurrentLine

Engineering

VS Code compiles to ES6

VS Code has adopted ES6 - all the way. Thanks to TypeScript, we have been using ES6-syntax for a long time, but we now assume that the target runtime also supports ES6. This allows us to use ES6 "globals" like Strings#endsWith and allows the use of new language features, like generator-functions and symbols.

New documentation

Python

There are two new Python tutorials:

C++

We've updated the C++ extension tutorials and added a new tutorial specific to Using C++ on Linux.

Notable fixes

  • 75932: Debug failed to load: Process picker failed (your 131072x1 screen size is bogus, expect trouble)
  • 84271: Add "x" to remove a file from recently opened (quick pick)
  • 89658: No debug adapter found
  • 92381: "Add folder to workspace" prompt duplicates itself if you add and then remove a folder from the workspace repeatedly
  • 93344: Welcome view should scroll
  • 93634: Progress: let window progress turn into silent notification progress

Thank you

Last but certainly not least, a big Thank You! to the following folks that helped to make VS Code even better:

Contributions to vscode:

Our accessibility community for providing constant feedback! To name a few: Florian Bejers (@zersiax), José Vilmar Estácio de Souza (@jvesouza), Andy Borka (@ajborka), Dickson Tan (@Neurrone), Joan Marie (@joanmarie), Pawel Lurbanski (@pawelurbanski), Bryan Duarte (@RedEyeDragon), Alex Hall (@mehgcap), Michał Zegan (@webczat), Nolan Darilek (@ndarilek), Alexander Epaneshnikov (@alex19EP), Marco Zehe (@MarcoZehe), Leonard de Ruijter (@leonardder), Ivan Fetch (@ivanfetch)

Contributions to vscode-vsce:

Contributions to language-server-protocol:

Contributions to vscode-languageserver-node:

Contributions to vscode-generator-code:

Contributions to localization:

There are over 800 Cloud + AI Localization community members using the Microsoft Localization Community Platform (MLCP), with over about 170 active contributors to Visual Studio Code. We appreciate your contributions, either by providing new translations, voting on translations, or suggesting process improvements.

Here is a snapshot of contributors. For details about the project including the contributor name list, visit the project site at https://aka.ms/vscodeloc.

  • Chinese (Simplified, China) Tingting Yi, Yizhi Gu, Charles Dong, Justin Liu, Joel Yang, Tony Xia, 朱知阳, meng shao, 普鲁文, paul cheung, 张锐, Yiting Zhu, Nong Zhichao, Liam Kennedy, 武 健, Zhao Liguo, 宁 倬, Bochen Wang, 一斤瓜子, 顺 谭, 云 何, Yun Liu, yungkei fan.
  • Chinese (Traditional, Taiwan) 船長, Winnie Lin, 予 恆.
  • Czech David Knieradl.
  • Danish (Denmark) Javad Shafique, Lasse Stilvang.
  • English (United Kingdom) Martin Littlecott, Oren Recht, Faris Ansari.
  • Finnish (Finland) Teemu Sirkiä.
  • French (France) Antoine Griffard, Thierry DEMAN-BARCELÒ, Rodolphe NOEL, Nathan Bonnemains.
  • Hebrew (Israel) Chayim Refael Friedman, Asaf Amitai.
  • Indonesian (Indonesia) Gerry Surya, Laurensius Dede Suhardiman.
  • Italian (Italy) Alessandro Alpi, Riccardo Cappello.
  • Japanese (Japan) Ikko Ashimine, Aya Tokura, Takayuki Fuwa, ちゃん きさらぎ, 住吉 貴志, Koichi Makino, Yoshihisa Ozaki, TENMYO Masakazu.
  • Korean (Korea) Kyunghee Ko, June Heo.
  • Norwegian (Norway) Torbjørn Viem Ness.
  • Polish (Poland) Makabeus Orban, Kacper Łakomski.
  • Portuguese (Brazil) Alessandro Trovato, Marcelo Fernandes, Arthur Lima, Luciana de Melo, Luiz Gustavo Nunes.
  • Portuguese(Portugal) Pedro Filipe.
  • Russian (Russia) Andrey Veselov, Vadim Svitkin, Минаков Антон.
  • Spanish (Spain, International Sort) Sifredo Da Silva, Ariel Costas Guerrero, David Roa, Abdón Rodríguez P., Luis Manuel, Carlos A. Echeverri V.
  • Swedish (Sweden) Per Ragnar Edin.
  • Tamil (India) krishnakoumar c.
  • Turkish (Turkey) Umut Can Alparslan, Mehmet Yönügül.
  • Ukrainian (Ukraine) Nikita Potapenko.
  • Vietnamese (Vietnam) Hieu Nguyen Trung.