client.onReady().then(() => { disposable = client.onTelemetry(e => { if (telemetryReporter) { telemetryReporter.sendTelemetryEvent(e.key, e.data); } }); // handle content request client.onRequest(VSCodeContentRequest.type, (uriPath: string) => { let uri = Uri.parse(uriPath); if (uri.scheme !== 'http' && uri.scheme !== 'https') { return workspace.openTextDocument(uri).then(doc => { return doc.getText(); }, error => { return Promise.reject(error); }); } else { const headers = { 'Accept-Encoding': 'gzip, deflate' }; return xhr({ url: uriPath, followRedirects: 5, headers }).then(response => { return response.responseText; }, (error: XHRResponse) => { return Promise.reject(error.responseText || getErrorStatusDescription(error.status) || error.toString()); }); } }); let handleContentChange = (uri: Uri) => { if (uri.scheme === 'vscode' && uri.authority === 'schemas') { client.sendNotification(SchemaContentChangeNotification.type, uri.toString()); } }; let handleActiveEditorChange = (activeEditor?: TextEditor) => { if (!activeEditor) { return; } const activeDocUri = activeEditor.document.uri.toString(); if (activeDocUri && fileSchemaErrors.has(activeDocUri)) { schemaResolutionErrorStatusBarItem.show(); } else { schemaResolutionErrorStatusBarItem.hide(); } }; toDispose.push(workspace.onDidChangeTextDocument(e => handleContentChange(e.document.uri))); toDispose.push(workspace.onDidCloseTextDocument(d => { handleContentChange(d.uri); fileSchemaErrors.delete(d.uri.toString()); })); toDispose.push(window.onDidChangeActiveTextEditor(handleActiveEditorChange)); let handleRetryResolveSchemaCommand = () => { if (window.activeTextEditor) { 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)'; }); } }; toDispose.push(commands.registerCommand('_json.retryResolveSchema', handleRetryResolveSchemaCommand)); client.sendNotification(SchemaAssociationNotification.type, getSchemaAssociation(context)); extensions.onDidChange(_ => { client.sendNotification(SchemaAssociationNotification.type, getSchemaAssociation(context)); }); documentSelector.forEach(selector => { toDispose.push(languages.registerSelectionRangeProvider(selector, { async provideSelectionRanges(document: TextDocument, positions: Position[]): Promise<SelectionRange[]> { const textDocument = client.code2ProtocolConverter.asTextDocumentIdentifier(document); const rawResult = await client.sendRequest<SelectionRange[][]>('$/textDocument/selectionRanges', { textDocument, positions: positions.map(client.code2ProtocolConverter.asPosition) }); if (Array.isArray(rawResult)) { return rawResult.map(rawSelectionRanges => { return rawSelectionRanges.reduceRight((parent: SelectionRange | undefined, selectionRange: SelectionRange) => { return { range: client.protocol2CodeConverter.asRange(selectionRange.range), parent, }; }, undefined)!; }); } return []; } })); }); });
return new Promise((resolve) => { vs.extensions.onDidChange((e) => resolve()); vs.commands.executeCommand("workbench.extensions.installExtension", flutterExtensionIdentifier); });