Skip to content

Commit 3cda472

Browse files
committed
add parse-color to css extension
1 parent 21a81d0 commit 3cda472

4 files changed

Lines changed: 46 additions & 4 deletions

File tree

extensions/css/client/src/cssMain.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
'use strict';
66

77
import * as path from 'path';
8+
import * as parse from 'parse-color';
89

910
import { languages, window, commands, workspace, ExtensionContext, DocumentColorProvider, Color, CancellationToken, TextDocument, ColorInfo } from 'vscode';
1011
import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind, RequestType, Range, TextEdit } from 'vscode-languageclient';
@@ -24,14 +25,23 @@ class ColorProvider implements DocumentColorProvider {
2425
async provideDocumentColors(document: TextDocument, token: CancellationToken): Promise<ColorInfo[]> {
2526
const ranges = await this.client.sendRequest(ColorSymbolRequest.type, document.uri.toString());
2627

27-
return ranges.map(r => {
28+
return ranges.reduce((result, r) => {
2829
const range = this.client.protocol2CodeConverter.asRange(r);
29-
const color = Color.fromHex('#000000');
30+
const value = document.getText(range);
31+
const parsedColor = parse(value);
32+
33+
if (!parsedColor || !parsedColor.rgba) {
34+
return result;
35+
}
36+
37+
const [red, green, blue, alpha] = parsedColor.rgba;
38+
const color = new Color(red, green, blue, alpha);
3039
const format = '#{red:X}{green:X}{blue:X}';
3140
const availableFormats = [format];
3241

33-
return new ColorInfo(range, color, format, availableFormats);
34-
});
42+
result.push(new ColorInfo(range, color, format, availableFormats));
43+
return result;
44+
}, []);
3545
}
3646
}
3747

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
declare module "parse-color" {
2+
3+
interface Color {
4+
rgb: [number, number, number],
5+
hsl: [number, number, number],
6+
hsv: [number, number, number],
7+
cmyk: [number, number, number, number],
8+
keyword: string,
9+
hex: string,
10+
rgba: [number, number, number, number],
11+
hsla: [number, number, number, number],
12+
hsva: [number, number, number, number],
13+
cmyka: [number, number, number, number, number]
14+
}
15+
16+
function parse(value: string): Color;
17+
18+
module parse { }
19+
20+
export = parse;
21+
}

extensions/css/npm-shrinkwrap.json

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

extensions/css/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -673,6 +673,7 @@
673673
}
674674
},
675675
"dependencies": {
676+
"parse-color": "^1.0.0",
676677
"vscode-languageclient": "^3.2.0",
677678
"vscode-nls": "^2.0.2"
678679
},

0 commit comments

Comments
 (0)