/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ 'use strict'; import {CompletionItemProvider, CompletionItem, CompletionItemKind, CancellationToken, TextDocument, Position, Range, TextEdit} from 'vscode'; import phpGlobals = require('./phpGlobals'); export default class PHPCompletionItemProvider implements CompletionItemProvider { public triggerCharacters = ['.', ':', '$']; public provideCompletionItems(document: TextDocument, position: Position, token: CancellationToken): Promise { let result: CompletionItem[] = []; var range = document.getWordRangeAtPosition(position); var prefix = range ? document.getText(range) : ''; if (!range) { range = new Range(position, position); } var added : any = {}; var createNewProposal = function(kind: CompletionItemKind, name: string, entry: phpGlobals.IEntry) : CompletionItem { var proposal : CompletionItem = new CompletionItem(name); proposal.kind = kind; if (entry) { if (entry.description) { proposal.documentation= entry.description; } if (entry.signature) { proposal.detail = entry.signature; } } return proposal; }; var matches = (name:string) => { return prefix.length === 0 || name.length >= prefix.length && name.substr(0, prefix.length) === prefix; }; if (matches('php') && range.start.character >= 2) { let twoBeforePosition = new Position(range.start.line, range.start.character - 2); let beforeWord = document.getText(new Range(twoBeforePosition, range.start)); if (beforeWord === '