Skip to content

Commit ddde114

Browse files
committed
feat: implemented provideDocumentColors, provideColorPresentations
1 parent 3bc4063 commit ddde114

File tree

2 files changed

+49
-5
lines changed

2 files changed

+49
-5
lines changed

src/monaco/code2monaco.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,3 +411,18 @@ export function asLink(item: vscode.DocumentLink): monaco.languages.ILink {
411411
tooltip: item.tooltip,
412412
};
413413
}
414+
415+
export function asColorInformation(item: vscode.ColorInformation): monaco.languages.IColorInformation {
416+
return {
417+
range: asRange(item.range),
418+
color: item.color,
419+
};
420+
}
421+
422+
export function asColorPresentation(item: vscode.ColorPresentation): monaco.languages.IColorPresentation {
423+
return {
424+
label: item.label,
425+
textEdit: item.textEdit ? asTextEdit(item.textEdit) : undefined,
426+
additionalTextEdits: item.additionalTextEdits ? item.additionalTextEdits.map(asTextEdit) : undefined,
427+
};
428+
}

src/monaco/ls.ts

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
196196
const completionItems = new WeakMap<monaco.languages.CompletionItem, vscode.CompletionItem>();
197197
const codeLens = new WeakMap<monaco.languages.CodeLens, vscode.CodeLens>();
198198
const codeActions = new WeakMap<monaco.languages.CodeAction, vscode.CodeAction>();
199+
const colorInformations = new WeakMap<monaco.languages.IColorInformation, vscode.ColorInformation>();
199200
const documents = new WeakMap<monaco.editor.ITextModel, vscode.TextDocument>();
200201

201202
disposables.value.push(
@@ -254,7 +255,7 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
254255
}),
255256
monaco.languages.registerDocumentSymbolProvider(lang, {
256257
provideDocumentSymbols: async (model) => {
257-
const document = documents.get(model);
258+
const document = getTextDocument(model);
258259
if (document) {
259260
const codeResult = await ds.findDocumentSymbols(document);
260261
if (codeResult) {
@@ -276,7 +277,7 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
276277
}),
277278
monaco.languages.registerLinkedEditingRangeProvider(lang, {
278279
provideLinkedEditingRanges: async (model, position) => {
279-
const document = documents.get(model);
280+
const document = getTextDocument(model);
280281
if (document) {
281282
const codeResult = await ds.findLinkedEditingRanges(
282283
document,
@@ -395,7 +396,7 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
395396
}),
396397
monaco.languages.registerDocumentFormattingEditProvider(lang, {
397398
provideDocumentFormattingEdits: async (model, options) => {
398-
const document = documents.get(model);
399+
const document = getTextDocument(model);
399400
if (document) {
400401
const codeResult = await ds.format(
401402
document,
@@ -409,7 +410,7 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
409410
}),
410411
monaco.languages.registerDocumentRangeFormattingEditProvider(lang, {
411412
provideDocumentRangeFormattingEdits: async (model, range, options) => {
412-
const document = documents.get(model);
413+
const document = getTextDocument(model);
413414
if (document) {
414415
const codeResult = await ds.format(
415416
document,
@@ -425,7 +426,7 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
425426
monaco.languages.registerOnTypeFormattingEditProvider(lang, {
426427
autoFormatTriggerCharacters: ['}', ';', '\n'],
427428
provideOnTypeFormattingEdits: async (model, position, ch, options) => {
428-
const document = documents.get(model);
429+
const document = getTextDocument(model);
429430
if (document) {
430431
const codeResult = await ds.format(
431432
document,
@@ -480,6 +481,34 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
480481
return monacoItem;
481482
},
482483
}),
484+
monaco.languages.registerColorProvider(lang, {
485+
provideDocumentColors: async (model) => {
486+
const document = getTextDocument(model);
487+
if (document) {
488+
const codeResult = await ds.findDocumentColors(document);
489+
if (codeResult) {
490+
return codeResult.map(code2monaco.asColorInformation);
491+
}
492+
}
493+
},
494+
provideColorPresentations: async (model, monacoResult) => {
495+
const document = getTextDocument(model);
496+
const codeResult = colorInformations.get(monacoResult);
497+
if (document && codeResult) {
498+
const codeColors = await ds.getColorPresentations(
499+
document,
500+
codeResult.color,
501+
{
502+
start: document.positionAt(0),
503+
end: document.positionAt(document.getText().length),
504+
},
505+
);
506+
if (codeColors) {
507+
return codeColors.map(code2monaco.asColorPresentation);
508+
}
509+
}
510+
},
511+
}),
483512
);
484513

485514
return ls;

0 commit comments

Comments
 (0)