Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b000c05

Browse files
bug #48451 [Translation] Fix extraction when dealing with VariadicPlaceholder parameters (Kocal)
This PR was merged into the 6.2 branch. Discussion ---------- [Translation] Fix extraction when dealing with VariadicPlaceholder parameters | Q | A | ------------- | --- | Branch? | 6.2 | Bug fix? | yes | New feature? | no <!-- please update src/**/CHANGELOG.md files --> | Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files --> | Tickets | Fix #48422 <!-- prefix each issue number with "Fix #", no need to create an issue if none exists, explain below instead --> | License | MIT | Doc PR | symfony/symfony-docs#... <!-- required for new features --> I don't have the time for now to check if the command has tests or not, but dealing with raw args with + filtering for `Node\Arg` instance make the `extract` command working again. The issue is "caused by" https://github.com/symfony/symfony/blob/6.3/src/Symfony/Bridge/Twig/Extension/TranslationExtension.php#L71, the extract command is not able to deal with VariadicPlaceholder node. Changing to `[$this, 'trans']` works, but this is not the wanted solution. **Before:** ``` symfony console translation:extract fr --force -vvv Translation Messages Extractor and Dumper ========================================= // Generating "fr" translation files for "default directory" // Parsing templates... In CallLike.php line 36: [AssertionError (1)] assert(!$this->isFirstClassCallable()) Exception trace: at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php:36 assert() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php:36 PhpParser\Node\Expr\CallLike->getArgs() at /Users/kocal/workspace/chronos/vendor/symfony/translation/Extractor/Visitor/AbstractVisitor.php:66 Symfony\Component\Translation\Extractor\Visitor\AbstractVisitor->hasNodeNamedArguments() at /Users/kocal/workspace/chronos/vendor/symfony/translation/Extractor/Visitor/TransMethodVisitor.php:40 Symfony\Component\Translation\Extractor\Visitor\TransMethodVisitor->enterNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:123 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223 PhpParser\NodeTraverser->traverseArray() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:146 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223 PhpParser\NodeTraverser->traverseArray() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:146 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223 PhpParser\NodeTraverser->traverseArray() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223 PhpParser\NodeTraverser->traverseArray() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223 PhpParser\NodeTraverser->traverseArray() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223 PhpParser\NodeTraverser->traverseArray() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:91 PhpParser\NodeTraverser->traverse() at /Users/kocal/workspace/chronos/vendor/symfony/translation/Extractor/PhpAstExtractor.php:56 Symfony\Component\Translation\Extractor\PhpAstExtractor->extract() at /Users/kocal/workspace/chronos/vendor/symfony/translation/Extractor/ChainExtractor.php:48 Symfony\Component\Translation\Extractor\ChainExtractor->extract() at /Users/kocal/workspace/chronos/vendor/symfony/framework-bundle/Command/TranslationUpdateCommand.php:395 Symfony\Bundle\FrameworkBundle\Command\TranslationUpdateCommand->extractMessages() at /Users/kocal/workspace/chronos/vendor/symfony/framework-bundle/Command/TranslationUpdateCommand.php:200 Symfony\Bundle\FrameworkBundle\Command\TranslationUpdateCommand->execute() at /Users/kocal/workspace/chronos/vendor/symfony/console/Command/Command.php:312 Symfony\Component\Console\Command\Command->run() at /Users/kocal/workspace/chronos/vendor/symfony/console/Application.php:1038 Symfony\Component\Console\Application->doRunCommand() at /Users/kocal/workspace/chronos/vendor/symfony/framework-bundle/Console/Application.php:88 Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() at /Users/kocal/workspace/chronos/vendor/symfony/console/Application.php:312 Symfony\Component\Console\Application->doRun() at /Users/kocal/workspace/chronos/vendor/symfony/framework-bundle/Console/Application.php:77 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /Users/kocal/workspace/chronos/vendor/symfony/console/Application.php:168 Symfony\Component\Console\Application->run() at /Users/kocal/workspace/chronos/vendor/symfony/runtime/Runner/Symfony/ConsoleApplicationRunner.php:54 Symfony\Component\Runtime\Runner\Symfony\ConsoleApplicationRunner->run() at /Users/kocal/workspace/chronos/vendor/autoload_runtime.php:29 ``` **After:** ``` symfony console translation:extract fr --force -vvv Translation Messages Extractor and Dumper ========================================= // Generating "fr" translation files for "default directory" // Parsing templates... // Loading translation files... // Writing files... [OK] Translation files were successfully updated. ``` Commits ------- 2030c26 [Translation] Fix extraction when dealing with VariadicPlaceholder parameters
2 parents 21a1abb + 2030c26 commit b000c05

File tree

1 file changed

+9
-10
lines changed

1 file changed

+9
-10
lines changed

src/Symfony/Component/Translation/Extractor/Visitor/AbstractVisitor.php

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,32 +42,31 @@ protected function addMessageToCatalogue(string $message, ?string $domain, int $
4242

4343
protected function getStringArguments(Node\Expr\CallLike|Node\Attribute|Node\Expr\New_ $node, int|string $index, bool $indexIsRegex = false): array
4444
{
45-
$args = $node instanceof Node\Expr\CallLike ? $node->getArgs() : $node->args;
46-
4745
if (\is_string($index)) {
4846
return $this->getStringNamedArguments($node, $index, $indexIsRegex);
4947
}
5048

49+
$args = $node instanceof Node\Expr\CallLike ? $node->getRawArgs() : $node->args;
50+
5151
if (\count($args) < $index) {
5252
return [];
5353
}
5454

55-
/** @var Node\Arg $arg */
56-
$arg = $args[$index];
57-
if (!$result = $this->getStringValue($arg->value)) {
58-
return [];
55+
if (($arg = $args[$index]) instanceof Node\Arg) {
56+
if ($result = $this->getStringValue($arg->value)) {
57+
return [$result];
58+
}
5959
}
6060

61-
return [$result];
61+
return [];
6262
}
6363

6464
protected function hasNodeNamedArguments(Node\Expr\CallLike|Node\Attribute|Node\Expr\New_ $node): bool
6565
{
66-
$args = $node instanceof Node\Expr\CallLike ? $node->getArgs() : $node->args;
66+
$args = $node instanceof Node\Expr\CallLike ? $node->getRawArgs() : $node->args;
6767

68-
/** @var Node\Arg $arg */
6968
foreach ($args as $arg) {
70-
if (null !== $arg->name) {
69+
if ($arg instanceof Node\Arg && null !== $arg->name) {
7170
return true;
7271
}
7372
}

0 commit comments

Comments
 (0)