Skip to content

Commit 930973e

Browse files
committed
{import} supports arguments
1 parent 2c1d681 commit 930973e

File tree

3 files changed

+60
-2
lines changed

3 files changed

+60
-2
lines changed

src/Latte/Essential/Nodes/ImportNode.php

+8-2
Original file line numberDiff line numberDiff line change
@@ -9,34 +9,39 @@
99

1010
namespace Latte\Essential\Nodes;
1111

12+
use Latte\Compiler\Nodes\Php\Expression\ArrayNode;
1213
use Latte\Compiler\Nodes\Php\ExpressionNode;
1314
use Latte\Compiler\Nodes\StatementNode;
1415
use Latte\Compiler\PrintContext;
1516
use Latte\Compiler\Tag;
1617

1718

1819
/**
19-
* {import "file"}
20+
* {import "file"[, args]}
2021
*/
2122
class ImportNode extends StatementNode
2223
{
2324
public ExpressionNode $file;
25+
public ArrayNode $args;
2426

2527

2628
public static function create(Tag $tag): static
2729
{
2830
$tag->expectArguments();
2931
$node = new static;
3032
$node->file = $tag->parser->parseUnquotedStringOrExpression();
33+
$tag->parser->stream->tryConsume(',');
34+
$node->args = $tag->parser->parseArguments();
3135
return $node;
3236
}
3337

3438

3539
public function print(PrintContext $context): string
3640
{
3741
return $context->format(
38-
'$this->createTemplate(%node, $this->params, "import")->render() %line;',
42+
'$this->createTemplate(%node, %node? + $this->params, "import")->render() %line;',
3943
$this->file,
44+
$this->args,
4045
$this->position,
4146
);
4247
}
@@ -45,5 +50,6 @@ public function print(PrintContext $context): string
4550
public function &getIterator(): \Generator
4651
{
4752
yield $this->file;
53+
yield $this->args;
4854
}
4955
}

tests/tags/import.args.phpt

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
/**
4+
* Test: {import ..., args}
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
use Tester\Assert;
10+
11+
require __DIR__ . '/../bootstrap.php';
12+
13+
14+
$latte = new Latte\Engine;
15+
$latte->setLoader(new Latte\Loaders\StringLoader([
16+
'main' => <<<'XX'
17+
18+
{import "inc", val: 123}
19+
{include test}
20+
21+
XX,
22+
'inc' => <<<'XX'
23+
24+
outer text
25+
{define test}
26+
Test {$val}
27+
{/define}
28+
29+
XX,
30+
]));
31+
32+
Assert::match(
33+
'Test 123',
34+
trim($latte->renderToString('main')),
35+
);

tests/tags/import.nodes.phpt

+17
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,22 @@ Assert::match(<<<'XX'
1717
Import:
1818
Variable:
1919
name: var
20+
Array:
2021
Fragment:
2122
XX, exportTraversing('{import $var}'));
23+
24+
25+
Assert::match(<<<'XX'
26+
Template:
27+
Fragment:
28+
Import:
29+
Variable:
30+
name: var
31+
Array:
32+
ArrayItem:
33+
Identifier:
34+
name: param
35+
String:
36+
value: val
37+
Fragment:
38+
XX, exportTraversing('{import $var, param: val}'));

0 commit comments

Comments
 (0)