chore(rector): Add rule to import Nextcloud classes in all files

We skip all files outside of OC/OCA/OCP from "use" auto-import because
 it’s not always desirable to import classes when they have generic
 names, so it should be the developer choice.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
This commit is contained in:
Côme Chilliet 2024-09-26 11:11:20 +02:00
parent 832695d565
commit 28153443a5
No known key found for this signature in database
GPG key ID: A3E2F658B28C760A

View file

@ -7,10 +7,32 @@ declare(strict_types=1);
* SPDX-License-Identifier: AGPL-3.0-only
*/
use PhpParser\Node;
use Rector\CodingStyle\Contract\ClassNameImport\ClassNameImportSkipVoterInterface;
use Rector\Config\RectorConfig;
use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType;
use Rector\ValueObject\Application\File;
$nextcloudDir = dirname(__DIR__);
class NextcloudNamespaceSkipVoter implements ClassNameImportSkipVoterInterface {
private array $namespacePrefixes = [
'OC',
'OCA',
'OCP',
];
public function shouldSkip(File $file, FullyQualifiedObjectType $fullyQualifiedObjectType, Node $node) : bool {
foreach ($this->namespacePrefixes as $prefix) {
if (str_starts_with($fullyQualifiedObjectType->getClassName(), $prefix . '\\')) {
// Import Nextcloud namespaces
return false;
}
}
// Skip everything else
return true;
}
}
$config = RectorConfig::configure()
->withPaths([
$nextcloudDir . '/apps',
@ -30,9 +52,12 @@ $config = RectorConfig::configure()
])
// uncomment to reach your current PHP version
// ->withPhpSets()
->withImportNames(importShortClasses:false)
->withTypeCoverageLevel(0);
$config->registerService(NextcloudNamespaceSkipVoter::class, tag:ClassNameImportSkipVoterInterface::class);
/* Ignore all files ignored by git */
$ignoredEntries = shell_exec('git status --porcelain --ignored ' . escapeshellarg($nextcloudDir));
$ignoredEntries = explode("\n", $ignoredEntries);
$ignoredEntries = array_filter($ignoredEntries, static fn (string $line) => str_starts_with($line, '!! '));