Code change:
private start(): void { this.textModelResolverService.registerTextModelContentProvider('vscode', { <del> provideTextContent: (uri: URI): Promise<ITextModel | null> | null => { </del> <ins> provideTextContent: async (uri: URI): Promise<ITextModel | null> => { </ins> if (uri.scheme !== 'vscode') { return null; } if (uri.authority === 'schemas') { <del> const schemaModel = this.getSchemaModel(uri); if (schemaModel) { return Promise.resolve(schemaModel); } </del> <ins> return this.getSchemaModel(uri); </ins> } <del> return Promise.resolve(this.preferencesService.resolveModel(uri)); </del> <ins> return this.preferencesService.resolveModel(uri); </ins> } }); } <del> private getSchemaModel(uri: URI): ITextModel | null { let schema = schemaRegistry.getSchemaContributions().schemas[uri.toString()]; if (schema) { const modelContent = JSON.stringify(schema); const languageSelection = this.languageService.createById('jsonc'); const model = this.modelService.createModel(modelContent, languageSelection, uri); const disposables = new DisposableStore(); disposables.add(schemaRegistry.onDidChangeSchema(schemaUri => { if (schemaUri === uri.toString()) { schema = schemaRegistry.getSchemaContributions().schemas[uri.toString()]; model.setValue(JSON.stringify(schema)); } })); disposables.add(model.onWillDispose(() => disposables.dispose())); return model; } return null; </del> <ins> private getSchemaModel(uri: URI): ITextModel { let schema = schemaRegistry.getSchemaContributions().schemas[uri.toString()] ?? {} /* Use empty schema if not yet registered */; const modelContent = JSON.stringify(schema); const languageSelection = this.languageService.createById('jsonc'); const model = this.modelService.createModel(modelContent, languageSelection, uri); const disposables = new DisposableStore(); disposables.add(schemaRegistry.onDidChangeSchema(schemaUri => { if (schemaUri === uri.toString()) { schema = schemaRegistry.getSchemaContributions().schemas[uri.toString()]; model.setValue(JSON.stringify(schema)); } })); disposables.add(model.onWillDispose(() => disposables.dispose())); return model; </ins> } dispose(): void {

Related discussion:
text: Type: <bBug</bI got the following error randomly while changing workspace settings. I used the extension bisect feature to see if it was an extension, but nothing was identified on the very first pass. The issue continued to persist, until Visual Studio Code was reloaded. Here's the message that appeared in the problem pane: Problems loading reference 'vscode://schemas/settings/workspace': Unable to load schema from 'vscode://schemas/settings/workspace': cannot open vscode://schemas/settings/workspace. Detail: Unable to resolve text model content for resource vscode://schemas/settings/workspace. I found a similar issue regarding multi-root workspaces on github: My workspace has multiple folders. I only edited the workspace settings and I never touched the folder settings for the workspace. I did made some recent adjustments by installing/uninstalling extensions, switching profiles, and editing workspace settings. VS Code version: Code - Insiders 1.77.0-insider (, 2023-03-14T05:23:49.668Z) OS version: WindowsNT x64 10.0. Modes: Sandboxed: Yes <details<summarySystem Info</summary </details<details<summaryExtensions (11)</summaryExtensionVersion ------ Ionide-fsharp7.5.1 csharp1.25.4 dotnet-interactive-vscode1.0. vscode-dotnet-pack1.0.12 python2023.4.1 vscode-pylance2023.3.20 jupyter2023.3. jupyter-keymap1.1.0 jupyter-renderers1.0.15 vscode-jupyter-cell-tags0.1.6 vscode-jupyter-slideshow0.1.5 </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --
This is probably caused by of the schema (and others) It would be better to register the schema immediately but empty, and to set it later again with content.
Can this be at least workarounded somehow? It's very irritating - I cant edit any workspace settings
I'm sure a hotfix will release the fix to all of us soon, but here's a workaround for now: I found that poking any settings key in restores proper autocomplete/hover in VSCode's until next VSCode restart. But a key must be poked after every restart.