-
Notifications
You must be signed in to change notification settings - Fork 0
/
tolgeeCompletionProvider.ts
37 lines (31 loc) · 1.37 KB
/
tolgeeCompletionProvider.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
'use strict';
import { Tolgee } from '@tolgee/core';
import * as vscode from 'vscode';
import { findMatches, flattenObj } from './utils';
export class TolgeeCompletionItemProvider implements vscode.CompletionItemProvider {
private completionItems!: PromiseLike<vscode.CompletionItem[]>;
constructor(private tolgee: Tolgee, private lang: string) {
this.refreshCompletionItems();
}
public provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Thenable<vscode.CompletionItem[]> {
const line = document.getText(new vscode.Range(position.with(undefined, 0), position.with(undefined, Infinity)));
const match = findMatches(line, position.character);
if (match) {
return this.completionItems;
} else {
return Promise.reject<vscode.CompletionItem[]>("Not inside html class attribute.");
}
}
public async refreshCompletionItems() {
this.completionItems = this.tolgee.loadTranslations(this.lang).then(translations => {
const flattened = flattenObj(translations);
return Object.keys(flattened).map(key => {
return new vscode.CompletionItem({ label: key, description: flattened[key] }, vscode.CompletionItemKind.EnumMember);
});
}).catch(e => {
console.error(e);
vscode.window.showErrorMessage(`Tolgee: ${e.message}`);
return [];
});
}
};