From e09c8a7086a28d53f786a99da71ffd95250e217c Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Tue, 17 Apr 2018 18:18:03 +0200 Subject: [PATCH] [css] adopt folding apis --- .../client/src/cssMain.ts | 28 ++++++++++++++----- extensions/css-language-features/package.json | 8 +++--- .../css-language-features/server/package.json | 4 +-- .../server/src/cssServerMain.ts | 23 +++++++++------ .../css-language-features/server/yarn.lock | 12 ++++---- extensions/css-language-features/yarn.lock | 6 ++-- 6 files changed, 50 insertions(+), 31 deletions(-) diff --git a/extensions/css-language-features/client/src/cssMain.ts b/extensions/css-language-features/client/src/cssMain.ts index 22285fb91bf..ac1a1b7493e 100644 --- a/extensions/css-language-features/client/src/cssMain.ts +++ b/extensions/css-language-features/client/src/cssMain.ts @@ -10,7 +10,7 @@ const localize = nls.loadMessageBundle(); import { languages, window, commands, ExtensionContext, Range, Position, TextDocument, CompletionItem, CompletionItemKind, TextEdit, SnippetString, FoldingRangeList, FoldingRange, FoldingContext, CancellationToken } from 'vscode'; import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind, Disposable } from 'vscode-languageclient'; -import { FoldingRangesRequest, FoldingRangeRequestParam } from 'vscode-languageserver-protocol-foldingprovider'; +import { FoldingRangeRequest, FoldingRangeRequestParam, FoldingRangeClientCapabilities } from 'vscode-languageserver-protocol-foldingprovider'; // this method is called when vs code is activated export function activate(context: ExtensionContext) { @@ -42,6 +42,21 @@ export function activate(context: ExtensionContext) { // Create the language client and start the client. let client = new LanguageClient('css', localize('cssserver.name', 'CSS Language Server'), serverOptions, clientOptions); client.registerProposedFeatures(); + client.registerFeature({ + fillClientCapabilities(capabilities: FoldingRangeClientCapabilities): void { + let textDocumentCap = capabilities.textDocument; + if (!textDocumentCap) { + textDocumentCap = capabilities.textDocument = {}; + } + textDocumentCap.foldingRange = { + dynamicRegistration: false, + rangeLimit: 5000, + lineFoldingOnly: true + }; + }, + initialize(capabilities, documentSelector): void { + } + }); let disposable = client.start(); // Push the disposable to the context's subscriptions so that the @@ -105,16 +120,15 @@ export function activate(context: ExtensionContext) { return languages.registerFoldingProvider(documentSelector, { provideFoldingRanges(document: TextDocument, context: FoldingContext, token: CancellationToken) { const param: FoldingRangeRequestParam = { - textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document), - maxRanges: context.maxRanges + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document) }; - return client.sendRequest(FoldingRangesRequest.type, param, token).then(res => { - if (res && Array.isArray(res.ranges)) { - return new FoldingRangeList(res.ranges.map(r => new FoldingRange(r.startLine, r.endLine, r.type))); + return client.sendRequest(FoldingRangeRequest.type, param, token).then(ranges => { + if (Array.isArray(ranges)) { + return new FoldingRangeList(ranges.map(r => new FoldingRange(r.startLine, r.endLine, r.kind))); } return null; }, error => { - client.logFailedRequest(FoldingRangesRequest.type, error); + client.logFailedRequest(FoldingRangeRequest.type, error); return null; }); } diff --git a/extensions/css-language-features/package.json b/extensions/css-language-features/package.json index f1eede08701..4179c9fef2c 100644 --- a/extensions/css-language-features/package.json +++ b/extensions/css-language-features/package.json @@ -21,9 +21,9 @@ "postinstall": "cd server && yarn install", "install-client-next": "yarn add vscode-languageclient@next" }, - "categories": [ - "Programming Languages" - ], + "categories": [ + "Programming Languages" + ], "contributes": { "configuration": [ { @@ -696,7 +696,7 @@ }, "dependencies": { "vscode-languageclient": "^4.0.0", - "vscode-languageserver-protocol-foldingprovider": "^1.0.1", + "vscode-languageserver-protocol-foldingprovider": "^2.0.0-next.2", "vscode-nls": "^3.2.1" }, "devDependencies": { diff --git a/extensions/css-language-features/server/package.json b/extensions/css-language-features/server/package.json index 50b6ff3a2c7..060c0ee7732 100644 --- a/extensions/css-language-features/server/package.json +++ b/extensions/css-language-features/server/package.json @@ -8,9 +8,9 @@ "node": "*" }, "dependencies": { - "vscode-css-languageservice": "^3.0.9-next.5", + "vscode-css-languageservice": "^3.0.9-next.7", "vscode-languageserver": "^4.0.0", - "vscode-languageserver-protocol-foldingprovider": "^1.0.1" + "vscode-languageserver-protocol-foldingprovider": "^2.0.0-next.2" }, "devDependencies": { "@types/mocha": "2.2.33", diff --git a/extensions/css-language-features/server/src/cssServerMain.ts b/extensions/css-language-features/server/src/cssServerMain.ts index a42cad484fe..b78b9e4e40d 100644 --- a/extensions/css-language-features/server/src/cssServerMain.ts +++ b/extensions/css-language-features/server/src/cssServerMain.ts @@ -15,7 +15,7 @@ import { getLanguageModelCache } from './languageModelCache'; import { formatError, runSafe } from './utils/runner'; import URI from 'vscode-uri'; import { getPathCompletionParticipant } from './pathCompletion'; -import { FoldingProviderServerCapabilities, FoldingRangesRequest } from 'vscode-languageserver-protocol-foldingprovider'; +import { FoldingRangeServerCapabilities, FoldingRangeRequest } from 'vscode-languageserver-protocol-foldingprovider'; export interface Settings { css: LanguageSettings; @@ -49,6 +49,7 @@ connection.onShutdown(() => { }); let scopedSettingsSupport = false; +let foldingRangeLimit = Number.MAX_VALUE; let workspaceFolders: WorkspaceFolder[]; // After the server has started the client sends an initialize request. The server receives @@ -62,18 +63,22 @@ connection.onInitialize((params: InitializeParams): InitializeResult => { } } - function hasClientCapability(name: string) { + function getClientCapability(name: string, def: T) { let keys = name.split('.'); let c: any = params.capabilities; for (let i = 0; c && i < keys.length; i++) { + if (!c.hasOwnProperty(keys[i])) { + return def; + } c = c[keys[i]]; } - return !!c; + return c; } - let snippetSupport = hasClientCapability('textDocument.completion.completionItem.snippetSupport'); - scopedSettingsSupport = hasClientCapability('workspace.configuration'); + let snippetSupport = !!getClientCapability('textDocument.completion.completionItem.snippetSupport', false); + scopedSettingsSupport = !!getClientCapability('workspace.configuration', false); + foldingRangeLimit = getClientCapability('textDocument.foldingRange.rangeLimit', Number.MAX_VALUE); - let capabilities: ServerCapabilities & FoldingProviderServerCapabilities = { + let capabilities: ServerCapabilities & FoldingRangeServerCapabilities = { // Tell the client that the server works in FULL text document sync mode textDocumentSync: documents.syncKind, completionProvider: snippetSupport ? { resolveProvider: false, triggerCharacters: ['/'] } : undefined, @@ -85,7 +90,7 @@ connection.onInitialize((params: InitializeParams): InitializeResult => { codeActionProvider: true, renameProvider: true, colorProvider: true, - foldingProvider: true + foldingRangeProvider: true }; return { capabilities }; }); @@ -276,10 +281,10 @@ connection.onRenameRequest((renameParameters, token) => { }, null, `Error while computing renames for ${renameParameters.textDocument.uri}`, token); }); -connection.onRequest(FoldingRangesRequest.type, (params, token) => { +connection.onRequest(FoldingRangeRequest.type, (params, token) => { return runSafe(() => { let document = documents.get(params.textDocument.uri); - return getLanguageService(document).getFoldingRanges(document, { maxRanges: params.maxRanges }); + return getLanguageService(document).getFoldingRanges(document, { rangeLimit: foldingRangeLimit }); }, null, `Error while computing folding ranges for ${params.textDocument.uri}`, token); }); diff --git a/extensions/css-language-features/server/yarn.lock b/extensions/css-language-features/server/yarn.lock index 3ee6a0d6448..06e9bd19565 100644 --- a/extensions/css-language-features/server/yarn.lock +++ b/extensions/css-language-features/server/yarn.lock @@ -10,9 +10,9 @@ version "7.0.43" resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c" -vscode-css-languageservice@^3.0.9-next.5: - version "3.0.9-next.5" - resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.9-next.5.tgz#854048eafc91406af4b276d9f812e24c677e262e" +vscode-css-languageservice@^3.0.9-next.7: + version "3.0.9-next.7" + resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.9-next.7.tgz#1eb8deadaa6bfaf55187656ea6fb6b7e8d71cd7f" dependencies: vscode-languageserver-types "^3.6.1" vscode-nls "^3.2.1" @@ -21,9 +21,9 @@ vscode-jsonrpc@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.6.0.tgz#848d56995d5168950d84feb5d9c237ae5c6a02d4" -vscode-languageserver-protocol-foldingprovider@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol-foldingprovider/-/vscode-languageserver-protocol-foldingprovider-1.0.1.tgz#85514aaf8fe905e91bf21e4106e0847f60d40f44" +vscode-languageserver-protocol-foldingprovider@^2.0.0-next.2: + version "2.0.0-next.2" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol-foldingprovider/-/vscode-languageserver-protocol-foldingprovider-2.0.0-next.2.tgz#fbb9cfdf5b8c4ac451826ba6312f1f88379f35b0" dependencies: vscode-languageserver-protocol "^3.6.0" vscode-languageserver-types "^3.6.0" diff --git a/extensions/css-language-features/yarn.lock b/extensions/css-language-features/yarn.lock index 7b01c6fe5ce..37c6473e3aa 100644 --- a/extensions/css-language-features/yarn.lock +++ b/extensions/css-language-features/yarn.lock @@ -16,9 +16,9 @@ vscode-languageclient@^4.0.0: dependencies: vscode-languageserver-protocol "^3.6.0" -vscode-languageserver-protocol-foldingprovider@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol-foldingprovider/-/vscode-languageserver-protocol-foldingprovider-1.0.1.tgz#85514aaf8fe905e91bf21e4106e0847f60d40f44" +vscode-languageserver-protocol-foldingprovider@^2.0.0-next.2: + version "2.0.0-next.2" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol-foldingprovider/-/vscode-languageserver-protocol-foldingprovider-2.0.0-next.2.tgz#fbb9cfdf5b8c4ac451826ba6312f1f88379f35b0" dependencies: vscode-languageserver-protocol "^3.6.0" vscode-languageserver-types "^3.6.0"