Most `"configurationDefaults"` settings no longer work on VSCode reload
Does this issue occur when all extensions are disabled?: Yes
most settings in 'configurationDefaults" no longer seem to work when restarting VSCode with a file loaded
https://github.com/microsoft/vscode/blob/104d04f3c581d8fd575389cbbdd67cf6a4002c91/extensions/json-language-features/package.json#L130-L143
Steps to Reproduce:
- Reset
editor.suggest.insertModeandeditor.quickSuggestionsback to their defaults - Open a JSON file
- notice intellisense working correctly
- Restart VSCode
- notice intellisense no longer working correctly
Working:
https://github.com/user-attachments/assets/6fca734b-ceeb-43c2-b932-13004ed1eec7
After reload:
https://github.com/user-attachments/assets/7f28a10b-a748-4797-a7cd-555c8656f50b
notice that I have to manually press ctrl+space to bring up completions and text after the cursor is not replaced
This was working correctly in 1.93.0 but broke in 1.94.0
- VS Code Version: 1.94.2
- OS Version: Windows 11
This also affects "editor.insertSpaces", "editor.tabSize" and "editor.autoIndent" which are used by YAML
https://github.com/microsoft/vscode/blob/d72a0f0af6edf3601ec95328755841695aa300dd/extensions/yaml/package.json#L66-L71
- Create YAML file
- type text
abc: - press enter
- notice no indentation ✅
- press tab
- notice 2 spaces ✅
- remove all whitespace
- Restart VSCode (with file open)
- press enter
- notice indentation in the form of 1tab or 4spaces ❌
This should prob be added to next Recovery release?
The issue seems to affect files that were open during the reload. After I closed and reopened the YAML file, the behaviour went back to normal. I do not think that this is a candidate-worthy issue but that it is a papercut.
@sandy081 this issue affects configurationDefault settings, but I'm unsure whether it has to do with config, the extension host, or open editors. Could you take a look?
my guess would be the relationship between the extension host and open editors due to:
- https://github.com/microsoft/vscode/issues/231765 intellisense
- https://github.com/microsoft/vscode/issues/202938 brackets
- https://github.com/microsoft/vscode/issues/231168 comments
is rather annoying when developing an extension due to having to reload the window all the time and https://github.com/microsoft/vscode/issues/226511 not being added
Configuration seems to be correct. After reload configuration model has correct values and sending right events on change. I can also see quick suggestions but I should wait until extensions are activated. So I suspect this could be an issue in editor land.
I just want to flag that I get multiple reports every week by very confused users about why e.g. their code is suddenly not normalized anymore, why VS Code is suddenly inputting incorrect whitespace characters into their documents or why their code is suddenly unreadable because ambiguousCharacters has been re-enabled.
@sandy081 please provide a video demonstrating auto quick suggestions within strings working please
why didn't you wait for extensions to load?
the "configurationDefaults" settings come from extensions
caused by one of these commits https://github.com/microsoft/vscode/compare/4849ca9bdf9666755eb463db297b69e5385090e3...dc9412125d4e0a480593962ae2687e74e64af728
@bpasero @jrieken @alexdima caused by
- https://github.com/microsoft/vscode/pull/227184
please fix thank you
Easy repro:
- open a markdown file with long lines so that you see word wrapping
- reload the window
- 🐛 word wrap is not applied
@sandy081 need your help. This is indeed a regression from https://github.com/microsoft/vscode/pull/227184 but that change is too large to even look at.
What I can find out so far is that the configuration value does not include the language overrides at the time I am resolving it here:
https://github.com/microsoft/vscode/blob/21525b01bf68bf9250cb856f192628fffc449234/src/vs/workbench/browser/parts/editor/textEditor.ts#L303
On startup I can see that it is being called 3 times:
- once from
setInput - once from
createTextModel - and finally from when the language ID changes to
markdown
This is same before the ESM work, so the sequence seems to match. But the config object misses entries for markdown, as you can see when comparing the 2 values before and after:
After ESM
TextFileEditor.updateEditorConfiguration (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/browser/parts/editor/textEditor.ts:306)
<anonymous> (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/browser/parts/editor/textEditor.ts:188)
Emitter._deliver (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:1208)
Emitter._deliverQueue (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:1219)
Emitter.fire (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:1243)
<anonymous> (/Users/bpasero/Development/Microsoft/vscode/src/vs/editor/browser/widget/codeEditor/codeEditorWidget.ts:1759)
Emitter._deliver (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:1208)
Emitter.fire (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:1239)
ViewModelEventDispatcher._emitOutgoingEvents (/Users/bpasero/Development/Microsoft/vscode/src/vs/editor/common/viewModelEventDispatcher.ts:64)
ViewModelEventDispatcher.emitOutgoingEvent (/Users/bpasero/Development/Microsoft/vscode/src/vs/editor/common/viewModelEventDispatcher.ts:39)
<anonymous> (/Users/bpasero/Development/Microsoft/vscode/src/vs/editor/common/viewModel/viewModelImpl.ts:443)
Emitter._deliver (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:1208)
Emitter._deliverQueue (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:1219)
Emitter.fire (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:1243)
TokenizationTextModelPart.setLanguageId (/Users/bpasero/Development/Microsoft/vscode/src/vs/editor/common/model/tokenizationTextModelPart.ts:373)
TextModel._setLanguage (/Users/bpasero/Development/Microsoft/vscode/src/vs/editor/common/model/textModel.ts:1966)
<anonymous> (/Users/bpasero/Development/Microsoft/vscode/src/vs/editor/common/model/textModel.ts:327)
Emitter._deliver (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:1208)
Emitter.fire (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:1239)
EmitterObserver.endUpdate (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:705)
TransactionImpl.finish (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/observableInternal/base.ts:411)
transaction (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/observableInternal/base.ts:345)
subtransaction (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/observableInternal/base.ts:381)
FromEventObservable.handleEvent (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/observableInternal/utils.ts:144)
Emitter._deliver (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:1208)
Emitter._deliverQueue (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:1219)
Emitter.fire (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:1243)
<anonymous> (/Users/bpasero/Development/Microsoft/vscode/src/vs/editor/common/services/languageService.ts:40)
Emitter._deliver (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:1208)
Emitter.fire (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/event.ts:1239)
LanguagesRegistry._registerLanguages (/Users/bpasero/Development/Microsoft/vscode/src/vs/editor/common/services/languagesRegistry.ts:151)
LanguagesRegistry._initializeFromRegistry (/Users/bpasero/Development/Microsoft/vscode/src/vs/editor/common/services/languagesRegistry.ts:119)
LanguagesRegistry.setDynamicLanguages (/Users/bpasero/Development/Microsoft/vscode/src/vs/editor/common/services/languagesRegistry.ts:108)
<anonymous> (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/services/language/common/languageService.ts:273)
ExtensionPoint._handle (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/services/extensions/common/extensionsRegistry.ts:154)
ExtensionPoint.acceptUsers (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/services/extensions/common/extensionsRegistry.ts:145)
AbstractExtensionService extends Disposable._handleExtensionPoint (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.ts:1162)
NativeExtensionService._doHandleExtensionPoints (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.ts:1092)
NativeExtensionService._resolveAndProcessExtensions (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.ts:543)
await (Unknown Source:0)
_initialize (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.ts:463)
await (Unknown Source:0)
<anonymous> (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/services/extensions/electron-sandbox/nativeExtensionService.ts:140)
requestIdleCallback (Unknown Source:0)
_runWhenIdle (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/common/async.ts:1369)
runWhenWindowIdle (/Users/bpasero/Development/Microsoft/vscode/src/vs/base/browser/dom.ts:244)
<anonymous> (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/services/extensions/electron-sandbox/nativeExtensionService.ts:139)
Promise.then (Unknown Source:0)
NativeExtensionService (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/services/extensions/electron-sandbox/nativeExtensionService.ts:137)
_createInstance (/Users/bpasero/Development/Microsoft/vscode/src/vs/platform/instantiation/common/instantiationService.ts:162)
_createServiceInstance (/Users/bpasero/Development/Microsoft/vscode/src/vs/platform/instantiation/common/instantiationService.ts:295)
_createServiceInstanceWithOwner (/Users/bpasero/Development/Microsoft/vscode/src/vs/platform/instantiation/common/instantiationService.ts:284)
_createAndCacheServiceInstance (/Users/bpasero/Development/Microsoft/vscode/src/vs/platform/instantiation/common/instantiationService.ts:273)
_safeCreateAndCacheServiceInstance (/Users/bpasero/Development/Microsoft/vscode/src/vs/platform/instantiation/common/instantiationService.ts:206)
_getOrCreateServiceInstance (/Users/bpasero/Development/Microsoft/vscode/src/vs/platform/instantiation/common/instantiationService.ts:190)
get (/Users/bpasero/Development/Microsoft/vscode/src/vs/platform/instantiation/common/instantiationService.ts:102)
<anonymous> (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/browser/workbench.ts:133)
invokeFunction (/Users/bpasero/Development/Microsoft/vscode/src/vs/platform/instantiation/common/instantiationService.ts:109)
startup (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/browser/workbench.ts:128)
open (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/electron-sandbox/desktop.main.ts:144)
await (Unknown Source:0)
main (/Users/bpasero/Development/Microsoft/vscode/src/vs/workbench/electron-sandbox/desktop.main.ts:417)
<anonymous> (/Users/bpasero/Development/Microsoft/vscode/src/vs/code/electron-sandbox/workbench/workbench.ts:307)
Before ESM
TextFileEditor.updateEditorConfiguration (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/workbench/browser/parts/editor/textEditor.ts:306)
<anonymous> (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/workbench/browser/parts/editor/textEditor.ts:188)
Emitter._deliver (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/base/common/event.ts:1242)
Emitter._deliverQueue (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/base/common/event.ts:1253)
Emitter.fire (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/base/common/event.ts:1277)
<anonymous> (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/editor/browser/widget/codeEditor/codeEditorWidget.ts:1741)
Emitter._deliver (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/base/common/event.ts:1242)
Emitter.fire (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/base/common/event.ts:1273)
ViewModelEventDispatcher._emitOutgoingEvents (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/editor/common/viewModelEventDispatcher.ts:64)
ViewModelEventDispatcher.emitOutgoingEvent (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/editor/common/viewModelEventDispatcher.ts:39)
<anonymous> (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/editor/common/viewModel/viewModelImpl.ts:443)
Emitter._deliver (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/base/common/event.ts:1242)
Emitter._deliverQueue (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/base/common/event.ts:1253)
Emitter.fire (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/base/common/event.ts:1277)
TokenizationTextModelPart.setLanguageId (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/editor/common/model/tokenizationTextModelPart.ts:379)
TextModel._setLanguage (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/editor/common/model/textModel.ts:1961)
<anonymous> (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/editor/common/model/textModel.ts:326)
Emitter._deliver (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/base/common/event.ts:1242)
Emitter.fire (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/base/common/event.ts:1273)
EmitterObserver.endUpdate (/Users/bpasero/Development/Microsoft/vscode-electron-22.x/src/vs/base/common/event.ts:711)
Any ideas?
Difference seems to be the configurations registrations from extensions. Before ESM, at that instance configurations of all extensions are read and registered and after ESM, they are not. Hence you are not seeing those configurations from extensions. BTW, in this particular scenario, markdown language configuration defaults are contributed by the markdown extension
https://github.com/microsoft/vscode/blob/9c1fb6ebdc1c895b0a1678524cffa4c116a398d0/extensions/markdown-language-features/package.json#L729-L738
I would expect that editor's configurations should be updated after markdown language specific configurations are registered.
Before ESM, at that instance configurations of all extensions are read and registered and after ESM, they are not
@sandy081 is there a way to drill into why that is not the case anymore with ESM, I cannot recall a change for ESM related to that, other than converting the imports to be relative and some :lipstick: around how node modules are loaded.
It is especially weird that the callstack is originating from ExtensionPoint._handle where I would expect that the package.json is already processed?
can confirm fixed
Thank you very much bpasero 🥳🙌❤️
there still seems to be a issue with YAML not changing to 2 spaces it (still incorrectly) switches to 4 spaces on reload
new bug report?
@bpasero On the latest insiders version, I can also confirm that while our editor.unicodeHighlight.ambiguousCharacters configuration default is now immediately active upon restarting VS Code, it is still inputting the incorrect amount of spaces until the tab is closed and re-opened (i.e. switching the tab isn't sufficient to resolve the issue).
Yeah I would suggest we go into filing new issues for remaining regressions. Please ping me on these issues or mention them here. Thanks!
@RedCMD btw I would like to thank you for willing to bisect this down to the offending commit and for collecting all the related issues. Sorry it took us that long to work on the fixes 🙏
I actually went ahead and reported https://github.com/microsoft/vscode/issues/240567 for the editor.tabSize issue. That one does not seem like it does have a straight forward fix, at least from my pov.
Pushed a workaround that would support specific spaces/tabs settings for go, makefile, shellscript and yaml, basically the languages we ship out of the box, by contributing these settings from core. Its not a complete fix though for when a non-built-in extension defines these defaults.
Unfortunately, we do :-(
I'm definitely looking forward to a proper fix.
This bug has been fixed in the latest release of VS Code Insiders!
@RedCMD, you can help us out by commenting /verified if things are now working as expected.
If things still don't seem right, please ensure you're on version 233d086d5a613a1e9f016986f5ff056c17322c31 of Insiders (today's or later - you can use Help: About in the command palette to check), and leave a comment letting us know what isn't working as expected.
Happy Coding!
/verified