Skip to content

Commit b29997a

Browse files
Merge pull request #7 from deniskorbakov/4-add-rules-attr
4 add rules attr
2 parents 4df1c8f + 151fea1 commit b29997a

File tree

23 files changed

+870
-21
lines changed

23 files changed

+870
-21
lines changed

.gitattributes

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
* text=auto
2+
3+
/.codecov.yml export-ignore
4+
/.editorconfig export-ignore
5+
/.gitattributes export-ignore
6+
/.github export-ignore
7+
/.gitignore export-ignore
8+
/.phan export-ignore
9+
/.scrutinizer.yml export-ignore
10+
/changelog.md export-ignore
11+
/docs export-ignore
12+
/examples export-ignore
13+
/phpcs.xml.dist export-ignore
14+
/phpdoc.dist.xml export-ignore
15+
/phpunit.xml.dist export-ignore
16+
/test export-ignore
17+
/UPGRADING.md export-ignore

.github/workflows/lint.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
name: LINT
22

3-
on: ['push']
3+
on:
4+
push:
5+
branches: [ main ]
6+
pull_request:
7+
branches: [ main ]
48

59
jobs:
610
coding-standard:

.github/workflows/tests.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
name: TESTS
22

3-
on: ['push']
3+
on:
4+
push:
5+
branches: [ main ]
6+
pull_request:
7+
branches: [ main ]
48

59
jobs:
610
test:

rector.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
use Rector\Privatization\Rector\ClassMethod\PrivatizeFinalClassMethodRector;
2424
use Rector\Privatization\Rector\Property\PrivatizeFinalClassPropertyRector;
2525
use Rector\Set\ValueObject\SetList;
26+
use Rector\Strict\Rector\Empty_\DisallowedEmptyRuleFixerRector;
2627
use Rector\TypeDeclaration\Rector\ClassMethod\AddVoidReturnTypeWhereNoReturnRector;
2728
use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromReturnDirectArrayRector;
2829
use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictNewArrayRector;
@@ -64,6 +65,7 @@
6465
]);
6566

6667
$rectorConfig->skip([
68+
DisallowedEmptyRuleFixerRector::class,
6769
CompactToVariablesRector::class,
6870
RemoveEmptyClassMethodRector::class,
6971
RemoveNonExistingVarAnnotationRector::class,
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace DenisKorbakov\LaravelDataScribe\Documentations;
6+
7+
use DenisKorbakov\LaravelDataScribe\Params\BodyParams;
8+
use DenisKorbakov\LaravelDataScribe\Transforms\BodyParam\AtrToBodyParamTransform;
9+
use Knuckles\Scribe\Tools\DocumentationConfig;
10+
use Spatie\LaravelData\Data;
11+
12+
final readonly class BodyParamDoc implements Doc
13+
{
14+
/**
15+
* @param class-string<Data> $laravelDataClass
16+
* @param array<int, array<string, mixed>> $attributeArguments
17+
*/
18+
public function __construct(
19+
public string $laravelDataClass,
20+
public array $attributeArguments,
21+
public DocumentationConfig $config,
22+
) {
23+
}
24+
25+
/** @return ?array<string, array<string, mixed>> */
26+
public function generate(): ?array
27+
{
28+
if (empty($this->laravelDataClass)) {
29+
return null;
30+
}
31+
32+
$attributesDoc = (new AtrToBodyParamTransform($this->attributeArguments))->transform();
33+
$bodyParamsDoc = (new BodyParams($this->laravelDataClass, $this->config))->generate();
34+
35+
return array_merge($bodyParamsDoc, $attributesDoc);
36+
}
37+
}

src/Documentations/Doc.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace DenisKorbakov\LaravelDataScribe\Documentations;
6+
7+
interface Doc
8+
{
9+
/** @return ?array<string, array<string, mixed>> */
10+
public function generate(): ?array;
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace DenisKorbakov\LaravelDataScribe\Extractors\Attributes;
6+
7+
interface AttributeExtract
8+
{
9+
/** @return array<int, array<string, mixed>> */
10+
public function extract(): array;
11+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace DenisKorbakov\LaravelDataScribe\Extractors\Attributes;
6+
7+
use Knuckles\Scribe\Attributes\BodyParam;
8+
use ReflectionAttribute;
9+
10+
/** Extracts Body Param attribute from method attributes */
11+
final readonly class BodyParamAttributeExtract implements AttributeExtract
12+
{
13+
/** @param ReflectionAttribute<object>[] $attributes Method to analyze */
14+
public function __construct(
15+
public array $attributes,
16+
) {
17+
}
18+
19+
/** @return list<array> Get array arguments or empty array */
20+
public function extract(): array
21+
{
22+
$arguments = [];
23+
24+
foreach ($this->attributes as $attribute) {
25+
if (!is_a($attribute->getName(), BodyParam::class, true)) {
26+
continue;
27+
}
28+
29+
$arguments[] = $attribute->getArguments();
30+
}
31+
32+
return $arguments;
33+
}
34+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace DenisKorbakov\LaravelDataScribe\Extractors\Classes;
6+
7+
interface ClassExtract
8+
{
9+
public function extract(): string;
10+
}

src/Extractors/ParametersExtractor.php renamed to src/Extractors/Classes/LaravelDataClassExtract.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
declare(strict_types=1);
44

5-
namespace DenisKorbakov\LaravelDataScribe\Extractors;
5+
namespace DenisKorbakov\LaravelDataScribe\Extractors\Classes;
66

77
use DenisKorbakov\LaravelDataScribe\Resolvers\ParentClassResolver;
88
use ReflectionNamedType;
99
use ReflectionParameter;
1010
use Spatie\LaravelData\Data;
1111

1212
/** Extracts Laravel Data class from method parameters */
13-
final readonly class ParametersExtractor
13+
final readonly class LaravelDataClassExtract implements ClassExtract
1414
{
1515
/** @param ReflectionParameter[] $parameters Method to analyze */
1616
public function __construct(

0 commit comments

Comments
 (0)