php-cs-fixer 包括供应商名称空间但不包括 src/ 中的包

php-cs-fixer including vendor namespaces but not the bundle in src/

从 symfony 3.4 捆绑包 AppBundle 中的一个简单实体 class 开始,php-cs-fixer 似乎去除了文档字符串使用的导入,但仅在引用 AppBundle/ 时才使用 – vendor/ 中的名称空间似乎是安全的

从以下简单实体开始 class

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\EntityManager;
use AppBundle\Entity\AclObjectIdentities; // will be removed
use AppBundle\Entity\AclSecurityIdentities; // will be removed

class AclEntries
{
    /** @var AclObjectIdentities Object identity */
    private $objectIdentity;

    /** @var EntityManager Doctrine entity manager */
    private $em;
}

我 运行 php-cs-fixer 命令具有一些合理的默认值

php-cs-fixer fix src/AppBundle/Entity/AclEntriesDEBUG.php --rules=@PSR2,@Symfony

文件得到很好的清理,但是所有 phpAppBundle 的文档导入都被删除为未使用

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\EntityManager;

class AclEntries
{
    /** @var AclObjectIdentities Object identity */
    private $objectIdentity;

    /** @var EntityManager Doctrine entity manager */
    private $em;
}

我的预期行为应该是 "all imports are equal" 并且 "use AppBundle..." 不会被剥离。

从您当前所在的同一命名空间导入无效,因为 PHP 无论如何都会自动导入它。这就是 PHP CS Fixer 删除它们的原因。如果即使不需要它们也想保留它们,请从配置中删除 no_unused_imports 规则,例如: php-cs-fixer fix src/AppBundle/Entity/AclEntriesDEBUG.php --rules=@PSR2,@Symfony,-no_unused_imports