"use strict"; /* -------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. * ------------------------------------------------------------------------------------------ */ Object.defineProperty(exports, "__esModule", { value: true }); exports.FoldingRangeFeature = void 0; const vscode_1 = require("vscode"); const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol"); const features_1 = require("./features"); class FoldingRangeFeature extends features_1.TextDocumentLanguageFeature { constructor(client) { super(client, vscode_languageserver_protocol_1.FoldingRangeRequest.type); } fillClientCapabilities(capabilities) { let capability = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'foldingRange'); capability.dynamicRegistration = true; capability.rangeLimit = 5000; capability.lineFoldingOnly = true; capability.foldingRangeKind = { valueSet: [vscode_languageserver_protocol_1.FoldingRangeKind.Comment, vscode_languageserver_protocol_1.FoldingRangeKind.Imports, vscode_languageserver_protocol_1.FoldingRangeKind.Region] }; capability.foldingRange = { collapsedText: false }; (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'workspace'), 'foldingRange').refreshSupport = true; } initialize(capabilities, documentSelector) { this._client.onRequest(vscode_languageserver_protocol_1.FoldingRangeRefreshRequest.type, async () => { for (const provider of this.getAllProviders()) { provider.onDidChangeFoldingRange.fire(); } }); let [id, options] = this.getRegistration(documentSelector, capabilities.foldingRangeProvider); if (!id || !options) { return; } this.register({ id: id, registerOptions: options }); } registerLanguageProvider(options) { const selector = options.documentSelector; const eventEmitter = new vscode_1.EventEmitter(); const provider = { onDidChangeFoldingRanges: eventEmitter.event, provideFoldingRanges: (document, context, token) => { const client = this._client; const provideFoldingRanges = (document, _, token) => { const requestParams = { textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document) }; return client.sendRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, requestParams, token).then((result) => { if (token.isCancellationRequested) { return null; } return client.protocol2CodeConverter.asFoldingRanges(result, token); }, (error) => { return client.handleFailedRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, token, error, null); }); }; const middleware = client.middleware; return middleware.provideFoldingRanges ? middleware.provideFoldingRanges(document, context, token, provideFoldingRanges) : provideFoldingRanges(document, context, token); } }; return [vscode_1.languages.registerFoldingRangeProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), { provider: provider, onDidChangeFoldingRange: eventEmitter }]; } } exports.FoldingRangeFeature = FoldingRangeFeature;