-
Notifications
You must be signed in to change notification settings - Fork 29.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature Request: Enable/disable extensions from config file #40239
Comments
We can re-use the existing extensions.json file for this. Currently the json file looks like this:
We could have new entries in this json file like
All installed extensions would be enabled by default. If there is an entry like the above, then they would be disabled. When user clicks on the Currently we store the list of disabled extensions for each workspace in local storage. @sandy081 Thoughts? |
@ramya-rao-a Extensions recommendation file is meant to be shared (in team). Disabling and enabling extensions is user specific. Merging these two is not a good idea I guess. |
This could be merged with #48743, in that we can prompt a user to enable and disabled extensions which have been marked as recommended, and prompt the user to disable any enabled extensions marked as unwanted. This could be saved per workspace. The control would still be at the hands of the user to accept/reject/permanently ignore those prompts. It could end up with a similar feel to the existing prompt to install recommended extensions, where the team suggests the user do something, but the user is at liberty to ignore those suggestions. |
I think this could be useful, as in large team projects, this would allow to have a different but consisten configuration across all the projects inside an organization. |
I would personally prefer to have a whitelist, not a blacklist, of extensions for a particular workspace. The reason is I might add extensions to Code later and I don't want to go to every workspace and explicitly disable that extension. On top of that, if some extension is disabled and I don't have it installed, no action is required :) I would really like to see this feature implemented. My VS Code has tons of extensions, but some projects use only a small slice of those, so I don't see a reason why they should be enabled and slow everything down/create unnecessary cognitive load. |
@jankalfus I read somewhere that VSCode only loads the extensions that it needs, so having then installed and enable should not slow down your editor if you are not using it, but maybe this can be clarify by the team. |
@michaeljota I would also expect it to work like that, but I remember the C# extension complaining on every VS Code start that it needs to download some files for code completion or something. It didn't matter which project I opened (plain JavaScript). This might have been fixed though, I haven't been using Code for about 6 months, just got back to it a few days ago :) |
@jankalfus Well, yeah, I remember that. But I think that's only the first time it updates or something like that. Like I said, maybe the team can explain a little bit about how/when the extensions are actually being used. |
Each extension declares when it should be activated by VS Code. See Activation Events |
I know you can disable an extension in a Workspace, what I'm asking is a file to do this automatically. |
@michaeljota Just want to understand what is the use case to have this in a file? |
From @FancyBanana Currently it seems that information about which extension is enabled/disabled is stored globally. |
@FancyBanana I think your request is for synchronising workspaces? |
@sandy081 No, my idea is pretty much creating another .json config file inside .vscode folder that overrides enabled/disabled state of extensions. Also a good point form @burtek:
|
@FancyBanana creating a file under |
@sandy081 I understand that there are limitations to what additions we can make to the vscode architecture (even though I don't know the nature and extent of these limitations), therefore I would like to propose a solution that works with the existing implementation of workspace specific enabling/disabling of apps. Why don't we implement a new command that you can run from the command pallete called:
This command should:
The workspace specific settings would still be stored in local storage where it is currently stored. Just the manipulation of those settings would be automated by a command that takes the already existing extensions.json file as input, thereby adding a secondary purpose/utility to it without introducing side effects, because the command has to be explicitly invoked by the user. This would make the recommended extensions feature more complete, because it also provides a convenient way to accept these recommendations. This command should not automatically install recommended extensions found in ".vscode/extensions.json", though, which is not always desirable, but for those that also wish to install extensions that are not yet installed, that could become a separate command too called:
This command should:
Implementing these commands would allow for a workflow where developers have template extensions.json files that they can copy into their respective workspaces, then run at most two commands (which they could even make into an initialization build task) and then be completely set up to work on their desired project. We could even create commands like: Which would allow developers to create and browse through a list of recommended extensions templates for the extensions.json file. These templates would also be saved in local storage. It could look something like this dropdown list where templates are user created:
Sorry if perhaps this comment is a bit lengthy. Bolding is added to highlight, not to shout. |
I'd love this feature implemented and for me it would definitely be to sync workspaces: I use multiple machines for my work, I can already sync installed extensions and a number of config settings using dedicated extensions (e.g. shan.code-settings-sync) but if I want to disable some extensions in specific workspaces then I have to manually replicate the configuration across all machines |
My use case is efficiently toggling LSP used for a specific language, in this case C++ where I want to easily toggle between clangd and vscode-cpptools. I want to be able to create a task that disables one and enables the other + also in the same task change the current c_cpp_properties config used, one set up for vscode-cpptools usage and one for clangd. |
I'm running into a similar issue as mentioned earlier. In our React-Native project we're using ESLint for code formatting and don't want to use Prettier. If the Prettier extension is installed, it will start formatting files. The Workarounds like using a shared profile or additional extensions to manage extensions are not a proper solutions. If the developer has to take manual action, it is not a matter of if things will go wrong, but just when things will go wrong. |
I can provide another example of when disabling extensions per-project will be really benefitial: We working on monorepo with: nestjs, vue, where some vue projects using tailwind and others vuetify. Like main site is in vue with tailwind and admin interface using vue and vuetify. I dont need tailwind autocomplete when working on admin interface and i dont need nestjs support when working on frontend. So opportunity to disable some extensions when i working on files in specific subdirectories and be able to share that across the whole team is really something that could help. |
When developing a Vue project, I encountered the issue shown in the screenshot. Vue plugins are incompatible with Deno plugins, Lit plugins, and Svelte plugins. In scenarios where multiple people are collaborating on this Vue project, it would be very convenient to disable the Deno, Lit, and Svelte plugins via a configuration file. |
For the record, the new feature of Local workspace extensions may appear useful as a workaround for some here. In particular, it can be misused as follows:
This is likely not how the developers meant the feature of "Local Workspace Extensions" to be used, but this roughly meets the requirement to enable the extensions using a configuration file. Unfortunately, the developers solved one problem (workspace-specific extensions) by introducing another one (security issue due to the extensions being supplied from unverified repositories), which they in turn solved by making such extensions a kind of recommendations (instead of just running them), which in turn brings us back to the original problem: the setup will require manual interaction instead of just working out of the box. The effort of this interaction can be kept low, but putting these extensions under recommendations creates interference with other expectations. In particular, we prefer to use "extensions.ignoreRecommendations": true and even "extensions.showRecommendationsOnlyOnDemand": true . The former suppresses the notification, and the latter hides the desired local workspace extensions from the "Extensions" sidebar. |
Such ability would resolve my question of setting up rapidly created projects. Setting up a single workspace and then simply cloning it will be sufficient to start working on a new lesson without much fiddling. |
I really appreciate all the effort that tries to tackle this issue through extension, I've tried going the same route before too and come to a conclusion:
An extension should not have the capability to enable/ disable another extensions. So I kinda agree that exposing API such as #201672 should not be supported. Imagine if such API is actually supported: What if we ended up with an extension that forcefully enable/ disable some extensions and we want to (forcefully) enable/ disable that extension (or some extensions it enable/ disable)? should we make/ install yet another extension to enable/ disable said extension? ... |
When I converted the VSCode profile file to JSON, I received the following error:
I verified the code and saw that it failed with |
I have many different versions of Python projects, and due to the plugins in the Python ecosystem no longer being maintained for certain versions, this feature is very much needed. Has this suggestion from seven years ago not been implemented yet? |
recently I add fuzz test for for my rust project. And I install a test explorer adaptor for rust: https://marketplace.visualstudio.com/items?itemName=swellaby.vscode-rust-test-adapter This extension get the list of tests by run cargo command. such I want to be able to tell my team in a file that I recommend disabling this extension. |
@github-yxb , @cathaysia my extension might help you for the time being: Unwanted ExtensionVS Code: |
Thanks for your suggestion. But it may sound strange to suggest that the team install an extension to tell them that other extensions are not available.;) |
@cathaysia sure, but I am not aware of any other better solution or possibilities. If there is anything, please let me/us know ;) Let's hope, VS Code team will improve the whole situation at some point. |
If the vscode team doesn't provide a built-in solution, the best thing to do might be to just ignore it. Other people on the team may or may not run into the problem, but who cares? As long as it doesn't happen to me, it's fine. |
The most important downside of profiles is that you have to separately manage extensions for them, which doubles your maintenance burden at the very least. |
😏 The latest update logs mention Copilot the most,they might be busy dealing with Cursor. |
Any update? |
IT'S ALMOST 7 YEARS GUYS 😶🌫️ |
Ask ドラえもん fixed this. |
Is there any progress? |
Any updates on this? |
Explain:
There are certain extensions that play well together, and it would be useful to be able to set a config file to enable and disable certain extensions in that workspace. This would be a config file, like the extensions recommendations, but with a series of parameters that would allow to enable and disable certain extensions.
This would be like a config file for the "[Dis]Allow (Workspace)" setting.
The text was updated successfully, but these errors were encountered: