Skip to content

Commit 33ceb3e

Browse files
Add the PropertyRead and PropertyWrite attributes
1 parent fcda73e commit 33ceb3e

File tree

6 files changed

+91
-9
lines changed

6 files changed

+91
-9
lines changed

README.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -110,13 +110,16 @@ return RectorConfig::configure()
110110

111111
These are the available attributes and their corresponding PHPDoc annotations:
112112

113-
| Attribute | PHPDoc Annotation |
114-
|---------------------------------------------------------------------------------------------|-------------------|
115-
| [IsReadOnly](https://github.com/php-static-analysis/attributes/blob/main/doc/IsReadOnly.md) | `@readonly` |
116-
| [Param](https://github.com/php-static-analysis/attributes/blob/main/doc/Param.md) | `@param` |
117-
| [Returns](https://github.com/php-static-analysis/attributes/blob/main/doc/Returns.md) | `@return` |
118-
| [Template](https://github.com/php-static-analysis/attributes/blob/main/doc/Template.md) | `@template` |
119-
| [Type](https://github.com/php-static-analysis/attributes/blob/main/doc/Type.md) | `@var` |
113+
| Attribute | PHPDoc Annotations |
114+
|---------------------------------------------------------------------------------------------------|--------------------|
115+
| [IsReadOnly](https://github.com/php-static-analysis/attributes/blob/main/doc/IsReadOnly.md) | `@readonly` |
116+
| [Param](https://github.com/php-static-analysis/attributes/blob/main/doc/Param.md) | `@param` |
117+
| [Property](https://github.com/php-static-analysis/attributes/blob/main/doc/Property.md) | `@property` `@var` |
118+
| [PropertyRead](https://github.com/php-static-analysis/attributes/blob/main/doc/PropertyRead.md) | `@property-read` |
119+
| [PropertyWrite](https://github.com/php-static-analysis/attributes/blob/main/doc/PropertyWrite.md) | `@property-write` |
120+
| [Returns](https://github.com/php-static-analysis/attributes/blob/main/doc/Returns.md) | `@return` |
121+
| [Template](https://github.com/php-static-analysis/attributes/blob/main/doc/Template.md) | `@template` |
122+
| [Type](https://github.com/php-static-analysis/attributes/blob/main/doc/Type.md) | `@var` `@return` |
120123

121124
### Location of Param attributes
122125

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"prefer-stable": true,
2525
"require": {
2626
"php": ">=8.0",
27-
"php-static-analysis/attributes": "^0.1.3 || dev-main",
27+
"php-static-analysis/attributes": "^0.1.4 || dev-main",
2828
"rector/rector": "^0.19 || ^1.0"
2929
},
3030
"require-dev": {

config/sets/php-static-analysis-annotations-to-attributes.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
declare(strict_types=1);
44

5+
use PhpStaticAnalysis\Attributes\PropertyRead;
6+
use PhpStaticAnalysis\Attributes\PropertyWrite;
57
use Rector\Config\RectorConfig;
68
use Rector\Php80\ValueObject\AnnotationToAttribute;
79
use PhpStaticAnalysis\Attributes\IsReadOnly;
@@ -18,6 +20,8 @@
1820
[
1921
new AnnotationToAttribute('param', Param::class),
2022
new AnnotationToAttribute('property', Property::class),
23+
new AnnotationToAttribute('property_read', PropertyRead::class),
24+
new AnnotationToAttribute('property_write', PropertyWrite::class),
2125
new AnnotationToAttribute('readonly', IsReadOnly::class),
2226
new AnnotationToAttribute('return', Returns::class),
2327
new AnnotationToAttribute('template', Template::class),

src/AnnotationsToAttributesRector.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,8 @@ public function configure(array $configuration): void
116116
{
117117
foreach ($configuration as $key => $value) {
118118
if ($value instanceof AnnotationToAttribute) {
119-
$this->annotationsToAttributes[$value->getTag()] = $value;
119+
$tag = str_replace('_', '-', $value->getTag());
120+
$this->annotationsToAttributes[$tag] = $value;
120121
} elseif ($key == 'addParamAttributeOnParameters') {
121122
$this->addParamAttributeOnParameters = $value;
122123
} elseif ($key == 'useTypeAttributeForReturnAnnotation') {
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
namespace test\PhpStaticAnalysis\RectorRule\Fixture;
4+
5+
use PhpStaticAnalysis\Attributes\Template;
6+
7+
/**
8+
* @deprecated
9+
* @property-read string $name
10+
* @psalm-property-read int $num
11+
* @phpstan-property-read string[] $index
12+
*/
13+
#[Template('T')]
14+
class PropertyReadAttributeTest
15+
{
16+
}
17+
18+
?>
19+
-----
20+
<?php
21+
22+
namespace test\PhpStaticAnalysis\RectorRule\Fixture;
23+
24+
use PhpStaticAnalysis\Attributes\Template;
25+
26+
/**
27+
* @deprecated
28+
*/
29+
#[Template('T')]
30+
#[\PhpStaticAnalysis\Attributes\PropertyRead(name: 'string')]
31+
#[\PhpStaticAnalysis\Attributes\PropertyRead(num: 'int')]
32+
#[\PhpStaticAnalysis\Attributes\PropertyRead(index: 'string[]')]
33+
class PropertyReadAttributeTest
34+
{
35+
}
36+
37+
?>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
namespace test\PhpStaticAnalysis\RectorRule\Fixture;
4+
5+
use PhpStaticAnalysis\Attributes\Template;
6+
7+
/**
8+
* @deprecated
9+
* @property-write string $name
10+
* @psalm-property-write int $num
11+
* @phpstan-property-write string[] $index
12+
*/
13+
#[Template('T')]
14+
class PropertyWriteAttributeTest
15+
{
16+
}
17+
18+
?>
19+
-----
20+
<?php
21+
22+
namespace test\PhpStaticAnalysis\RectorRule\Fixture;
23+
24+
use PhpStaticAnalysis\Attributes\Template;
25+
26+
/**
27+
* @deprecated
28+
*/
29+
#[Template('T')]
30+
#[\PhpStaticAnalysis\Attributes\PropertyWrite(name: 'string')]
31+
#[\PhpStaticAnalysis\Attributes\PropertyWrite(num: 'int')]
32+
#[\PhpStaticAnalysis\Attributes\PropertyWrite(index: 'string[]')]
33+
class PropertyWriteAttributeTest
34+
{
35+
}
36+
37+
?>

0 commit comments

Comments
 (0)