REDROOM
PHP 8.2.31
Path:
Logout
Edit File
Size: 4.44 KB
Close
//opt/cpanel/ea-wappspector/vendor/rector/rector/rules/CodingStyle/ClassNameImport/ClassNameImportSkipper.php
Text
Base64
<?php declare (strict_types=1); namespace Rector\CodingStyle\ClassNameImport; use PhpParser\Node; use PhpParser\Node\Identifier; use PhpParser\Node\Name; use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Stmt\GroupUse; use PhpParser\Node\Stmt\Use_; use PhpParser\Node\Stmt\UseUse; use Rector\CodingStyle\Contract\ClassNameImport\ClassNameImportSkipVoterInterface; use Rector\Configuration\Option; use Rector\Configuration\Parameter\SimpleParameterProvider; use Rector\Naming\Naming\UseImportsResolver; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; use Rector\ValueObject\Application\File; final class ClassNameImportSkipper { /** * @var ClassNameImportSkipVoterInterface[] * @readonly */ private $classNameImportSkipVoters; /** * @readonly * @var \Rector\Naming\Naming\UseImportsResolver */ private $useImportsResolver; /** * @param ClassNameImportSkipVoterInterface[] $classNameImportSkipVoters */ public function __construct(iterable $classNameImportSkipVoters, UseImportsResolver $useImportsResolver) { $this->classNameImportSkipVoters = $classNameImportSkipVoters; $this->useImportsResolver = $useImportsResolver; } public function shouldSkipNameForFullyQualifiedObjectType(File $file, Node $node, FullyQualifiedObjectType $fullyQualifiedObjectType) : bool { foreach ($this->classNameImportSkipVoters as $classNameImportSkipVoter) { if ($classNameImportSkipVoter->shouldSkip($file, $fullyQualifiedObjectType, $node)) { return \true; } } return \false; } /** * @param array<Use_|GroupUse> $uses */ public function shouldSkipName(FullyQualified $fullyQualified, array $uses) : bool { if (\substr_count($fullyQualified->toCodeString(), '\\') === 1) { return $this->shouldSkipShortName($fullyQualified); } // verify long name, as short name verify may conflict // see test PR: https://github.com/rectorphp/rector-src/pull/6208 // ref https://3v4l.org/21H5j vs https://3v4l.org/GIHSB $originalName = $fullyQualified->getAttribute(AttributeKey::ORIGINAL_NAME); if ($originalName instanceof Name && $originalName->getLast() === $originalName->toString()) { return \true; } $stringName = $fullyQualified->toString(); $lastUseName = $fullyQualified->getLast(); $nameLastName = \strtolower($lastUseName); foreach ($uses as $use) { $prefix = $this->useImportsResolver->resolvePrefix($use); $useName = $prefix . $stringName; foreach ($use->uses as $useUse) { $useUseLastName = \strtolower($useUse->name->getLast()); if ($useUseLastName !== $nameLastName) { continue; } if ($this->isConflictedShortNameInUse($useUse, $useName, $lastUseName, $stringName)) { return \true; } return $prefix . $useUse->name->toString() !== $stringName; } } return \false; } private function shouldSkipShortName(FullyQualified $fullyQualified) : bool { // is scalar name? if (\in_array($fullyQualified->toLowerString(), ['true', 'false', 'bool'], \true)) { return \true; } if ($fullyQualified->isSpecialClassName()) { return \true; } if ($this->isFunctionOrConstantImport($fullyQualified)) { return \true; } // Importing root namespace classes (like \DateTime) is optional return !SimpleParameterProvider::provideBoolParameter(Option::IMPORT_SHORT_CLASSES); } private function isFunctionOrConstantImport(FullyQualified $fullyQualified) : bool { if ($fullyQualified->getAttribute(AttributeKey::IS_CONSTFETCH_NAME) === \true) { return \true; } return $fullyQualified->getAttribute(AttributeKey::IS_FUNCCALL_NAME) === \true; } private function isConflictedShortNameInUse(UseUse $useUse, string $useName, string $lastUseName, string $stringName) : bool { if (!$useUse->alias instanceof Identifier && $useName !== $stringName && $lastUseName === $stringName) { return \true; } return $useUse->alias instanceof Identifier && $useUse->alias->toString() === $stringName; } }
Save
Close
Exit & Reset
Text mode: syntax highlighting auto-detects file type.
Directory Contents
Dirs: 2 × Files: 5
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
ClassNameImportSkipVoter
DIR
-
drwxr-xr-x
2024-11-08 13:59:10
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ValueObject
DIR
-
drwxr-xr-x
2024-11-08 13:59:10
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
AliasUsesResolver.php
1.93 KB
lrw-r--r--
2024-11-08 13:59:10
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ClassNameImportSkipper.php
4.44 KB
lrw-r--r--
2024-11-08 13:59:10
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ShortNameResolver.php
7.23 KB
lrw-r--r--
2024-11-08 13:59:10
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
UsedImportsResolver.php
2.77 KB
lrw-r--r--
2024-11-08 13:59:10
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
UseImportsTraverser.php
2.07 KB
lrw-r--r--
2024-11-08 13:59:10
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).