Extension Authoring · code.visualstudio.com

Update 1.29.1: The update addresses these issues.

Downloads: Windows: x64 | Mac: Intel | Linux 64-bit: deb rpm tarball | 32-bit: deb rpm tarball


Welcome to the October 2018 release of Visual Studio Code. There are a number of significant updates in this version that we hope you will like, some of the key highlights include:

If you'd like to read these release notes online, go to Updates on code.visualstudio.com.
You can also check out this 1.29 release highlights video from Cloud Developer Advocate Brian Clark.

The release notes are arranged in the following sections related to VS Code focus areas. Here are some further updates:

  • Workbench - Platform specific end-of-line characters, highlight modified file tabs.
  • Integrated Terminal - Split terminal cwd options, Cmd+Backspace to delete to start of line.
  • Languages - Display CSS Specificity on hover, handle unknown CSS properties.
  • Debugging - Multiple debug consoles, start with stop on entry, style console.log messages.
  • Extension Authoring - Active terminal API, more control over custom views.

Insiders: Want to see new features as soon as possible? You can download the nightly Insiders build and try the latest updates as soon as they are available. And for the latest Visual Studio Code news, updates, and content, follow us on Twitter @code!

Search

Multiline search

VS Code now supports multiline search! Same as in the editor, a regex search executes in multiline mode only if it contains a \n literal. The Search view shows a hint next to each multiline match, with the number of additional match lines.

Multiline search

This feature is possible thanks to the work done in the ripgrep tool to implement multiline search.

Backreferences and lookahead in search

It is also now possible to use backreferences and lookahead assertions in regex searches, by setting "search.usePCRE2": true. This configures ripgrep to use the PCRE2 regex engine. While PCRE2 supports many other features, we only support regex expressions that are still valid in JavaScript, because open editors are still searched using the editor's JavaScript-based search.

Fancy regex search

If you are still missing lookbehind assertions, don't worry! That feature is just recently supported by JavaScript and should come to VS Code in a later Electron shell update.

Show line numbers in search

We've added a setting search.showLineNumbers which will display the line number for each match in the Search view.

Disable search and replace preview

There is a new setting search.useReplacePreview which allows you to disable the preview diff that appears when doing a search/replace in the Search view.

line numbers

Use global .gitignore file in search

Git allows you to configure a global gitignore file using the core.excludesfile config property. By default, search does not respect the global gitignore file, but you can now change this by enabling the new setting search.useGlobalIgnoreFiles.

Workbench

macOS Mojave Dark Mode support

The macOS Mojave Dark Mode is now better supported in VS Code. Previously, VS Code menus and dialogs would show with the default light theme, even if macOS was running in dark theme. Now, all native UI elements will show with the Dark Mode if enabled.

macOS Mojave Dark Mode

macOS full screen support

A new setting window.nativeFullScreen was introduced that, if set to false, will enable full screen mode for VS Code that does not use the native macOS full screen feature. This has the advantage that entering full screen mode will not create a macOS space on the desktop. By default, VS Code will still use macOS native full screen.

New default for files.eol: auto

The files.eol end of line setting now has a new default value auto. When set to auto, the end of line character for new files is specific to the operating system. It is \r\n on Windows and \n on macOS and Linux. You can also still explicitly set file.eol to \n or \r\n.

Highlight modified tabs

A new setting workbench.editor.highlightModifiedTabs displays a thick border at the top of editor tabs whenever the editor is dirty (has unsaved changes). This makes it easier to find files that need to be saved. The color of the border can be customized (see below).

Highlight modified tabs

Centered editor layout auto resize

Centered layout view will now automatically resize to max width when more than 1 editor group is open. This should make centered layout easier to use and require less manual toggling. This behavior is controlled by a new setting workbench.editor.centeredLayoutAutoResize which is enable by default.

There is a new setting that controls how symbols in the Breadcrumbs picker are ordered: breadcrumbs.symbolSortOrder.

Allowed values are:

  • position - position in the file (default)
  • name - alphabetical order
  • type - symbol type order

The example below shows the Breadcrumbs symbol list ordered by name:

Breadcrumb picker ordered by name

Breadcrumbs and preview editors

When middle clicking items in the Breadcrumbs navigation, they now open in a new editor and don't reuse the preview editor. This behavior now matches middle clicking files in the Explorer.

