nette / php-generator

🐘 Generates neat PHP code for you. Supports new PHP 8.3 features.

Home Page:https://doc.nette.org/php-generator

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Leading slash in alias use at class line

opened this issue · comments

Version: 4.1.0 RC

Bug Description

The generator stores a regular 'as'-alias, but outputs it with a leading slash.

Steps To Reproduce

$ns = new PhpNamespace('Me\My\Action');
$target = new ClassType('MyAction');
$target->setFinal()->setExtends('ParentClass')->addComment('{@inheritDoc}');
$ns->add($target);
$ns->addUse('Their\Package\ParentClass', 'ParentClass');
echo var_dump($ns, (string) $ns);

Dump:

object(Nette\PhpGenerator\PhpNamespace)#4 (5) {
  ["name":"Nette\PhpGenerator\PhpNamespace":private]=>string(12) "Me\My\Action"
  ["bracketedSyntax":"Nette\PhpGenerator\PhpNamespace":private]=> bool(false)
  ["aliases":"Nette\PhpGenerator\PhpNamespace":private]=> array(3) {
    ["n"]=> array(1) {
      ["ParentClass"]=> string(25) "Their\Package\ParentClass"
    }
    ["f"]=> array(0) {}
    ["c"]=> array(0) {}
  }
  ["classes":"Nette\PhpGenerator\PhpNamespace":private]=> array(1) {
    ["myclass"]=> object(Nette\PhpGenerator\ClassType)#2 (14) {
      ["namespace":"Nette\PhpGenerator\ClassLike":private]=> NULL
      ["name":"Nette\PhpGenerator\ClassLike":private]=> string(7) "MyClass"
      ["comment":"Nette\PhpGenerator\ClassLike":private]=> string(13) "{@inheritDoc}"
      ["attributes":"Nette\PhpGenerator\ClassLike":private]=> array(0) {}
      ["type":"Nette\PhpGenerator\ClassType":private]=> string(5) "class"
      ["final":"Nette\PhpGenerator\ClassType":private]=> bool(true)
      ["abstract":"Nette\PhpGenerator\ClassType":private]=> bool(false)
      ["extends":"Nette\PhpGenerator\ClassType":private]=> string(11) "ParentClass"
      ["readOnly":"Nette\PhpGenerator\ClassType":private]=> bool(false)
      ["implements":"Nette\PhpGenerator\ClassType":private]=> array(0) {}
      ["consts":"Nette\PhpGenerator\ClassType":private]=> array(0) {}
      ["methods":"Nette\PhpGenerator\ClassType":private]=> array(0) {}
      ["properties":"Nette\PhpGenerator\ClassType":private]=> array(0) {}
      ["traits":"Nette\PhpGenerator\ClassType":private]=> array(0) {}
    }
  }
  ["functions":"Nette\PhpGenerator\PhpNamespace":private]=> array(0) {}
}

output

namespace Me\My\Action;

use Their\Package\ParentClass;

/**
 * {@inheritDoc}
 */
final class MyClass extends \ParentClass
{
}

Expected Behavior

namespace Me\My\Action;

use Their\Package\ParentClass;

/**
 * {@inheritDoc}
 */
final class MyClass extends ParentClass
{
}

If I'm blind and wrong somewhere, point me in the right place.

yes, it helps me.
thanks!