annotate vendor/psy/psysh/src/TabCompletion/Matcher/KeywordsMatcher.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@13 1 <?php
Chris@13 2
Chris@13 3 /*
Chris@13 4 * This file is part of Psy Shell.
Chris@13 5 *
Chris@13 6 * (c) 2012-2018 Justin Hileman
Chris@13 7 *
Chris@13 8 * For the full copyright and license information, please view the LICENSE
Chris@13 9 * file that was distributed with this source code.
Chris@13 10 */
Chris@13 11
Chris@13 12 namespace Psy\TabCompletion\Matcher;
Chris@13 13
Chris@13 14 /**
Chris@13 15 * A PHP keyword tab completion Matcher.
Chris@13 16 *
Chris@13 17 * This matcher provides completion for all function-like PHP keywords.
Chris@13 18 *
Chris@13 19 * @author Marc Garcia <markcial@gmail.com>
Chris@13 20 */
Chris@13 21 class KeywordsMatcher extends AbstractMatcher
Chris@13 22 {
Chris@13 23 protected $keywords = [
Chris@13 24 'array', 'clone', 'declare', 'die', 'echo', 'empty', 'eval', 'exit', 'include',
Chris@13 25 'include_once', 'isset', 'list', 'print', 'require', 'require_once', 'unset',
Chris@13 26 ];
Chris@13 27
Chris@13 28 protected $mandatoryStartKeywords = [
Chris@13 29 'die', 'echo', 'print', 'unset',
Chris@13 30 ];
Chris@13 31
Chris@13 32 /**
Chris@13 33 * Get all (completable) PHP keywords.
Chris@13 34 *
Chris@13 35 * @return array
Chris@13 36 */
Chris@13 37 public function getKeywords()
Chris@13 38 {
Chris@13 39 return $this->keywords;
Chris@13 40 }
Chris@13 41
Chris@13 42 /**
Chris@13 43 * Check whether $keyword is a (completable) PHP keyword.
Chris@13 44 *
Chris@13 45 * @param string $keyword
Chris@13 46 *
Chris@13 47 * @return bool
Chris@13 48 */
Chris@13 49 public function isKeyword($keyword)
Chris@13 50 {
Chris@17 51 return \in_array($keyword, $this->keywords);
Chris@13 52 }
Chris@13 53
Chris@13 54 /**
Chris@13 55 * {@inheritdoc}
Chris@13 56 */
Chris@13 57 public function getMatches(array $tokens, array $info = [])
Chris@13 58 {
Chris@13 59 $input = $this->getInput($tokens);
Chris@13 60
Chris@17 61 return \array_filter($this->keywords, function ($keyword) use ($input) {
Chris@13 62 return AbstractMatcher::startsWith($input, $keyword);
Chris@13 63 });
Chris@13 64 }
Chris@13 65
Chris@13 66 /**
Chris@13 67 * {@inheritdoc}
Chris@13 68 */
Chris@13 69 public function hasMatched(array $tokens)
Chris@13 70 {
Chris@17 71 $token = \array_pop($tokens);
Chris@17 72 $prevToken = \array_pop($tokens);
Chris@13 73
Chris@13 74 switch (true) {
Chris@13 75 case self::hasToken([self::T_OPEN_TAG, self::T_VARIABLE], $token):
Chris@13 76 // case is_string($token) && $token === '$':
Chris@13 77 case self::hasToken([self::T_OPEN_TAG, self::T_VARIABLE], $prevToken) &&
Chris@13 78 self::tokenIs($token, self::T_STRING):
Chris@13 79 case self::isOperator($token):
Chris@13 80 return true;
Chris@13 81 }
Chris@13 82
Chris@13 83 return false;
Chris@13 84 }
Chris@13 85 }