css: report colors through provider

This commit is contained in:
Joao Moreno
2017-07-26 17:49:14 +02:00
parent 2de98f5f4a
commit 1830c12221
+23 -1
View File
@@ -6,7 +6,7 @@
import * as path from 'path';
import { languages, window, commands, workspace, ExtensionContext, DocumentColorProvider, CancellationToken, TextDocument, ProviderResult, ColorInfo } from 'vscode';
import { languages, window, commands, workspace, ExtensionContext, DocumentColorProvider, Color, CancellationToken, TextDocument, ProviderResult, ColorInfo } from 'vscode';
import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind, RequestType, Range, TextEdit } from 'vscode-languageclient';
import { activateColorDecorations } from './colorDecorators';
@@ -17,6 +17,24 @@ namespace ColorSymbolRequest {
export const type: RequestType<string, Range[], any, any> = new RequestType('css/colorSymbols');
}
class ColorProvider implements DocumentColorProvider {
constructor(private client: LanguageClient) { }
async provideDocumentColors(document: TextDocument, token: CancellationToken): Promise<ColorInfo[]> {
const ranges = await this.client.sendRequest(ColorSymbolRequest.type, document.uri.toString());
return ranges.map(r => {
const range = this.client.protocol2CodeConverter.asRange(r);
const color = Color.fromHex('#000000');
const format = '#{red:X}{green:X}{blue:X}';
const availableFormats = [format];
return new ColorInfo(range, color, format, availableFormats);
});
}
}
// this method is called when vs code is activated
export function activate(context: ExtensionContext) {
@@ -58,6 +76,10 @@ export function activate(context: ExtensionContext) {
let isDecoratorEnabled = (languageId: string) => {
return workspace.getConfiguration().get<boolean>(languageId + '.colorDecorators.enable');
};
const colorProvider = new ColorProvider(client);
context.subscriptions.push(languages.registerColorProvider('css', colorProvider));
disposable = activateColorDecorations(colorRequestor, { css: true, scss: true, less: true }, isDecoratorEnabled);
context.subscriptions.push(disposable);