3
3
namespace ArtARTs36 \MergeRequestLinter \DocBuilder \ConfigJsonSchema ;
4
4
5
5
use ArtARTs36 \MergeRequestLinter \Application \Rule \Rules \CustomRule ;
6
- use ArtARTs36 \MergeRequestLinter \Application \Rule \Rules \DefaultRules ;
7
6
use ArtARTs36 \MergeRequestLinter \DocBuilder \ConfigJsonSchema \Schema \JsonSchema ;
8
7
use ArtARTs36 \MergeRequestLinter \Shared \Attributes \Example ;
9
- use ArtARTs36 \MergeRequestLinter \Shared \Reflection \Instantiator \Finder ;
10
- use ArtARTs36 \MergeRequestLinter \Shared \Reflection \Instantiator \InstantiatorFinder ;
11
8
use ArtARTs36 \MergeRequestLinter \Shared \Reflection \Reflector \Reflector ;
12
9
use ArtARTs36 \Str \Facade \Str ;
13
10
@@ -22,26 +19,21 @@ class RuleSchemaGenerator
22
19
];
23
20
24
21
public function __construct (
25
- private InstantiatorFinder $ constructorFinder = new Finder (),
22
+ private RulesMetadataLoader $ rulesMetadataLoader = new RulesMetadataLoader (),
26
23
) {
27
24
//
28
25
}
29
26
30
27
public function generate (JsonSchema $ jsonSchema ): array
31
28
{
32
- $ rules = DefaultRules::map ();
33
29
$ schema = [];
30
+ $ ruleMetadata = $ this ->rulesMetadataLoader ->load ();
34
31
35
- foreach ($ rules as $ ruleName => $ rule ) {
36
- $ ruleReflector = new \ReflectionClass ($ rule );
37
-
32
+ foreach ($ ruleMetadata ->rules as $ ruleName => $ rule ) {
38
33
$ ruleSchema = [
39
- 'description ' => Reflector:: findPHPDocSummary ( $ ruleReflector ) ,
34
+ 'description ' => $ rule -> description ,
40
35
];
41
36
42
- $ constructor = $ this ->constructorFinder ->find ($ rule );
43
- $ params = $ constructor ->params ();
44
-
45
37
$ definition = [
46
38
'type ' => 'object ' ,
47
39
'properties ' => [
@@ -57,10 +49,10 @@ public function generate(JsonSchema $jsonSchema): array
57
49
'additionalProperties ' => false ,
58
50
];
59
51
60
- if (count ($ params ) > 0 ) {
61
- foreach ($ constructor ->params () as $ param ) {
52
+ if (count ($ rule -> params ) > 0 ) {
53
+ foreach ($ rule ->params as $ param ) {
62
54
$ paramSchema = $ this ->createRuleParamSchema (
63
- $ rule ,
55
+ $ rule-> class ,
64
56
$ param ,
65
57
);
66
58
@@ -72,7 +64,7 @@ public function generate(JsonSchema $jsonSchema): array
72
64
73
65
if ($ param ->type ->class !== null && Reflector::canConstructWithoutParameters ($ param ->type ->class )) {
74
66
// skipped
75
- } else if ($ param ->isRequired () ) {
67
+ } else if ($ param ->required ) {
76
68
$ definition ['required ' ][] = $ param ->name ;
77
69
}
78
70
}
@@ -103,34 +95,29 @@ public function generate(JsonSchema $jsonSchema): array
103
95
return $ schema ;
104
96
}
105
97
106
- private function createRuleParamSchema (string $ ruleClass , \ ArtARTs36 \ MergeRequestLinter \ Shared \ Reflection \ Reflector \ Parameter $ param ): ?array
98
+ private function createRuleParamSchema (string $ ruleClass , RuleParamMetadata $ param ): ?array
107
99
{
108
100
if (isset (self ::OVERWRITE_PARAMS [$ ruleClass ][$ param ->name ])) {
109
101
return self ::OVERWRITE_PARAMS [$ ruleClass ][$ param ->name ];
110
102
}
111
103
112
- $ paramSchema = [
113
- 'type ' => JsonType::to ($ param ->type ->class ?? $ param ->type ->name ->value ),
114
- ];
115
-
116
- if ($ paramSchema ['type ' ] === null ) {
104
+ if ($ param ->jsonType === null ) {
117
105
return null ;
118
106
}
119
107
120
- if ( $ param -> type -> class !== null && enum_exists ( $ param -> type -> class )) {
121
- /** @var \BackedEnum $enum */
122
- $ enum = $ param -> type -> class ;
108
+ $ paramSchema = [
109
+ ' type ' => $ param -> jsonType ,
110
+ ] ;
123
111
124
- $ paramSchema ['enum ' ] = array_map (function (\UnitEnum $ unit ) {
125
- return $ unit ->value ;
126
- }, $ enum ::cases ());
112
+ if (count ($ param ->enum ) > 0 ) {
113
+ $ paramSchema ['enum ' ] = $ param ->enum ;
127
114
}
128
115
129
116
if ($ param ->description !== '' ) {
130
117
$ paramSchema ['description ' ] = $ param ->description ;
131
118
}
132
119
133
- if ($ param ->hasExamples () && ! $ param ->type ->isGeneric ()) {
120
+ if (count ( $ param ->examples ) > 0 && ! $ param ->type ->isGeneric ()) {
134
121
$ paramSchema ['examples ' ] = array_map (fn (Example $ ex ) => $ ex ->value , $ param ->examples );
135
122
}
136
123
@@ -160,19 +147,17 @@ private function createRuleParamSchema(string $ruleClass, \ArtARTs36\MergeReques
160
147
$ item ['description ' ] = $ param ->description ;
161
148
}
162
149
163
- if ($ param ->hasExamples () ) {
150
+ if (count ( $ param ->examples ) > 0 ) {
164
151
$ item ['examples ' ] = array_map (fn (Example $ ex ) => $ ex ->value , $ param ->examples );
165
152
}
166
153
167
154
$ paramSchema ['items ' ] = [
168
155
$ item ,
169
156
];
170
157
}
171
- } else if ($ param ->type ->class !== null ) {
172
- $ subClassConstructor = $ this ->constructorFinder ->find ($ param ->type ->class );
173
-
174
- foreach ($ subClassConstructor ->params () as $ subClassParam ) {
175
- $ paramSchema ['properties ' ][$ subClassParam ->name ] = $ this ->createRuleParamSchema ($ ruleClass , $ subClassParam );
158
+ } else if (count ($ param ->nestedObjectParams ) > 0 ) {
159
+ foreach ($ param ->nestedObjectParams as $ nestedObjectParam ) {
160
+ $ paramSchema ['properties ' ][$ nestedObjectParam ->name ] = $ this ->createRuleParamSchema ($ ruleClass , $ nestedObjectParam );
176
161
}
177
162
}
178
163
0 commit comments