Skip to content

[Translation] [6.2] debug:translation and translation:extract broken #48422

@gndk

Description

@gndk

Symfony version(s) affected

6.2

Description

The translation related console commands fail when updating to 6.2.

bin/console debug:translation en
bin/console translation:extract --force en

In CallLike.php line 36:

  [AssertionError (1)]
  assert(!$this->isFirstClassCallable())

How to reproduce

Install Symfony skeleton

symfony new translation-reproducer --version="6.2.*" --webapp

Run one of the commands

bin/console debug:translation en -vvv
bin/console translation:extract --force en -vvv

Possible Solution

I believe the fix could start at L66 in AbstractVisitor.php:

-$args = $node instanceof Node\Expr\CallLike ? $node->getArgs() : $node->args;
+$args = $node instanceof Node\Expr\CallLike && $node->isFirstClassCallable() === false ? $node->getArgs() : $node->args;

But this leads to the next error:

In AbstractVisitor.php line 70:

  [ErrorException]
  Warning: Undefined property: PhpParser\Node\VariadicPlaceholder::$name

Which again could be fixed by

-if (null !== $arg->name) {
+if (property_exists($arg, 'name') === false || null !== $arg->name) {

But this leads to a few new similar errors and soon a deadend at least for me, because I don't really understand what the code is supposed to do.

Additional Context

System info:

transrep git:(main) bin/console about
 -------------------- ---------------------------------
  Symfony
 -------------------- ---------------------------------
  Version              6.2.0
  Long-Term Support    No
  End of maintenance   07/2023 (in +242 days)
  End of life          07/2023 (in +242 days)
 -------------------- ---------------------------------
  Kernel
 -------------------- ---------------------------------
  Type                 App\Kernel
  Environment          dev
  Debug                true
  Charset              UTF-8
  Cache directory      ./var/cache/dev (7.7 MiB)
  Build directory      ./var/cache/dev (7.7 MiB)
  Log directory        ./var/log (26 KiB)
 -------------------- ---------------------------------
  PHP
 -------------------- ---------------------------------
  Version              8.1.13
  Architecture         64 bits
  Intl locale          en_US_POSIX
  Timezone             UTC (2022-12-01T11:42:30+00:00)
  OPcache              true
  APCu                 false
  Xdebug               false
 -------------------- ---------------------------------

Stack traces:

transrep git:(main) bin/console translation:extract --force en -vvv

Translation Messages Extractor and Dumper
=========================================

 // Generating "en" translation files for "default directory"

 // Parsing templates...


In CallLike.php line 36:

  [AssertionError (1)]
  assert(!$this->isFirstClassCallable())


Exception trace:
  at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php:36
 assert() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php:36
 PhpParser\Node\Expr\CallLike->getArgs() at /Users/gndk/dev/transrep/vendor/symfony/translation/Extractor/Visitor/AbstractVisitor.php:66
 Symfony\Component\Translation\Extractor\Visitor\AbstractVisitor->hasNodeNamedArguments() at /Users/gndk/dev/transrep/vendor/symfony/translation/Extractor/Visitor/TransMethodVisitor.php:40
 Symfony\Component\Translation\Extractor\Visitor\TransMethodVisitor->enterNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:123
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223
 PhpParser\NodeTraverser->traverseArray() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:146
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223
 PhpParser\NodeTraverser->traverseArray() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:146
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223
 PhpParser\NodeTraverser->traverseArray() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223
 PhpParser\NodeTraverser->traverseArray() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223
 PhpParser\NodeTraverser->traverseArray() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223
 PhpParser\NodeTraverser->traverseArray() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:91
 PhpParser\NodeTraverser->traverse() at /Users/gndk/dev/transrep/vendor/symfony/translation/Extractor/PhpAstExtractor.php:56
 Symfony\Component\Translation\Extractor\PhpAstExtractor->extract() at /Users/gndk/dev/transrep/vendor/symfony/translation/Extractor/ChainExtractor.php:48
 Symfony\Component\Translation\Extractor\ChainExtractor->extract() at /Users/gndk/dev/transrep/vendor/symfony/framework-bundle/Command/TranslationUpdateCommand.php:395
 Symfony\Bundle\FrameworkBundle\Command\TranslationUpdateCommand->extractMessages() at /Users/gndk/dev/transrep/vendor/symfony/framework-bundle/Command/TranslationUpdateCommand.php:200
 Symfony\Bundle\FrameworkBundle\Command\TranslationUpdateCommand->execute() at /Users/gndk/dev/transrep/vendor/symfony/console/Command/Command.php:312
 Symfony\Component\Console\Command\Command->run() at /Users/gndk/dev/transrep/vendor/symfony/console/Application.php:1038
 Symfony\Component\Console\Application->doRunCommand() at /Users/gndk/dev/transrep/vendor/symfony/framework-bundle/Console/Application.php:88
 Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() at /Users/gndk/dev/transrep/vendor/symfony/console/Application.php:312
 Symfony\Component\Console\Application->doRun() at /Users/gndk/dev/transrep/vendor/symfony/framework-bundle/Console/Application.php:77
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /Users/gndk/dev/transrep/vendor/symfony/console/Application.php:168
 Symfony\Component\Console\Application->run() at /Users/gndk/dev/transrep/vendor/symfony/runtime/Runner/Symfony/ConsoleApplicationRunner.php:54
 Symfony\Component\Runtime\Runner\Symfony\ConsoleApplicationRunner->run() at /Users/gndk/dev/transrep/vendor/autoload_runtime.php:29
 require_once() at /Users/gndk/dev/transrep/bin/console:11

translation:extract [--prefix [PREFIX]] [--format [FORMAT]] [--dump-messages] [--force] [--clean] [--domain [DOMAIN]] [--sort [SORT]] [--as-tree [AS-TREE]] [--] <locale> [<bundle>]
transrep git:(main) bin/console debug:translation en -vvv

In CallLike.php line 36:

  [AssertionError (1)]
  assert(!$this->isFirstClassCallable())


Exception trace:
  at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php:36
 assert() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php:36
 PhpParser\Node\Expr\CallLike->getArgs() at /Users/gndk/dev/transrep/vendor/symfony/translation/Extractor/Visitor/AbstractVisitor.php:66
 Symfony\Component\Translation\Extractor\Visitor\AbstractVisitor->hasNodeNamedArguments() at /Users/gndk/dev/transrep/vendor/symfony/translation/Extractor/Visitor/TransMethodVisitor.php:40
 Symfony\Component\Translation\Extractor\Visitor\TransMethodVisitor->enterNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:123
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223
 PhpParser\NodeTraverser->traverseArray() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:146
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223
 PhpParser\NodeTraverser->traverseArray() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:146
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223
 PhpParser\NodeTraverser->traverseArray() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223
 PhpParser\NodeTraverser->traverseArray() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223
 PhpParser\NodeTraverser->traverseArray() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114
 PhpParser\NodeTraverser->traverseNode() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223
 PhpParser\NodeTraverser->traverseArray() at /Users/gndk/dev/transrep/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:91
 PhpParser\NodeTraverser->traverse() at /Users/gndk/dev/transrep/vendor/symfony/translation/Extractor/PhpAstExtractor.php:56
 Symfony\Component\Translation\Extractor\PhpAstExtractor->extract() at /Users/gndk/dev/transrep/vendor/symfony/translation/Extractor/ChainExtractor.php:48
 Symfony\Component\Translation\Extractor\ChainExtractor->extract() at /Users/gndk/dev/transrep/vendor/symfony/framework-bundle/Command/TranslationDebugCommand.php:346
 Symfony\Bundle\FrameworkBundle\Command\TranslationDebugCommand->extractMessages() at /Users/gndk/dev/transrep/vendor/symfony/framework-bundle/Command/TranslationDebugCommand.php:170
 Symfony\Bundle\FrameworkBundle\Command\TranslationDebugCommand->execute() at /Users/gndk/dev/transrep/vendor/symfony/console/Command/Command.php:312
 Symfony\Component\Console\Command\Command->run() at /Users/gndk/dev/transrep/vendor/symfony/console/Application.php:1038
 Symfony\Component\Console\Application->doRunCommand() at /Users/gndk/dev/transrep/vendor/symfony/framework-bundle/Console/Application.php:88
 Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() at /Users/gndk/dev/transrep/vendor/symfony/console/Application.php:312
 Symfony\Component\Console\Application->doRun() at /Users/gndk/dev/transrep/vendor/symfony/framework-bundle/Console/Application.php:77
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /Users/gndk/dev/transrep/vendor/symfony/console/Application.php:168
 Symfony\Component\Console\Application->run() at /Users/gndk/dev/transrep/vendor/symfony/runtime/Runner/Symfony/ConsoleApplicationRunner.php:54
 Symfony\Component\Runtime\Runner\Symfony\ConsoleApplicationRunner->run() at /Users/gndk/dev/transrep/vendor/autoload_runtime.php:29
 require_once() at /Users/gndk/dev/transrep/bin/console:11

debug:translation [--domain [DOMAIN]] [--only-missing] [--only-unused] [--all] [--] <locale> [<bundle>]

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions