diff --git a/src/Objects/AbstractType.php b/src/Objects/AbstractType.php index 65f7c83..5ac221d 100644 --- a/src/Objects/AbstractType.php +++ b/src/Objects/AbstractType.php @@ -188,7 +188,7 @@ private function getTraitUseSignatureModels(): array { if ($adaptation instanceof \PhpParser\Node\Stmt\TraitUseAdaptation\Alias) { $signatures[] = TraitUseSignature::forAlias( - $adaptation->trait !== null ? $this->createTypeReferenceFromName($adaptation->trait) : null, + $this->getTraitAliasTarget($adaptation, $traits), (string) $adaptation->method, $adaptation->newName !== null ? (string) $adaptation->newName : null, $this->getTraitAliasModifier($adaptation->newModifier) @@ -200,6 +200,22 @@ private function getTraitUseSignatureModels(): array { return $signatures; } + + /** + * @param TypeReference[] $traits + */ + private function getTraitAliasTarget(\PhpParser\Node\Stmt\TraitUseAdaptation\Alias $adaptation, array $traits): ?TypeReference { + if ($adaptation->trait !== null) { + return $this->createTypeReferenceFromName($adaptation->trait); + } + + if (count($traits) === 1) { + return $traits[0]; + } + + return null; + } + private function getTraitAliasModifier(?int $modifier): ?string { if ($modifier === null) { return null; diff --git a/tests/run.php b/tests/run.php index 4ec2233..778474d 100644 --- a/tests/run.php +++ b/tests/run.php @@ -688,6 +688,105 @@ function testGitIgnoreInlineCommentsAreIgnored(): void { assertSameValue('Ignored files should not affect the increment.', 'PATCH', $diff->diff('HEAD', 'WC')->getIncrement()); } +function testGroupedAndUngroupedTypeImportsRemainEquivalent(): void { + $root = createRepository('grouped-import-equivalence', [ + 'src/Types.php' => <<<'PHP' +diff('HEAD', 'WC')->getIncrement()); +} + +function testGroupedAndUngroupedConstImportsRemainEquivalent(): void { + $root = createRepository('grouped-const-import-equivalence', [ + 'src/Config.php' => <<<'PHP' +diff('HEAD', 'WC')->getIncrement()); +} + +function testTraitAliasFormattingEquivalenceIsPatch(): void { + $root = createRepository('trait-alias-equivalence', [ + 'src/Traits.php' => <<<'PHP' +diff('HEAD', 'WC')->getIncrement()); +} + +function testNamespaceConstantOrderingDoesNotBumpVersion(): void { + $root = createRepository('namespace-constant-ordering', [ + 'src/Constants.php' => <<<'PHP' +diff('HEAD', 'WC')->getIncrement()); +} + function testIncludePathsRestrictTheSurface(): void { $root = createRepository('include-paths', [ 'src/Foo.php' => "