I am trying to update setting.json from my vs code extension and I want to add below code
"files.associations": {
"*.app": "auraComponent"
}
In other words I want to add below key value pair from extension to the users who are going to install my app
So I tried putting the below code in extension.js but it didn't update the settings.
import { ConfigurationTarget, workspace } from 'vscode';
const configuration = workspace.getConfiguration('files.associations');
configuration.update('.app', 'auraComponent', ConfigurationTarget.Global).then(() => {
// take action here
});
Could someone please suggest if I am using the right approach to update the user or workspace settings and also if the code inside extension.js would be executed automatically or not.
Update
I have added extension.js and included the js code as mentioned by mark in his answer
and update my package.json as below
"main": "./extension",
"activationEvents": [
"*"
],
If I run my extension on debug mode then it works fine but not working in real time.
CodePudding user response:
The below works whether there is a pre-existing files.association
setting or not. If there is already one, the new association is added to it (and so may be located somewhere other than the end of the settings file - otherwise a wholly new files.associations
setting will be added to the very end of the settings.json
file..
const fileConfiguration = vscode.workspace.getConfiguration('files');
const associations = fileConfiguration.get('associations');
associations['*.app'] = "auraComponent";
fileConfiguration.update('associations', associations, vscode.ConfigurationTarget.Global).then(() => {
// take action here
});
Adapted from https://stackoverflow.com/a/49566662/836330.
As explained there, what you really want to update is the associations
object, that is the value to be updated. "*.app": "auraComponent
is not a configuration key. files.associations
is the key and there is an object {...}
which is its value.