/*--------------------------------------------------------------------------------------------- * 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, workspace } 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[] = []; let shouldProvideCompletionItems = workspace.getConfiguration('php').get('suggest.basic', true); if (!shouldProvideCompletionItems) { return Promise.resolve(result); } 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 === '