[css] adopt folding apis

This commit is contained in:
Martin Aeschlimann
2018-04-17 18:18:03 +02:00
parent a509b1797b
commit e09c8a7086
6 changed files with 50 additions and 31 deletions

View File

@@ -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<T>(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);
});