The JS/TS settings were written before many modern configuration options, such as language scoping, were supported. As a result, we have duplicate versions of many settings: typescript.* and javascript.*
If we were starting fresh, all of these would be under a single top level scope (js/ts) and we'd use language specific settings instead. With TS 7.0 coming up, I think it's time we bite the bullet and finally try to clean things up.
What this means for users
Existing configurations such as:
"javascript.format.enable": false,
"typescript.format.enable": true,
Will become:
"[javascript,javascriptreact]": {
"js/ts.format.enable": false,
},
"[typescript,typescriptreact]": {
"js/ts.format.enable": true,
}
If the values are the same for both js and ts, you can just set: "js/ts.format.enable": false
Plan
-
February: Add new js/ts.* versions of the settings
- Make old settings deprecated
- Keep respecting old settings if they are set (however new settings override them)
- Make sure new settings descriptions show up if you search either "javascript" or "typescript" in the setting ui (may require a small update to the setting description
- In a limited number of cases, we may also want to align names (e.g.
enabled vs enable)
-
February: For tsgo specifically, start reading the new settings, with fallback logic just to the typescript.* version of the (today is only checks typescript.*, not javascript.*)
-
March or April: start auto migrate these settings for users. We don't want to do this immediately so that users have more time to make sure they have picked up a VS Code version that supports the new values
- We likely only want to do this for user settings to avoid generating extra changes in workspaces
-
Many months out: remove observing the old settings ONLY in tsgo
- We will keep respecting the old settings in VS Code for at least a year and possibly longer to support old workspace settings we encounter
The JS/TS settings were written before many modern configuration options, such as language scoping, were supported. As a result, we have duplicate versions of many settings:
typescript.*andjavascript.*If we were starting fresh, all of these would be under a single top level scope (
js/ts) and we'd use language specific settings instead. With TS 7.0 coming up, I think it's time we bite the bullet and finally try to clean things up.What this means for users
Existing configurations such as:
Will become:
If the values are the same for both js and ts, you can just set:
"js/ts.format.enable": falsePlan
February: Add new
js/ts.*versions of the settingsenabledvsenable)February: For tsgo specifically, start reading the new settings, with fallback logic just to the
typescript.*version of the (today is only checkstypescript.*, notjavascript.*)March or April: start auto migrate these settings for users. We don't want to do this immediately so that users have more time to make sure they have picked up a VS Code version that supports the new values
Many months out: remove observing the old settings ONLY in tsgo