Cache JSON schema error files

This commit is contained in:
Literallie 2018-10-11 16:41:39 +02:00
parent fe4ce0b9d4
commit cb8d482429
No known key found for this signature in database
GPG key ID: 7BE463C902ED152C

View file

@ -8,7 +8,7 @@ import * as fs from 'fs';
import * as nls from 'vscode-nls';
const localize = nls.loadMessageBundle();
import { workspace, window, languages, commands, ExtensionContext, extensions, Uri, LanguageConfiguration, Diagnostic, StatusBarAlignment } from 'vscode';
import { workspace, window, languages, commands, ExtensionContext, extensions, Uri, LanguageConfiguration, Diagnostic, StatusBarAlignment, TextEditor } from 'vscode';
import { LanguageClient, LanguageClientOptions, RequestType, ServerOptions, TransportKind, NotificationType, DidChangeConfigurationNotification, HandleDiagnosticsSignature } from 'vscode-languageclient';
import TelemetryReporter from 'vscode-extension-telemetry';
@ -85,6 +85,14 @@ export function activate(context: ExtensionContext) {
statusBarItem.command = '_json.retrySchema';
toDispose.push(statusBarItem);
let showStatusBarItem = (message: string) => {
statusBarItem.tooltip = message + '\n' + localize('json.clickToRetry', 'Click to retry.');
statusBarItem.text = '$(alert) JSON';
statusBarItem.show();
};
let fileSchemaErrors = new Map<string, string>();
// Options to control the language client
let clientOptions: LanguageClientOptions = {
// Register the server for json documents
@ -104,13 +112,12 @@ export function activate(context: ExtensionContext) {
if (schemaErrorIndex !== -1) {
// Show schema resolution errors in status bar only; ref: #51032
const schemaResolveDiagnostic = diagnostics[schemaErrorIndex];
statusBarItem.tooltip = schemaResolveDiagnostic.message +
'\n' + localize('json.clickToRetry', 'Click to retry.');
statusBarItem.text = '$(alert) JSON';
statusBarItem.show();
fileSchemaErrors.set(uri.toString(), schemaResolveDiagnostic.message);
showStatusBarItem(schemaResolveDiagnostic.message);
diagnostics.splice(schemaErrorIndex, 1);
} else {
statusBarItem.hide();
fileSchemaErrors.delete(uri.toString());
}
next(uri, diagnostics);
}
@ -146,12 +153,20 @@ export function activate(context: ExtensionContext) {
}
};
let handleActiveEditorChange = () => {
statusBarItem.hide();
let handleActiveEditorChange = (activeEditor?: TextEditor) => {
if (activeEditor && fileSchemaErrors.has(activeEditor.document.uri.toString())) {
const message = fileSchemaErrors.get(activeEditor.document.uri.toString())!;
showStatusBarItem(message);
} else {
statusBarItem.hide();
}
};
toDispose.push(workspace.onDidChangeTextDocument(e => handleContentChange(e.document.uri)));
toDispose.push(workspace.onDidCloseTextDocument(d => handleContentChange(d.uri)));
toDispose.push(workspace.onDidCloseTextDocument(d => {
handleContentChange(d.uri);
fileSchemaErrors.delete(d.uri.toString());
}));
toDispose.push(window.onDidChangeActiveTextEditor(handleActiveEditorChange));
let handleRetrySchemaCommand = () => {