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\NodeCode
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");
}