Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ModuleNode.php

function ModuleNode::compileIsTraitable

1 call to ModuleNode::compileIsTraitable()
ModuleNode::compileTemplate in vendor/twig/twig/src/Node/ModuleNode.php

File

vendor/twig/twig/src/Node/ModuleNode.php, line 399

Class

ModuleNode
Represents a module node.

Namespace

Twig\Node

Code

protected function compileIsTraitable(Compiler $compiler) {
    // A template can be used as a trait if:
    //   * it has no parent
    //   * it has no macros
    //   * it has no body
    //
    // Put another way, a template can be used as a trait if it
    // only contains blocks and use statements.
    $traitable = !$this->hasNode('parent') && 0 === \count($this->getNode('macros'));
    if ($traitable) {
        if ($this->getNode('body') instanceof BodyNode) {
            $nodes = $this->getNode('body')
                ->getNode('0');
        }
        else {
            $nodes = $this->getNode('body');
        }
        if (!\count($nodes)) {
            $nodes = new Nodes([
                $nodes,
            ]);
        }
        foreach ($nodes as $node) {
            if (!\count($node)) {
                continue;
            }
            $traitable = false;
            break;
        }
    }
    if ($traitable) {
        return;
    }
    $compiler->write("/**\n")
        ->write(" * @codeCoverageIgnore\n")
        ->write(" */\n")
        ->write("public function isTraitable(): bool\n", "{\n")
        ->indent()
        ->write("return false;\n")
        ->outdent()
        ->write("}\n\n");
}
RSS feed
Powered by Drupal