Skip to content

Commit 52c6ece

Browse files
authored
Add support for adding the #[Override] attribute to methods implementing interfaces (#7934)
1 parent 2381052 commit 52c6ece

20 files changed

+601
-17
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector;
6+
7+
use Iterator;
8+
use PHPUnit\Framework\Attributes\DataProvider;
9+
use Rector\Testing\PHPUnit\AbstractRectorTestCase;
10+
11+
final class AddToInterfaceMethodsTest extends AbstractRectorTestCase
12+
{
13+
#[DataProvider('provideData')]
14+
public function test(string $filePath): void
15+
{
16+
$this->doTestFile($filePath);
17+
}
18+
19+
public static function provideData(): Iterator
20+
{
21+
return self::yieldFilesFromDirectory(__DIR__ . '/FixtureAddToInterfaceMethods');
22+
}
23+
24+
public function provideConfigFilePath(): string
25+
{
26+
return __DIR__ . '/config/add_to_interface_methods_configured_rule.php';
27+
}
28+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Fixture;
4+
5+
use Countable;
6+
7+
final class SkipCountable implements Countable
8+
{
9+
public function count(): int
10+
{
11+
return 0;
12+
}
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Fixture;
4+
5+
use Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Source\ExampleFromInterface;
6+
7+
final class SkipInterface implements ExampleFromInterface
8+
{
9+
public function foo()
10+
{
11+
return 'implements only';
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Fixture;
4+
5+
use Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Source\ExampleFromAnotherInterface;
6+
use Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Source\ExampleParentClass;
7+
8+
final class SkipInterfaceMixedUsage extends ExampleParentClass implements ExampleFromAnotherInterface
9+
{
10+
public function foo()
11+
{
12+
return 'overrides method';
13+
}
14+
15+
public function baz()
16+
{
17+
return 'implements only';
18+
}
19+
}
20+
21+
?>
22+
-----
23+
<?php
24+
25+
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Fixture;
26+
27+
use Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Source\ExampleFromAnotherInterface;
28+
use Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Source\ExampleParentClass;
29+
30+
final class SkipInterfaceMixedUsage extends ExampleParentClass implements ExampleFromAnotherInterface
31+
{
32+
#[\Override]
33+
public function foo()
34+
{
35+
return 'overrides method';
36+
}
37+
38+
public function baz()
39+
{
40+
return 'implements only';
41+
}
42+
}
43+
44+
?>

rules-tests/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector/Fixture/skip_on_interface.php.inc renamed to rules-tests/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector/Fixture/skip_on_stringable_interface.php.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Fixture;
44

5-
final class SkipOnInterface implements \Stringable
5+
final class SkipOnStringableInterface implements \Stringable
66
{
77
public function __toString(): string
88
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\FixtureAddToInterfaceMethods;
6+
7+
use Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Source\AbstractParentWithInterface;
8+
9+
final class ExtendsAbstractParent extends AbstractParentWithInterface
10+
{
11+
public function foo()
12+
{
13+
return true;
14+
}
15+
}
16+
17+
?>
18+
-----
19+
<?php
20+
21+
declare(strict_types=1);
22+
23+
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\FixtureAddToInterfaceMethods;
24+
25+
use Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Source\AbstractParentWithInterface;
26+
27+
final class ExtendsAbstractParent extends AbstractParentWithInterface
28+
{
29+
#[\Override]
30+
public function foo()
31+
{
32+
return true;
33+
}
34+
}
35+
36+
?>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\FixtureAddToInterfaceMethods;
6+
7+
use Countable;
8+
9+
final class ImplementBuiltIn implements Countable
10+
{
11+
public function count(): int
12+
{
13+
return 0;
14+
}
15+
}
16+
17+
?>
18+
-----
19+
<?php
20+
21+
declare(strict_types=1);
22+
23+
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\FixtureAddToInterfaceMethods;
24+
25+
use Countable;
26+
27+
final class ImplementBuiltIn implements Countable
28+
{
29+
#[\Override]
30+
public function count(): int
31+
{
32+
return 0;
33+
}
34+
}
35+
36+
?>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\FixtureAddToInterfaceMethods;
6+
7+
use Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Source\SomeClassImplementsToString;
8+
9+
final class IndirectToStringOverride extends SomeClassImplementsToString
10+
{
11+
public function __toString(): string
12+
{
13+
return 'hello';
14+
}
15+
}
16+
17+
?>
18+
-----
19+
<?php
20+
21+
declare(strict_types=1);
22+
23+
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\FixtureAddToInterfaceMethods;
24+
25+
use Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Source\SomeClassImplementsToString;
26+
27+
final class IndirectToStringOverride extends SomeClassImplementsToString
28+
{
29+
#[\Override]
30+
public function __toString(): string
31+
{
32+
return 'hello';
33+
}
34+
}
35+
36+
?>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\FixtureAddToInterfaceMethods;
6+
7+
use Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Source\ExampleFromInterface;
8+
9+
final class InterfaceImplement implements ExampleFromInterface
10+
{
11+
public function foo()
12+
{
13+
return true;
14+
}
15+
}
16+
17+
?>
18+
-----
19+
<?php
20+
21+
declare(strict_types=1);
22+
23+
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\FixtureAddToInterfaceMethods;
24+
25+
use Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Source\ExampleFromInterface;
26+
27+
final class InterfaceImplement implements ExampleFromInterface
28+
{
29+
#[\Override]
30+
public function foo()
31+
{
32+
return true;
33+
}
34+
}
35+
36+
?>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\FixtureAddToInterfaceMethods;
6+
7+
use Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Source\ExampleFromAnotherInterface;
8+
use Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Source\ExampleFromInterface;
9+
10+
final class InterfaceImplementMultiple implements ExampleFromInterface, ExampleFromAnotherInterface
11+
{
12+
public function foo()
13+
{
14+
return true;
15+
}
16+
17+
public function baz()
18+
{
19+
return true;
20+
}
21+
}
22+
23+
?>
24+
-----
25+
<?php
26+
27+
declare(strict_types=1);
28+
29+
namespace Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\FixtureAddToInterfaceMethods;
30+
31+
use Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Source\ExampleFromAnotherInterface;
32+
use Rector\Tests\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector\Source\ExampleFromInterface;
33+
34+
final class InterfaceImplementMultiple implements ExampleFromInterface, ExampleFromAnotherInterface
35+
{
36+
#[\Override]
37+
public function foo()
38+
{
39+
return true;
40+
}
41+
42+
#[\Override]
43+
public function baz()
44+
{
45+
return true;
46+
}
47+
}
48+
49+
?>

0 commit comments

Comments
 (0)