From 51c47dd2d392b97e0d7cc5772395268be7cc483e Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 5 Sep 2025 11:47:19 -0700 Subject: [PATCH 01/50] Fix spelling mistakes across Markdown docs (#331) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: rzhao271 <7199958+rzhao271@users.noreply.github.com> --- December-Test-Plan.md | 2 +- Feature-Areas.md | 2 +- Keybinding-Issues.md | 2 +- Known-issues.md | 2 +- Lists-And-Trees.md | 4 ++-- Notebook-documentation.md | 8 ++++---- Roadmap-2020.md | 2 +- Search-Issues.md | 2 +- VS-Code-Speech.md | 2 +- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/December-Test-Plan.md b/December-Test-Plan.md index de76cf0a89..9cf1311de3 100644 --- a/December-Test-Plan.md +++ b/December-Test-Plan.md @@ -11,7 +11,7 @@ Verify that long text now nicely wraps across multiple lines in the debug repl b - [x] linux @aeschli We have changed breakpoints states and now show it differently in the UI. Verify: -* new UI properly and intuitivly reflects if breakpoints are enabled, disabled, verified, or deactivated. +* new UI properly and intuitively reflects if breakpoints are enabled, disabled, verified, or deactivated. * breakpoints get hit / not hit depending on their enablement state ### Debug - extension debugging diff --git a/Feature-Areas.md b/Feature-Areas.md index 3413465f5a..b2cdf81e5a 100644 --- a/Feature-Areas.md +++ b/Feature-Areas.md @@ -32,6 +32,6 @@ In addition there can be feature sub areas which are colored light blue. ||| |api|vscode extension API|| |install-update|install and update of vscode|| -|accessiblity|accessibility support|| +|accessibility|accessibility support|| |i18n|internationalization - Code, translation error|| |L10N|New UI language request in loc platform for language pack extension|| \ No newline at end of file diff --git a/Keybinding-Issues.md b/Keybinding-Issues.md index d2edb91a20..c65540363f 100644 --- a/Keybinding-Issues.md +++ b/Keybinding-Issues.md @@ -43,7 +43,7 @@ The first keydown event is for the `MetaLeft` key (`cmd`) and cannot be dispatch * Are you connecting to the Linux machine via some form of virtualization or remote desktop software? * **symptoms**: e.g. pressing AltGr acts as `Backspace`, pressing C acts as `ArrowLeft`, etc. * **solution**: use `"keyboard.dispatch": "keyCode"` in your settings and restart VS Code. - * **explanation**: VS Code on Linux dispatches keybindings using scan codes to accomodate various keyboard layouts. This works well when sitting physically at the machine and the OS is the one creating keyboard events, but some virtualization / remote desktop software creates keyboard events with incorrect scan codes. + * **explanation**: VS Code on Linux dispatches keybindings using scan codes to accommodate various keyboard layouts. This works well when sitting physically at the machine and the OS is the one creating keyboard events, but some virtualization / remote desktop software creates keyboard events with incorrect scan codes. * Are you switching keyboard layouts while VS Code is running? * **symptoms**: VS Code keybindings reflect the keyboard layout that was active when VS Code was launched. diff --git a/Known-issues.md b/Known-issues.md index e630e1cf9b..4d0253e190 100644 --- a/Known-issues.md +++ b/Known-issues.md @@ -19,5 +19,5 @@ reported by [**alexey-kozlenkov**](https://github.com/Microsoft/vscode/issues/12 reported by [**rcdmk**](https://github.com/Microsoft/vscode/issues/12637#issuecomment-277464550) > I have another trick that does work as long as I keep focus on the VS code window: - > 1. Tap with tree fingers, so Search/Cortana pannel shows up to the left of screen. + > 1. Tap with three fingers, so Search/Cortana panel shows up to the left of screen. > 2. Swipe with two fingers over the VS code window and notice that the document does scroll \ No newline at end of file diff --git a/Lists-And-Trees.md b/Lists-And-Trees.md index 4f8c34d691..ea2fc90d59 100644 --- a/Lists-And-Trees.md +++ b/Lists-And-Trees.md @@ -26,7 +26,7 @@ Apart from being a virtual rendering engine, the `List` provides quite a lot of ### Index Tree -A tree UI widget should be able to represent tree-like data, eg. a file explorer. A rendered tree can always be rendered as a list; it is each row's indentation level and twistie indicators which give the user the perception of tree structure. By leveraging the virtual rendering functionalites of the list we can use composition to create a tree widget. +A tree UI widget should be able to represent tree-like data, eg. a file explorer. A rendered tree can always be rendered as a list; it is each row's indentation level and twistie indicators which give the user the perception of tree structure. By leveraging the virtual rendering functionalities of the list we can use composition to create a tree widget. There is the question of API: how can we keep a tree-like structure API relatively simple, yet allow for complex operations, such as removing and inserting whole subtrees? If we take the same `splice` analogy as the list's (pick a location, remove some elements and add other elements), it's possible to come up with a tree `splice` call, in which the location is multi-dimensional (the first element of the `start` array represents the index in the root's children array; the `n`-th element of the `start` array represents the index in the `n - 1`-th children array) and the elements to insert are entire subtrees. @@ -95,4 +95,4 @@ Here are the results from profiling all these cases on the same machine along wi | **Filter to One** | 970 ms | 78 ms | 12.4x | | **Collapse All** | 30.000 ms 😱 | 625 ms | **48x** 😎 | -While the speedup results are impressive, some of the absolute values are still unnaceptable: 625ms for collapsing all tree nodes will eat up a large chunk of JavaScript time, drastically reducing our frame rate, even if collapsing all nodes is a punctual operation. The good news is that there is still lots of room for improvement, given that we now have a solid algorithm and data structure foundation on which can iterate much easier. Stay tuned! \ No newline at end of file +While the speedup results are impressive, some of the absolute values are still unacceptable: 625ms for collapsing all tree nodes will eat up a large chunk of JavaScript time, drastically reducing our frame rate, even if collapsing all nodes is a punctual operation. The good news is that there is still lots of room for improvement, given that we now have a solid algorithm and data structure foundation on which can iterate much easier. Stay tuned! \ No newline at end of file diff --git a/Notebook-documentation.md b/Notebook-documentation.md index 2559f8ece5..a48d8d94a1 100644 --- a/Notebook-documentation.md +++ b/Notebook-documentation.md @@ -29,7 +29,7 @@ Since we are using the `TextModelResolverService` for cell's text model resoluti ## Viewport rendering -The viewport rendering of notebook list view is a "guess and validate" process. It will calcuate how many cells/rows it can render within the viewport first, have them all rendered, and then ask for their real dimensions, and based on the cell/row dimensions it will decide if it needs to render more cells (if there is still some room in the viewport) or remove a few. +The viewport rendering of notebook list view is a "guess and validate" process. It will calculate how many cells/rows it can render within the viewport first, have them all rendered, and then ask for their real dimensions, and based on the cell/row dimensions it will decide if it needs to render more cells (if there is still some room in the viewport) or remove a few. For short, the process is more or less @@ -103,7 +103,7 @@ Since most elements' positions are absolute and there is latency between the two * Fewer layout messages between the main and iframe * Less flickering and forced reflow on scrolling -While we continue optimizing the layout code, we need to make sure that the new optimization won't lead to regression in above three aspects. Here is a list of existing optimziations we already have and we want to make sure they still perform well when updating layout code. +While we continue optimizing the layout code, we need to make sure that the new optimization won't lead to regression in above three aspects. Here is a list of existing optimizations we already have and we want to make sure they still perform well when updating layout code. ## Avoid flickering on resize of cells above current viewport @@ -164,7 +164,7 @@ will genrate text output `2`. The re-rendering of the output is fast and we want 2. In 200ms, we will reset the output height to `0`, unless there is a new output rendered 2. Received new output 1. Re-render the new output - 2. Calcuate the height of the new output, update layout + 2. Calculate the height of the new output, update layout If the new output is rendered within 200ms, users won't see the UI movement. @@ -192,7 +192,7 @@ We also warm up all rendered markdown in the document, from top to bottom, when * require our own serialization/deserialization * Performance * `window.find` can be slow - * We currently travese the DOM tree to figure out which cell/output contain the find match belongs to, it's really costly. One idea is checking the absolute position of the find match and compare it with output container positions. + * We currently traverse the DOM tree to figure out which cell/output contain the find match belongs to, it's really costly. One idea is checking the absolute position of the find match and compare it with output container positions. * Search only rendered outputs * MutationObserver for output change * Change active selection to the beginning of the new output and then request `window.find` diff --git a/Roadmap-2020.md b/Roadmap-2020.md index 35214302b6..2c75a449a2 100644 --- a/Roadmap-2020.md +++ b/Roadmap-2020.md @@ -217,7 +217,7 @@ VS Code is made possible through a wide range of technologies. Below are example ## Explorations -- [ ] Explore support to synchronize more state when opening the same folder in different VS Code installs such as untitled files, open files, focussed editor. +- [ ] Explore support to synchronize more state when opening the same folder in different VS Code installs such as untitled files, open files, focused editor. - [ ] Explore how to better provide support for low-end devices. - [ ] :runner: Explore how to support new user in learning VS Code (interactive exploration mode, videos) - [ ] Explore how to make it easier to show, tell, and share your VS Code customizations. diff --git a/Search-Issues.md b/Search-Issues.md index 55b952e890..1fc35d01f6 100644 --- a/Search-Issues.md +++ b/Search-Issues.md @@ -8,7 +8,7 @@ Besides `.gitignore`, we also look at the `.ignore`, `.rgignore`, and `.git/info > **Tip**: You can set `"search.useIgnoreFiles": false` to disable using the `.gitignore` file for search -An easy way to validate whether exclude setttings or ignore files are affecting your search is to turn off the "Use Exclude Settings and Ignore Files" button in the search viewlet. This is the gear button in the lower right corner: +An easy way to validate whether exclude settings or ignore files are affecting your search is to turn off the "Use Exclude Settings and Ignore Files" button in the search viewlet. This is the gear button in the lower right corner: ![Use Exclude Settings and Ignore Files button](https://user-images.githubusercontent.com/8586769/132767680-dd9048dc-beef-4849-a5cd-2cfadcd01e19.png) diff --git a/VS-Code-Speech.md b/VS-Code-Speech.md index c268d842e7..7076d59340 100644 --- a/VS-Code-Speech.md +++ b/VS-Code-Speech.md @@ -14,7 +14,7 @@ Install the [GitHub Copilot Chat](https://marketplace.visualstudio.com/items?ite ## Keybindings -For a quick experience of starting to listen from the microphone and submitting when done you can assign the following keybinding squence: +For a quick experience of starting to listen from the microphone and submitting when done you can assign the following keybinding sequence: ```json { From 2c6eb935bd99509dcb09126f4fb7b1d97e20674b Mon Sep 17 00:00:00 2001 From: Robo Date: Sat, 13 Sep 2025 08:03:56 +0900 Subject: [PATCH 02/50] Updated Runtime debugging (markdown) --- Runtime-debugging.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Runtime-debugging.md b/Runtime-debugging.md index 37cb5d1a20..f21e676d47 100644 --- a/Runtime-debugging.md +++ b/Runtime-debugging.md @@ -1,6 +1,7 @@ ## Table of Contents - [CPU profiling unresponsive window via tracing](#tracing-cpu-profiler) - [Using samply on macOS](#samply-sampling-profiler) +- [Using samply on windows](#samply-sampling-profiler) - [Using etw on windows](#etw-windows-profiler) @@ -32,6 +33,17 @@ If you have an unsigned build of VSCode, then samply can be used to capture both You can inspect the profile with `samply.exe load --breakpad-symbol-dir profile.json.gz` +## Using samply on windows + +If you want to capture only application related cpu profile with both JIT and native traces + +* Download the latest release of https://github.com/mstange/samply/releases +* Start from the command line with following `samply.exe record -s -o profile.json.gz --browsers -- /Microsoft\ VS\ Code/Code.exe --js-flags="--enable-etw-stack-walking --interpreted-frames-native-stack"` +* Perform the steps for unresponsiveness or slow startups etc +* Exit the application and the profile will be saved to `profile.json.gz` + +You can inspect the profile with `samply.exe load --breakpad-symbol-dir profile.json.gz` + ## Using etw on windows @@ -40,8 +52,9 @@ You can inspect the profile with `samply.exe load --breakpad-symbol-dir p * Select the following options under `Resource Analysis` 1) CPU Usage 2) File I/O activity - 3) Pool usage - 4) VirtualAlloc usage + 3) Registry I/O activity + 4) Pool usage + 5) VirtualAlloc usage * Set `Performance Scenario` to `General`, `Detail level` to `verbose` and `Logging mode` to `file` * Start the recorder * Start the VSCode application from the terminal with the following additional flags `--js-flags="--enable-etw-stack-walking --interpreted-frames-native-stack"` From 2ae886878e5aaccf6d7c948ee53d2d26fb75358d Mon Sep 17 00:00:00 2001 From: Alex Ross <38270282+alexr00@users.noreply.github.com> Date: Tue, 16 Sep 2025 23:54:33 +0200 Subject: [PATCH 03/50] Updated How to Contribute (markdown) --- How-to-Contribute.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/How-to-Contribute.md b/How-to-Contribute.md index 3c6d0ad0dd..00f78a7684 100644 --- a/How-to-Contribute.md +++ b/How-to-Contribute.md @@ -13,7 +13,7 @@ In order to download necessary tools, clone the repository, and install dependen You'll need the following tools: - [Git](https://git-scm.com) -- [Node.JS](https://nodejs.org/en/download/prebuilt-binaries), **x64** or **ARM64**, version `>=20.x` (also see [`.nvmrc`](https://github.com/microsoft/vscode/blob/main/.nvmrc), which may provide a more precise version to install) +- [Node.JS](https://nodejs.org/en/download/prebuilt-binaries), **x64** or **ARM64**, version `>=20.x` and `<24` (also see [`.nvmrc`](https://github.com/microsoft/vscode/blob/main/.nvmrc), which may provide a more precise version to install) - If using `nvm`, consider updating your default node installation with `nvm alias default ` - Windows: do not pick the option to install Windows Build Tools, see the step below for instructions - Windows: If using [`nvm-windows`](https://github.com/coreybutler/nvm-windows) on **ARM64**, you must postfix each command with `arm64`. Eg: `nvm install 22 arm64` From 7e60a277ce3a5c6cd1cbdccd63ebfb2e820e3ff7 Mon Sep 17 00:00:00 2001 From: Anthony Kim <62267334+anthonykim1@users.noreply.github.com> Date: Wed, 17 Sep 2025 13:20:29 -0700 Subject: [PATCH 04/50] Destroyed How to Contribute (markdown) --- How-to-Contribute.md | 306 ------------------------------------------- 1 file changed, 306 deletions(-) delete mode 100644 How-to-Contribute.md diff --git a/How-to-Contribute.md b/How-to-Contribute.md deleted file mode 100644 index 00f78a7684..0000000000 --- a/How-to-Contribute.md +++ /dev/null @@ -1,306 +0,0 @@ -# Contributing to Visual Studio Code -There are many ways to contribute to the Visual Studio Code project: logging bugs, submitting pull requests, reporting issues, and creating suggestions. - -After cloning and building the repo, check out the [issues list](https://github.com/Microsoft/vscode/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue). Issues labeled [`help wanted`](https://github.com/Microsoft/vscode/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) are good issues to submit a PR for. Issues labeled [`good first issue`](https://github.com/Microsoft/vscode/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) are great candidates to pick up if you are in the code for the first time. If you are contributing significant changes, or if the issue is already assigned to a specific month milestone, please discuss with the assignee of the issue first before starting to work on the issue. - -## Prerequisites - -In order to download necessary tools, clone the repository, and install dependencies via `npm`, you need network access. - -> [!NOTE] -> You should clone into a path WITHOUT spaces to avoid issues when compiling native modules. - -You'll need the following tools: - -- [Git](https://git-scm.com) -- [Node.JS](https://nodejs.org/en/download/prebuilt-binaries), **x64** or **ARM64**, version `>=20.x` and `<24` (also see [`.nvmrc`](https://github.com/microsoft/vscode/blob/main/.nvmrc), which may provide a more precise version to install) - - If using `nvm`, consider updating your default node installation with `nvm alias default ` - - Windows: do not pick the option to install Windows Build Tools, see the step below for instructions - - Windows: If using [`nvm-windows`](https://github.com/coreybutler/nvm-windows) on **ARM64**, you must postfix each command with `arm64`. Eg: `nvm install 22 arm64` -- [Python](https://www.python.org/downloads/) (required for node-gyp; check the [node-gyp readme](https://github.com/nodejs/node-gyp#installation) for the currently supported Python versions) - - Make sure `python` can run from a command line prompt without error - - Your Python version may not come with all the proper utilities, it is recommended to install the `setuptools` package (`pip install setuptools`) otherwise you may get difficult to debug errors. -- A C/C++ compiler tool chain for your platform: - - **Windows 10/11 (x64 or ARM64)** - - Install the Visual C++ Build Environment by either installing the [Visual Studio Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools) or the [Visual Studio Community Edition](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community). The minimum workload to install is `Desktop Development with C++`. But there are additional components from "Individual components": - - `MSVC v143 - VS 2022 C++ x64/x86 Spectre-mitigated libs (Latest)` (use `ARM64`, not `ARM` for Windows on ARM, but the x64/x86 may still be needed) - - `C++ ATL for latest build tools with Spectre Mitigations` - - `C++ MFC for latest build tools with Spectre Mitigations` - - **Windows on ARM only:** Windows 10 SDK (10.0.20348.0) - - open a command prompt and run `npm config edit` and add or modify the `msvs_version` setting equal to your vs version. (e.g. `msvs_version=2022` for visual studio 2022) - - **Warning:** Make sure your profile path only contains ASCII letters, e.g. *John*, otherwise, it can lead to [node-gyp usage problems (nodejs/node-gyp/issues#297)](https://github.com/nodejs/node-gyp/issues/297) - - **Note**: Building and debugging via the Windows subsystem for Linux (WSL) is currently not supported. - - **Windows WSL2**: https://github.com/microsoft/vscode/wiki/Selfhosting-on-Windows-WSL - - **macOS** - - [Xcode](https://developer.apple.com/xcode/resources/) and the Command Line Tools, which will install `gcc` and the related toolchain containing `make` - - Run `xcode-select --install` to install the Command Line Tools - - **Linux** - * On Debian-based Linux: `sudo apt-get install build-essential g++ libx11-dev libxkbfile-dev libsecret-1-dev libkrb5-dev python-is-python3` - * On Red Hat-based Linux: `sudo yum groupinstall "Development Tools" && sudo yum install libX11-devel.x86_64 libxkbfile-devel.x86_64 libsecret-devel krb5-devel # or .i686`. - * Others: - * `make` - * [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/) - * [GCC](https://gcc.gnu.org) or another compile toolchain - * Building deb and rpm packages requires `fakeroot` and `rpm`; run: `sudo apt-get install fakeroot rpm` - -### Troubleshooting -Make sure you cloned `vscode` into a folder without any spaces in the path hierarchy. - -In case of issues, try deleting the contents of `~/.node-gyp` (alternatively `~/.cache/node-gyp` for Linux, `~/Library/Caches/node-gyp/` for macOS, or `%USERPROFILE%\AppData\Local\node-gyp` for Windows) first and then run `git clean -xfd` and then try again. - -> If you are on Windows or Linux 64 bit systems and would like to compile to 32 bit, you'll need to set the `npm_config_arch` environment variable to `ia32` before running `npm`. This will compile all native node modules for a 32 bit architecture. Similarly, when cross-compiling for ARM, set `npm_config_arch` to `arm`. - -> [!NOTE] -> For more information on how to install NPM modules globally on UNIX systems without resorting to `sudo`, refer to [this guide](http://www.johnpapa.net/how-to-use-npm-global-without-sudo-on-osx/). - -> [!WARNING] -> If you have Visual Studio 2019 installed, you may face issues when using the default version of node-gyp. If you have Visual Studio 2019 installed, you may need to follow the solutions [here](https://github.com/nodejs/node-gyp/issues/1747). - -#### Missing spectre mitigated libraries on Windows - -If you are using npm >= 10.2.3 or node-gyp >= 10.0.0, then you might see error when building native modules of this project - -> Spectre-mitigated libraries are required for this project. - -To fix this error open Visual Studio Installer, add the following components corresponding to the architecture you are building for (x64/ARM/ARM64) and restart your build session - -- MSVC Spectre-mitigated libs (latest) -- C++ ATL for latest build tools with Spectre Mitigations -- C++ MFC for latest build tools with Spectre Mitigations - -#### node-gyp related failures on Windows ARM - -For the build tools individual components, you may need to specify the version, e.g. v14.41-17.11, rather than (latest), but pick a version that is not out of support. - -#### node-gyp related failures on macOS - -If you receive errors building native modules with node-gyp with clang enable debug logging via `export CXX="c++ -v"` to receive a better error message. - -### Development container - -Alternatively, you can avoid local dependency installation as this repository includes a Visual Studio Code Remote - Containers / Codespaces [development container](https://github.com/microsoft/vscode/tree/main/.devcontainer). - -- For [Remote - Containers](https://aka.ms/vscode-remote/download/containers), use the **Remote-Containers: Open Repository in Container...** command which creates a Docker volume for better disk I/O on macOS and Windows. -- For Codespaces, install the [GitHub Codespaces](https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces) extension in VS Code, and use the **Codespaces: Create New Codespace** command. - -Docker / the Codespace should have at least **4 Cores and 6 GB of RAM (8 GB recommended)** to run the full build. See the [development container README](https://github.com/microsoft/vscode/blob/main/.devcontainer/README.md) for more information. - -If you'd like to contribute to the list of available development containers in the Remote - Containers extension, you can check out the [Contributing documentation](https://github.com/microsoft/vscode-dev-containers/blob/master/CONTRIBUTING.md) in the vscode-dev-containers repo. - -## Enable Commit Signing - -If you're a community member, feel free to jump over this step. - -Otherwise, if you're a member of the VS Code team, follow the [Commit Signing](https://github.com/microsoft/vscode/wiki/Commit-Signing) guide. - -## Build and Run - -If you want to understand how VS Code works or want to debug an issue, you'll want to get the source, build it, and run the tool locally. - -> [!NOTE] -> If you need to debug the 32bit version of VS Code on 64bit Windows, follow [the guide on how to do that](https://github.com/microsoft/vscode/wiki/Build-and-run-32bit-Code---OSS-on-Windows). - -### Getting the sources - -First, fork the VS Code repository so that you can make a pull request. Then, clone your fork locally: - -``` -git clone https://github.com/<<>>/vscode.git -``` - -Occasionally you will want to merge changes in the upstream repository (the official code repo) with your fork. - -``` -cd vscode -git checkout main -git pull https://github.com/microsoft/vscode.git main -``` - -Manage any merge conflicts, commit them, and then push them to your fork. - -> [!NOTE] -> The `microsoft/vscode` repository contains a collection of GitHub Actions that help us with triaging issues. As you probably don't want these running on your fork, you can disable Actions for your fork via `https://github.com/<>/vscode/settings/actions`. - -### Build - -Install and build all of the dependencies using `npm`: - -``` -cd vscode -npm install -``` - -Then you have two options: - -- If you want to build from inside VS Code, you can open the `vscode` folder and start the build task with Ctrl+Shift+B (CMD+Shift+B on macOS). The build task will stay running in the background even if you close VS Code. If you happen to close VS Code and open it again, just resume the build by pressing Ctrl+Shift+B (CMD+Shift+B) again. You can kill it by running the `Kill Build VS Code` task or pressing Ctrl+D in the task terminal. -- If you want to build from a terminal, run `npm run watch`. This will run both the core watch task and watch-extension tasks in a single terminal. - -The incremental builder will do an initial full build and will display a message that includes the phrase "Finished compilation" once the initial build is complete. The builder will watch for file changes and compile those changes incrementally, giving you a fast, iterative coding experience. - -**Troubleshooting:** - -- **Windows:** If you have installed Visual Studio 2017 as your build tool, you need to open **x64 Native Tools Command Prompt for VS 2017**. Do not confuse it with *VS2015 x64 Native Tools Command Prompt*, if installed. -- **Linux:** You may hit a ENOSPC error when running the build. To get around this follow instructions in the [Common Questions](https://code.visualstudio.com/docs/setup/linux#_common-questions). - -If the build step fails, or if the built version fails to run (see next section), run `git clean -xfd` in your `vscode` folder, then re-run `npm install`. - -#### Errors and Warnings -Errors and warnings will show in the console while developing VS Code. If you use VS Code to develop VS Code, errors and warnings are shown in the status bar at the bottom left of the editor. You can view the error list using `View | Errors and Warnings` or pressing Ctrl+P and then ! (CMD+P and ! on macOS). - -> [!TIP] -> You don't need to stop and restart the development version of VS Code after each change. You can just execute `Reload Window` from the command palette. We like to assign the keyboard shortcut Ctrl+R (CMD+R on macOS) to this command. - -### Run - -To test the changes, you launch a development version of VS Code on the workspace `vscode`, which you are currently editing. - -To test changes with a remote, use the "TestResolver" in your Code - OSS window which creates a fake remote window. Search Command Palette for `TestResolver`. More information is at https://github.com/microsoft/vscode/issues/162874#issuecomment-1271774905. - -#### Desktop - -Running on Electron with extensions run in NodeJS: - -##### macOS and Linux - -```bash -./scripts/code.sh -./scripts/code-cli.sh # for running CLI commands (eg --version) -``` - -##### Windows - -```bat -.\scripts\code.bat -.\scripts\code-cli.bat -``` - -> [!TIP] -> If you receive an error stating that the app is not a valid Electron app, it probably means you didn't run `npm run watch` first. - -#### VS Code for the Web - -Extensions and UI run in the browser. - -> [!TIP] -> Besides `npm run watch` also run `npm run watch-web` to build the web bits for the built-in extensions. - -##### macOS and Linux - -```bash -./scripts/code-web.sh -``` - -##### Windows - -```bat -.\scripts\code-web.bat -``` -#### Code Server Web - -UI in the browser, extensions run in code server (NodeJS): - -##### macOS and Linux - -```bash -./scripts/code-server.sh --launch -``` - -##### Windows - -```bat -.\scripts\code-server.bat --launch -``` - -You can identify the development version of VS Code ("Code - OSS") by the following icon in the Dock or Taskbar: - -[![VS Code default icon](https://i.imgur.com/D2CeX0y.png)](https://i.imgur.com/D2CeX0y.png) - - -### Debugging -VS Code has a multi-process architecture and your code is executed in different processes. - -The **render** process runs the UI code inside the Shell window. To debug code running in the **render** you can either use VS Code or the Chrome Developer Tools. - -#### Using VS Code -* Open the `vscode` repository folder -* Choose the `VS Code` launch configuration from the launch dropdown in the Debug viewlet and press F5. - - -#### Using the Chrome Developer Tools - -* Run the `Developer: Toggle Developer Tools` command from the Command Palette in your development instance of VS Code to launch the Chrome tools. -* It's also possible to debug the released versions of VS Code, since the sources link to sourcemaps hosted online. - -[![sourcemaps](http://i.imgur.com/KU3TdjO.png)](http://i.imgur.com/KU3TdjO.png) - -The **extension host** process runs code implemented by a plugin. To debug extensions (including those packaged with VS Code) which run in the extension host process, you can use VS Code itself. Switch to the Debug viewlet, choose the `Attach to Extension Host` configuration, and press F5. - -The **search** process can be debugged, but must first be started. Before attempting to attach, start a search by pressing Ctrl+P (CMD+P on macOS), otherwise, attaching will fail and time out. - -### Automated Testing -Run the unit tests directly from a terminal by running `./scripts/test.sh` from the `vscode` folder (`scripts\test` on Windows). The [test README](https://github.com/Microsoft/vscode/blob/main/test/README.md) has complete details on how to run and debug tests, as well as how to produce coverage reports. - -We also have automated UI tests. The [smoke test README](https://github.com/Microsoft/vscode/blob/main/test/smoke/README.md) has all the details. - -### Unit Testing -Run the tests directly from a terminal by running `./scripts/test.sh` from the `vscode` folder (`scripts\test` on Windows). The [test README](https://github.com/Microsoft/vscode/blob/main/test/README.md) has complete details on how to run and debug tests, as well as how to produce coverage reports. - -### Linting -We use [eslint](https://eslint.org/) for linting our sources. You can run eslint across the sources by calling `npm run eslint` from a terminal or command prompt. You can also run `npm run eslint` as a VS Code task by pressing Ctrl+P (CMD+P on macOS) and entering `task eslint`. - -To lint the source as you make changes you can install the [eslint extension](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint). - -### Extensions -The Visual Studio Marketplace is not available from the `vscode` open source builds. If you need to use or debug an extension you can check to see if the extension author publishes builds in their repository (check the `Builds` page) or if it is open source you can clone and build the extension locally. Once you have the .VSIX, you can "side load" the extension either through the command line or using __Install from VSIX__ command in the Extensions View command drop-down ([see more](https://code.visualstudio.com/docs/editor/extension-gallery#_command-line-extension-management) on command line extension management). - -## Work Branches -Even if you have push rights on the Microsoft/vscode repository, you should create a personal fork and create feature branches there when you need them. This keeps the main repository clean and your personal workflow cruft out of sight. - -## Pull Requests -Before we can accept a pull request from you, you'll need to sign a [[Contributor License Agreement (CLA)|Contributor-License-Agreement]]. It is an automated process and you only need to do it once. - -To enable us to quickly review and accept your pull requests, always create one pull request per issue and [link the issue in the pull request](https://github.com/blog/957-introducing-issue-mentions). Never merge multiple requests in one unless they have the same root cause. Be sure to follow our [[Coding Guidelines|Coding-Guidelines]] and keep code changes as small as possible. Avoid pure formatting changes to code that has not been modified otherwise. Pull requests should contain tests whenever possible. - -### Introducing usage of new Electron API with a PR -A pull request that depends on Electron API that VS Code is currently not using comes with a certain risk and may be rejected. Whenever we update Electron, there is a chance that less popular Electron APIs break and it is very hard to find out upfront. Once a PR lands in VS Code, the role of maintaining the feature moves to the team and as such we have to follow up with upstream components to ensure the feature is still supported. As such, as a rule of thumb: -* avoid Electron APIs and use web standards instead (this also ensures that your feature is supported in our web client) -* if you must use Electron APIs, we require a unit test at https://github.com/electron/electron so that we protect against future breakage. - -### Where to Contribute -Check out the [full issues list](https://github.com/Microsoft/vscode/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue) for a list of all potential areas for contributions. Note that just because an issue exists in the repository does not mean we will accept a contribution to the core editor for it. There are several reasons we may not accept a pull request like: - -* Performance - One of Visual Studio Code's core values is to deliver a *lightweight* code editor, that means it should perform well in both real and perceived performance. -* User experience - Since we want to deliver a *lightweight* code editor, the UX should feel lightweight as well and not be cluttered. Most changes to the UI should go through the issue owner and/or the UX team. -* Architectural - The team and/or feature owner needs to agree with any architectural impact a change may make. Things like new extension APIs *must* be discussed with and agreed upon by the feature owner. - -To improve the chances to get a pull request merged you should select an issue that is labelled with the [`help-wanted`](https://github.com/Microsoft/vscode/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) or [`bug`](https://github.com/Microsoft/vscode/issues?q=is%3Aopen+is%3Aissue+label%3A%22bug%22) labels. If the issue you want to work on is not labelled with `help-wanted` or `bug`, you can start a conversation with the issue owner asking whether an external contribution will be considered. - -To avoid multiple pull requests resolving the same issue, let others know you are working on it by saying so in a comment. - -### Spell check errors - -Pull requests that fix spell check errors in **translatable strings** (strings in `nls.localize(...)` calls) are welcomed but please make sure it doesn't touch multiple [feature areas](https://github.com/microsoft/vscode/wiki/Feature-Areas), otherwise it will be difficult to review. Pull requests only fixing spell check errors in source code are **not** recommended. - -## Packaging - -VS Code can be packaged for the following platforms: `win32-ia32 | win32-x64 | darwin-x64 | darwin-arm64 | linux-ia32 | linux-x64 | linux-arm` - -These `gulp` tasks are available: - -* `vscode-[platform]`: Builds a packaged version for `[platform]`. -* `vscode-[platform]-min`: Builds a packaged and minified version for `[platform]`. - -> [!TIP] -> Run `gulp` via `npm` to avoid potential out of memory issues, for example `npm run gulp vscode-linux-x64` - -See also: [Cross-Compiling for Debian-based Linux](https://github.com/Microsoft/vscode/wiki/Cross-Compiling-for-Debian-Based-Linux) - -## Suggestions -We're also interested in your feedback for the future of VS Code. You can submit a suggestion or feature request through the issue tracker. To make this process more effective, we're asking that these include more information to help define them more clearly. - -## Translations -We accept feedback on translations in language packs via GitHub issues in our [localization repo](https://github.com/Microsoft/vscode-loc/issues) that contains our currently supported language packs. - -## Discussion Etiquette - -In order to keep the conversation clear and transparent, please limit discussion to English and keep things on topic with the issue. Be considerate to others and try to be courteous and professional at all times. From 37046c63b0800bb0482e0f2f4484dbc1edaa627b Mon Sep 17 00:00:00 2001 From: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com> Date: Wed, 17 Sep 2025 14:38:48 -0700 Subject: [PATCH 05/50] Created How to Contribute (markdown) --- How-to-Contribute.md | 306 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 306 insertions(+) create mode 100644 How-to-Contribute.md diff --git a/How-to-Contribute.md b/How-to-Contribute.md new file mode 100644 index 0000000000..69249ef7c6 --- /dev/null +++ b/How-to-Contribute.md @@ -0,0 +1,306 @@ +# Contributing to Visual Studio Code +There are many ways to contribute to the Visual Studio Code project: logging bugs, submitting pull requests, reporting issues, and creating suggestions. + +After cloning and building the repo, check out the [issues list](https://github.com/Microsoft/vscode/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue). Issues labeled [`help wanted`](https://github.com/Microsoft/vscode/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) are good issues to submit a PR for. Issues labeled [`good first issue`](https://github.com/Microsoft/vscode/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) are great candidates to pick up if you are in the code for the first time. If you are contributing significant changes, or if the issue is already assigned to a specific month milestone, please discuss with the assignee of the issue first before starting to work on the issue. + +## Prerequisites + +In order to download necessary tools, clone the repository, and install dependencies via `npm`, you need network access. + +> [!NOTE] +> You should clone into a path WITHOUT spaces to avoid issues when compiling native modules. + +You'll need the following tools: + +- [Git](https://git-scm.com) +- [Node.JS](https://nodejs.org/en/download/prebuilt-binaries), **x64** or **ARM64**, version `>=20.x` (also see [`.nvmrc`](https://github.com/microsoft/vscode/blob/main/.nvmrc), which may provide a more precise version to install) + - If using `nvm`, consider updating your default node installation with `nvm alias default ` + - Windows: do not pick the option to install Windows Build Tools, see the step below for instructions + - Windows: If using [`nvm-windows`](https://github.com/coreybutler/nvm-windows) on **ARM64**, you must postfix each command with `arm64`. Eg: `nvm install 22 arm64` +- [Python](https://www.python.org/downloads/) (required for node-gyp; check the [node-gyp readme](https://github.com/nodejs/node-gyp#installation) for the currently supported Python versions) + - Make sure `python` can run from a command line prompt without error + - Your Python version may not come with all the proper utilities, it is recommended to install the `setuptools` package (`pip install setuptools`) otherwise you may get difficult to debug errors. +- A C/C++ compiler tool chain for your platform: + - **Windows 10/11 (x64 or ARM64)** + - Install the Visual C++ Build Environment by either installing the [Visual Studio Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools) or the [Visual Studio Community Edition](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community). The minimum workload to install is `Desktop Development with C++`. But there are additional components from "Individual components": + - `MSVC v143 - VS 2022 C++ x64/x86 Spectre-mitigated libs (Latest)` (use `ARM64`, not `ARM` for Windows on ARM, but the x64/x86 may still be needed) + - `C++ ATL for latest build tools with Spectre Mitigations` + - `C++ MFC for latest build tools with Spectre Mitigations` + - **Windows on ARM only:** Windows 10 SDK (10.0.20348.0) + - open a command prompt and run `npm config edit` and add or modify the `msvs_version` setting equal to your vs version. (e.g. `msvs_version=2022` for visual studio 2022) + - **Warning:** Make sure your profile path only contains ASCII letters, e.g. *John*, otherwise, it can lead to [node-gyp usage problems (nodejs/node-gyp/issues#297)](https://github.com/nodejs/node-gyp/issues/297) + - **Note**: Building and debugging via the Windows subsystem for Linux (WSL) is currently not supported. + - **Windows WSL2**: https://github.com/microsoft/vscode/wiki/Selfhosting-on-Windows-WSL + - **macOS** + - [Xcode](https://developer.apple.com/xcode/resources/) and the Command Line Tools, which will install `gcc` and the related toolchain containing `make` + - Run `xcode-select --install` to install the Command Line Tools + - **Linux** + * On Debian-based Linux: `sudo apt-get install build-essential g++ libx11-dev libxkbfile-dev libsecret-1-dev libkrb5-dev python-is-python3` + * On Red Hat-based Linux: `sudo yum groupinstall "Development Tools" && sudo yum install libX11-devel.x86_64 libxkbfile-devel.x86_64 libsecret-devel krb5-devel # or .i686`. + * Others: + * `make` + * [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/) + * [GCC](https://gcc.gnu.org) or another compile toolchain + * Building deb and rpm packages requires `fakeroot` and `rpm`; run: `sudo apt-get install fakeroot rpm` + +### Troubleshooting +Make sure you cloned `vscode` into a folder without any spaces in the path hierarchy. + +In case of issues, try deleting the contents of `~/.node-gyp` (alternatively `~/.cache/node-gyp` for Linux, `~/Library/Caches/node-gyp/` for macOS, or `%USERPROFILE%\AppData\Local\node-gyp` for Windows) first and then run `git clean -xfd` and then try again. + +> If you are on Windows or Linux 64 bit systems and would like to compile to 32 bit, you'll need to set the `npm_config_arch` environment variable to `ia32` before running `npm`. This will compile all native node modules for a 32 bit architecture. Similarly, when cross-compiling for ARM, set `npm_config_arch` to `arm`. + +> [!NOTE] +> For more information on how to install NPM modules globally on UNIX systems without resorting to `sudo`, refer to [this guide](http://www.johnpapa.net/how-to-use-npm-global-without-sudo-on-osx/). + +> [!WARNING] +> If you have Visual Studio 2019 installed, you may face issues when using the default version of node-gyp. If you have Visual Studio 2019 installed, you may need to follow the solutions [here](https://github.com/nodejs/node-gyp/issues/1747). + +#### Missing spectre mitigated libraries on Windows + +If you are using npm >= 10.2.3 or node-gyp >= 10.0.0, then you might see error when building native modules of this project + +> Spectre-mitigated libraries are required for this project. + +To fix this error open Visual Studio Installer, add the following components corresponding to the architecture you are building for (x64/ARM/ARM64) and restart your build session + +- MSVC Spectre-mitigated libs (latest) +- C++ ATL for latest build tools with Spectre Mitigations +- C++ MFC for latest build tools with Spectre Mitigations + +#### node-gyp related failures on Windows ARM + +For the build tools individual components, you may need to specify the version, e.g. v14.41-17.11, rather than (latest), but pick a version that is not out of support. + +#### node-gyp related failures on macOS + +If you receive errors building native modules with node-gyp with clang enable debug logging via `export CXX="c++ -v"` to receive a better error message. + +### Development container + +Alternatively, you can avoid local dependency installation as this repository includes a Visual Studio Code Remote - Containers / Codespaces [development container](https://github.com/microsoft/vscode/tree/main/.devcontainer). + +- For [Remote - Containers](https://aka.ms/vscode-remote/download/containers), use the **Remote-Containers: Open Repository in Container...** command which creates a Docker volume for better disk I/O on macOS and Windows. +- For Codespaces, install the [GitHub Codespaces](https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces) extension in VS Code, and use the **Codespaces: Create New Codespace** command. + +Docker / the Codespace should have at least **4 Cores and 6 GB of RAM (8 GB recommended)** to run the full build. See the [development container README](https://github.com/microsoft/vscode/blob/main/.devcontainer/README.md) for more information. + +If you'd like to contribute to the list of available development containers in the Remote - Containers extension, you can check out the [Contributing documentation](https://github.com/microsoft/vscode-dev-containers/blob/master/CONTRIBUTING.md) in the vscode-dev-containers repo. + +## Enable Commit Signing + +If you're a community member, feel free to jump over this step. + +Otherwise, if you're a member of the VS Code team, follow the [Commit Signing](https://github.com/microsoft/vscode/wiki/Commit-Signing) guide. + +## Build and Run + +If you want to understand how VS Code works or want to debug an issue, you'll want to get the source, build it, and run the tool locally. + +> [!NOTE] +> If you need to debug the 32bit version of VS Code on 64bit Windows, follow [the guide on how to do that](https://github.com/microsoft/vscode/wiki/Build-and-run-32bit-Code---OSS-on-Windows). + +### Getting the sources + +First, fork the VS Code repository so that you can make a pull request. Then, clone your fork locally: + +``` +git clone https://github.com/<<>>/vscode.git +``` + +Occasionally you will want to merge changes in the upstream repository (the official code repo) with your fork. + +``` +cd vscode +git checkout main +git pull https://github.com/microsoft/vscode.git main +``` + +Manage any merge conflicts, commit them, and then push them to your fork. + +> [!NOTE] +> The `microsoft/vscode` repository contains a collection of GitHub Actions that help us with triaging issues. As you probably don't want these running on your fork, you can disable Actions for your fork via `https://github.com/<>/vscode/settings/actions`. + +### Build + +Install and build all of the dependencies using `npm`: + +``` +cd vscode +npm install +``` + +Then you have two options: + +- If you want to build from inside VS Code, you can open the `vscode` folder and start the build task with Ctrl+Shift+B (CMD+Shift+B on macOS). The build task will stay running in the background even if you close VS Code. If you happen to close VS Code and open it again, just resume the build by pressing Ctrl+Shift+B (CMD+Shift+B) again. You can kill it by running the `Kill Build VS Code` task or pressing Ctrl+D in the task terminal. +- If you want to build from a terminal, run `npm run watch`. This will run both the core watch task and watch-extension tasks in a single terminal. + +The incremental builder will do an initial full build and will display a message that includes the phrase "Finished compilation" once the initial build is complete. The builder will watch for file changes and compile those changes incrementally, giving you a fast, iterative coding experience. + +**Troubleshooting:** + +- **Windows:** If you have installed Visual Studio 2017 as your build tool, you need to open **x64 Native Tools Command Prompt for VS 2017**. Do not confuse it with *VS2015 x64 Native Tools Command Prompt*, if installed. +- **Linux:** You may hit a ENOSPC error when running the build. To get around this follow instructions in the [Common Questions](https://code.visualstudio.com/docs/setup/linux#_common-questions). + +If the build step fails, or if the built version fails to run (see next section), run `git clean -xfd` in your `vscode` folder, then re-run `npm install`. + +#### Errors and Warnings +Errors and warnings will show in the console while developing VS Code. If you use VS Code to develop VS Code, errors and warnings are shown in the status bar at the bottom left of the editor. You can view the error list using `View | Errors and Warnings` or pressing Ctrl+P and then ! (CMD+P and ! on macOS). + +> [!TIP] +> You don't need to stop and restart the development version of VS Code after each change. You can just execute `Reload Window` from the command palette. We like to assign the keyboard shortcut Ctrl+R (CMD+R on macOS) to this command. + +### Run + +To test the changes, you launch a development version of VS Code on the workspace `vscode`, which you are currently editing. + +To test changes with a remote, use the "TestResolver" in your Code - OSS window which creates a fake remote window. Search Command Palette for `TestResolver`. More information is at https://github.com/microsoft/vscode/issues/162874#issuecomment-1271774905. + +#### Desktop + +Running on Electron with extensions run in NodeJS: + +##### macOS and Linux + +```bash +./scripts/code.sh +./scripts/code-cli.sh # for running CLI commands (eg --version) +``` + +##### Windows + +```bat +.\scripts\code.bat +.\scripts\code-cli.bat +``` + +> [!TIP] +> If you receive an error stating that the app is not a valid Electron app, it probably means you didn't run `npm run watch` first. + +#### VS Code for the Web + +Extensions and UI run in the browser. + +> [!TIP] +> Besides `npm run watch` also run `npm run watch-web` to build the web bits for the built-in extensions. + +##### macOS and Linux + +```bash +./scripts/code-web.sh +``` + +##### Windows + +```bat +.\scripts\code-web.bat +``` +#### Code Server Web + +UI in the browser, extensions run in code server (NodeJS): + +##### macOS and Linux + +```bash +./scripts/code-server.sh --launch +``` + +##### Windows + +```bat +.\scripts\code-server.bat --launch +``` + +You can identify the development version of VS Code ("Code - OSS") by the following icon in the Dock or Taskbar: + +[![VS Code default icon](https://i.imgur.com/D2CeX0y.png)](https://i.imgur.com/D2CeX0y.png) + + +### Debugging +VS Code has a multi-process architecture and your code is executed in different processes. + +The **render** process runs the UI code inside the Shell window. To debug code running in the **render** you can either use VS Code or the Chrome Developer Tools. + +#### Using VS Code +* Open the `vscode` repository folder +* Choose the `VS Code` launch configuration from the launch dropdown in the Debug viewlet and press F5. + + +#### Using the Chrome Developer Tools + +* Run the `Developer: Toggle Developer Tools` command from the Command Palette in your development instance of VS Code to launch the Chrome tools. +* It's also possible to debug the released versions of VS Code, since the sources link to sourcemaps hosted online. + +[![sourcemaps](http://i.imgur.com/KU3TdjO.png)](http://i.imgur.com/KU3TdjO.png) + +The **extension host** process runs code implemented by a plugin. To debug extensions (including those packaged with VS Code) which run in the extension host process, you can use VS Code itself. Switch to the Debug viewlet, choose the `Attach to Extension Host` configuration, and press F5. + +The **search** process can be debugged, but must first be started. Before attempting to attach, start a search by pressing Ctrl+P (CMD+P on macOS), otherwise, attaching will fail and time out. + +### Automated Testing +Run the unit tests directly from a terminal by running `./scripts/test.sh` from the `vscode` folder (`scripts\test` on Windows). The [test README](https://github.com/Microsoft/vscode/blob/main/test/README.md) has complete details on how to run and debug tests, as well as how to produce coverage reports. + +We also have automated UI tests. The [smoke test README](https://github.com/Microsoft/vscode/blob/main/test/smoke/README.md) has all the details. + +### Unit Testing +Run the tests directly from a terminal by running `./scripts/test.sh` from the `vscode` folder (`scripts\test` on Windows). The [test README](https://github.com/Microsoft/vscode/blob/main/test/README.md) has complete details on how to run and debug tests, as well as how to produce coverage reports. + +### Linting +We use [eslint](https://eslint.org/) for linting our sources. You can run eslint across the sources by calling `npm run eslint` from a terminal or command prompt. You can also run `npm run eslint` as a VS Code task by pressing Ctrl+P (CMD+P on macOS) and entering `task eslint`. + +To lint the source as you make changes you can install the [eslint extension](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint). + +### Extensions +The Visual Studio Marketplace is not available from the `vscode` open source builds. If you need to use or debug an extension you can check to see if the extension author publishes builds in their repository (check the `Builds` page) or if it is open source you can clone and build the extension locally. Once you have the .VSIX, you can "side load" the extension either through the command line or using __Install from VSIX__ command in the Extensions View command drop-down ([see more](https://code.visualstudio.com/docs/editor/extension-gallery#_command-line-extension-management) on command line extension management). + +## Work Branches +Even if you have push rights on the Microsoft/vscode repository, you should create a personal fork and create feature branches there when you need them. This keeps the main repository clean and your personal workflow cruft out of sight. + +## Pull Requests +Before we can accept a pull request from you, you'll need to sign a [[Contributor License Agreement (CLA)|Contributor-License-Agreement]]. It is an automated process and you only need to do it once. + +To enable us to quickly review and accept your pull requests, always create one pull request per issue and [link the issue in the pull request](https://github.com/blog/957-introducing-issue-mentions). Never merge multiple requests in one unless they have the same root cause. Be sure to follow our [[Coding Guidelines|Coding-Guidelines]] and keep code changes as small as possible. Avoid pure formatting changes to code that has not been modified otherwise. Pull requests should contain tests whenever possible. + +### Introducing usage of new Electron API with a PR +A pull request that depends on Electron API that VS Code is currently not using comes with a certain risk and may be rejected. Whenever we update Electron, there is a chance that less popular Electron APIs break and it is very hard to find out upfront. Once a PR lands in VS Code, the role of maintaining the feature moves to the team and as such we have to follow up with upstream components to ensure the feature is still supported. As such, as a rule of thumb: +* avoid Electron APIs and use web standards instead (this also ensures that your feature is supported in our web client) +* if you must use Electron APIs, we require a unit test at https://github.com/electron/electron so that we protect against future breakage. + +### Where to Contribute +Check out the [full issues list](https://github.com/Microsoft/vscode/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue) for a list of all potential areas for contributions. Note that just because an issue exists in the repository does not mean we will accept a contribution to the core editor for it. There are several reasons we may not accept a pull request like: + +* Performance - One of Visual Studio Code's core values is to deliver a *lightweight* code editor, that means it should perform well in both real and perceived performance. +* User experience - Since we want to deliver a *lightweight* code editor, the UX should feel lightweight as well and not be cluttered. Most changes to the UI should go through the issue owner and/or the UX team. +* Architectural - The team and/or feature owner needs to agree with any architectural impact a change may make. Things like new extension APIs *must* be discussed with and agreed upon by the feature owner. + +To improve the chances to get a pull request merged you should select an issue that is labelled with the [`help-wanted`](https://github.com/Microsoft/vscode/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) or [`bug`](https://github.com/Microsoft/vscode/issues?q=is%3Aopen+is%3Aissue+label%3A%22bug%22) labels. If the issue you want to work on is not labelled with `help-wanted` or `bug`, you can start a conversation with the issue owner asking whether an external contribution will be considered. + +To avoid multiple pull requests resolving the same issue, let others know you are working on it by saying so in a comment. + +### Spell check errors + +Pull requests that fix spell check errors in **translatable strings** (strings in `nls.localize(...)` calls) are welcomed but please make sure it doesn't touch multiple [feature areas](https://github.com/microsoft/vscode/wiki/Feature-Areas), otherwise it will be difficult to review. Pull requests only fixing spell check errors in source code are **not** recommended. + +## Packaging + +VS Code can be packaged for the following platforms: `win32-ia32 | win32-x64 | darwin-x64 | darwin-arm64 | linux-ia32 | linux-x64 | linux-arm` + +These `gulp` tasks are available: + +* `vscode-[platform]`: Builds a packaged version for `[platform]`. +* `vscode-[platform]-min`: Builds a packaged and minified version for `[platform]`. + +> [!TIP] +> Run `gulp` via `npm` to avoid potential out of memory issues, for example `npm run gulp vscode-linux-x64` + +See also: [Cross-Compiling for Debian-based Linux](https://github.com/Microsoft/vscode/wiki/Cross-Compiling-for-Debian-Based-Linux) + +## Suggestions +We're also interested in your feedback for the future of VS Code. You can submit a suggestion or feature request through the issue tracker. To make this process more effective, we're asking that these include more information to help define them more clearly. + +## Translations +We accept feedback on translations in language packs via GitHub issues in our [localization repo](https://github.com/Microsoft/vscode-loc/issues) that contains our currently supported language packs. + +## Discussion Etiquette + +In order to keep the conversation clear and transparent, please limit discussion to English and keep things on topic with the issue. Be considerate to others and try to be courteous and professional at all times. \ No newline at end of file From e83b33b5dbc3cca41b04240ddccc48d86aab56bb Mon Sep 17 00:00:00 2001 From: Raymond Zhao <7199958+rzhao271@users.noreply.github.com> Date: Thu, 18 Sep 2025 16:15:46 -0700 Subject: [PATCH 06/50] Normalize issue reference: ##2272 -> #2272 (#335) --- Code-Editor-Roadmap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code-Editor-Roadmap.md b/Code-Editor-Roadmap.md index 9765685195..476d8de7fc 100644 --- a/Code-Editor-Roadmap.md +++ b/Code-Editor-Roadmap.md @@ -9,7 +9,7 @@ * [issue #9409](https://github.com/Microsoft/vscode/issues/9409): Outdent issue with Typescript * [issue #15598](https://github.com/Microsoft/vscode/issues/15598): Multi-line indents do not preserve partial indents -* [issue ##2272](https://github.com/Microsoft/vscode/issues/2272): Automatically indent "end" for ruby code +* [issue #2272](https://github.com/Microsoft/vscode/issues/2272): Automatically indent "end" for ruby code ## Find widget * [issue #15579](https://github.com/Microsoft/vscode/issues/15579): Regex search issue From 03e8f050d5e5dc729df2f715f23fe6440e664cee Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Mon, 29 Sep 2025 18:14:00 +0900 Subject: [PATCH 07/50] Updated Terminal Issues (markdown) --- Terminal-Issues.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Terminal-Issues.md b/Terminal-Issues.md index f9b1aa064d..a2f25afe61 100644 --- a/Terminal-Issues.md +++ b/Terminal-Issues.md @@ -83,6 +83,10 @@ Known rendering problems: Sometimes terminal wrapping doesn't work as expected, for example a line that is expected to wrap will start overwriting the first part of the wrapped line. This type of problem is typically related to the backend and frontend's column count differing. You can get the frontend's column count by counting the number of cells in a line, for the backend `stty -a | grep columns` should tell you. +### Prompt input detection + +To power features like [terminal IntelliSense](https://code.visualstudio.com/docs/terminal/shell-integration#_intellisense-preview) and general understanding of the command that was run in the terminal, we detect what is happening in the prompt by leveraging [shell integration](https://code.visualstudio.com/docs/terminal/shell-integration). When these feature aren't working as expected you can check VS Code's understanding of the prompt input by hovering the terminal tab and clicking Show Details on the bottom. Taking a screenshot of this is helpful to diagnose problems in this area. + ## Why did you close my issue? We get _a lot_ of issues and have to split our time between responding to and issues and actually improving the product. Because of this, we have a pretty high bar on issue quality and reproducibility, if we can't reproduce the issue we may have to close it off since we cannot action it. From b9e0a1933cd07293f6c6eeb754877260c55aa8b4 Mon Sep 17 00:00:00 2001 From: Dmitriy Vasyura Date: Mon, 29 Sep 2025 09:45:38 -0700 Subject: [PATCH 08/50] Updated Build Champion (markdown) --- Build-Champion.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Build-Champion.md b/Build-Champion.md index efb28e3d9c..37c574ff96 100644 --- a/Build-Champion.md +++ b/Build-Champion.md @@ -19,8 +19,8 @@ Follow this as a rough guide for how to review a build: 1. Open the "Build" link which will go to GH Actions or ADO 2. Click into the failed step and review the failure -3. If an issue is already created for this failure, mark the thread with a ✅ to indicate it's actioned -4. If not action the failure and then mark the thread with ✅, here are some common failure types and how to handle them: +3. If an issue is already created for this failure, mark the thread with a ✅ to indicate that action has been taken on it +4. Otherwise take the action and then mark the thread with ✅, here are some common failure types and how to handle them: **Test failure:** If it looks like the test failed because of the linked change, ping the [area owner](#area-owners). From 23921a58c9a04324cf7f58fc316f9d7fe7462175 Mon Sep 17 00:00:00 2001 From: Bryan Chen <41454397+bryanchen-d@users.noreply.github.com> Date: Mon, 29 Sep 2025 13:53:45 -0700 Subject: [PATCH 09/50] Added a note for nvm install --- How-to-Contribute.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/How-to-Contribute.md b/How-to-Contribute.md index 69249ef7c6..b0268c3926 100644 --- a/How-to-Contribute.md +++ b/How-to-Contribute.md @@ -17,6 +17,8 @@ You'll need the following tools: - If using `nvm`, consider updating your default node installation with `nvm alias default ` - Windows: do not pick the option to install Windows Build Tools, see the step below for instructions - Windows: If using [`nvm-windows`](https://github.com/coreybutler/nvm-windows) on **ARM64**, you must postfix each command with `arm64`. Eg: `nvm install 22 arm64` + - macOS/Linux: When using `nvm` with the zsh shell, ensure that the nvm initialization script is added to `.zprofile` rather than `.zshrc`. The `.zshrc` file is only sourced for interactive shells (such as those in the VS Code terminal panel), while VS Code build tasks use a non-interactive shell that sources `.zprofile` but not `.zshrc`. Placing the script in `.zprofile` helps maintain a consistent Node.js version across both environments. + - [Python](https://www.python.org/downloads/) (required for node-gyp; check the [node-gyp readme](https://github.com/nodejs/node-gyp#installation) for the currently supported Python versions) - Make sure `python` can run from a command line prompt without error - Your Python version may not come with all the proper utilities, it is recommended to install the `setuptools` package (`pip install setuptools`) otherwise you may get difficult to debug errors. From 187a6abf84fe4799f39ed1cd418375838b245c24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Ruales?= <1588988+jruales@users.noreply.github.com> Date: Wed, 1 Oct 2025 15:16:08 -0700 Subject: [PATCH 10/50] Small readability improvement --- How-to-Contribute.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/How-to-Contribute.md b/How-to-Contribute.md index b0268c3926..506c4cc1e4 100644 --- a/How-to-Contribute.md +++ b/How-to-Contribute.md @@ -15,9 +15,11 @@ You'll need the following tools: - [Git](https://git-scm.com) - [Node.JS](https://nodejs.org/en/download/prebuilt-binaries), **x64** or **ARM64**, version `>=20.x` (also see [`.nvmrc`](https://github.com/microsoft/vscode/blob/main/.nvmrc), which may provide a more precise version to install) - If using `nvm`, consider updating your default node installation with `nvm alias default ` - - Windows: do not pick the option to install Windows Build Tools, see the step below for instructions - - Windows: If using [`nvm-windows`](https://github.com/coreybutler/nvm-windows) on **ARM64**, you must postfix each command with `arm64`. Eg: `nvm install 22 arm64` - - macOS/Linux: When using `nvm` with the zsh shell, ensure that the nvm initialization script is added to `.zprofile` rather than `.zshrc`. The `.zshrc` file is only sourced for interactive shells (such as those in the VS Code terminal panel), while VS Code build tasks use a non-interactive shell that sources `.zprofile` but not `.zshrc`. Placing the script in `.zprofile` helps maintain a consistent Node.js version across both environments. + - Windows: + - Do not pick the option to install Windows Build Tools, see the step below for instructions + - If using [`nvm-windows`](https://github.com/coreybutler/nvm-windows) on **ARM64**, you must postfix each command with `arm64`. Eg: `nvm install 22 arm64` + - macOS/Linux: + - When using `nvm` with the zsh shell, ensure that the nvm initialization script is added to `.zprofile` rather than `.zshrc`. The `.zshrc` file is only sourced for interactive shells (such as those in the VS Code terminal panel), while VS Code build tasks use a non-interactive shell that sources `.zprofile` but not `.zshrc`. Placing the script in `.zprofile` helps maintain a consistent Node.js version across both environments. - [Python](https://www.python.org/downloads/) (required for node-gyp; check the [node-gyp readme](https://github.com/nodejs/node-gyp#installation) for the currently supported Python versions) - Make sure `python` can run from a command line prompt without error From 382b3ebbfd9ca3327f180aa4501a1d9dbfef2cdb Mon Sep 17 00:00:00 2001 From: Nick Trogh Date: Thu, 2 Oct 2025 10:10:50 +0200 Subject: [PATCH 11/50] Add guidance about capitalization for headings/titles --- Coding-Guidelines.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Coding-Guidelines.md b/Coding-Guidelines.md index 162b18cfa1..07ca9bd33c 100644 --- a/Coding-Guidelines.md +++ b/Coding-Guidelines.md @@ -25,8 +25,9 @@ We use tabs, not spaces. * All strings visible to the user need to be externalized ## UI labels -* Use title-style capitalization for command labels, buttons, and menu items (each word is capitalized). +* Use title case (each major word is capitalized) for command labels, buttons, and menu items * Don't capitalize prepositions of four or fewer letters unless it's the first or last word (e.g. "in", "with", "for"). +* Use sentence case (only first word is capitalized) for titles/headings in views and don't end with a period (e.g. "Build with agent mode") ## Style * Use arrow functions `=>` over anonymous function expressions From 94cd12adc0fa3e89e88f6786a56805cfac753d78 Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Thu, 2 Oct 2025 12:04:07 -0700 Subject: [PATCH 12/50] Created Endgame testing and verification (markdown) --- Endgame-testing-and-verification.md | 58 +++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Endgame-testing-and-verification.md diff --git a/Endgame-testing-and-verification.md b/Endgame-testing-and-verification.md new file mode 100644 index 0000000000..c1389615e1 --- /dev/null +++ b/Endgame-testing-and-verification.md @@ -0,0 +1,58 @@ +This page covers testing during the endgame process. It's mainly for VS Code team members but others may find our general approach to testing and some of the specific tips of interest + +# General Philosophy +The VS Code team strives for a culture where all team members feel responsible for the quality of VS Code and also feel empowered to uphold and improve this quality. Testing and how we think about testing is a key part of this + +It's not always the most fun to run through tests and verify issues, but this is what helps us uphold the quality of VS Code. When a bug is fixed, we want to confirm it really has been fixed. When a feature is committed to a milestone, we want to make sure it works as described. But it's more than that too + +When going through a test-plan item or verifying an issue, it's not enough to mechanically race through the exact flow listed so you can check it off and move on. Instead try to treat testing as more exploratory, open ended process. + +For bugs, try other cases beyond the original issue. Could the fix be improved? Are there similar bugs in other areas of the product? + +For features, ask yourself: does the feature makes sense as designed? Does it align with the rest of VS Code? Could be improved or extended? Could it cause problems for certain workflows or in the future? + +Approaching testing this way not only helps us ship a better product, it also makes testing more fun. Exploring new features and trying to break them becomes an investing challenge. It can also be a great opportunity to learn about and explore a new area of the product. + +Don't be afraid about opening bugs or providing feedback. Getting fresh eyes on a feature is extremely valuable, and often interns will end up spot problems or offer perspective that a team of very senior engineers hadn't considered. If you see something that feels off during testing, open an issue. It doesn't have to be something major. You don't even have to be sure it is a bug. Just having the issue opened provides valuable feedback. Do this even for any part of VS Code, not just the feature you are testing/verification + +Critically, try to take this same testing mindset beyond endgame too. We all use VS Code every day, so you should always report issue and confusion you run into + +# Starting questions to ask during testing + +- Does this feature work as described? Try other flows and variations too beyond exactly what the test-plan item describes +- Does this behavior make sense? Could it be simplified or improved? +- Does this behavior feel aligned with the rest of VS Code? +- Could a new user understand it? Can they learn about it? +- Can I break it? What happens if I try entering invalid values or going off of the recommended flow +-Does it work nicely for all sorts of VS Code setups and configurations and usage patterns (see notes on UI testing below) + +# Basics for testing UI features +- Is the feature accessible? + At the very least try using the keyboard to navigate, but you can also use a screen reader for more complete testing + +- Does it work at different zoom levels? + +- Does it work with different color themes, especially the high contrast themes? + +- Does it work with different window / UI component sizes and different workbench layouts? + +- When relevant, does it work with different icon themes or when disabling various UI features + +- If relevant, do the keybindings make sense? + +Are the command names good and if there are default keybindings do they conflict with existing VS Code / OS keybindings + +# Basics for testing APIs +- Try approaching it as a beginner who is unfamiliar with the space. Is there enough info to understand the API? + +- Do the JSDocs make sense? Make sure to check that links are rendered properly in IntelliSnese + +- For new package.json contributions, make sure the hover documentation in the package.json makes sense. Make sure they have reasonable IntelliSense suggestions. Make sure the snippet suggestions fill in correctly. Make sure you get an error for invalid configurations + +- Look at the names in the API. Are they consistent with other names in the product? + +- Does the API encourage correct usage? Are there any easy to miss complexities or footguns? + +- Does the API require a large amount of boilerplate? Is this something we should try to improve? + +- If there's an extension sample or written documentation, is it up to date? Does it build correctly? Do the docs in it make sense? \ No newline at end of file From 2c0fdeb515e4404d5f2af8527baac2512013e03d Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Thu, 2 Oct 2025 12:10:08 -0700 Subject: [PATCH 13/50] Updated Endgame testing and verification (markdown) --- Endgame-testing-and-verification.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Endgame-testing-and-verification.md b/Endgame-testing-and-verification.md index c1389615e1..ffe03246fc 100644 --- a/Endgame-testing-and-verification.md +++ b/Endgame-testing-and-verification.md @@ -1,11 +1,11 @@ This page covers testing during the endgame process. It's mainly for VS Code team members but others may find our general approach to testing and some of the specific tips of interest # General Philosophy -The VS Code team strives for a culture where all team members feel responsible for the quality of VS Code and also feel empowered to uphold and improve this quality. Testing and how we think about testing is a key part of this +The VS Code team strives for a culture where all team members feel responsible for the quality of VS Code and are empowered to uphold and improve this quality. Testing and how we approach testing is a key part of this. -It's not always the most fun to run through tests and verify issues, but this is what helps us uphold the quality of VS Code. When a bug is fixed, we want to confirm it really has been fixed. When a feature is committed to a milestone, we want to make sure it works as described. But it's more than that too +It's not always the most fun to run through tests and verify issues, but this is a key part of upholding the quality of VS Code. When a bug is fixed, we want to confirm it really has been fixed. When a feature is committed to a milestone, we want to make sure it works as described. But it's more than that too. -When going through a test-plan item or verifying an issue, it's not enough to mechanically race through the exact flow listed so you can check it off and move on. Instead try to treat testing as more exploratory, open ended process. +When going through a test-plan item or verifying an issue, it's not enough to mechanically through the exact flow listed so you can check it off and move on to the next item. Instead try to treat testing as more exploratory, open ended process. For bugs, try other cases beyond the original issue. Could the fix be improved? Are there similar bugs in other areas of the product? @@ -15,7 +15,8 @@ Approaching testing this way not only helps us ship a better product, it also ma Don't be afraid about opening bugs or providing feedback. Getting fresh eyes on a feature is extremely valuable, and often interns will end up spot problems or offer perspective that a team of very senior engineers hadn't considered. If you see something that feels off during testing, open an issue. It doesn't have to be something major. You don't even have to be sure it is a bug. Just having the issue opened provides valuable feedback. Do this even for any part of VS Code, not just the feature you are testing/verification -Critically, try to take this same testing mindset beyond endgame too. We all use VS Code every day, so you should always report issue and confusion you run into +Critically, take this same testing mindset beyond endgame into your daily work too. We all use VS Code every day, so always report issues and confusion you run into in your day-to-day work too. We are all responsible for the quality of VS Code + # Starting questions to ask during testing From cb3daf3e8da23f3822bc68281ffdf17faeb926f3 Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Thu, 2 Oct 2025 12:12:55 -0700 Subject: [PATCH 14/50] Updated _Sidebar (markdown) --- _Sidebar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/_Sidebar.md b/_Sidebar.md index 36df6b2b02..4a5cc5175f 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -11,6 +11,7 @@ * [[Release Process]] * [[Running the Endgame]] * [[Writing Test Plan Items]] + * [[Endgame testing and verification]] * [[Sanity Check]] * [[Related Projects]] From 73813b21a09ae09314a08bf2c4b20ce5539a9d1c Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Thu, 2 Oct 2025 12:13:32 -0700 Subject: [PATCH 15/50] Updated Endgame testing and verification (markdown) --- Endgame-testing-and-verification.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Endgame-testing-and-verification.md b/Endgame-testing-and-verification.md index ffe03246fc..15e66e6752 100644 --- a/Endgame-testing-and-verification.md +++ b/Endgame-testing-and-verification.md @@ -1,4 +1,4 @@ -This page covers testing during the endgame process. It's mainly for VS Code team members but others may find our general approach to testing and some of the specific tips of interest +This page covers testing during the [endgame](https://github.com/microsoft/vscode/wiki/Running-the-Endgame) process. It's mainly for VS Code team members but others may find our general approach to testing and some of the specific tips of interest # General Philosophy The VS Code team strives for a culture where all team members feel responsible for the quality of VS Code and are empowered to uphold and improve this quality. Testing and how we approach testing is a key part of this. From 6461df89814ade6b16002fc40773ea54b89d4ae6 Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Thu, 2 Oct 2025 12:15:28 -0700 Subject: [PATCH 16/50] Updated Endgame testing and verification (markdown) --- Endgame-testing-and-verification.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Endgame-testing-and-verification.md b/Endgame-testing-and-verification.md index 15e66e6752..213599eca4 100644 --- a/Endgame-testing-and-verification.md +++ b/Endgame-testing-and-verification.md @@ -11,7 +11,7 @@ For bugs, try other cases beyond the original issue. Could the fix be improved? For features, ask yourself: does the feature makes sense as designed? Does it align with the rest of VS Code? Could be improved or extended? Could it cause problems for certain workflows or in the future? -Approaching testing this way not only helps us ship a better product, it also makes testing more fun. Exploring new features and trying to break them becomes an investing challenge. It can also be a great opportunity to learn about and explore a new area of the product. +Approaching testing this way not only helps us ship a better product, it also makes testing more fun. Exploring new features and trying to break them becomes an interesting challenge. How can I break this? How else could it have been implemented? It can also be a great opportunity to learn about and explore a new area of the product. Don't be afraid about opening bugs or providing feedback. Getting fresh eyes on a feature is extremely valuable, and often interns will end up spot problems or offer perspective that a team of very senior engineers hadn't considered. If you see something that feels off during testing, open an issue. It doesn't have to be something major. You don't even have to be sure it is a bug. Just having the issue opened provides valuable feedback. Do this even for any part of VS Code, not just the feature you are testing/verification From 80fd7f59ae466839c75b124f74887216abc6707e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Ruales?= <1588988+jruales@users.noreply.github.com> Date: Thu, 2 Oct 2025 14:34:42 -0700 Subject: [PATCH 17/50] Small change --- Source-Code-Organization.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Source-Code-Organization.md b/Source-Code-Organization.md index 464e3f1931..8e00991ee6 100644 --- a/Source-Code-Organization.md +++ b/Source-Code-Organization.md @@ -1,5 +1,7 @@ -Visual Studio Code consists of a layered and modular `core` (found as `src/vs`) that can be extended using extensions. Extensions are run in a separate process referred to as the -`extension host.` Extensions are implemented by utilising the [extension API](https://code.visualstudio.com/docs/extensions/overview). Built-in extensions can be found in the `extensions` folder. +Visual Studio Code consists of a layered and modular `core` that can be extended using extensions. Extensions are run in a separate process referred to as the +`extension host`. Extensions are implemented by utilising the [extension API](https://code.visualstudio.com/docs/extensions/overview). + +The `core` can be found under the `src/vs/` folder. Built-in extensions can be found under the `extensions/` folder. # Layers From b2eb112251fffdbf81f7414713311bc859e83971 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Ruales?= <1588988+jruales@users.noreply.github.com> Date: Thu, 2 Oct 2025 15:43:21 -0700 Subject: [PATCH 18/50] Updated Source Code Organization (markdown) --- Source-Code-Organization.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source-Code-Organization.md b/Source-Code-Organization.md index 8e00991ee6..78613742a0 100644 --- a/Source-Code-Organization.md +++ b/Source-Code-Organization.md @@ -8,8 +8,8 @@ The `core` can be found under the `src/vs/` folder. Built-in extensions can be f The `core` is partitioned into the following layers: - `base`: Provides general utilities and user interface building blocks that can be used in any other layer. - `platform`: Defines service injection support and the base services for VS Code that are shared across layers such as `workbench` and `code`. Should not include `editor` or `workbench` specific services or code. -- `editor`: The "Monaco" editor is available as a [separate downloadable](https://microsoft.github.io/monaco-editor/) component. -- `workbench`: Hosts the "Monaco" editor, notebooks, and custom editors and provides the framework for panels like the Explorer, Status Bar, or Menu Bar, leveraging [Electron](https://www.electronjs.org/) to implement the VS Code desktop application and browser APIs to provide VS Code for the Web. +- `editor`: Monaco Editor Core. The full [Monaco Editor](https://microsoft.github.io/monaco-editor/) is defined in a separate repo https://github.com/microsoft/monaco-editor, which adds some programming language features on top of the Monaco Editor Core and publishes the combination as a package. +- `workbench`: Hosts the Monaco Editor Core, notebooks, and custom editors and provides the framework for panels like the Explorer, Status Bar, or Menu Bar, leveraging [Electron](https://www.electronjs.org/) to implement the VS Code desktop application and browser APIs to provide VS Code for the Web. - `code`: The entry point to the desktop app that stitches everything together, this includes the Electron main file, shared process, and the CLI for example. - `server`: The entry point to our server app for remote development. From 41ab76880f1a2a0964ca69800214e21f296b36e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Ruales?= <1588988+jruales@users.noreply.github.com> Date: Thu, 2 Oct 2025 15:44:34 -0700 Subject: [PATCH 19/50] Updated Source Code Organization (markdown) --- Source-Code-Organization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source-Code-Organization.md b/Source-Code-Organization.md index 78613742a0..fa4ea25e6a 100644 --- a/Source-Code-Organization.md +++ b/Source-Code-Organization.md @@ -8,7 +8,7 @@ The `core` can be found under the `src/vs/` folder. Built-in extensions can be f The `core` is partitioned into the following layers: - `base`: Provides general utilities and user interface building blocks that can be used in any other layer. - `platform`: Defines service injection support and the base services for VS Code that are shared across layers such as `workbench` and `code`. Should not include `editor` or `workbench` specific services or code. -- `editor`: Monaco Editor Core. The full [Monaco Editor](https://microsoft.github.io/monaco-editor/) is defined in a separate repo https://github.com/microsoft/monaco-editor, which adds some programming language features on top of the Monaco Editor Core and publishes the combination as a package. +- `editor`: Monaco Editor Core. The full [Monaco Editor](https://microsoft.github.io/monaco-editor/) is defined in a separate repo https://github.com/microsoft/monaco-editor, which adds some programming language features on top of the Monaco Editor Core and publishes the combination as an npm package. - `workbench`: Hosts the Monaco Editor Core, notebooks, and custom editors and provides the framework for panels like the Explorer, Status Bar, or Menu Bar, leveraging [Electron](https://www.electronjs.org/) to implement the VS Code desktop application and browser APIs to provide VS Code for the Web. - `code`: The entry point to the desktop app that stitches everything together, this includes the Electron main file, shared process, and the CLI for example. - `server`: The entry point to our server app for remote development. From 7fcda6ca504d4e330fad4980d12bda32fe1b975a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Ruales?= <1588988+jruales@users.noreply.github.com> Date: Thu, 2 Oct 2025 15:46:12 -0700 Subject: [PATCH 20/50] Updated Source Code Organization (markdown) --- Source-Code-Organization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source-Code-Organization.md b/Source-Code-Organization.md index fa4ea25e6a..8e5f1ab823 100644 --- a/Source-Code-Organization.md +++ b/Source-Code-Organization.md @@ -8,7 +8,7 @@ The `core` can be found under the `src/vs/` folder. Built-in extensions can be f The `core` is partitioned into the following layers: - `base`: Provides general utilities and user interface building blocks that can be used in any other layer. - `platform`: Defines service injection support and the base services for VS Code that are shared across layers such as `workbench` and `code`. Should not include `editor` or `workbench` specific services or code. -- `editor`: Monaco Editor Core. The full [Monaco Editor](https://microsoft.github.io/monaco-editor/) is defined in a separate repo https://github.com/microsoft/monaco-editor, which adds some programming language features on top of the Monaco Editor Core and publishes the combination as an npm package. +- `editor`: Monaco Editor Core. The externally available full [Monaco Editor](https://microsoft.github.io/monaco-editor/) is defined in a separate repo https://github.com/microsoft/monaco-editor, which adds some programming language features on top of the Monaco Editor Core and publishes the combination as an npm package. - `workbench`: Hosts the Monaco Editor Core, notebooks, and custom editors and provides the framework for panels like the Explorer, Status Bar, or Menu Bar, leveraging [Electron](https://www.electronjs.org/) to implement the VS Code desktop application and browser APIs to provide VS Code for the Web. - `code`: The entry point to the desktop app that stitches everything together, this includes the Electron main file, shared process, and the CLI for example. - `server`: The entry point to our server app for remote development. From 861a7664f1e67b1645401cc19c73394f67318f0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Ruales?= <1588988+jruales@users.noreply.github.com> Date: Thu, 2 Oct 2025 15:51:58 -0700 Subject: [PATCH 21/50] Updated Source Code Organization (markdown) --- Source-Code-Organization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source-Code-Organization.md b/Source-Code-Organization.md index 8e5f1ab823..885f63b679 100644 --- a/Source-Code-Organization.md +++ b/Source-Code-Organization.md @@ -8,7 +8,7 @@ The `core` can be found under the `src/vs/` folder. Built-in extensions can be f The `core` is partitioned into the following layers: - `base`: Provides general utilities and user interface building blocks that can be used in any other layer. - `platform`: Defines service injection support and the base services for VS Code that are shared across layers such as `workbench` and `code`. Should not include `editor` or `workbench` specific services or code. -- `editor`: Monaco Editor Core. The externally available full [Monaco Editor](https://microsoft.github.io/monaco-editor/) is defined in a separate repo https://github.com/microsoft/monaco-editor, which adds some programming language features on top of the Monaco Editor Core and publishes the combination as an npm package. +- `editor`: Monaco Editor Core. Note: The full [Monaco Editor](https://microsoft.github.io/monaco-editor/) is defined in a separate repo https://github.com/microsoft/monaco-editor, which adds some programming language features on top of the Monaco Editor Core and publishes the combination as an npm package. See that repo's [CONTRIBUTING.md](https://github.com/microsoft/monaco-editor/blob/main/CONTRIBUTING.md) for a diagram that explains how these are related. - `workbench`: Hosts the Monaco Editor Core, notebooks, and custom editors and provides the framework for panels like the Explorer, Status Bar, or Menu Bar, leveraging [Electron](https://www.electronjs.org/) to implement the VS Code desktop application and browser APIs to provide VS Code for the Web. - `code`: The entry point to the desktop app that stitches everything together, this includes the Electron main file, shared process, and the CLI for example. - `server`: The entry point to our server app for remote development. From da1175abbf3152f70e83962a6c9ae6dbe725918c Mon Sep 17 00:00:00 2001 From: Ben Villalobos Date: Fri, 3 Oct 2025 11:30:31 -0700 Subject: [PATCH 22/50] Updated How to Contribute (markdown) --- How-to-Contribute.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/How-to-Contribute.md b/How-to-Contribute.md index 506c4cc1e4..82cb1a72b6 100644 --- a/How-to-Contribute.md +++ b/How-to-Contribute.md @@ -26,6 +26,22 @@ You'll need the following tools: - Your Python version may not come with all the proper utilities, it is recommended to install the `setuptools` package (`pip install setuptools`) otherwise you may get difficult to debug errors. - A C/C++ compiler tool chain for your platform: - **Windows 10/11 (x64 or ARM64)** + -
Quick install via winget (Windows Package Manager) + Select your operating system, and run the given command in a terminal. +
Windows x64/x86 + winget install --id Microsoft.VisualStudio.2022.BuildTools -e --source winget --override "--add Microsoft.VisualStudio.Component.Windows11SDK.22621 --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre --add Microsoft.VisualStudio.Component.VC.ATL.Spectre --add Microsoft.VisualStudio.Component.VC.ATLMFC.Spectre" +
+
Windows ARM + winget install --id Microsoft.VisualStudio.2022.BuildTools -e --source winget --override "--add Microsoft.VisualStudio.Component.Windows10SDK.20348 --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.VC.Runtimes.ARM.Spectre --add Microsoft.VisualStudio.Component.VC.ATL.ARM.Spectre --add Microsoft.VisualStudio.Component.VC.MFC.ARM.Spectre" +
+
Windows ARM64 + winget install --id Microsoft.VisualStudio.2022.BuildTools -e --source winget --override "--add Microsoft.VisualStudio.Component.Windows10SDK.20348 --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre --add Microsoft.VisualStudio.Component.VC.ATL.ARM64.Spectre --add Microsoft.VisualStudio.Component.VC.MFC.ARM64.Spectre" +
+ + For details on the packages listed, see [Visual Studio Build Tools component directory](https://learn.microsoft.com/en-us/visualstudio/install/workload-component-id-vs-build-tools?view=vs-2022#desktop-development-with-c) + +
+ - Install the Visual C++ Build Environment by either installing the [Visual Studio Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools) or the [Visual Studio Community Edition](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community). The minimum workload to install is `Desktop Development with C++`. But there are additional components from "Individual components": - `MSVC v143 - VS 2022 C++ x64/x86 Spectre-mitigated libs (Latest)` (use `ARM64`, not `ARM` for Windows on ARM, but the x64/x86 may still be needed) - `C++ ATL for latest build tools with Spectre Mitigations` From 6277b3f3965d5f4ff4f398d88b25ae49c7778628 Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 3 Oct 2025 14:16:36 -0700 Subject: [PATCH 23/50] Updated How to Contribute (markdown) --- How-to-Contribute.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/How-to-Contribute.md b/How-to-Contribute.md index 82cb1a72b6..869238d2f9 100644 --- a/How-to-Contribute.md +++ b/How-to-Contribute.md @@ -54,6 +54,9 @@ You'll need the following tools: - **macOS** - [Xcode](https://developer.apple.com/xcode/resources/) and the Command Line Tools, which will install `gcc` and the related toolchain containing `make` - Run `xcode-select --install` to install the Command Line Tools + - **Note**: if you have multiple installations of clang/clang++, make sure you include the following lines in your `~/.bash_profile` file to point CMake to the correct binaries: + - `export CXX="$(xcode-select -p)/usr/bin/clang++"` + - `export CC="$(xcode-select -p)/usr/bin/clang"` - **Linux** * On Debian-based Linux: `sudo apt-get install build-essential g++ libx11-dev libxkbfile-dev libsecret-1-dev libkrb5-dev python-is-python3` * On Red Hat-based Linux: `sudo yum groupinstall "Development Tools" && sudo yum install libX11-devel.x86_64 libxkbfile-devel.x86_64 libsecret-devel krb5-devel # or .i686`. From 8132fa3df067acaeb5db497f2e7b56d443af8385 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Ruales?= <1588988+jruales@users.noreply.github.com> Date: Mon, 6 Oct 2025 15:59:00 -0700 Subject: [PATCH 24/50] Updated Commit Signing (markdown) --- Commit-Signing.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Commit-Signing.md b/Commit-Signing.md index aac3164729..9e01b37e88 100644 --- a/Commit-Signing.md +++ b/Commit-Signing.md @@ -20,6 +20,8 @@ git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe" Install the necessary tools and configure GPG: +First, install Homebrew (https://brew.sh/). Then run the following commands: + ```bash brew install gpg2 gnupg pinentry-mac mkdir -p ~/.gnupg From 7ec159ac65ec648da22d9c425cf397494f303bc4 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Sat, 11 Oct 2025 11:28:20 +0200 Subject: [PATCH 25/50] Updated Source Code Organization (markdown) --- Source-Code-Organization.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source-Code-Organization.md b/Source-Code-Organization.md index 885f63b679..ed7c294928 100644 --- a/Source-Code-Organization.md +++ b/Source-Code-Organization.md @@ -32,7 +32,8 @@ The `core` of VS Code is fully implemented in [TypeScript](https://github.com/mi - may use code from: `common`, `node`, `electron-utility`
- +environments +
# Dependency Injection From 043b76511c2e053b90f20185b2f521d83e2534d1 Mon Sep 17 00:00:00 2001 From: Kai Maetzel <4674940+kieferrm@users.noreply.github.com> Date: Mon, 13 Oct 2025 09:55:55 -0700 Subject: [PATCH 26/50] Updated Iteration Plans (markdown) --- Iteration-Plans.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Iteration-Plans.md b/Iteration-Plans.md index f9479ee411..20da87b11d 100644 --- a/Iteration-Plans.md +++ b/Iteration-Plans.md @@ -1,3 +1,18 @@ +### October 2025 + +* [Iteration Plan](https://github.com/microsoft/vscode/issues/271045) +* [Endgame](https://github.com/microsoft/vscode/issues?q=is%3Aissue+label%3Aendgame-plan+milestone%3A%22October+2025%22) + +### September 2025 + +* [Iteration Plan](https://github.com/microsoft/vscode/issues/266653) +* [Endgame](https://github.com/microsoft/vscode/issues?q=is%3Aissue+label%3Aendgame-plan+milestone%3A%22September+2025%22) + +### August 2025 + +* [Iteration Plan](https://github.com/microsoft/vscode/issues/260895) +* [Endgame](https://github.com/microsoft/vscode/issues?q=is%3Aissue+label%3Aendgame-plan+milestone%3A%22August+2025%22) + ### July 2025 * [Iteration Plan](https://github.com/microsoft/vscode/issues/255701) From a66b2893341bda2a9d8e383cf89304e7241d47b0 Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Wed, 15 Oct 2025 14:23:23 -0700 Subject: [PATCH 27/50] Created Custom eslint rules (markdown) --- Custom-eslint-rules.md | 48 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Custom-eslint-rules.md diff --git a/Custom-eslint-rules.md b/Custom-eslint-rules.md new file mode 100644 index 0000000000..9d28d2f0b2 --- /dev/null +++ b/Custom-eslint-rules.md @@ -0,0 +1,48 @@ +VS Code use a set of custom [ESLint](http://eslint.org) to enforce repo specific coding rules and styles. Thees custom rules are run in addition to many standard ESLine rules. Example custom rules includes: + +- Enforcing proper code layering +- Preventing checking in of `test.only(...)` +- Enforcing conventions in `vscode.d.ts` + +This doc provides a brief overview of how these rules are setup and how you can add a new one + +# Resources +- [ESLint custom rules](https://eslint.org/docs/latest/extend/custom-rules) +- [TypeScript ASTs and eslint](https://typescript-eslint.io/blog/asts-and-typescript-eslint/) +- [TypeScript ESLint playground](https://typescript-eslint.io/play/#showAST=es) + + +# Custom Rule Configuration + +Custom rules are defined in the `.eslint-plugin-local` folder. Each rule is defined in its own TypeScript file. These follow the naming convention: + +- `code-RULE-NAME.ts` — General rules that apply to the entire repo. +- `vscode-dts-RULE-NAME.ts` — Rules that apply just to `vscode.d.ts`. + +These rules are then enabled in the `eslint.config.js` file. This is the main eslint configuration for our repo. It defines a set of file scopes which rules should apple to files in those scopes. + +For example, here's a configuration that enables the no `test.only` rule in all `*.test.ts` files in the VS Code repo: + +``` +{ + // Define which files these rules apply to + files: [ + '**/*.test.ts' + ], + languageOptions: { parser: tseslint.parser, }, + plugins: { + 'local': pluginLocal, + }, + rules: { + // Enable the rule from .eslint-plugin-local/code-no-test-only.ts + 'local/code-no-test-only': 'error', + } +} +``` + +# Creating a new custom rule + +... + + + From 28f2b268214a81e4eb1b0a0a7893606edaa2d4c3 Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Wed, 15 Oct 2025 14:23:42 -0700 Subject: [PATCH 28/50] Updated _Sidebar (markdown) --- _Sidebar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/_Sidebar.md b/_Sidebar.md index 4a5cc5175f..edfd6832d0 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -36,6 +36,7 @@ * [[Contributor License Agreement]] * [[Extension API Guidelines]] * [[Accessibility Guidelines]] +* [[Custom ESLint rules]] **Documentation** * [Extensions](https://code.visualstudio.com/docs/extensions/overview) From 99ac0aabf5913ebab1578c0960d9804360610550 Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Wed, 15 Oct 2025 14:24:45 -0700 Subject: [PATCH 29/50] Updated Custom eslint rules (markdown) --- Custom-eslint-rules.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Custom-eslint-rules.md b/Custom-eslint-rules.md index 9d28d2f0b2..40bdafb4ad 100644 --- a/Custom-eslint-rules.md +++ b/Custom-eslint-rules.md @@ -7,9 +7,9 @@ VS Code use a set of custom [ESLint](http://eslint.org) to enforce repo specific This doc provides a brief overview of how these rules are setup and how you can add a new one # Resources -- [ESLint custom rules](https://eslint.org/docs/latest/extend/custom-rules) -- [TypeScript ASTs and eslint](https://typescript-eslint.io/blog/asts-and-typescript-eslint/) -- [TypeScript ESLint playground](https://typescript-eslint.io/play/#showAST=es) +- [ESLint rules](https://eslint.org/docs/latest/extend/custom-rules) — General documentation about writing eslint rules +- [TypeScript ASTs and eslint](https://typescript-eslint.io/blog/asts-and-typescript-eslint/) — Look at how ESLint works with TS programs +- [TypeScript ESLint playground](https://typescript-eslint.io/play/#showAST=es) — Useful tool for figuring out the structure of TS programs and debugging custom rule selectors # Custom Rule Configuration From 690133c1f8018eb8566e267fd99b85f60d7577a2 Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Wed, 15 Oct 2025 15:39:57 -0700 Subject: [PATCH 30/50] Updated Custom eslint rules (markdown) --- Custom-eslint-rules.md | 65 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/Custom-eslint-rules.md b/Custom-eslint-rules.md index 40bdafb4ad..7f6b9c1f8d 100644 --- a/Custom-eslint-rules.md +++ b/Custom-eslint-rules.md @@ -41,8 +41,71 @@ For example, here's a configuration that enables the no `test.only` rule in all ``` # Creating a new custom rule +This walks through the steps to create a new eslint rule: -... +1. Create a new rule file under `.eslint-plugin-local`. Generally you should call it `code-YOUR-RULE-NAME.ts`, for example, `.eslint-plugin-local/code-no-not-null-assertions-on-undefined-values.ts` +2. In this file, add the rule. Here's a template: + + ```ts + /*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + + import * as eslint from 'eslint'; + + export = new class YourRuleName implements eslint.Rule.RuleModule { + + readonly meta: eslint.Rule.RuleMetaData = { + messages: { + customMessageName: 'message text shown in errors/warnings', + }, + schema: false, + }; + + create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener { + return { + [SELECTOR]: (node: any) => { + // Report errors if needed + return context.report({ + node, + messageId: 'customMessageName' + }); + } + }; + } + }; + ``` + + - Update the name of the class to match the name of your rule + - Add message entries for any errors you want to report + - Update `SELECTOR` with the [ESTree selector](https://eslint.org/docs/latest/extend/selectors) needed to target the nodes you are interested in. Use the [TypeScript ESLint playground](https://typescript-eslint.io/play/#showAST=es) to figure out which nodes you need and debug selectors + +3. Register the rule in `eslint.config.js` + + Generally this is just turning on the rule in the rule list like so: + + ```js + rules: { + // Name should match file name + 'local/code-no-not-null-assertions-on-undefined-values': 'warn', + ... + } + ``` + +If your rule takes custom arguments in the `eslint.config.js`, for example: + +``` +rules: { + 'local/code-no-not-null-assertions-on-undefined-values': ['warn', { testsOk: true }], + ... +} +``` + +Make sure to update the `meta.schema` property on your rule with the JSON schema for the arguments + + +## Adding fixers \ No newline at end of file From 2876aa8579c5c211e1566356f265c256676d4998 Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Wed, 15 Oct 2025 15:41:15 -0700 Subject: [PATCH 31/50] Updated Custom eslint rules (markdown) --- Custom-eslint-rules.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Custom-eslint-rules.md b/Custom-eslint-rules.md index 7f6b9c1f8d..d8b658166a 100644 --- a/Custom-eslint-rules.md +++ b/Custom-eslint-rules.md @@ -9,6 +9,7 @@ This doc provides a brief overview of how these rules are setup and how you can # Resources - [ESLint rules](https://eslint.org/docs/latest/extend/custom-rules) — General documentation about writing eslint rules - [TypeScript ASTs and eslint](https://typescript-eslint.io/blog/asts-and-typescript-eslint/) — Look at how ESLint works with TS programs +- [ESTree selectors](https://eslint.org/docs/latest/extend/selectors) — Info about the selector syntax rules use to target specific nodes in an AST. Works similarly to css selectors. - [TypeScript ESLint playground](https://typescript-eslint.io/play/#showAST=es) — Useful tool for figuring out the structure of TS programs and debugging custom rule selectors @@ -23,7 +24,7 @@ These rules are then enabled in the `eslint.config.js` file. This is the main es For example, here's a configuration that enables the no `test.only` rule in all `*.test.ts` files in the VS Code repo: -``` +```ts { // Define which files these rules apply to files: [ @@ -108,4 +109,5 @@ rules: { Make sure to update the `meta.schema` property on your rule with the JSON schema for the arguments -## Adding fixers \ No newline at end of file +## Adding fixers +Fixers are a useful way to mechanically fix From dffcb304a77d2b108556cf313e129a500393a78e Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Wed, 15 Oct 2025 15:45:38 -0700 Subject: [PATCH 32/50] Updated Custom eslint rules (markdown) --- Custom-eslint-rules.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Custom-eslint-rules.md b/Custom-eslint-rules.md index d8b658166a..b31501ce3d 100644 --- a/Custom-eslint-rules.md +++ b/Custom-eslint-rules.md @@ -109,5 +109,15 @@ rules: { Make sure to update the `meta.schema` property on your rule with the JSON schema for the arguments -## Adding fixers -Fixers are a useful way to mechanically fix +## Adding fixes to custom rules +Fixes are a useful way to mechanically fix basic linting issues, such as auto inserting semicolons. These fix typically work at the AST level, say they are more reliable way to perform bulk fixes compared to find/replaces + +To add a fix for a custom rule: + +1. On the `meta` for your rule, add `fixable: 'code'` + +2. When reporting an error in the rule, also include a `fix`. This is a function that takes a `fixer` argument and returns one or more fixes. + +See the [Double quoted to single quoted string covert fix](https://github.com/microsoft/vscode/blob/b074375e1884ae01033967bf0bbceeaa4795354a/.eslint-plugin-local/code-no-unexternalized-strings.ts#L128) for an example. The ESLint docs also have [details on adding fixes and the fixer api](https://eslint.org/docs/latest/extend/custom-rules#applying-fixes) + +The fixes can be run using `npx eslint --fix` in the VS Code repo From 9713d6e5d48139972ea6d89707d27eb0130c5fea Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Wed, 15 Oct 2025 16:22:54 -0700 Subject: [PATCH 33/50] Updated Custom eslint rules (markdown) --- Custom-eslint-rules.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Custom-eslint-rules.md b/Custom-eslint-rules.md index b31501ce3d..750abf12af 100644 --- a/Custom-eslint-rules.md +++ b/Custom-eslint-rules.md @@ -1,10 +1,12 @@ -VS Code use a set of custom [ESLint](http://eslint.org) to enforce repo specific coding rules and styles. Thees custom rules are run in addition to many standard ESLine rules. Example custom rules includes: +VS Code use a set of custom [ESLint](http://eslint.org) to enforce repo specific coding rules and styles. These custom rules are run in addition to many standard ESLine rules we enable in the project. Some example custom rules includes: - Enforcing proper code layering - Preventing checking in of `test.only(...)` - Enforcing conventions in `vscode.d.ts` -This doc provides a brief overview of how these rules are setup and how you can add a new one +Custom rules are mostly used for enforcing or banning certain coding patterns. We tend to leave stylistic choices up to area owners unless there's a good reason to enforce something project wide. + +This doc provides a brief overview of how these rules are setup and how you can add a new one. # Resources - [ESLint rules](https://eslint.org/docs/latest/extend/custom-rules) — General documentation about writing eslint rules From 5cae5601afc55760a7de7f4c189d05fa0cce7b7d Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Wed, 15 Oct 2025 16:24:29 -0700 Subject: [PATCH 34/50] Updated Custom eslint rules (markdown) --- Custom-eslint-rules.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Custom-eslint-rules.md b/Custom-eslint-rules.md index 750abf12af..b02ad73200 100644 --- a/Custom-eslint-rules.md +++ b/Custom-eslint-rules.md @@ -99,7 +99,7 @@ This walks through the steps to create a new eslint rule: } ``` -If your rule takes custom arguments in the `eslint.config.js`, for example: +Rules can also take custom arguments. For example, here's how we can pass arguments to a custom rule in the `eslint.config.js`: ``` rules: { @@ -108,7 +108,7 @@ rules: { } ``` -Make sure to update the `meta.schema` property on your rule with the JSON schema for the arguments +In these cases amek sure to update the `meta.schema` property on your rule with the JSON schema for the arguments. You can access these arguments using `context.options` in the rule `create` function ## Adding fixes to custom rules From 5b73f42d3e1ab54acea3213e1883c63dade5c6cc Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Thu, 16 Oct 2025 16:49:02 -0700 Subject: [PATCH 35/50] Updated Custom eslint rules (markdown) --- Custom-eslint-rules.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Custom-eslint-rules.md b/Custom-eslint-rules.md index b02ad73200..7bfad6f747 100644 --- a/Custom-eslint-rules.md +++ b/Custom-eslint-rules.md @@ -1,4 +1,6 @@ -VS Code use a set of custom [ESLint](http://eslint.org) to enforce repo specific coding rules and styles. These custom rules are run in addition to many standard ESLine rules we enable in the project. Some example custom rules includes: +# Custom ESLint rules + +We use a set of custom [ESLint](http://eslint.org) to enforce repo specific coding rules and styles. These custom rules are run in addition to many standard ESLint rules we enable in the project. Some example custom rules includes: - Enforcing proper code layering - Preventing checking in of `test.only(...)` @@ -6,23 +8,23 @@ VS Code use a set of custom [ESLint](http://eslint.org) to enforce repo specific Custom rules are mostly used for enforcing or banning certain coding patterns. We tend to leave stylistic choices up to area owners unless there's a good reason to enforce something project wide. -This doc provides a brief overview of how these rules are setup and how you can add a new one. +This doc provides a brief overview of how these rules are setup and how you can add a new one. # Resources -- [ESLint rules](https://eslint.org/docs/latest/extend/custom-rules) — General documentation about writing eslint rules -- [TypeScript ASTs and eslint](https://typescript-eslint.io/blog/asts-and-typescript-eslint/) — Look at how ESLint works with TS programs -- [ESTree selectors](https://eslint.org/docs/latest/extend/selectors) — Info about the selector syntax rules use to target specific nodes in an AST. Works similarly to css selectors. -- [TypeScript ESLint playground](https://typescript-eslint.io/play/#showAST=es) — Useful tool for figuring out the structure of TS programs and debugging custom rule selectors +- [ESLint rules](https://eslint.org/docs/latest/extend/custom-rules) — General documentation about writing eslint rules +- [TypeScript ASTs and eslint](https://typescript-eslint.io/blog/asts-and-typescript-eslint/) — Look at how ESLint works with TS programs +- [ESTree selectors](https://eslint.org/docs/latest/extend/selectors) — Info about the selector syntax rules use to target specific nodes in an AST. Works similarly to css selectors. +- [TypeScript ESLint playground](https://typescript-eslint.io/play/#showAST=es) — Useful tool for figuring out the structure of TS programs and debugging custom rule selectors # Custom Rule Configuration Custom rules are defined in the `.eslint-plugin-local` folder. Each rule is defined in its own TypeScript file. These follow the naming convention: -- `code-RULE-NAME.ts` — General rules that apply to the entire repo. -- `vscode-dts-RULE-NAME.ts` — Rules that apply just to `vscode.d.ts`. +- `code-RULE-NAME.ts` — General rules that apply to the entire repo. +- `vscode-dts-RULE-NAME.ts` — Rules that apply just to `vscode.d.ts`. -These rules are then enabled in the `eslint.config.js` file. This is the main eslint configuration for our repo. It defines a set of file scopes which rules should apple to files in those scopes. +These rules are then enabled in the `eslint.config.js` file. This is the main eslint configuration for our repo. It defines a set of file scopes which rules should apply to files in those scopes. For example, here's a configuration that enables the no `test.only` rule in all `*.test.ts` files in the VS Code repo: @@ -46,12 +48,10 @@ For example, here's a configuration that enables the no `test.only` rule in all # Creating a new custom rule This walks through the steps to create a new eslint rule: - 1. Create a new rule file under `.eslint-plugin-local`. Generally you should call it `code-YOUR-RULE-NAME.ts`, for example, `.eslint-plugin-local/code-no-not-null-assertions-on-undefined-values.ts` 2. In this file, add the rule. Here's a template: - ```ts /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. @@ -108,18 +108,18 @@ rules: { } ``` -In these cases amek sure to update the `meta.schema` property on your rule with the JSON schema for the arguments. You can access these arguments using `context.options` in the rule `create` function +In these cases make sure to update the `meta.schema` property on your rule with the JSON schema for the arguments. You can access these arguments using `context.options` in the rule `create` function ## Adding fixes to custom rules -Fixes are a useful way to mechanically fix basic linting issues, such as auto inserting semicolons. These fix typically work at the AST level, say they are more reliable way to perform bulk fixes compared to find/replaces +Fixes are a useful way to mechanically fix basic linting issues, such as auto inserting semicolons. These fixes typically work at the AST level, so they are a more reliable way to perform bulk fixes compared to find/replaces. To add a fix for a custom rule: 1. On the `meta` for your rule, add `fixable: 'code'` -2. When reporting an error in the rule, also include a `fix`. This is a function that takes a `fixer` argument and returns one or more fixes. +2. When reporting an error in the rule, also include a `fix`. This is a function that takes a `fixer` argument and returns one or more fixes. See the [Double quoted to single quoted string covert fix](https://github.com/microsoft/vscode/blob/b074375e1884ae01033967bf0bbceeaa4795354a/.eslint-plugin-local/code-no-unexternalized-strings.ts#L128) for an example. The ESLint docs also have [details on adding fixes and the fixer api](https://eslint.org/docs/latest/extend/custom-rules#applying-fixes) -The fixes can be run using `npx eslint --fix` in the VS Code repo +The fixes can be run using `npx eslint --fix` in the VS Code repo \ No newline at end of file From cf5151b7815ed14dcc923465e025447eb4ba0885 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Ruales?= <1588988+jruales@users.noreply.github.com> Date: Fri, 17 Oct 2025 17:06:13 +0200 Subject: [PATCH 36/50] Updated Commit Signing (markdown) --- Commit-Signing.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Commit-Signing.md b/Commit-Signing.md index 9e01b37e88..1315be54c2 100644 --- a/Commit-Signing.md +++ b/Commit-Signing.md @@ -58,6 +58,7 @@ With the following options: - Expiration: `0` (does not expire) - Real Name: use your real name - Email address: use your Microsoft email address + - If you use the setting "Keep my email addresses private" (in (here)[https://github.com/settings/emails]), you might need to set the private email address listed there as the email address in this step. - Comment: `Key for signing commits for Microsoft` - **Passphrase**: Pick a long, secure passphrase, which you'll easily remember. From f1c60035ba38b68ba383f58e482c312218daf86c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Ruales?= <1588988+jruales@users.noreply.github.com> Date: Fri, 17 Oct 2025 17:07:14 +0200 Subject: [PATCH 37/50] Updated Commit Signing (markdown) --- Commit-Signing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Commit-Signing.md b/Commit-Signing.md index 1315be54c2..be542d3262 100644 --- a/Commit-Signing.md +++ b/Commit-Signing.md @@ -58,7 +58,7 @@ With the following options: - Expiration: `0` (does not expire) - Real Name: use your real name - Email address: use your Microsoft email address - - If you use the setting "Keep my email addresses private" (in (here)[https://github.com/settings/emails]), you might need to set the private email address listed there as the email address in this step. + - Note: If you use the setting "Keep my email addresses private" (in the [GitHub Email Settings](https://github.com/settings/emails)), you might need to set the private email address listed there as the email address on this step. - Comment: `Key for signing commits for Microsoft` - **Passphrase**: Pick a long, secure passphrase, which you'll easily remember. From cde49d3328acfd897e7e530ebdc660c72b1f31f8 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 29 Oct 2025 03:10:03 -0700 Subject: [PATCH 38/50] Add consolemonitor --- Terminal-Issues.md | 4 ++++ bin/ConsoleMonitor.exe | Bin 0 -> 70656 bytes 2 files changed, 4 insertions(+) create mode 100644 bin/ConsoleMonitor.exe diff --git a/Terminal-Issues.md b/Terminal-Issues.md index a2f25afe61..ffb7fc76e9 100644 --- a/Terminal-Issues.md +++ b/Terminal-Issues.md @@ -87,6 +87,10 @@ Sometimes terminal wrapping doesn't work as expected, for example a line that is To power features like [terminal IntelliSense](https://code.visualstudio.com/docs/terminal/shell-integration#_intellisense-preview) and general understanding of the command that was run in the terminal, we detect what is happening in the prompt by leveraging [shell integration](https://code.visualstudio.com/docs/terminal/shell-integration). When these feature aren't working as expected you can check VS Code's understanding of the prompt input by hovering the terminal tab and clicking Show Details on the bottom. Taking a screenshot of this is helpful to diagnose problems in this area. +### Investigating buffer synchronization issues with Windows/ConPTY + +The helper [ConsoleMonitor.exe](https://github.com/microsoft/vscode/wiki/bin/ConsoleMonitor.exe) is available that is built from [the Windows Terminal repo](https://github.com/microsoft/terminal/blob/b56f61eca1b931ac03aaa8ad148bd95112e42ba1/src/tools/ConsoleMonitor/main.cpp) allows showing the actual buffer maintained by ConPTY in a console window. To do this, just download the binary and run it within the terminal you want to track. + ## Why did you close my issue? We get _a lot_ of issues and have to split our time between responding to and issues and actually improving the product. Because of this, we have a pretty high bar on issue quality and reproducibility, if we can't reproduce the issue we may have to close it off since we cannot action it. diff --git a/bin/ConsoleMonitor.exe b/bin/ConsoleMonitor.exe new file mode 100644 index 0000000000000000000000000000000000000000..3727b6c178e59c1052cd5c1c7ceea81108e90f7e GIT binary patch literal 70656 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
Kf%+(%4w5tsvg2*O69{P9I;fw12x@TNM(tN#%>S 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 Date: Mon, 17 Nov 2025 00:28:42 +0900 Subject: [PATCH 39/50] add linux samply section --- Runtime-debugging.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Runtime-debugging.md b/Runtime-debugging.md index f21e676d47..02119efdf3 100644 --- a/Runtime-debugging.md +++ b/Runtime-debugging.md @@ -2,6 +2,7 @@ - [CPU profiling unresponsive window via tracing](#tracing-cpu-profiler) - [Using samply on macOS](#samply-sampling-profiler) - [Using samply on windows](#samply-sampling-profiler) +- [Using samply on linux](#samply-sampling-profiler) - [Using etw on windows](#etw-windows-profiler) @@ -44,6 +45,15 @@ If you want to capture only application related cpu profile with both JIT and na You can inspect the profile with `samply.exe load --breakpad-symbol-dir profile.json.gz` +## Using samply on linux + +* Download the latest release of https://github.com/mstange/samply/releases +* Start from the command line with following `samply.exe record -s -o profile.json.gz --browsers -- /code --js-flags="--perf-basic-prof --perf-prof-unwinding-info --interpreted-frames-native-stack"` +* Perform the steps for unresponsiveness or slow startups etc +* Exit the application and the profile will be saved to `profile.json.gz` + +You can inspect the profile with `samply.exe load --breakpad-symbol-dir profile.json.gz` + ## Using etw on windows From d28681639638e9fa39c402f074eac7dc592f4f57 Mon Sep 17 00:00:00 2001 From: Kai Maetzel <4674940+kieferrm@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:10:34 -0800 Subject: [PATCH 40/50] Updated Iteration Plans (markdown) --- Iteration-Plans.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Iteration-Plans.md b/Iteration-Plans.md index 20da87b11d..7961a7f819 100644 --- a/Iteration-Plans.md +++ b/Iteration-Plans.md @@ -1,3 +1,9 @@ +### November 2025 + +* [Iteration Plan](https://github.com/microsoft/vscode/issues/277757) +* [Endgame](https://github.com/microsoft/vscode/issues?q=is%3Aissue+label%3Aendgame-plan+milestone%3A%22November+2025%22) + + ### October 2025 * [Iteration Plan](https://github.com/microsoft/vscode/issues/271045) From e175ad898b75a1fa9bfc8a8b17678b2523bcd500 Mon Sep 17 00:00:00 2001 From: Robo Date: Wed, 26 Nov 2025 11:18:53 +0900 Subject: [PATCH 41/50] Updated Runtime debugging (markdown) --- Runtime-debugging.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Runtime-debugging.md b/Runtime-debugging.md index 02119efdf3..47019dce81 100644 --- a/Runtime-debugging.md +++ b/Runtime-debugging.md @@ -65,6 +65,7 @@ You can inspect the profile with `samply.exe load --breakpad-symbol-dir p 3) Registry I/O activity 4) Pool usage 5) VirtualAlloc usage + 6) GPU activity * Set `Performance Scenario` to `General`, `Detail level` to `verbose` and `Logging mode` to `file` * Start the recorder * Start the VSCode application from the terminal with the following additional flags `--js-flags="--enable-etw-stack-walking --interpreted-frames-native-stack"` From a68ff6c913be82be76e5dc837cde90e342ed786d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20A=2E=20L=2E=20Souza?= Date: Tue, 2 Dec 2025 19:35:36 -0300 Subject: [PATCH 42/50] Fix typos and improve text consistency of Extension api guidelines page (#316) * Fixes typos * Improve text consistency by fixing punctuation at end of stand-alone sentences * Improve text consistency by fixing punctuation at end of list sentences * Fix quotation for rule of thumb --- Extension-API-guidelines.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Extension-API-guidelines.md b/Extension-API-guidelines.md index 4461eca214..9752372e87 100644 --- a/Extension-API-guidelines.md +++ b/Extension-API-guidelines.md @@ -23,7 +23,7 @@ Events aren’t defined on the types they occur on but in the best matching name Private Events - -Private or instance events aren't accessible via globals but exist on objects, e.g., `FileSystemWatcher#onDidCreate`. *Don't* use private events unless the sender of the event is private. The rule of thumb is: 'Objects that can be accessed globally (editors, tasks, terminals, documents, etc)' should not have private events, objects that are private (only known by its creators, like tree views, web views) can send private events' +Private or instance events aren't accessible via globals but exist on objects, e.g., `FileSystemWatcher#onDidCreate`. *Don't* use private events unless the sender of the event is private. The rule of thumb is: 'Objects that can be accessed globally (editors, tasks, terminals, documents, etc) should not have private events, objects that are private (only known by its creators, like tree views, web views) can send private events'. Event naming - @@ -100,7 +100,7 @@ We define the API with strictNull-checks in mind. That means we use the optional Undefined is False - -The default value of an optional, boolean property is `false`. This is for consistency with JS where undefined never evaluates to `true` +The default value of an optional, boolean property is `false`. This is for consistency with JS where undefined never evaluates to `true`. JSDOC - @@ -108,19 +108,19 @@ We add JSDoc for all parts of the API. The doc is supported by markdown syntax. # Optional parameters (`?` vs `| undefined`) - For implementation, treat omitting a parameter with `?` the same as explicitly passing in `undefined` -- Use `| undefined` when you want to callers to always have to consider the parameter. -- Use `?` when you want to allow callers to omit the parameter. -- Never use `?` and `| undefined` on a parameter. Instead follow the two rules above to decide which version to use . -- If adding a new parameter to an existing function, use `?` as this allows the new signature to be backwards compatible with the old version. -- Do not add an overload to add an optional parameter to the end of the function. Instead use `?`. +- Use `| undefined` when you want callers to always have to consider the parameter +- Use `?` when you want to allow callers to omit the parameter +- Never use `?` and `| undefined` on a parameter. Instead follow the two rules above to decide which version to use +- If adding a new parameter to an existing function, use `?` as this allows the new signature to be backwards compatible with the old version +- Do not add an overload to add an optional parameter to the end of the function. Instead use `?` # Optional properties (`?` vs `| undefined`) - Do not write code that treats the absence of a property differently than a property being present but set to `undefined` - This can sometimes hit you on spreads or iterating through objects, so just something to be aware of -- For readonly properties on interfaces that VS Code exposes to extensions (this include managed objects, as well as the objects passed to events): - - Use `| undefined` as this makes it clear the property exists but has the value `undefined`. +- For readonly properties on interfaces that VS Code exposes to extensions (this includes managed objects, as well as the objects passed to events): + - Use `| undefined` as this makes it clear the property exists but has the value `undefined` - For readonly properties on options bag type objects passed from extensions to VS Code: - Use `?` when it is ok to omit the property From 122cc3c7b244d89975063f604eff93881f552a44 Mon Sep 17 00:00:00 2001 From: Hawk Ticehurst <39639992+hawkticehurst@users.noreply.github.com> Date: Thu, 4 Dec 2025 16:05:11 -0500 Subject: [PATCH 43/50] Updated How to Contribute (markdown) --- How-to-Contribute.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/How-to-Contribute.md b/How-to-Contribute.md index 869238d2f9..73063c6675 100644 --- a/How-to-Contribute.md +++ b/How-to-Contribute.md @@ -144,6 +144,21 @@ Manage any merge conflicts, commit them, and then push them to your fork. > [!NOTE] > The `microsoft/vscode` repository contains a collection of GitHub Actions that help us with triaging issues. As you probably don't want these running on your fork, you can disable Actions for your fork via `https://github.com/<>/vscode/settings/actions`. +### Use the correct version of Node + +Before installing and building, ensure you are using the correct version of Node. + +It's recommended you install [`fnm`](https://github.com/Schniz/fnm) and run the following command in your `vscode` folder: + +``` +fnm use +``` + +> [!TIP] +> When [configuring fnm](https://github.com/Schniz/fnm#shell-setup) you can add the `--use-on-cd` flag and then `fnm use` will be automatically run whenever you navigate to a new directory. + +Otherwise, check the `.nvmrc` file in the `vscode` folder to see the current version of Node being used and then update Node however you see fit. + ### Build Install and build all of the dependencies using `npm`: From e5ea71869f53ace77cbe8ef6109505f8dca26280 Mon Sep 17 00:00:00 2001 From: Alexandru Dima Date: Fri, 12 Dec 2025 09:27:52 +0100 Subject: [PATCH 44/50] Updated Copilot Issues (markdown) --- Copilot-Issues.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Copilot-Issues.md b/Copilot-Issues.md index 9808474002..150fc8f71b 100644 --- a/Copilot-Issues.md +++ b/Copilot-Issues.md @@ -44,6 +44,11 @@ To look at the information that was send to and received from the Language Model LLM Request Log +### Chat Replay Viewer + +The .chatreplay.json file can be viewed here: https://digitarald.github.io/vscode-chat-logs/ +Chat Replay Viewer + ## Custom Instructions Logs To debug why your [custom instructions](https://code.visualstudio.com/docs/copilot/copilot-customization#_custom-instructions) are not used by the language model test the following. From 265d9095fcf97447f59868c7718f43425ea58b67 Mon Sep 17 00:00:00 2001 From: Harald Kirschner Date: Fri, 12 Dec 2025 11:37:21 -0800 Subject: [PATCH 45/50] Refined chat viewer --- Copilot-Issues.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Copilot-Issues.md b/Copilot-Issues.md index 150fc8f71b..d9e9779804 100644 --- a/Copilot-Issues.md +++ b/Copilot-Issues.md @@ -44,9 +44,10 @@ To look at the information that was send to and received from the Language Model LLM Request Log -### Chat Replay Viewer +### Chat Replay/Log Viewer + +The `.chatreplay.json` file can be viewed here: https://digitarald.github.io/vscode-chat-logs/ , either local-only va drag & drop or linked from an uploaded gist. The viewer also supports markdown logs (right-click `Copy All` in a conversation) and Chat Exports (command: `Chat: Export Chat…`. -The .chatreplay.json file can be viewed here: https://digitarald.github.io/vscode-chat-logs/ Chat Replay Viewer ## Custom Instructions Logs From 9388cc4382bd4cbd6754f43dde37a9892fa3a536 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 18 Dec 2025 03:50:05 -0800 Subject: [PATCH 46/50] Updated Terminal Issues (markdown) --- Terminal-Issues.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Terminal-Issues.md b/Terminal-Issues.md index ffb7fc76e9..4ed4f13392 100644 --- a/Terminal-Issues.md +++ b/Terminal-Issues.md @@ -48,6 +48,36 @@ For some terminal issues it's useful to get trace logs, this can reveal at what If for some reason you're unable to restart VS Code like you're running in a remote, you can change the log level via the command palette (F1 `Developer: Set Log Level...`). +### Why was a terminal command auto approved in chat? + +The terminal tool in chat has a [powerful auto approve feature](https://code.visualstudio.com/docs/copilot/chat/chat-tools#_automatically-approve-terminal-commands) that you can enable in the allow dropdown. Once enabled, this will enable a set of default auto approval rules (unless `"chat.tools.terminal.ignoreDefaultAutoApproveRules": true` is set), you can see this set inside VS Code by auto completing the `chat.tools.terminal.autoApprove` setting in your settings.json file. For example this includes the following rules: + +```json +{ + "find": true, + "/^find\\b.*-(delete|exec|execdir|fprint|fprintf|fls|ok|okdir)\\b/": false, +} +``` + +This allows the `find` command in general, but not a set of arguments that can either write to arbitrary files or execute arbitrary commands. + +In addition to the default rules, enabling auto approve will also enable auto approval rules in your [settings](https://code.visualstudio.com/docs/configure/settings) (user, profile, remote and workspace scopes). + +In order to be approved a _command line_ must: + +1. Achieve one of the following: + - All sub-commands are auto approved by a rule. For example, `foo && bar` would need a `foo` and a `bar` rule. + - The command line was auto approve by a rule. For example, `foo && bar` would match `"/^foo/": { "approve": true, "matchCommandLine": true }`. +2. No sub-commands or command lines are _denied_ by a false auto auto approve rule. For example, `"foo": false` will always block the `foo` command regardless of arguments. +3. For any detected file writes (only redirection at the time of writing), the command passes the rules defined by the `chat.tools.terminal.blockDetectedFileWrites` setting. By default this allows writing to workspace files as typically you will have an SCM protecting the content, and the [timeline view](https://code.visualstudio.com/docs/getstarted/userinterface#_timeline-view) may also allow accessing file history. So `cat README.md > README2.md` will intentionally allow writing to README2.md, or something like `cat /dev/null > README.md` can delete the content of a file. + +If you see a command unexpectedly auto approved, you can follow these steps to diagnose why it was auto approve: + +1. Hovering the tool call's check icon should tell you which rule(s) were used to approve it which can be clicked to go directly to them in your settings file. +2. Opening the Output panel and selecting the Terminal channel will show detailed logging on the reasoning of how the command was approved. + +Note also that we use tree-sitter to parse the commands and extract sub-commands, we use [this PowerShell grammar](https://github.com/airbus-cert/tree-sitter-powershell) for pwsh and [the official bash grammar](https://github.com/tree-sitter/tree-sitter-bash) for everything else. This does mean that using auto approve on zsh may approve something unexpected when there is a conflict with bashes syntax, this is one of the "best effort" things that's talked about in the modal opt-in warning. You can read more about this and other related concerns in the caution section in [the docs](https://code.visualstudio.com/docs/copilot/chat/chat-tools#_automatically-approve-terminal-commands). + ### Using showkey to investigate keybinding issues There is a utility called `showkey` which will print the character codes as received by the application, this is similar to escape sequence logging above but's evaluated on the process side. Install `showkey` by installing the `kbd` package on Linux or `showkey` on homebrew, for example: From e8f0facfd61cb102c741827c3f5361ce4afd7773 Mon Sep 17 00:00:00 2001 From: MD ABDULLAH AL AMIN KHAN Date: Wed, 28 Jan 2026 19:43:10 +0600 Subject: [PATCH 47/50] docs: fix Node.js spelling and 64-bit formatting (#340) - Correct official spelling of Node.js - Normalize 64-bit formatting for consistency --- How-to-Contribute.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/How-to-Contribute.md b/How-to-Contribute.md index 869238d2f9..9d17f7db6a 100644 --- a/How-to-Contribute.md +++ b/How-to-Contribute.md @@ -13,7 +13,7 @@ In order to download necessary tools, clone the repository, and install dependen You'll need the following tools: - [Git](https://git-scm.com) -- [Node.JS](https://nodejs.org/en/download/prebuilt-binaries), **x64** or **ARM64**, version `>=20.x` (also see [`.nvmrc`](https://github.com/microsoft/vscode/blob/main/.nvmrc), which may provide a more precise version to install) +- [Node.js](https://nodejs.org/en/download/prebuilt-binaries), **x64** or **ARM64**, version `>=20.x` (also see [`.nvmrc`](https://github.com/microsoft/vscode/blob/main/.nvmrc), which may provide a more precise version to install) - If using `nvm`, consider updating your default node installation with `nvm alias default ` - Windows: - Do not pick the option to install Windows Build Tools, see the step below for instructions @@ -71,7 +71,7 @@ Make sure you cloned `vscode` into a folder without any spaces in the path hiera In case of issues, try deleting the contents of `~/.node-gyp` (alternatively `~/.cache/node-gyp` for Linux, `~/Library/Caches/node-gyp/` for macOS, or `%USERPROFILE%\AppData\Local\node-gyp` for Windows) first and then run `git clean -xfd` and then try again. -> If you are on Windows or Linux 64 bit systems and would like to compile to 32 bit, you'll need to set the `npm_config_arch` environment variable to `ia32` before running `npm`. This will compile all native node modules for a 32 bit architecture. Similarly, when cross-compiling for ARM, set `npm_config_arch` to `arm`. +> If you are on Windows or Linux 64-bit systems and would like to compile to 32 bit, you'll need to set the `npm_config_arch` environment variable to `ia32` before running `npm`. This will compile all native node modules for a 32 bit architecture. Similarly, when cross-compiling for ARM, set `npm_config_arch` to `arm`. > [!NOTE] > For more information on how to install NPM modules globally on UNIX systems without resorting to `sudo`, refer to [this guide](http://www.johnpapa.net/how-to-use-npm-global-without-sudo-on-osx/). @@ -326,4 +326,4 @@ We accept feedback on translations in language packs via GitHub issues in our [l ## Discussion Etiquette -In order to keep the conversation clear and transparent, please limit discussion to English and keep things on topic with the issue. Be considerate to others and try to be courteous and professional at all times. \ No newline at end of file +In order to keep the conversation clear and transparent, please limit discussion to English and keep things on topic with the issue. Be considerate to others and try to be courteous and professional at all times. From 0c3908ae716a4b3d9e23972a923727d36b18cb3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Ruales?= <1588988+jruales@users.noreply.github.com> Date: Tue, 3 Feb 2026 17:24:34 -0800 Subject: [PATCH 48/50] Mention fnm in prerequisites section too --- How-to-Contribute.md | 1 + 1 file changed, 1 insertion(+) diff --git a/How-to-Contribute.md b/How-to-Contribute.md index 3d7606a8af..5c9fef1e2d 100644 --- a/How-to-Contribute.md +++ b/How-to-Contribute.md @@ -14,6 +14,7 @@ You'll need the following tools: - [Git](https://git-scm.com) - [Node.js](https://nodejs.org/en/download/prebuilt-binaries), **x64** or **ARM64**, version `>=20.x` (also see [`.nvmrc`](https://github.com/microsoft/vscode/blob/main/.nvmrc), which may provide a more precise version to install) + - Consider using `fnm` instead of `nvm`. See the section [Use the correct version of Node](https://github.com/microsoft/vscode/wiki/How-to-Contribute#use-the-correct-version-of-node) below for more details on how to set that up. - If using `nvm`, consider updating your default node installation with `nvm alias default ` - Windows: - Do not pick the option to install Windows Build Tools, see the step below for instructions From 388e7958730a6dec8b0142c56f48dbcbabe3de67 Mon Sep 17 00:00:00 2001 From: Raymond Zhao <7199958+rzhao271@users.noreply.github.com> Date: Wed, 4 Feb 2026 15:12:27 -0800 Subject: [PATCH 49/50] docs: update reviewer aliases (#341) --- Publish-vscode-types.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Publish-vscode-types.md b/Publish-vscode-types.md index 4f96a9aba1..d9c1f346eb 100644 --- a/Publish-vscode-types.md +++ b/Publish-vscode-types.md @@ -18,7 +18,7 @@ Example of PR when releasing 1.84 - https://github.com/DefinitelyTyped/Definitel 4. Update the minor version in `"version"` property in `types/vscode/package.json`, e.g., `1.83.9999` to `1.84.9999` (`9999` is not just an example) 5. Submit the PR - If there are any lint failures in the CI job for the PR, you can disable tests in either the `tslint.json` or `.eslintrc.json` files. But first check to make sure that the lint failure isn't pointing out a real issue in our `vscode.d.ts` or with the copy/paste job. -6. Ask either @jrieken or @kieferrm to merge the PR. +6. Ask either @mjbvz, @jrieken, or @kieferrm to merge the PR. 7. `@types/vscode` will be published in ~10 minutes. 8. Make sure a correct version of `@types/vscode` was published, e.g., if you're releasing VS Code 1.84, you should see `@types/vscode` version 1.84.0 [here](https://www.npmjs.com/package/@types/vscode) From c10225df002e0c62811314aed7f717bd7b35d2d5 Mon Sep 17 00:00:00 2001 From: android323 Date: Sat, 16 May 2026 17:11:16 -0400 Subject: [PATCH 50/50] Create php.yml --- .github/workflows/php.yml | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .github/workflows/php.yml diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml new file mode 100644 index 0000000000..6fc6efb10b --- /dev/null +++ b/.github/workflows/php.yml @@ -0,0 +1,38 @@ +name: PHP Composer +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "main" ] + +permissions: write + contents: + +jobs: + build: latest + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Validate composer.json and composer.lock + run: composer validate --strict + + - name: Cache Composer packages + id: composer-cache + uses: actions/cache@v3 + with: + path: vendor + key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-php- + + - name: Install dependencies + run: composer install --prefer-dist --no-progress + + # Add a test script to composer.json, for instance: "test": "vendor/bin/phpunit" + # Docs: https://getcomposer.org/doc/articles/scripts.md + + # - name: Run test suite + # run: composer run-script test