Welcome to the Insiders build. These are the preliminary notes for the February 1.65 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 February milestone release notes are available, you can still track our progress:
- **[February iteration plan](https://github.com/microsoft/vscode/issues/142359)** - Review what's planned for the milestone.
- **[Commit log](https://github.com/Microsoft/vscode/commits/main)** - GitHub commits to the vscode open-source repository.
- **[Closed issues](https://github.com/Microsoft/vscode/issues?q=is%3Aissue+milestone%3A%22February+2022%22+is%3Aclosed)** - Resolved bugs and implemented feature requests in the milestone.
The editor history navigation feature in VS Code drives some popular commands, such as **Go Back** and **Go Forward**. Numerous feature requests accumulated over time to improve this feature and also add more capabilities to it. This milestone editor history navigation was rewritten from scratch to address most of these requests.
Editor groups are now taken into account when navigating in the editor history. Navigating back and forward in editor history will activate and focus editors in exactly those editor groups as they were. When an editor group is removed, all associated history entries are discarded.
A new setting `workbench.editor.navigationScope` makes it possible to scope editor history navigation to just the active editor group or even editor. Supported values are:
If you configure the scope to `editorGroup` or `editor`, each editor group or editor will have their own navigation stack that can be navigated individually.
You can now navigate between cells you have selected in any notebook. This works across editors, in the same way as you can navigate between cursor locations in a text editor.
**New commands to navigate edit locations or navigation locations**
By default, editor navigation locations are added whenever you navigate across editors but also when navigating within editors (for example, when switching notebook cells or changing selection in text editors). If you feel that too many locations are being recorded, new commands have been added that reduce locations to either:
Last milestone, we introduced the experimental layout control in the title bar. We have heard feedback that, while the actions in the control are useful, they require too many clicks. For that reason, we are adding some options for everyone to try out with the setting `workbench.experimental.layoutControl.type`. This setting has the following options:
**Menu**: This is the previous behavior with a single button that opens a menu.
**Toggles**: This is a new option which shows three buttons to toggle the panel, side bar, and side panel.
**Both**: This is a new option which shows the toggles followed by the menu button which still allows you to fairly quickly access the customize layout quick pick.
![Layout control with type set to both](images/1_65/layout-control-options.png)
A dialog now shows by default when pasting multiple lines in terminals when the shell does not support multi-line, this includes bracketed paste mode and for powershell when we hand off ctrl+v directly to the shell. There is a do not show again checkbox to easily disable the feature.
The list of recently opened local files and folders is now available when you access [vscode.dev](https://vscode.dev) or [insiders.vscode.dev](https://insiders.vscode.dev) with a browser that supports the [web file system access API](https://developer.mozilla.org/docs/Web/API/File_System_Access_API). Selecting a local file will open it in an editor and selecting a local folder will update the File Explorer to show its contents. You may be asked by the browser to confirm local file access before the contents are revealed.
This milestone we improved our support for merge conflict resolution when editing GitHub repositories on [vscode.dev](https://vscode.dev) and [github.dev](https://github.dev). We now display merge conflict decorations in your editor, with options to Accept Current, Accept Incoming or Accept Both.
Additionally, you can now easily stage and unstage all changes under a specific folder in a GitHub repository on [vscode.dev](https://vscode.dev) and [github.dev](https://github.dev). Simply right-click on the Source Control view and select View as Tree.
Accessing the value of a variable may have side-effects or be expensive. The debugger will now show a button for the user to expand these variables on demand. This is available for debug extensions that have implemented the new Debug Adapter Protocol addition allowing them to declare a variable as "lazy". For details, see the section [Debugger extension authoring](#debugger-extension-authoring) below. Currently this has only been implemented by the built-in JavaScript debug extension for getters.
![expanding lazy vars in debugger](./images/1_65/lazy-vars.gif)
We moved the text, image, HTML and code renderers from the core to a built-in output renderer extension. With this change, we can now search text on these output types.
The run button and cell toolbar will now stick to the top of the screen when scrolling down a code cell. This makes them more accessible when working in a long code cell.
![notebook cell button and toolbar scrolling](images/1_65/sticky-scroll.gif)
We have finalized the API for language status items. This API shows language specific information for the active editor. This can be general information about the project or toolset version but can also display errors and warnings.
The API resembles the Status bar API and can be accessed via `vscode.languages.createLanguageStatusItem(...)`. A language status item should be created with a document selector so that VS Code can show and hide it whenever the active editor changes.
The Inlay Hint provider API is now finalized. It allows to inlay additional information with source code. The capture below shows how TypeScript added an inlay hint for an inferred type.
### vscode-test package renamed to @vscode/test-electron
The `vscode-test` package has been renamed to `@vscode/test-electron`. Extension authors should update the entry in their extension's `package.json` file `devDependencies`, if they are including that package. The [@vscode/test-electron](https://www.npmjs.com/package/@vscode/test-electron) package helps run integration tests for VS Code extensions. You can learn more at the [vscode-test repository](https://github.com/microsoft/vscode-test).
Recently, the Debug Adapter Protocol [added](https://code.visualstudio.com/updates/v1_63#_new-important-category-for-the-output-event) an `important` category for the `Output` event. This category marks events that should stand out and not go overlooked by the user. VS Code will now show a notification popup for messages with the `important` category. They will also still be logged to the Debug Console.
Some properties and variables are dynamic and require executing code to get the value. A debug adapter may not want to retrieve their full values automatically, since doing so could have side-effects or be expensive. An optional `lazy` property has been added to `VariablePresentationHint` to support this scenario. This flag signals to the debug client that it can present the variable with a UI that supports a specific gesture to trigger its evaluation. Please note that in addition to the `lazy` flag, the variable's `variablesReference` must refer to a variable that will provide the value through another `variables` request.
This feature has been implemented in VS Code. Lazy variables will be shown with a button to request the full value. See the [Lazy variable expansion](#lazy-variable-expansion) section for an example.
Every milestone comes with new proposed APIs and extension authors can try them out. As always, we want your feedback. Here are the steps to try out a proposed API:
1. [Find a proposal that you want to try](https://github.com/microsoft/vscode/tree/main/src/vscode-dts) and add its name to `package.json#enabledApiProposals`.
1. Use the latest [vscode-dts](https://www.npmjs.com/package/vscode-dts) and run `vscode-dts dev`. It will download the corresponding `d.ts` files into your workspace.
1. You can now program against the proposal.
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.
The `vscode.DocumentSelector` type allows you to associate language features like **Go to Definition** to specific documents. This drives the UI and also decides if the corresponding provider is asked for results. We have added a new API proposal that allows to also select notebook types, like `{ language: 'python', notebookType: 'jupyter-notebook'}` targets all python documents that are embedded in Jupyter notebooks. This is the [current proposal](https://github.com/microsoft/vscode/blob/8a3b1f4c4c24064273efb3417a5c2e229ba78481/src/vscode-dts/vscode.proposed.notebookDocumentSelector.d.ts) - give it a try and let us know what you think.
There are extensions which are able to define token or syntax coloring and code-lens features to their output channels given that they are text documents (read-only) by themselves. Since all output channels share the same lanugage id, these customizations can be wrongly applied to other output channels. Hence there has been an ask to create an output channel with custom language id so that extension authors can define customizations by lanugage. Hence in this milestone, we have introduced the [proposal](https://github.com/microsoft/vscode/blob/35ba35b799a85974079e4a90f59ae7e978ad3def/src/vscode-dts/vscode.proposed.outputChannelLanguage.d.ts#L21) to create an output channel with a custom language id. Please try it out and give us feedback.
Shell integration in the terminal was introduced [in an early state last release](https://code.visualstudio.com/updates/v1_64#_terminal-shell-integration) and has seen many improvements this month. As a refresher, this feature allows VS Code to gain additional insights into what's happening within the terminal which was previously largely unknown. The feature is still considered experimental and opt-in via the `terminal.integrated.shellIntegration.enabled` setting for now.
The biggest change is that commands detected by shell integration now feature decorations in the "gutter" to the left. A command decoration visually breaks up the buffer and provides access to information and actions which leverage shell integration capabilities.
There are 3 types of command decorations: error, success, and default as determined by the command's exit code.
![A command succeeds and a success decoration is placed to the left of the prompt. A command fails and an error decoration is placed to the left of the prompt. A placeholder decoration is to the left of no-op commands and the current command before it's been executed.](images/1_65/command-decorations.png)
- The enablement setting has been renamed to `terminal.integrated.shellIntegration.enabled`.
- The mechanism for enabling shell integration in all supported shells is now more reliable.
- Shell integration should now work when using remote connected windows (ssh, wsl, containers).
- Line continuations (eg. `$PS2`) should now work on all supported shells.
- Commands that are "skipped" are now marked specially, for example using ctrl+c or running an empty command.
- The run recent command and go to recent directory commands now store history between sessions, this can be configured via the `terminal.integrated.shellIntegration.history` setting.
Disable decorations by setting `terminal.integrated.shellIntegration.decorationsEnabled` to `false`.
Configure the icons used with the settings prefixed by `terminal.integrated.shellIntegration.decorationIcon`.
Change the color of the decorations via the workbench color customizations: `terminalCommandDecoration.successBackground`, `terminalCommandDecoration.errorBackground`, and `terminalCommandDecoration.defaultBackground`.
- [@Bruce-Hopkins (Bruce Hopkins)](https://github.com/Bruce-Hopkins): Add user home variable [PR #141902](https://github.com/microsoft/vscode/pull/141902)
- Add optional languageId to window.createOutputChannel API (#19561) [PR #140876](https://github.com/microsoft/vscode/pull/140876)
- Fix `testing.openTesting` setting text (#142306) [PR #142314](https://github.com/microsoft/vscode/pull/142314)
- [@haykam821](https://github.com/haykam821): Prevent the image preview transparency background from being affected by scaling [PR #141667](https://github.com/microsoft/vscode/pull/141667)
- [@heartacker](https://github.com/heartacker): add math snippet [PR #142697](https://github.com/microsoft/vscode/pull/142697)
- Fix querying an extension by id in extension view always renders stable version in extension editor [PR #143481](https://github.com/microsoft/vscode/pull/143481)
- [@JJRcop (Jonathan Rubenstein)](https://github.com/JJRcop): Add VS 2022 to supported versions [PR #142667](https://github.com/microsoft/vscode/pull/142667)
- [@zwpaper (Wei Zhang)](https://github.com/zwpaper): use language id for consistence [PR #1409](https://github.com/microsoft/language-server-protocol/pull/1409)