Notifications automatically hide even when showing buttons

Previously, VS Code would never hide notifications if they included buttons. This resulted in the potential for notifications to pile up in the lower right corner and cover parts of the editor. With this release, notifications are hidden after a timeout even if they show buttons.

There are two exceptions:

  • Notifications with error severity will not be hidden on the assumption that the user needs to take some action.
  • A few specific notifications from VS Code will remain open. For example, the notification that asks if you'd like to install an extension after browsing the VS Code Marketplace.

Note: Even if notifications are hidden, you can always access all notifications from the Notification Center, either by clicking on the little bell icon in the Status bar or via the Show Notifications (notifications.toggleList) command.

In order to preserve horizontal space and reduce clutter, we removed the toggle Panel position button (Move to Right, Move to Bottom) from the Panel title area. The action is now available in the Panel title area context menu and also in View > Appearance > Toggle Panel Position main menu. Another reason for removing this button was that we believe users set their layout once and don't normally toggle back and forth.

Move panel

Updated file icons per file type

In the previous release, we added custom icons for common VS Code file types. We now added those icons to smaller views so they will appear in a list view.

Updated file icons

Settings editor "Modified in" hint is now a link

In the Settings editor, we show a hint when a setting is configured in a scope (User, Workspace) other than the currently selected scope. The other scope hint is now a link that will take you to the setting in the other scope.

modified in link

Tree widget performance

The VS Code tree widget control is used in many places in the VS Code UI but was hitting performance limits in some specific use cases (Problems panel, Outline view). We have been working on faster virtual tree widget implementations which can accommodate different levels of performance versus API convenience. You can read here to learn more.

The new ObjectTree widget is now being used in the Problems panel and we've already seen significant improvements. We were able to dramatically raise the number of problem items the workbench can handle as well as increase the speed of certain operations (such as Collapse All) and advanced filtering scenarios. These improvements now make it feasible to work with larger collection sizes.

Workbench navigation commands

Four commands are added to improve workbench navigation:

  • workbench.action.nextSideBarView: Go to next view in Side Bar.
  • workbench.action.previousSideBarView: Go to previous view in Side Bar.
  • workbench.action.nextPanelView: Go to next Panel.
  • workbench.action.previousPanelView: Go to previous Panel.

By default, the commands do not have keyboard shortcuts.

Two context keys, sideBarFocus and panelFocus were also added. This allows using the same keybinding for different commands in different Workbench areas:

{
  "terminal.integrated.experimentalBufferImpl": "TypedArray"
}

This is just the beginning, we're expecting further improvements to throughput and memory usage over the next couple of releases before making this the default implementation. A special thanks to @jerch from the xterm.js team, who has been the main driving force behind this multi-month project.

Tasks

Clear terminal before executing task

A new property clear was added to the task presentation configuration. Set the clear property to true to clear the terminal before the task is run.

Debugging

Collapsible stack frames

Sometimes call stacks in the debugger contain stack frames which are not interesting to the user (external code, skipped files etc...). To reduce clutter and save on vertical space, we now render those uninteresting stack frames as collapsed.

stack frames

Improved Loaded Scripts view

In this milestone, we updated the Loaded Scripts view to support file icons and added the capability to show related resources as child elements. Debug extensions can use this feature to show the source file(s) that were transpiled into a script.

The following picture from the Node.js debugger shows the TypeScript source for JavaScript files (as available in source maps):

loaded scripts view

Please note that the related resources feature requires opt-in by debug extensions. In the October release, only node-debug has experimental support for this feature for Node.js versions < 8.0 (aka "legacy").

Multiple debug consoles

When debugging multiple debug sessions, we now show their output in different debug consoles. This makes it easier to distinguish which debug session is responsible for which output and evaluation.

multiple debug consoles

Start debugging with stop on entry

For Node.js debugging, we have added a new command Debug: Start Debugging and Stop On Entry (extension.node-debug.startWithStopOnEntry). Use this command if you would like to start debugging and immediately stop on the entry of your program. The default keybinding is F11. Note that is command is only available if your selected launch configuration is of type node.

Node debugging supports console.log styling

When debugging Node.js (or Chrome using the "Debugger for Chrome" extension), you can now style messages from console.log using %c, similar to what Chrome DevTools supports. Supported properties are color, background, font-weight: bold, and text-decoration: underline.

