July 2024 (version 1.92)
Update 1.92.1: The update addresses theseissues.
Update 1.92.2: The update addresses theseissues.
Downloads: Windows:x64Arm64 | Mac:UniversalIntelsilicon | Linux:debrpmtarballArmsnap
Welcome to the July 2024 release of Visual Studio Code. There are many updates in this version that we hope you'll like, some of the key highlights include:
- Default browser - Configure which browser to use for opening links in VS Code.
- Revert PRs - Easily create a revert PR for a merged PR.
- Extension updates - More easily configure auto updating of extensions.
- Override profiles - Override an existing profile with the Profiles Editor.
- Paste files in CSS - Quickly add CSS file references with paste or drag and drop.
- Move Panel to top - Position the Panel section at the top of the workbench.
- Copilot uses GPT-4o - GitHub Copilot Chat upgraded to OpenAI's GPT-4o.
If you'd like to read these release notes online, go toUpdates oncode.visualstudio.com.Insiders: Want to try new features as soon as possible? You can download the nightlyInsiders build and try the latest updates as soon as they are available.
Accessibility
Improved debugging experience
Accessibility help dialogs
We added accessibility help dialogs for the Run and Debug view and Debug Console. You get a hint about opening the accessible help dialog when either view is focused. Configure this hint via the settingaccessibility.verbosity.debug
.
Debug Console Accessible View
Run the commandOpen Accessible View (⌥F2 (WindowsAlt+F2, LinuxShift+Alt+F2)) to inspect Debug Console content character by character, line by line.
The settingdebug.autoExpandLazyVariables
is now enabled when inScreen Reader Optimized Mode
, for ready access to variable values.
When an expression is evaluated in the Debug Console, its value is now announced to screen reader users.
Dynamic watch variable announcement
When debugging with a screen reader enabled, you now hear when watch variable values change. Configure this withaccessibility.debugWatchVariableAnnouncements
.
Configure keybindings action
In the previous milestone, we introduced an action to configure unassigned keybindings in the accessibility help dialog. We've now added theConfigure Assigned Keybindings command (⌥A (Windows, LinuxAlt+A)) to complement this action.
Workbench
Move Panel to top
You can now move thePanel to the top of the workbench, above the editor area. By default, the Panel is placed at the bottom and includes views, such as the terminal, Output panel, and Debug Console. This enhancement complements the existing options of positioning the panel to the left, right, and bottom.
Profiles Editor preview
In this milestone, we continued to improve the Profiles Editor by making it more user-friendly and by having a look and feel that's consistent with the Settings Editor.
The Profiles Editor is available as an experimental feature behind theworkbench.experimental.enableNewProfilesUI
setting. Once enabled, you can access the Profiles Editor from the Settings gear icon in the bottom left corner of the window.
Override existing profile
You can now override an existing profile, including the default profile, by creating a new profile with the same name.
Improved extension update experience
We made several improvements to the extension update experience to give you more control over updating extensions and make it easier to manage auto updating of extensions.
Auto updating all extensions
We have changed the global extension auto update action in the Extension view title area toEnable Auto Update for All Extensions andDisable Auto Update for All Extensions actions. With these actions, you can enable or disable auto update for all extensions at once.
Auto updating individual extensions
We improved the individual extension auto update experience by always showing the action to enable or disable auto update for the extension. This makes it easier to manage auto updating of extensions.
Disable auto update for extensions installed via VSIX
When you install an extension via VSIX, auto update for that extension is disabled by default. This enables you to work with the version of the extension you have installed, without it being updated automatically.
More control over updating extensions
User consent is now required when you update an installed extension version that has no executable code to a version that has executable code. This gives you control to review such updates before they are applied. The following video demonstrates the experience when updating an extension with no code to a version with code.
Selecting theReview button opens the extension change log or the extension repository in the browser. You can review the changes and then decide if you want to update the extension.
Settings Editor jump issue fixed
The Settings Editor used to jump after modifying a setting and changed focus to another one. And this jump was worse the more one scrolled before modifying a setting.We changed the way the Settings Editor re-renders settings after modification, and the Settings Editor no longer jumps after modifying a setting.
Theme:Light Pink (preview onvscode.dev)
URL handling for settings
VS Code can now handle "settings" URLs of the formatvscode://settings/setting.name
(vscode-insiders://settings/setting.name
for Insiders, andcode-oss
for the OSS version) and will open the Settings Editor to the specified setting. If no setting is given, then the Settings Editor is still opened. When an anchor tag with a settings URL is used in the release notes, and the release notes are open in VS Code, then we do special handling and rendering, as described in the previouscodesetting
feature.
Configure the browser to open links
A new settingworkbench.externalBrowser
enables you to configure which browser to use for opening links. By default, the operating system standard browser is used. You can configure this setting on a per-workspace level and is also Settings Sync enabled.
Specify the full path to the browser executable as the settings value. Alternatively, to ensure correct functioning across devices, you can also use browser aliases, such asedge
,chrome
, orfirefox
.
Disable auto file open on drag and drop
Previously, dragging and dropping a file into the explorer would also automatically open it in the editor. In some cases, this might be undesirable. A new settingexplorer.autoOpenDroppedFile
enables you to toggle this behavior. By default, the file continues to be opened when dragged and dropped, but when set tofalse
, this behavior is disabled.
Editor
Lightbulb control improvements
At times, the lightbulb control might block code in the editor. To address this, we introduced an improved heuristic for the lightbulb control, which displays the lightbulb in the gutter when there is no space, instead of blocking code in the editor.
You can toggle the lightbulb control in the editor with theeditor.lightbulb.enabled
setting.
Diff Editor
More compact diffs in Chat
We iterated on the diff editor layout in the Chat view/inline Chat and made it more compact.
Before:
After:
Source Control
Incoming/Outgoing changes graph
This milestone, we are enabling the visualization of the incoming and outgoing changes using a graph. The graph contains the current branch, the current branch's upstream branch, and an optional base branch. The root of the graph is the common ancestor of these branches.
We have made several improvements to the history item hover:
- Enabled multi-select to see changes across multiple history items that belong to the same branch.
- Added options to the
...
menu to filter history items from the remote/base branches. - Added actions to fetch, pull, and push history items.
Give it a try and let us know what you think!
You can disable the graph visualization of incoming/outgoing changes by toggling thescm.showHistoryGraph
setting.
Terminal shell integration
The Source Control view is refreshed after each source control operation as well as file-system events scoped to specific files/folders. When a git command is executed in the integrated terminal, there might be a delay between the completion of the command and refresh of the Source Control view. To reduce this delay, starting this milestone, we are using the terminal shell integration API to detect the successful completion of various git commands (for example,add
,checkout
,commit
,fetch
,pull
,push
, and more) executed in the integrated terminal and refresh the Source Control view.
Notebooks
Multi-cell commenting
The Notebook Editor now supports toggling comments on one or multiple cells at a time. Do this by selecting one or multiple cell containers, followed by the keyboard shortcut⌘/ (Windows, LinuxCtrl+/).
Terminal
New scroll bar
The scroll bar in the terminal now looks just like the scroll bar in the editor:
The overview ruler is the same as before, with successful commands on left, find result in middle, failed commands on right. But now it perfectly aligns with the scroll bar slider.
Debug
Show variable types while debugging
VS Code now shows the data types of variables while debugging when the settingdebug.showVariableTypes
is turned on:
Languages
Update Markdown links on paste
VS Code can now help you move sections of text between Markdown documents by updating links in any copy and pasted text. With this feature, VS Code fixes all relative path links, reference links, and all images/videos with relative paths, so that they work in the new document.
This feature kicks in whenever you copy and paste text with links between two Markdown files. If there are links that can be updated, you will see the paste widget after pasting. SelectPaste and Update Pasted Links, and VS Code fixes up the links for you.
You can disable this feature entirely by settingmarkdown.updateLinksOnPaste
tofalse
.
Paste and drop files in CSS
Do you need to use an image in your CSS? Now you can quickly insert aurl()
reference just by dragging and dropping, or copy and pasting the image file into the CSS editor:
Remote Development
TheRemote Development extensions, enable you to use aDev Container, remote machine via SSH orRemote Tunnels, or theWindows Subsystem for Linux (WSL) as a full-featured development environment.
Highlights include:
- GPG keyboxd support
- Local port range configuration
You can learn more about these features in theRemote Development release notes.
Contributions to extensions
GitHub Copilot
GPT-4o Upgrade for Copilot Chat
We've upgraded the Copilot Chat view from GPT-4-Turbo to GPT-4o, OpenAI's most powerful model to date. Our experiments show that GPT-4o significantly enhances Copilot’s coding capabilities, providing faster, more accurate, and higher-quality code and explanations directly in your editor. This was evident during the rollout, as developers increasingly used the Copilot Chat view and incorporated more of its code suggestions.
We are constantly experimenting to identify the best models for different tasks, balancing performance and capability while being committed to quality, safety, and security. For more details on the adoption of GPT-4o in GitHub Copilot, check outGitHub's changelog.
Public code matching in chat
You can allow GitHub Copilot to return code that could match publicly available code on GitHub.com. When this functionality is enabled for yourorganization subscription orpersonal subscription, Copilot code completions already provide you with details about the matches that were detected. We are working on enabling showing you these matches for public code in Copilot Chat as well.
We are rolling this out gradually for Copilot Chat users. Once it's enabled for your machine, you might see a message at the end of the response with aView matches link. If you select the link, an editor opens that shows you the details of the matching code references with more details.
Attachments in chat requests
Copilot Chat supports adding explicit attachments to your chat request via theAttach Context (⌘/ (Windows, LinuxCtrl+/)) command. These are now rendered as part of submitted chat requests in the chat history. Selecting a file attachment opens the corresponding file and range in the editor.
Additionally, we now make it clearer when large explicit attachments that overflow the context window were partially or completely omitted from the request.
Improvements to/new
We updated the/new
slash command to support quick file generation. You can provide additional context to Copilot during file or project creation by using chat variables, such as#selection
. Additionally,/new
was enhanced to enable saving the generated files and folders in an existing workspace.
Access VS Code commands from Chat
A new slash command on the@vscode
chat participant,/runCommand
, enables you to search for and execute a core VS Code command. For example, to toggle the Developer Tools:
You can enable this new slash command withgithub.copilot.chat.runCommand.enabled
.
Python
Improved Python discovery using python-environment-tools
In the last release, we announced thePython environment tools, which redesigned the Python discovery infrastructure focused on performance. This approach reduces the need for executing python binaries to probe for information and thus improving performance.
Starting in this release, we are rolling out this enhancement as part of an experiment. If you are interested in trying this out, you can set"python.locator"
to"native"
in your Usersettings.json
and reload your VS Code window. Visit thepython-environment-tools repo to learn more about this feature, ongoing work, and provide feedback.
Display execution status for native REPL
The experimental native REPL ("python.REPL.sendToNativeREPL": true
) now displays success/failure UI, similar to that in a Jupyter cell, depending on the execution outcome. Furthermore, we made improvements so that we no longer display an empty line on cells that generate no output.
Inline variable values in source code
ThePython Debugger extension introduced an Inline Values feature to enhance your Python debugging experience. With Inline Values, you can view the value of variables inline in the editor, next to the corresponding line of code during a debugging session. This helps you to quickly understand the state of your program, without having to hover over variables or checking the Variables section in the Run and Debug view.
To enable this feature, set the configuration valuedebugpy.showPythonInlineValues
totrue
in your User settings.
Note: This feature is currently in exploration state and improvements are still being made. Please provide any feedback you may have in thevscode-python-debugger repo!
Improved Debug Welcome view
The Debug Welcome view now includes a button for quick access to automatic Python configurations when a Python file is open in the editor.
GitHub Pull Requests and Issues
There has been more progress on theGitHub Pull Requests extension, which enables you to work on, create, and manage pull requests and issues. New features include:
- Revert pull requests by using theRevert button in the pull request description of merged PRs
- PRs whose branch has been deleted can now be viewed in the Pull Requests view.
- TheOpen Pull Request on GitHub.com action shows even when you have multiple PRs checked out.
Review thechangelog for the 0.94.0 release of the extension to learn about the other highlights.
Extension authoring
Basic authentication for network proxies
Extensions that use thehttps
Node.js module can now use network proxies that require basic authentication.
Preview Features
True inline diffs
This iteration, we introduced thediffEditor.experimental.useTrueInlineView
setting (off by default). When you enable this setting and the inline view is used, single-line changes are rendered inline:
This is how the inline view looks without this experimental flag turned on:
This feature is experimental and future changes are to be expected.
VS Code-native IntelliSense for PowerShell
The VS Code-native PowerShell IntelliSense experimental feature has seen some significant improvements this release. To enable this feature on Windows or macOS:
"terminal.integrated.suggest.enabled":true
In addition to the feature being much more reliable, many other improvements were made as seen below.
Completions are not truncated
Completions now showexactly what is typed, instead of a truncated version. For example, when searching for directory names, the.\
is now included and is highlighted correctly.
Before:
After:
Optimized completions for navigating directories
Directory names now include a trailing\
or/
, which, when completed, refresh completions for the new directory.
Configure Enter behavior
The newterminal.integrated.suggest.runOnEnter
setting enables you to configure theEnter
behavior to run the command if certain conditions are met. The following values are available:
"always"
: Always run onEnter
."exactMatch"
: Run onEnter
when the suggestion is typed in its entirety."exactMatchIgnoreExtension"
(default): Run onEnter
when the suggestion is typed in its entirety or when a file is typed without its extension included."never"
(old behavior): Never run onEnter
.
This change is especially important to not break existing muscle memory as often this will result in the same set of keystrokes as without the feature enabled. An example where this is useful is runningcd ..
. Before this change, you would need to typecd ..<enter><enter>
but now it's a singleEnter
, thanks to this new setting.
Improved file completions
File completions are now sorted by file name length ascending, file name alphabetically, and then by file extension alphabetically. File completions run as commands (not arguments) now also get a boost, depending on their file extension and current operating system. For example,.ps1
,.bat
, and.cmd
files are boosted when running on Windows, which makes them show up higher in the list.
Not only do these changes improve the relevance of the top item, they also help muscle memory by aligning the behavior closer to native PowerShell tab completion. For example, a command commonly run in the VS Code codebase on Windows is./scripts/code.bat
. With these changes,./sc<tab>/c<enter>
completes and runs./scripts/code.bat
.
Global completion caching
Global completions for commands are cached across sessions, which improves shell startup performance significantly. This also fixes an issue where completions would not work correctly for reconnected terminals. Currently, these can be cleared and refreshed by running theTerminal: Clear Suggest Cache
command. Measured on an Intel i7-12700KF, this reduced the time taken to activate shell integration from ~600ms to ~50ms.
Built-in terminal completions in PowerShell
We now ship built-in completions forgit
. These are based on those from theposh-git
project but with some general and VS Code-specific improvements. Here's an example of the completions in action:
Some of the other improvements are:
Aliases show their expanded state on the right:
Git-specific icons for branches, tags, stashes and remotes:
Subcommand descriptions on the right:
We also ship built-in completions forcode
andcode-insiders
, though these are very basic and will be improved in future releases.
These completions may conflict with those from other PowerShell modules. You can disable them with the following setting:
"terminal.integrated.suggest.builtinCompletions": { "pwshCode":false, "pwshGit":false}
TypeScript 5.6 support
This release includes support for the upcoming TypeScript 5.6 release. Check out theTypeScript 5.6 iteration plan for details on what's in store for this release.
To start using preview builds of TypeScript 5.6, install theTypeScript Nightly extension. Share your feedback and let us know if you run into any bugs with TypeScript 5.6.
Proposed APIs
QuickInputButtonLocation
to show buttons to the right of the input
This milestone, we introduced a proposed API onQuickInputButton
that enables extensions to choose where they want a button to be rendered. The options are:
Title
: This renders the button in the title bar of the quick pick. This is the default behavior and maintains the existing behavior of buttons.Inline
: This renders the button to the right of the input box. This is useful if you aren't planning on using the title bar for anything but want to show buttons.
This functionality was adopted in the Git extension'sCreate branch input box, which you can enable withgit.branchRandomName.dictionary
.
Check outvscode#221397 for more information and updates.
Testing Enhancements
Associate code to tests
We're working on an API that enables an extension to associate code to tests, and vice versa. This lets users jump between both, and enables actions, such asRun Tests at Cursor, to also work in implementation code. We anticipate building more experiences as the API develops.
Check outvscode#126932 for more information and updates.
Call stacks in test failures
We're working on an API that enables associating a rich call stack with unit test failures. This enables users to see, at a glance, what code led up to their failure.
Check outvscode#214488 for more information and updates.
Attributable test coverage
We're working on an API for attributing test coverage on a per-test basis. This enables users to see which tests ran which code, filtering both the coverage shown in the editor, and that in theTest Coverage view.
Check outvscode#212196 for more information and updates.
Search APIs
In the last few months, we have been working on finalizing three proposed Search APIs:
FindTextInFiles
: find text in workspace files using VS Code's text search.FileSearchProvider
: provide file search results for custom file schemes that cannot be searched properly with VS Code's existing search functionality. For example, extension-provided results could show up when searching in Quick Open from within a virtual file system.TextSearchProvider
: likeFileSearchProvider
, but for text search results. For example, extension-provided results could show up when searching in the Search View from within a virtual file system.
In addition, we are revamping theworkspace.findFiles
API, which uses VS Code's workspace file search to find files. The new version should allow for more options, and should handle exclusion options more clearly. The existing function signature should still be functional when we introduce the revamped version.
This table illustrates how the different APIs are related:
Using API to find | Using API to provide results | |
---|---|---|
For Files | FindFiles | FileSearchProvider |
For Text in Files | FindTextInFiles | TextSearchProvider |
If you're interested, visit the links above to provide feedback!
Website
We refreshed the design of theVS Code website and added support for light and dark themes.
The website's new design defaults to your system's theme (light or dark mode), and you can also toggle it manually by using the sun/moon icon in the top right.
We look forward to getting your feedback! File any feature requests or bugs in thevscode-docs repo.
Engineering
Move Markdown language server to separate repository
We moved the language server that powers VS Code's built-in Markdown IntelliSense intoits own repository. Previously, this project was published from a subfolder of the main VS Code repository. This change makes it easier to contribute to the project.
The project is still published under the same name on npm:vscode-markdown-languageserver
.
Progress on using ESM for VS Code
In this milestone, we picked up the work again to adopt ESM for VS Code core. Our goal in the future is to use ECMAScript Modules (ESM) loading and drop AMD entirely. This is a multi-milestone effort that will modernize overall code loading and bundling.
xterm.js depending upon VS Code
The new scroll bar in the terminal required a significant amount of behind-the-scenes work. The terminal in VS Code is built on thexterm.js OSS project, and in its upcoming release will also ship a small portion of VS Code's codebase, specifically part of thebase/
folder.
Electron 30 update
In this milestone, we are promoting the Electron 30 update to users on our stable release. This update comes with Chromium 124.0.6367.243 and Node.js 20.14.0. We want to thank everyone who self-hosted on Insiders builds and provided early feedback.
Notice of breaking API change when spawning.bat
or.cmd
files:
The Node version with this Electron update contains abreaking change, in response to a CVE, which may affect you if you execute.bat
or.cmd
files on Windows. You can follow theguidelines set by Node.js when spawning these files using theshell
option.
We have proactively notified extensions who may be affected based on a simple source code scan, but it's possible we may have missed yours. If you are affected, you will encounter an EINVAL exception when spawning.bat
or.cmd
files on Windows. Please refer to theNode.js documentation for guidance on how to handle these.
We recommend extension authors to always test their extension with ourInsiders release to catch these changes in advance.
Notable fixes
- 211199 Ctrl+c in terminal does not scroll to the very bottom when smooth scroll is enabled
Thank you
Last but certainly not least, a bigThank You to the contributors of VS Code.
Issue tracking
Contributions to our issue tracking:
- @gjsjohnmurray (John Murray)
- @IllusionMH (Andrii Dieiev)
- @manav014 (Manav Agarwal)
- @RedCMD (RedCMD)
- @starball5 (starball)
- @ArturoDent (ArturoDent)
Pull requests
Contributions tovscode
:
- @a-stewart (Anthony Stewart): Ensure titlebar is at least as tall as the bounding rect of WCOPR #211440
- @aaronchucarroll: Adds support for Github-style fenced math blocks in markdown editor and previewPR #213750
- @c-claeys (Cristopher Claeys): Fix exponential runtime in service instantiationPR #218393
- @cobey (Cody Beyer): adding js/py lib for taggingPR #219213
- @etcadinfinitum (Lee Zee): shellscript: Register .eclass extension as shell-likePR #219631
- @gabritto (Gabriela Araujo Britto): [typescript-language-features] Add diagnostics performance telemetryPR #220127
- @gjsjohnmurray (John Murray)
- Hide Local History commands when
"workbench.localHistory.enabled": false
PR #212936 - Hide Panel Maximize when at top but not center-alignedPR #221549
- Implement /spam issue triaging commandPR #221940
- Hide Local History commands when
- @hotpxl (Yutian Li): Use the builtin local command in shell integration scriptsPR #221772
- @jeanp413 (Jean Pierre): Fix port label not applied when forwarding port with vscode.env.asExternalUriPR #220029
- @kapodamy (kapodamy): fix: place regex in variables on
shellIntegration-bash.sh
scriptPR #221998 - @Krzysztof-Cieslak (Krzysztof Cieślak)
- Inline edit - implement side by side rendering of suggestionsPR #219444
- Inline edit - UI fixes for side-by-side renderingPR #221352
- Inline edits - UI fixes for word wrap and scrollingPR #223076
- @mering (Marcel): Setup rust in DevcontainerPR #221301
- @mxts (Teik Seong): add option to dock terminal at topPR #207721
- @Parasaran-Python (Parasaran): Fixes #218254PR #219312
- @rehmsen (Ole)
- Support comments on notebook markup cellsPR #219657
- Show the first comment on a notebook cell, for any owner.PR #219926
- Update notebook comment view in response to mutationsPR #219927
- @scop (Ville Skyttä): Fix terminal
__vsc_first_prompt
errors with bash innounset
modePR #221980 - @SimonSiefke (Simon Siefke)
- feature: add setting whether or not to auto open a file after dropping it into the explorerPR #213498
- reduce impact of memory leaks related to editorPR #219297
- fix: memory leak in extension tabsPR #219726
- feature: allow configuring default browserPR #219885
- fix: memory leak in SelectBoxListPR #221507
- fix: memory leak in settings widgetPR #221518
- fix: memory leak in StickyScrollFocusPR #221622
- @syi0808 (Sung Ye In): fix(terminal): remove fixedRows line in add scrollbarPR #221976
- @tisilent (xiejialong)
- Add Icons.PR #219816
- Window title use execution path.PR #221258
- Add revealTerminal and focusInstance in terminalServicePR #221684
- @wdhongtw (Weida Hong): Reset shell-type context when the type is unknownPR #221277
Contributions tovscode-black-formatter
:
- @shayhurley (Shay Hurley): Update README.mdPR #524
Contributions tovscode-hexeditor
:
- @tomilho (Tomás Silva): fix: removes duplicate webview/contextPR #527
Contributions tovscode-languageserver-node
:
- @benmcmorran (Ben McMorran): Add supportThemeIcons in MarkdownStringPR #1504
Contributions tovscode-markdown-tm-grammar
:
- @RedCMD (RedCMD): Fix
FrontMatter
integrationPR #162
Contributions tovscode-pull-request-github
:
- @Santhoshmani1 (Santhosh Mani ): Feature : Add open pr on github from pr description nodePR #6020
Contributions tovscode-textmate
:
- @aleclarson (Alec Larson): feat: add child combinator ">" (and fix a specificity bug)PR #233
Contributions todebug-adapter-protocol
:
- @dawedawe (dawe): Update overview.md to link to renamed packagePR #489
Contributions tolanguage-server-protocol
:
- @asukaminato0721 (Asuka Minato)
- @flaribbit (梦飞翔): Update servers.mdPR #1968
- @PrasangAPrajapati (Prasang A Prajapati): Add implementor for JCL LSP ServerPR #1955
- @StachuDotNet (Stachu Korick): Clarify deltaLine and deltaStart of SemanticTokens payloadPR #1966
Contributions tomonaco-editor
:
- @ScottCarda-MS (Scott Carda): Update Q# KeywordsPR #4586
Contributions tonode-request-light
:
- @remcohaszing (Remco Haszing): Add package exportsPR #25
Contributions topython-environment-tools
:
- @cclauss (Christian Clauss): interpreterInfo.py: Create the object in a single operationPR #93
- @hamirmahal (Hamir Mahal): style: simplify string formattingPR #88