1
1
<?php
2
2
namespace gossi \codegen \config ;
3
3
4
+ use gossi \codegen \generator \CodeGenerator ;
5
+ use phootwork \lang \Comparator ;
4
6
use Symfony \Component \OptionsResolver \Options ;
5
7
use Symfony \Component \OptionsResolver \OptionsResolver ;
6
8
@@ -21,56 +23,34 @@ class CodeGeneratorConfig {
21
23
*/
22
24
public function __construct (array $ options = []) {
23
25
$ resolver = new OptionsResolver ();
24
- $ resolver ->setDefined ($ this ->getOptionalOptions ());
25
- $ resolver ->setDefaults ($ this ->getDefaultOptions ());
26
- foreach ($ this ->getAllowedOptionTypes () as $ option => $ type ) {
27
- $ resolver ->setAllowedTypes ($ option , $ type );
28
- }
26
+ $ this ->configureOptions ($ resolver );
29
27
$ this ->options = $ resolver ->resolve ($ options );
30
28
}
31
-
32
- /**
33
- * Return optional config options
34
- *
35
- * @return array
36
- */
37
- protected function getOptionalOptions () {
38
- return [
39
- 'generateDocblock ' ,
40
- 'generateEmptyDocblock ' ,
41
- 'generateScalarTypeHints ' ,
42
- 'generateReturnTypeHints ' ,
43
- ];
44
- }
45
-
46
- /**
47
- * Return default config options
48
- *
49
- * @return array
50
- */
51
- protected function getDefaultOptions () {
52
- return [
29
+
30
+ protected function configureOptions (OptionsResolver $ resolver ) {
31
+ $ resolver ->setDefaults ([
53
32
'generateDocblock ' => true ,
54
33
'generateEmptyDocblock ' => function (Options $ options ) {
55
34
return $ options ['generateDocblock ' ];
56
35
},
57
36
'generateScalarTypeHints ' => false ,
58
37
'generateReturnTypeHints ' => false ,
59
- ];
60
- }
61
-
62
- /**
63
- * Return allowed option types
64
- *
65
- * @return array
66
- */
67
- protected function getAllowedOptionTypes () {
68
- return [
69
- 'generateDocblock ' => 'bool ' ,
70
- 'generateEmptyDocblock ' => 'bool ' ,
71
- 'generateScalarTypeHints ' => 'bool ' ,
72
- 'generateReturnTypeHints ' => 'bool ' ,
73
- ];
38
+ 'enableSorting ' => true ,
39
+ 'useStatementSorting ' => CodeGenerator::SORT_USESTATEMENTS_DEFAULT ,
40
+ 'constantSorting ' => CodeGenerator::SORT_CONSTANTS_DEFAULT ,
41
+ 'propertySorting ' => CodeGenerator::SORT_PROPERTIES_DEFAULT ,
42
+ 'methodSorting ' => CodeGenerator::SORT_METHODS_DEFAULT
43
+ ]);
44
+
45
+ $ resolver ->setAllowedTypes ('generateDocblock ' , 'bool ' );
46
+ $ resolver ->setAllowedTypes ('generateEmptyDocblock ' , 'bool ' );
47
+ $ resolver ->setAllowedTypes ('generateScalarTypeHints ' , 'bool ' );
48
+ $ resolver ->setAllowedTypes ('generateReturnTypeHints ' , 'bool ' );
49
+ $ resolver ->setAllowedTypes ('enableSorting ' , 'bool ' );
50
+ $ resolver ->setAllowedTypes ('useStatementSorting ' , ['bool ' , 'string ' , '\Closure ' , 'phootwork\lang\Comparator ' ]);
51
+ $ resolver ->setAllowedTypes ('constantSorting ' , ['bool ' , 'string ' , '\Closure ' , 'phootwork\lang\Comparator ' ]);
52
+ $ resolver ->setAllowedTypes ('propertySorting ' , ['bool ' , 'string ' , '\Closure ' , 'phootwork\lang\Comparator ' ]);
53
+ $ resolver ->setAllowedTypes ('methodSorting ' , ['bool ' , 'string ' , '\Closure ' , 'phootwork\lang\Comparator ' ]);
74
54
}
75
55
76
56
/**
@@ -127,6 +107,51 @@ public function setGenerateEmptyDocblock($generate) {
127
107
public function getGenerateScalarTypeHints () {
128
108
return $ this ->options ['generateScalarTypeHints ' ];
129
109
}
110
+
111
+ /**
112
+ * Returns whether sorting is enabled
113
+ *
114
+ * @return bool `true` if it is enabled and `false` if not
115
+ */
116
+ public function isSortingEnabled () {
117
+ return $ this ->options ['enableSorting ' ];
118
+ }
119
+
120
+ /**
121
+ * Returns the use statement sorting
122
+ *
123
+ * @return string|bool|Comparator|\Closure
124
+ */
125
+ public function getUseStatementSorting () {
126
+ return $ this ->options ['useStatementSorting ' ];
127
+ }
128
+
129
+ /**
130
+ * Returns the constant sorting
131
+ *
132
+ * @return string|bool|Comparator|\Closure
133
+ */
134
+ public function getConstantSorting () {
135
+ return $ this ->options ['constantSorting ' ];
136
+ }
137
+
138
+ /**
139
+ * Returns the property sorting
140
+ *
141
+ * @return string|bool|Comparator|\Closure
142
+ */
143
+ public function getPropertySorting () {
144
+ return $ this ->options ['propertySorting ' ];
145
+ }
146
+
147
+ /**
148
+ * Returns the method sorting
149
+ *
150
+ * @return string|bool|Comparator|\Closure
151
+ */
152
+ public function getMethodSorting () {
153
+ return $ this ->options ['methodSorting ' ];
154
+ }
130
155
131
156
/**
132
157
* Sets whether scalar type hints will be generated for method parameters (PHP 7)
@@ -158,4 +183,59 @@ public function setGenerateReturnTypeHints($generate) {
158
183
$ this ->options ['generateReturnTypeHints ' ] = $ generate ;
159
184
return $ this ;
160
185
}
186
+
187
+ /**
188
+ * Returns whether sorting is enabled
189
+ *
190
+ * @param $enabled bool `true` if it is enabled and `false` if not
191
+ * @return $this
192
+ */
193
+ public function setSortingEnabled ($ enabled ) {
194
+ $ this ->options ['enableSorting ' ] = $ enabled ;
195
+ return $ this ;
196
+ }
197
+
198
+ /**
199
+ * Returns the use statement sorting
200
+ *
201
+ * @param $sorting string|bool|Comparator|\Closure
202
+ * @return $this
203
+ */
204
+ public function setUseStatementSorting ($ sorting ) {
205
+ $ this ->options ['useStatementSorting ' ] = $ sorting ;
206
+ return $ this ;
207
+ }
208
+
209
+ /**
210
+ * Returns the constant sorting
211
+ *
212
+ * @param $sorting string|bool|Comparator|\Closure
213
+ * @return $this
214
+ */
215
+ public function setConstantSorting ($ sorting ) {
216
+ $ this ->options ['constantSorting ' ] = $ sorting ;
217
+ return $ this ;
218
+ }
219
+
220
+ /**
221
+ * Returns the property sorting
222
+ *
223
+ * @param $sorting string|bool|Comparator|\Closure
224
+ * @return $this
225
+ */
226
+ public function setPropertySorting ($ sorting ) {
227
+ $ this ->options ['propertySorting ' ] = $ sorting ;
228
+ return $ this ;
229
+ }
230
+
231
+ /**
232
+ * Returns the method sorting
233
+ *
234
+ * @param $sorting string|bool|Comparator|\Closure
235
+ * @return $this
236
+ */
237
+ public function setMethodSorting ($ sorting ) {
238
+ $ this ->options ['methodSorting ' ] = $ sorting ;
239
+ return $ this ;
240
+ }
161
241
}
0 commit comments