console styles

Breakpoint widget expands to multiple lines

The Breakpoint widget can now expand to multiple lines, use Shift+Enter to insert an additional line, or simply paste a multiline condition or log message. This should help when editing more complex conditions and log messages.

breakpoint widget

Languages

TypeScript 3.1.4

This release includes TypeScript 3.1.4, a small update that fixes a few important bugs.

Markdown snippet improvements

The built-in Markdown snippets, such as those for links and code blocks, now use the currently selected text by default. This allows you to create keybindings that turn the currently selected text into a link or header:

/**
 * Reveals the given element in the tree view.
 * If the tree view is not visible then the tree view is shown and element is revealed.
 *
 * By default revealed element is selected.
 * In order to not to select, set the option `select` to `false`.
 * In order to focus, set the option `focus` to `true`.
 * In order to expand the revealed element, set the option `expand` to `true`. To expand recursively set `expand` to the number of levels to expand.
 * **NOTE:** You can expand only to 3 levels maximum.
 *
 * **NOTE:** [TreeDataProvider](#_TreeDataProvider) is required to implement [getParent](#_TreeDataProvider.getParent) method to access this API.
 */
reveal(element: T, options?: { select?: boolean, focus?: boolean, expand?: boolean | number }): Thenable<void>;

New theme colors

There are new theme colors:

  • tab.activeModifiedBorder: Border on the top of modified (dirty) active tabs in an active group.
  • tab.inactiveModifiedBorder: Border on the top of modified (dirty) inactive tabs in an active group.
  • tab.unfocusedActiveModifiedBorder: Border on the top of modified (dirty) active tabs in an unfocused group.
  • tab.unfocusedInactiveModifiedBorder: Border on the top of modified (dirty) inactive tabs in an unfocused group.
  • editor.stackFrameHighlightBackground: Background color of the top debug stack frame highlight in the editor. By default this color is yellow.
  • editor.focusedStackFrameHighlightBackground: Background color of the focused debug stack frame highlight in the editor. By default this color is green.

Git extension API additions

The Git extension API has been updated to expose details on the actual changes each repository has.

Additionally, the following methods have been exposed:

Using Azure Pipelines for extension CI

We've updated our documentation on how to setup a continuous integration solution for your extension using Azure Pipelines. The new guide provides a configuration with which you can run your extension tests simultaneously on Windows, macOS and Linux.

Azure Pipelines CI results

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.

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

Clipboard API

We have a proposed API to access the clipboard. It follows the up-coming browser Clipboard API and currently allows reading and writing of text:

/**
 * Options for creating a [TreeView](#_TreeView]
 */
export interface TreeViewOptions<T> {
  /**
   * A data provider that provides tree data.
   */
  treeDataProvider: TreeDataProvider<T>;

  /**
   * Whether to show collapse all action or not.
   */
  showCollapseAll?: boolean;
}

namespace window {
  export function createTreeView<T>(
    viewId: string,
    options: TreeViewOptions<T>
  ): TreeView<T>;
}

VS Code provides the Collapse All functionality and shows it with same icon and location for all opted-in views.

Collapse All

TreeItem label highlights

You can highlight the TreeItem label by providing ranges using the highlights option. Since it is a proposed API, you have to use TreeItem2 to update highlights.

export interface SourceControlInputBox {
  /**
   * Controls whether the input box is visible (default is  true`).
   */
  visible: boolean;
}

SignatureHelpContext

The proposed SignatureHelpContext gives SignatureHelpProviders additional information about why signature help was requested:

/**
 * Contains additional information about the context in which a
 * [signature help provider](#_SignatureHelpProvider.provideSignatureHelp) is triggered.
 */
export interface SignatureHelpContext {
  /**
   * Action that caused signature help to be requested.
   */
  readonly triggerReason: SignatureHelpTriggerReason;

  /**
   * Character that caused signature help to be requested.
   *
   * This is `undefined` when signature help is not triggered by typing, such as when invoking signature help
   * or when moving the cursor.
   */
  readonly triggerCharacter?: string;

  /**
   * Whether or not signature help was previously showing when triggered.
   *
   * Retriggers occur when the signature help is already active and can be caused by typing a trigger character
   * or by a cursor move.
   */
  readonly isRetrigger: boolean;
}

