>If you'd like to read these release notes online, go to [Updates](https://code.visualstudio.com/updates) on [code.visualstudio.com](https://code.visualstudio.com).
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. 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.
In the short video below, the first **Go Back** places the cursor in the new editor group and then the second **Go Back** navigation returns to the original editor group.
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. Navigation works across editors, in the same way as you can navigate between cursor locations in a text editor.
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](https://code.visualstudio.com/updates/v1_64#_customize-layout-control) in the title bar (enabled by setting `workbench.experimental.layoutControl.enabled` to `true`). We have heard feedback that, while the actions in the control are useful, they require too many clicks. For that reason, we are adding several UI options for everyone to try out with the setting `workbench.experimental.layoutControl.type`. This setting has the following options:
*`toggles`: A new option that shows three buttons to toggle the Panel, Side Bar, and Side Panel.
*`both`: A new option that shows the toggles followed by the menu button, which still allows you to fairly quickly access the customize layout Quick Pick.
New audio cues have been added with this release, including audio cues for warnings, inline suggestions, and debugger breakpoint hits. The sounds have been tuned and the general setting `audioCues.enabled` has been deprecated in favor of the individual `audioCues.*` settings:
All audio cues except `lineHasWarning` are enabled by default for screen reader users (setting value `auto`).
A new audio cue command **Help: List Audio Cues** lists all available audio cues, lets you hear each audio cue as you move through the list, and review which cues are currently enabled.
You can now drag and drop a Problem, Search, or Reference result into the editor, opening the file and revealing the result position. This can be useful if you want to start a new editor group or drop a result into an existing editor group.
When the new setting `workbench.editor.historyBasedLanguageDetection` is enabled, untitled editors will use an improved automatic language detection algorithm that factors in your editor history and the contents of the current workspace. The new algorithm requires much less text input than before to provide detection results.
Language feature extension recommendations now take into consideration other prominent language extensions in the Marketplace while recommending. For example, VS Code does not recommend the [Java Extension Pack](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack) if you have the [Apache NetBeans Java](https://marketplace.visualstudio.com/items?itemName=ASF.apache-netbeans-java) extension installed.
There is a new command to surround the current selection with a snippet. Select some text, invoke the **Surround With Snippet** command from the Command Palette (`kb(workbench.action.showCommands)`), and select a snippet from the dropdown.
Any applicable snippet that uses the `TM_SELECTED_TEXT` or `SELECTION` variables will be available in the **Surround With Snippet** Quick Pick dropdown. Custom user or project snippets are also included.
Inlay hints show additional information within source code, like the inferred type of a variable. For screen reader users, there is a new command to help with this feature. Select **Read Line With Inlay Hints** from the Command Palette and the editor will read the current line interleaved with its hints.
### Contextual Unicode highlighting
To report fewer false positives, ambiguous and invisible Unicode characters are no longer highlighted if the surrounding characters visually indicate a non-ASCII script. Thus, in trusted workspaces, only characters that are invisible or can be confused with ASCII characters are highlighted. The exception to this is those characters that are contained in a word of non-ASCII characters, where at least one character cannot be confused with an ASCII character.
Before you can see multiple false positives in the const string:
![Screenshot of text with many false positives and one true positive](images/1_65/unicode-context.dio-before.png)
After only the confusing character is highlighted:
A dialog now shows by default when pasting multiple lines in terminals when the shell does not support multi-line. This warning is displayed for bracketed paste mode and for PowerShell when we hand off `Ctrl+V` directly to the shell. There is a **Do not ask me again** checkbox on the dialog to easily disable the feature.
This milestone we have made changes that should help with managing diff editors. There is a new command **Git: Close All Diff Editors** in the Command Palette that can be used to close all open diff editors. There is also a new setting, `git.closeDiffOnOperation` to automatically close diff editors when changes are stashed, committed, discarded, staged, or unstaged.
When executing a git command, the contents of `stderr` are logged in the [Git output window](https://code.visualstudio.com/docs/editor/versioncontrol#_git-output-window). There is a new setting, `git.commandsToLog`, to specify a list of Git commands that will have the contents of `stdout` logged in the [Git output window](https://code.visualstudio.com/docs/editor/versioncontrol#_git-output-window).
Accessing the value of a variable may have side-effects or be expensive. VS Code's generic debugger can now show a button for the user to fetch the variable value on demand. This is available for debug extensions that support the new ["lazy" variable feature](#debugger-extension-authoring). Currently this has only been implemented by the built-in JavaScript debugger for property getters, but we expect that other debugger extensions will follow soon.
We moved the text, image, HTML and code renderers from the VS Code core to a built-in output renderer extension. With this change, VS Code 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.
VS Code now ships with TypeScript 4.6. This update brings a number of new language features, along with tooling improvements and bug fixes. You can read more about TypeScript 4.6 on the [TypeScript blog](https://devblogs.microsoft.com/typescript/announcing-typescript-4-6-rc).
Thanks to TypeScript 4.6, VS Code now reports some common syntax errors in JavaScript files. This includes parsing errors, as well as invalid redeclarations of block scoped variables:
Previously these errors were only reported when you [enable semantic checking in your JavaScript](https://code.visualstudio.com/docs/languages/javascript#_type-checking).
More of the JavaScript and TypeScript settings can now be configured as [language-specific settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). Language-specific settings are useful if you want different settings for `javascript` vs `javascriptreact`, for example.
VS Code has a new, better-maintained, Lua grammar for syntax highlighting of Lua files. The new grammar is actively maintained, fixes issues that existed in the old grammar, and supports newer Lua tokens.
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, merge conflict resolution was improved when editing GitHub repositories on [vscode.dev](https://vscode.dev) and [github.dev](https://github.dev). There are now merge conflict decorations in your editor, with options to **Accept Current Change**, **Accept Incoming Change** or **Accept Both Changes**.
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). To do so, right-click on the Source Control view and select **View as Tree**.
Workspace search and **Find All References** will now download and index a full copy of the repository by default, rather than defaulting to providing partial results as before.
There are several settings to configure this indexing feature:
*`remoteHub.indexing.verboseDownloadNotification` - Controls whether the download notification is shown as a popup (default) or in the Status bar.
*`remoteHub.indexing.maxIndexSize` - Controls the size limit of indexes to download. If this limit is exceeded, the download will be cancelled and partial results will be provided. You can leave this setting empty to never download repositories and always use partial results.
In this milestone, we switched Azure Repos support from using a specific Azure DevOps authentication provider to using the generic Microsoft authentication provider (used by Settings Sync). You will be prompted to log in again when you visit an Azure Repo but all of your saved changes will be persisted.
Previously, the [Hex Editor extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.hexeditor) always displayed its Data Inspector in the Side bar, and revealed it whenever a hex editor was revealed. However, some users found this annoying, and it led to a particularly disruptive experience with its integration of a [memory inspector for debuggers](https://code.visualstudio.com/updates/v1_64#_viewing-and-editing-binary-data). Now, the Data Inspector will appear to the right side of the inspected bytes. If the editor is too narrow, the Data Inspector will be displayed inside a hover widget instead.
Work continues on the [GitHub Pull Requests and Issues](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github) extension, which allows you to work on, create, and manage pull requests and issues. Check out the [changelog for the 0.38.0](https://github.com/microsoft/vscode-pull-request-github/blob/main/CHANGELOG.md#0380) release of the extension to see the highlights.
Shell integration in the terminal was initially introduced [in the 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 you can opt-in via the `terminal.integrated.shellIntegration.enabled` setting.
The biggest change this release 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 that use shell integration capabilities. There are three 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)
![Command decoration hover displaying Show Command Actions option and information that the command executed 3 minutes ago and returned failed exit code 127](images/1_65/command-hover.png)
Decorations can be disabled by setting `terminal.integrated.shellIntegration.decorationsEnabled` to `false`. Individual icons can be configured via the `terminal.integrated.shellIntegration.decorationIcon*` settings and these new theme keys set the colors:
* The **Run Recent Command** and **Go to Recent Directory** commands now store history between sessions. Storing history can be configured via the `terminal.integrated.shellIntegration.history` setting.
The [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) extension has preliminary support for notebook documents containing cells that can be validated with ESLint. This support is only available in the Pre-Release version of the extension.
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 image below shows how TypeScript added an inlay hint for an inferred type.
We've finalized [our proposal](https://github.com/microsoft/vscode/issues/139737) to add a standard refresh handler to the `TestController` interface. If extensions assign a method to this property, VS Code will show a "refresh" icon in the Test Explorer view.
Additionally, the `TestItem` [can now](https://github.com/microsoft/vscode/issues/130882) have a `sortText` attribute that controls the sort order for items which do not have a specific location in a file.
The Comments API now let's you add a `timestamp` to each `Comment`. This timestamp is shown in the Comments widget and in the Comments view. By default, the timestamp is shown as a relative time (for example, "2 weeks ago"), but the user setting `comments.useRelativeTime` can be used to show an exact time instead. The hover of the timestamp will always be the exact time.
### 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).
The icon contribution point allow extensions to define a new icon by ID, along with a default icon. The icon ID can then be used by the extension (or any other extensions that depend on the extension) anywhere a `ThemeIcon` can be used `new ThemeIcon("iconId")`, in Markdown strings (`$(iconId)`), and as icons in certain contribution points.
In the example above, an extension defines two new icon IDs `distro-ubuntu` and `distro-fedora`, along with default icon definitions. The icons are defined in an icon font at the given font character.
In [file icon themes](https://code.visualstudio.com/api/extension-guides/file-icon-theme), the associations in `folderNames`, `folderNamesExpanded`, `fileNames`, and `fileExtensions` can now also contain a folder name:
### Running remotely installed web extensions in VS Code for the Web with Codespaces
VS Code for the Web with Codespaces now supports running a remotely installed [web extension](https://code.visualstudio.com/api/extension-guides/web-extensions) in the web extension host. For example, if you have the [Vim](https://marketplace.visualstudio.com/items?itemName=vscodevim.vim) extension installed in a GitHub Codespace (via configuration in a `devcontainer.json` file) then Vim will be loaded in the web extension host when you open the codespace in the browser. Please read our [Extension Host](https://code.visualstudio.com/api/advanced-topics/extension-host#preferred-extension-location) documentation for more information.
**Note:** There are currently known limitations regarding loading a web worker by such an extension. See [issue](https://github.com/microsoft/vscode/issues/144235) for more details.
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 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.
Some debug adapters have addressed this problem by representing the "expensive variable" as a placeholder object that the user needs to "expand" explicitly in order to fetch the value. VS Code's built-in js-debug uses this approach for JS/TS getters:
A debug adapter can request this new presentation style for a variable by adding a `VariablePresentationHint` with a `lazy` property ([see DAP additions](#debug-adapter-protocol)). If the client does not support the `lazy` flag, the variable will be shown as before.
Another next version of the [Language Server Protocol](https://microsoft.github.io/language-server-protocol), together with the corresponding npm modules, has been published. The new version contains the following changes:
* The conversion of LSP types into VS Code types and vice versa is now fully asynchronous. This change avoids the conversion of large data streams, which can block the extension host. Note that this is a breaking API change in the libraries (more information in the [README.md](https://github.com/microsoft/vscode-languageserver-node/blob/081ba82a0e49eebec2d1b7d93751290cc1128104/README.md#L47)). It does not affect the backwards compatibility of the protocol itself.
There are several new properties added to the [Debug Adapter Protocol](https://microsoft.github.io/debug-adapter-protocol).
* The new boolean property `lazy` was added to the `VariablePresentationHint`. Clients can use the optional flag to present the variable with a UI that supports a specific gesture to fetch its value.
* The new optional string property `detail` was added to the `CompletionItem`. With this human-readable string, a client can show additional information about the item, such as type or symbol information. Note that this property is not yet supported by VS Code.
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 extensions to also select notebook types. For example, `{ 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 some extensions that are able to define token or syntax coloring and CodeLens features in their output channels, given that they are text documents (read-only) by themselves. Since all output channels share the same language ID, these customizations can be wrongly applied to other output channels. There was a feature request to create output channels with custom language IDs so that extension authors can define customizations by language. 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.
The proposed `baseUri` property on `MarkdownString` lets you specify a base URI that relative links and images in Markdown are resolved relative to. This property behaves much like the [`<base>` element in HTML](https://developer.mozilla.org/docs/Web/HTML/Element/base).
The new [Java GUI Applications](https://code.visualstudio.com/docs/java/java-gui) topic explains how to use the [Extension Pack for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack) to develop JavaFX, AWT, and Swing application in VS Code.
Extension authors for enabling extensions that run code as [web extensions](https://code.visualstudio.com/api/extension-guides/web-extensions) (the list below is between February 1 2022 and February 28 2022):
* [Simple React Snippets for Typescript](https://marketplace.visualstudio.com/items?itemName=fulin.react-snippets-typescript) ([Giovanni Fu Lin](https://marketplace.visualstudio.com/publishers/fulin))
* [zyname - this is for testing and will be deleted soon](https://marketplace.visualstudio.com/items?itemName=leodevbro.zyidentifier) ([leodevbro](https://marketplace.visualstudio.com/publishers/leodevbro))
* [@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)
* [@zwpaper (Wei Zhang)](https://github.com/zwpaper): use language ID for consistence [PR #1409](https://github.com/microsoft/language-server-protocol/pull/1409)