Change:
testing : Yes, there is now a warning icon in the status bar, but it is difficult to understand its purpose: For a json scheme url with a non-existing hostname the hover message shows this: ! For a json scheme url with a non-existing version number the hover message shows this: ! In both cases the error shown is too low-level and the message does not explain that the status refers to the json scheme of the current editor contents.
FYI
Looks like I misinterpreted what kind of messages I'd get from the backend, sorry for that! We could resort to showing a generic message like 'Unable to resolve JSON schema from (url)', which would probably be sufficient for most issues. I also considered logging the error to console (don't know your policy on that), but if we get whole pages in the error message, that's not an option. Displaying a generic message with the URL only would also Otherwise I guess we'd need to parse the error message to find out which kind and display a meaningful message, but that doesn't seem right. Another implication of this is that we'll probably have to re-add at least one layer of error description to vscode-languageservice-json - I always had a prefix with something like "Unable to resolve (something)", but that might have been a code reloading issue or specific to the way I was testing, by cutting the Internet connection and blocking DNS resolutions. Let me know if a generic error message defined only in the client would work.
That's fine. Users don't really see logs.
I can repro with this setting:

Discussion:
let documentSelector = ['json', 'jsonc']; <del> let statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, 0); statusBarItem.command = '_json.retrySchema'; toDispose.push(statusBarItem); let showStatusBarItem = (message: string) => { statusBarItem.tooltip = message + 'n' + localize('json.clickToRetry', 'Click to retry.'); statusBarItem.text = '$(alert)'; statusBarItem.show(); }; </del> <ins> let schemaResolutionErrorStatusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, 0); schemaResolutionErrorStatusBarItem.command = '_json.retryResolveSchema'; schemaResolutionErrorStatusBarItem.tooltip = localize('json.schemaResolutionErrorMessage', 'Unable to resolve schema.') + ' ' + localize('json.clickToRetry', 'Click to retry.'); schemaResolutionErrorStatusBarItem.text = '$(alert)'; toDispose.push(schemaResolutionErrorStatusBarItem); </ins> let fileSchemaErrors = new Map<string, string>();

}, handleDiagnostics: (uri: Uri, diagnostics: Diagnostic[], next: HandleDiagnosticsSignature) => { const schemaErrorIndex = diagnostics.findIndex(candidate => candidate.code === /* SchemaResolveError */ 0x300); <del> if (schemaErrorIndex !== -1) { // Show schema resolution errors in status bar only; ref: #51032 const schemaResolveDiagnostic = diagnostics[schemaErrorIndex]; fileSchemaErrors.set(uri.toString(), schemaResolveDiagnostic.message); showStatusBarItem(schemaResolveDiagnostic.message); diagnostics.splice(schemaErrorIndex, 1); } else { statusBarItem.hide(); </del> <ins> if (schemaErrorIndex === -1) { </ins> fileSchemaErrors.delete(uri.toString()); <ins> return next(uri, diagnostics); } const schemaResolveDiagnostic = diagnostics[schemaErrorIndex]; fileSchemaErrors.set(uri.toString(), schemaResolveDiagnostic.message); if (window.activeTextEditor && window.activeTextEditor.document.uri.toString() === uri.toString()) { schemaResolutionErrorStatusBarItem.show(); </ins> } next(uri, diagnostics); } }

}; let handleActiveEditorChange = (activeEditor?: TextEditor) => { <del> const uriStr = activeEditor && activeEditor.document.uri.toString(); if (uriStr && fileSchemaErrors.has(uriStr)) { const message = fileSchemaErrors.get(uriStr)!; showStatusBarItem(message); </del> <ins> if (!activeEditor) { return; } const activeDocUri = activeEditor.document.uri.toString(); if (activeDocUri && fileSchemaErrors.has(activeDocUri)) { schemaResolutionErrorStatusBarItem.show(); </ins> } else { <del> statusBarItem.hide(); </del> <ins> schemaResolutionErrorStatusBarItem.hide(); </ins> } };

})); toDispose.push(window.onDidChangeActiveTextEditor(handleActiveEditorChange)); <del> let handleRetrySchemaCommand = () => { </del> <ins> let handleRetryResolveSchemaCommand = () => { </ins> if (window.activeTextEditor) { <del> client.sendRequest(ForceValidateRequest.type, window.activeTextEditor.document.uri.toString()); statusBarItem.text = '$(watch)'; </del> <ins> schemaResolutionErrorStatusBarItem.text = '$(watch)'; const activeDocUri = window.activeTextEditor.document.uri.toString(); client.sendRequest(ForceValidateRequest.type, activeDocUri).then((diagnostics) => { const schemaErrorIndex = diagnostics.findIndex(candidate => candidate.code === /* SchemaResolveError */ 0x300); if (schemaErrorIndex !== -1) { // Show schema resolution errors in status bar only; ref: #51032 const schemaResolveDiagnostic = diagnostics[schemaErrorIndex]; fileSchemaErrors.set(activeDocUri, schemaResolveDiagnostic.message); } else { schemaResolutionErrorStatusBarItem.hide(); } schemaResolutionErrorStatusBarItem.text = '$(alert)'; }); </ins> } }; <del> toDispose.push(commands.registerCommand('_json.retrySchema', handleRetrySchemaCommand)); </del> <ins> toDispose.push(commands.registerCommand('_json.retryResolveSchema', handleRetryResolveSchemaCommand)); </ins> client.sendNotification(SchemaAssociationNotification.type, getSchemaAssociation(context)); });

], "main": "./client/out/jsonMain", "scripts": { <del> "compile": "gulp compile-extension:json-language-features-client && gulp compile-extension:json-language-features-server", </del> <ins> "compile": "gulp compile-extension:json-language-features-client compile-extension:json-language-features-server", "watch": "gulp watch-extension:json-language-features-client watch-extension:json-language-features-server", </ins> "postinstall": "cd server && yarn install", "install-client-next": "yarn add vscode-languageclient@next" },

"json.tracing.desc": "Traces the communication between VS Code and the JSON language server.", "json.colorDecorators.enable.desc": "Enables or disables color decorators", "json.colorDecorators.enable.deprecationMessage": "The setting `json.colorDecorators.enable` has been deprecated in favor of `editor.colorDecorators`.", <ins> "json.schemaResolutionErrorMessage": "Unable to resolve schema.", </ins> "json.clickToRetry": "Click to retry." }