Subversion-Projekte lars-tiefland.laravel_shop

Revision

Revision 148 | Details | Vergleich mit vorheriger | 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
 *
200 lars 6
 * (c) 2012-2023 Justin Hileman
148 lars 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 MongoDB tab completion Matcher.
16
 *
17
 * This matcher provides completion for Mongo collection names.
18
 *
19
 * @author Marc Garcia <markcial@gmail.com>
20
 */
21
class MongoDatabaseMatcher extends AbstractContextAwareMatcher
22
{
23
    /**
24
     * {@inheritdoc}
25
     */
26
    public function getMatches(array $tokens, array $info = []): array
27
    {
28
        $input = $this->getInput($tokens);
29
 
30
        $firstToken = \array_pop($tokens);
31
        if (self::tokenIs($firstToken, self::T_STRING)) {
32
            // second token is the object operator
33
            \array_pop($tokens);
34
        }
35
        $objectToken = \array_pop($tokens);
36
        $objectName = \str_replace('$', '', $objectToken[1]);
37
        $object = $this->getVariable($objectName);
38
 
39
        if (!$object instanceof \MongoDB) {
40
            return [];
41
        }
42
 
43
        return \array_filter(
44
            $object->getCollectionNames(),
45
            function ($var) use ($input) {
46
                return AbstractMatcher::startsWith($input, $var);
47
            }
48
        );
49
    }
50
 
51
    /**
52
     * {@inheritdoc}
53
     */
54
    public function hasMatched(array $tokens): bool
55
    {
56
        $token = \array_pop($tokens);
57
        $prevToken = \array_pop($tokens);
58
 
59
        switch (true) {
60
            case self::tokenIs($token, self::T_OBJECT_OPERATOR):
61
            case self::tokenIs($prevToken, self::T_OBJECT_OPERATOR):
62
                return true;
63
        }
64
 
65
        return false;
66
    }
67
}