Skip to content

Commit

Permalink
FullyQualifiedExceptionsSniff: Speedup
Browse files Browse the repository at this point in the history
  • Loading branch information
kukulich committed Mar 24, 2020
1 parent 34db1f1 commit 3c557d5
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 6 deletions.
15 changes: 10 additions & 5 deletions SlevomatCodingStandard/Helpers/NamespaceHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,18 +55,23 @@ public static function getNameParts(string $name): array
return explode(self::NAMESPACE_SEPARATOR, $name);
}

public static function getName(File $phpcsFile, int $namespacePointer): string
{
/** @var int $namespaceNameStartPointer */
$namespaceNameStartPointer = TokenHelper::findNextEffective($phpcsFile, $namespacePointer + 1);
$namespaceNameEndPointer = TokenHelper::findNextExcluding($phpcsFile, TokenHelper::$nameTokenCodes, $namespaceNameStartPointer + 1) - 1;

return TokenHelper::getContent($phpcsFile, $namespaceNameStartPointer, $namespaceNameEndPointer);
}

public static function findCurrentNamespaceName(File $phpcsFile, int $anyPointer): ?string
{
$namespacePointer = TokenHelper::findPrevious($phpcsFile, T_NAMESPACE, $anyPointer);
if ($namespacePointer === null) {
return null;
}

/** @var int $namespaceNameStartPointer */
$namespaceNameStartPointer = TokenHelper::findNextEffective($phpcsFile, $namespacePointer + 1);
$namespaceNameEndPointer = TokenHelper::findNextExcluding($phpcsFile, TokenHelper::$nameTokenCodes, $namespaceNameStartPointer + 1) - 1;

return TokenHelper::getContent($phpcsFile, $namespaceNameStartPointer, $namespaceNameEndPointer);
return self::getName($phpcsFile, $namespacePointer);
}

public static function getUnqualifiedNameFromFullyQualifiedName(string $name): string
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use SlevomatCodingStandard\Helpers\UseStatement;
use SlevomatCodingStandard\Helpers\UseStatementHelper;
use Throwable;
use function array_reverse;
use function in_array;
use function sprintf;
use const T_OPEN_TAG;
Expand Down Expand Up @@ -49,6 +50,8 @@ public function register(): array
*/
public function process(File $phpcsFile, $openTagPointer): void
{
$namespacePointers = array_reverse(NamespaceHelper::getAllNamespacesPointers($phpcsFile));

$referencedNames = ReferencedNameHelper::getAllReferencedNames($phpcsFile, $openTagPointer);
foreach ($referencedNames as $referencedName) {
$pointer = $referencedName->getStartPointer();
Expand All @@ -70,7 +73,19 @@ public function process(File $phpcsFile, $openTagPointer): void
continue;
}
} else {
$fileNamespace = NamespaceHelper::findCurrentNamespaceName($phpcsFile, $pointer);
$fileNamespacePointer = null;
if ($namespacePointers !== []) {
foreach ($namespacePointers as $namespacePointer) {
if ($namespacePointer < $pointer) {
$fileNamespacePointer = $namespacePointer;
break;
}
}
}

$fileNamespace = $fileNamespacePointer !== null
? NamespaceHelper::getName($phpcsFile, $fileNamespacePointer)
: null;
$canonicalName = $name;
if (!NamespaceHelper::isFullyQualifiedName($name) && $fileNamespace !== null) {
$canonicalName = sprintf('%s%s%s', $fileNamespace, NamespaceHelper::NAMESPACE_SEPARATOR, $name);
Expand Down

0 comments on commit 3c557d5

Please sign in to comment.