AST en PHP

El lenguaje de programación de PHP, cuando hablamos de AST nos referimos al Abstract Syntax Tree o lo que viene a a ser el árbol de sintaxis abstracto. Es una capa de abstracción de código en árbol del código fuente por parte de un parser que lo que hace es analizar el código creado antes de su ejecución.

Imagen donde se ve un Roble con muchas ramificaciones

Vale, pero ¿Para qué me vale esto? Bueno pues es muy interesante para saber cómo funcionan las herramientas tipo linters o PHPstan donde analizan y esnifan tu código con la finalidad de mejorar la calidad en base a unos estándares. Para acceder a AST en PHP tienes la opción de utilizar la extensión php-ast

Aquí vemos un pequeño ejemplo en PHP de cómo podemos analizar si hay un “echo” dentro de una función, lo que nos hace indicar si lo hay y concretamente en qué línea.

 public function analyzeAst(mixed $node, bool $isInsideFunctionScope = false): \Generator
    {
        if ($node instanceof \ast\Node) {
            if ($this->isFunctionDeclaration($node)) {
                $isInsideFunctionScope = true;
            }

            if ($node->kind === self::ECHO_KIND && $isInsideFunctionScope) {
                yield [
                    'message' => 'There is an "echo", please remove it.',
                    'lineno' => $node->lineno,
                ];
            }

            if ($issue = $this->isProhibitedFunctionCall($node)) {
                yield $issue;
            }

            foreach ($node->children as $child) {
                yield from $this->analyzeAst($child, $isInsideFunctionScope);
            }
        }
    }

Aquí se muestra un poco más en profundidad .

SpectrumGirl <3