Задать вопрос

Как получить родительскую ноду PHPSTAN?

Всем привет. Имеется конструкция
if ($condition === 'demo') {
    explode('.', []);
}

И вот ее AST
PhpParser\Node\Stmt\If_(
    cond: PhpParser\Node\Expr\BinaryOp\Identical(
        left: PhpParser\Node\Expr\Variable( name: "condition" )
        right: PhpParser\Node\Scalar\String_( value: "demo" )
    )
    stmts: [
        0: PhpParser\Node\Stmt\Expression(
            expr: PhpParser\Node\Expr\FuncCall(
                name: PhpParser\Node\Name\FullyQualified( parts: ["explode"] )
                args: [
                    0: PhpParser\Node\Arg(
                        name: null
                        value: PhpParser\Node\Scalar\String_( value: "." )
                        byRef: false
                        unpack: false
                    )
                    1: PhpParser\Node\Arg(
                        name: null
                        value: PhpParser\Node\Expr\Array_(
                            items: []
                        )
                        byRef: false
                        unpack: false
                    )
                ]
            )
        )
    ]
    elseifs: []
    else: null
)

Я хочу найдя ноду с именем explode, поднятся выше, и достучать до IF_.
Вызываю $node->getAttribute('parent') и получаю null. Ноду с explode нашел, а вот выше по дереву не ищет ничего.
Использую в rector.
  • Вопрос задан
  • 289 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Первый же вопрос в FAQ:

How can the parent of a node be obtained?
-----
The AST does not store parent nodes by default. However, the `ParentConnectingVisitor` can be used to achieve this:
...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
Нужно идти от обратного - искать ноды if в которых встречается explode
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы