'use strict'; import * as vsc from 'vscode'; import { XQueryCompleter, XQueryCompletionItem } from '../services/XQueryCompleter'; export class XQueryCompletionItemProvider implements vsc.CompletionItemProvider { provideCompletionItems(document: vsc.TextDocument, position: vsc.Position): vsc.CompletionItem[] { let items: vsc.CompletionItem[] = new Array(); let completer: XQueryCompleter = new XQueryCompleter(document.getText()); let completions: XQueryCompletionItem[] = completer.getCompletions(position.line, position.character); completions.forEach((completion: XQueryCompletionItem) => { let item: vsc.CompletionItem = new vsc.CompletionItem(completion.name); item.insertText = completion.value; switch (completion.meta) { // functions (always qualified with a colon) case 'function': item.kind = vsc.CompletionItemKind.Function; let funcStart = (completion.value.indexOf(':') + 1); let funcEnd = completion.value.indexOf('('); item.insertText = completion.value.substring(funcStart, funcEnd); break; // variables and parameters (always qualified with a dollar sign) case 'Let binding': case 'Local variable': case 'Window variable': case 'Function parameter': item.kind = vsc.CompletionItemKind.Variable; item.insertText = completion.value.substring(1); break; // everything else default: item.kind = vsc.CompletionItemKind.Text; } items.push(item); }); return items; } }