diff --git a/extensions/css/client/src/cssMain.ts b/extensions/css/client/src/cssMain.ts index c8d307d9732..6b43c68252f 100644 --- a/extensions/css/client/src/cssMain.ts +++ b/extensions/css/client/src/cssMain.ts @@ -6,14 +6,13 @@ import * as path from 'path'; -import { languages, window, commands, ExtensionContext, TextDocument, ColorInformation, ColorPresentation, Color, TextEdit as CodeTextEdit } from 'vscode'; +import { languages, window, commands, ExtensionContext, TextDocument, ColorInformation, ColorPresentation, Color } from 'vscode'; import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind, TextEdit } from 'vscode-languageclient'; -import { ConfigurationFeature } from 'vscode-languageclient/lib/proposed'; -import { DocumentColorRequest } from 'vscode-languageserver-protocol/lib/protocol.colorProvider.proposed'; +import { ConfigurationFeature } from 'vscode-languageclient/lib/configuration.proposed'; +import { DocumentColorRequest, DocumentColorParams, ColorPresentationRequest, ColorPresentationParams } from 'vscode-languageserver-protocol/lib/protocol.colorProvider.proposed'; import * as nls from 'vscode-nls'; -import * as convert from 'color-convert'; let localize = nls.loadMessageBundle(); // this method is called when vs code is activated @@ -52,16 +51,13 @@ export function activate(context: ExtensionContext) { // client can be deactivated on extension deactivation context.subscriptions.push(disposable); - var _toTwoDigitHex = function (n: number): string { - const r = n.toString(16); - return r.length !== 2 ? '0' + r : r; - }; - client.onReady().then(_ => { // register color provider context.subscriptions.push(languages.registerColorProvider(documentSelector, { provideDocumentColors(document: TextDocument): Thenable { - let params = client.code2ProtocolConverter.asDocumentSymbolParams(document); + let params: DocumentColorParams = { + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document) + }; return client.sendRequest(DocumentColorRequest.type, params).then(symbols => { return symbols.map(symbol => { let range = client.protocol2CodeConverter.asRange(symbol.range); @@ -71,34 +67,18 @@ export function activate(context: ExtensionContext) { }); }, provideColorPresentations(document: TextDocument, colorInfo: ColorInformation): ColorPresentation[] | Thenable { - let result: ColorPresentation[] = []; - let color = colorInfo.color; - let label; - if (color.alpha === 1) { - label = `rgb(${Math.round(color.red * 255)}, ${Math.round(color.green * 255)}, ${Math.round(color.blue * 255)})`; - } else { - label = `rgba(${Math.round(color.red * 255)}, ${Math.round(color.green * 255)}, ${Math.round(color.blue * 255)}, ${color.alpha})`; - } - - result.push({ label: label, textEdit: new CodeTextEdit(colorInfo.range, label) }); - - if (color.alpha === 1) { - label = `#${_toTwoDigitHex(Math.round(color.red * 255))}${_toTwoDigitHex(Math.round(color.green * 255))}${_toTwoDigitHex(Math.round(color.blue * 255))}`; - } else { - label = `#${_toTwoDigitHex(Math.round(color.red * 255))}${_toTwoDigitHex(Math.round(color.green * 255))}${_toTwoDigitHex(Math.round(color.blue * 255))}${_toTwoDigitHex(Math.round(color.alpha * 255))}`; - } - - result.push({ label: label, textEdit: new CodeTextEdit(colorInfo.range, label) }); - - const hsl = convert.rgb.hsl(Math.round(color.red * 255), Math.round(color.green * 255), Math.round(color.blue * 255)); - if (color.alpha === 1) { - label = `hsl(${hsl[0]}, ${hsl[1]}%, ${hsl[2]}%)`; - } else { - label = `hsla(${hsl[0]}, ${hsl[1]}%, ${hsl[2]}%, ${color.alpha})`; - } - - result.push({ label: label, textEdit: new CodeTextEdit(colorInfo.range, label) }); - return result; + let params: ColorPresentationParams = { + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document), + colorInfo: { range: client.code2ProtocolConverter.asRange(colorInfo.range), color: colorInfo.color } + }; + return client.sendRequest(ColorPresentationRequest.type, params).then(presentations => { + return presentations.map(p => { + let presentation = new ColorPresentation(p.label); + presentation.textEdit = p.textEdit && client.protocol2CodeConverter.asTextEdit(p.textEdit); + presentation.additionalTextEdits = p.additionalTextEdits && client.protocol2CodeConverter.asTextEdits(p.additionalTextEdits); + return presentation; + }); + }); } })); }); diff --git a/extensions/css/npm-shrinkwrap.json b/extensions/css/npm-shrinkwrap.json index 6ae15a5c670..0cb7377ce6d 100644 --- a/extensions/css/npm-shrinkwrap.json +++ b/extensions/css/npm-shrinkwrap.json @@ -2,30 +2,26 @@ "name": "css", "version": "0.1.0", "dependencies": { - "color-convert": { - "version": "0.5.3", - "from": "color-convert@>=0.5.0 <0.6.0", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz" - }, + "vscode-jsonrpc": { - "version": "3.3.1", - "from": "vscode-jsonrpc@>=3.3.0 <4.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-3.3.1.tgz" + "version": "3.4.0", + "from": "vscode-jsonrpc@>=3.4.0 <4.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-3.4.0.tgz" }, "vscode-languageclient": { - "version": "3.4.0-next.17", + "version": "3.4.2", "from": "vscode-languageclient@next", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-3.4.0-next.17.tgz" + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-3.4.2.tgz" }, "vscode-languageserver-protocol": { - "version": "3.1.1", - "from": "vscode-languageserver-protocol@>=3.1.1 <4.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.1.1.tgz" + "version": "3.4.2", + "from": "vscode-languageserver-protocol@next", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.4.2.tgz" }, "vscode-languageserver-types": { - "version": "3.3.0", - "from": "vscode-languageserver-types@>=3.3.0 <4.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.3.0.tgz" + "version": "3.4.0", + "from": "vscode-languageserver-types@>=3.4.0 <4.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.4.0.tgz" }, "vscode-nls": { "version": "2.0.2", diff --git a/extensions/css/package.json b/extensions/css/package.json index 1f7e0681b1e..fa48af3a4fc 100644 --- a/extensions/css/package.json +++ b/extensions/css/package.json @@ -720,12 +720,11 @@ ] }, "dependencies": { - "color-convert": "^0.5.3", - "vscode-languageclient": "3.4.0-next.17", - "vscode-languageserver-protocol": "^3.1.1", + "vscode-languageclient": "^3.4.2", + "vscode-languageserver-protocol": "^3.4.2", "vscode-nls": "^2.0.2" }, "devDependencies": { "@types/node": "^6.0.51" } -} \ No newline at end of file +} diff --git a/extensions/css/server/npm-shrinkwrap.json b/extensions/css/server/npm-shrinkwrap.json index 2c2d280b1a2..348abc705e6 100644 --- a/extensions/css/server/npm-shrinkwrap.json +++ b/extensions/css/server/npm-shrinkwrap.json @@ -3,29 +3,29 @@ "version": "1.0.0", "dependencies": { "vscode-css-languageservice": { - "version": "2.1.6", + "version": "2.1.7", "from": "vscode-css-languageservice@next", - "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-2.1.6.tgz" + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-2.1.7.tgz" }, "vscode-jsonrpc": { - "version": "3.3.1", - "from": "vscode-jsonrpc@>=3.3.0 <4.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-3.3.1.tgz" + "version": "3.4.0", + "from": "vscode-jsonrpc@>=3.4.0 <4.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-3.4.0.tgz" }, "vscode-languageserver": { - "version": "3.4.0-next.6", + "version": "3.4.2", "from": "vscode-languageserver@next", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-3.4.0-next.6.tgz" + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-3.4.2.tgz" }, "vscode-languageserver-protocol": { - "version": "3.1.1", - "from": "vscode-languageserver-protocol@>=3.1.1 <4.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.1.1.tgz" + "version": "3.4.2", + "from": "vscode-languageserver-protocol@next", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.4.2.tgz" }, "vscode-languageserver-types": { - "version": "3.3.0", + "version": "3.4.0", "from": "vscode-languageserver-types@>=3.3.0 <4.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.3.0.tgz" + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.4.0.tgz" }, "vscode-nls": { "version": "2.0.2", diff --git a/extensions/css/server/package.json b/extensions/css/server/package.json index b62b50928bf..76d9afbecf9 100644 --- a/extensions/css/server/package.json +++ b/extensions/css/server/package.json @@ -8,9 +8,9 @@ "node": "*" }, "dependencies": { - "vscode-css-languageservice": "^2.1.6", - "vscode-languageserver": "3.4.0-next.6", - "vscode-languageserver-protocol": "^3.1.1" + "vscode-css-languageservice": "^2.1.7", + "vscode-languageserver": "^3.4.2", + "vscode-languageserver-protocol": "^3.4.2" }, "devDependencies": { "@types/node": "^6.0.51" diff --git a/extensions/css/server/src/cssServerMain.ts b/extensions/css/server/src/cssServerMain.ts index 0f4e8873e98..34f558429f3 100644 --- a/extensions/css/server/src/cssServerMain.ts +++ b/extensions/css/server/src/cssServerMain.ts @@ -5,11 +5,13 @@ 'use strict'; import { - createConnection, IConnection, TextDocuments, TextDocument, InitializeParams, InitializeResult, ServerCapabilities + createConnection, IConnection, TextDocuments, InitializeParams, InitializeResult, ServerCapabilities } from 'vscode-languageserver'; -import { GetConfigurationRequest } from 'vscode-languageserver-protocol/lib/protocol.configuration.proposed'; -import { DocumentColorRequest, ServerCapabilities as CPServerCapabilities } from 'vscode-languageserver-protocol/lib/protocol.colorProvider.proposed'; +import { TextDocument } from 'vscode-languageserver-types'; + +import { ConfigurationRequest } from 'vscode-languageserver-protocol/lib/protocol.configuration.proposed'; +import { DocumentColorRequest, ServerCapabilities as CPServerCapabilities, ColorPresentationRequest } from 'vscode-languageserver-protocol/lib/protocol.colorProvider.proposed'; import { getCSSLanguageService, getSCSSLanguageService, getLESSLanguageService, LanguageSettings, LanguageService, Stylesheet } from 'vscode-css-languageservice'; import { getLanguageModelCache } from './languageModelCache'; @@ -96,7 +98,7 @@ function getDocumentSettings(textDocument: TextDocument): Thenable s[0]); + promise = connection.sendRequest(ConfigurationRequest.type, configRequestParam).then(s => s[0]); documentSettings[textDocument.uri] = promise; } return promise; @@ -211,6 +213,15 @@ connection.onRequest(DocumentColorRequest.type, params => { return []; }); +connection.onRequest(ColorPresentationRequest.type, params => { + let document = documents.get(params.textDocument.uri); + if (document) { + let stylesheet = stylesheets.get(document); + return getLanguageService(document).getColorPresentations(document, stylesheet, params.colorInfo); + } + return []; +}); + connection.onRenameRequest(renameParameters => { let document = documents.get(renameParameters.textDocument.uri); let stylesheet = stylesheets.get(document);