/**
 * How a [Signature provider](#_SignatureHelpProvider) was triggered
 */
export enum SignatureHelpTriggerReason {
  /**
   * Signature help was invoked manually by the user or by a command.
   */
  Invoke = 1,

  /**
   * Signature help was triggered by a trigger character.
   */
  TriggerCharacter = 2,

  /**
   * Signature help was triggered by the cursor moving or by the document content changing.
   */
  ContentChange = 3
}

Additionally, the proposal allows SignatureHelpProvider to be registered with a set of triggerCharacters and a distinct set of retriggerCharacters:

">https://aka.ms/vscodeloc.
  • Bosnian: Dario Fuzinato.
  • Bulgarian: Любомир Василев.
  • Catalan: joanmiro pisa.
  • Czech: Vít Staniček, Kryštof Černý, Michal Franc.
  • Dutch: Gerald Versluis, Vincent Verbist.
  • English (United Kingdom): Matthew John Cheetham, Alexander Ogilvie.
  • Finnish: Petri Niinimäki, Feetu Nyrhinen.
  • French: Antoine Griffard, Adrien Clerbois.
  • German: J.M. Rütter, Volkmar Rigo.
  • Greek: Dimitris Siakavelis, Christos Koutsiaris.
  • Hindi: Ashwini Gupta, Bimal ., Brahma Dev, Rahul Bhammarker.
  • Hungarian: Tar Dániel.
  • Chinese Simplified: Joel Yang, pluwen, Zijian Zhou, Simon Chan.
  • Chinese Traditional: Duran Hsieh, Poy Chang, Alan Tsai, Kevin Yang, Winnie Lin.
  • Indonesian: Rizki A. Wibowo, Laurensius Dede Suhardiman, Fahmi Irsyad khairi, Wildan Mubarok, G-RiNe Project, Pratikto Ariestyadi, Joshua Siagian, William Tantiono, Herman Prawiro, Febrian Setianto (Feber), Angger Rafi Akbar, Joseph Aditya P G, Oka bRionZ, rodin.
  • Italian: Alessandro Alpi, Riccardo Cappello, Marco Dal Pino, Roberto Albano, Andrea Dottor, Luigi Bruno.
  • Japanese: Shunya Tajima, Yuichi Nukiyama, Satoshi Kajiura, Yoshihisa Ozaki.
  • Kannada: Sanjay !.
  • Korean: Kyunghee Ko, Junseong Jang.
  • Lithuanian: Martynas Jusys.
  • Malayalam: Ajith S Punalur, Anand Chalakkal Jose Mohan, Kiren Paul.
  • Norwegian BokmÃ¥l: Espen Klein Nilsen.
  • Polish: Artur, Andrzej Supermocny, Jan Bońkowski, Mateusz Wyczawski, Warchlak.
  • Portuguese (Brazil): Rodrigo Crespi, Roberto Fonseca, Danilo Dantas, Thiago Aragão, Thiago Moreira de Souza Arrais, Atílio Dadalto, Marcelo Fernandes, Douglas Heydt, Robson Cassiano, Lucas Miranda, Thiago Custodio.
  • Portuguese (Portugal): Diogo Barros, António Santos, Antonio Lourenco.
  • Russian: Ivan Kuzmenko, Roman Slauta, Michael Crane.
  • Spanish: José M. Aguilar, Matias Menich, Alberto Poblacion, Daniel J. Pérez Nieto, Andrés Reyes Galgani.
  • Tamil: Nadar Solomon Sunder, Sarath Jasrin, Sakthi Raj, rajakvk, Avinash, ஜெகன் லங்கா சாமி துரை, Anand AV, Jeyanthinath Muthuram, Narayanan Singaram.
  • Telugu: Rama Chandu, Hari Jujjavarapu, Sai Pavan Koundinya Upadhyayula.
  • Ukrainian: Svitlana Galianova, Borys Lebeda, Dmytro Kyrychuk, Victor Kubrak, Volodymyr Holovka.
  • Urdu: Haseeb Anwer, Saqib Ameen, Ahmad Awais.
  • Vietnamese: Thanh Phu, Daniel Nguyen, Nguyễn Nhật Tân, Hung Nguyen, Vuong.

Read the original on code.visualstudio.com ↗