Subversion-Projekte lars-tiefland.laravel_shop

Revision

Zur aktuellen Revision | Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
/*
4
 * This file is part of Psy Shell.
5
 *
6
 * (c) 2012-2022 Justin Hileman
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
 
12
namespace Psy\TabCompletion\Matcher;
13
 
14
/**
15
 * A function name tab completion Matcher.
16
 *
17
 * This matcher provides completion for all internal and user-defined functions.
18
 *
19
 * @author Marc Garcia <markcial@gmail.com>
20
 */
21
class FunctionsMatcher extends AbstractMatcher
22
{
23
    /**
24
     * {@inheritdoc}
25
     */
26
    public function getMatches(array $tokens, array $info = []): array
27
    {
28
        $func = $this->getInput($tokens);
29
 
30
        $functions = \get_defined_functions();
31
        $allFunctions = \array_merge($functions['user'], $functions['internal']);
32
 
33
        return \array_filter($allFunctions, function ($function) use ($func) {
34
            return AbstractMatcher::startsWith($func, $function);
35
        });
36
    }
37
 
38
    /**
39
     * {@inheritdoc}
40
     */
41
    public function hasMatched(array $tokens): bool
42
    {
43
        $token = \array_pop($tokens);
44
        $prevToken = \array_pop($tokens);
45
 
46
        switch (true) {
47
            case self::tokenIs($prevToken, self::T_NEW):
48
                return false;
49
            case self::hasToken([self::T_OPEN_TAG, self::T_STRING], $token):
50
            case self::isOperator($token):
51
                return true;
52
        }
53
 
54
        return false;
55
    }
56
}