11<?php
22namespace gossi \codegen \config ;
33
4+ use gossi \codegen \generator \CodeGenerator ;
5+ use phootwork \lang \Comparator ;
46use Symfony \Component \OptionsResolver \Options ;
57use Symfony \Component \OptionsResolver \OptionsResolver ;
68
@@ -21,56 +23,34 @@ class CodeGeneratorConfig {
2123 */
2224 public function __construct (array $ options = []) {
2325 $ 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 );
2927 $ this ->options = $ resolver ->resolve ($ options );
3028 }
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 ([
5332 'generateDocblock ' => true ,
5433 'generateEmptyDocblock ' => function (Options $ options ) {
5534 return $ options ['generateDocblock ' ];
5635 },
5736 'generateScalarTypeHints ' => false ,
5837 '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 ' ]);
7454 }
7555
7656 /**
@@ -127,6 +107,51 @@ public function setGenerateEmptyDocblock($generate) {
127107 public function getGenerateScalarTypeHints () {
128108 return $ this ->options ['generateScalarTypeHints ' ];
129109 }
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+ }
130155
131156 /**
132157 * Sets whether scalar type hints will be generated for method parameters (PHP 7)
@@ -158,4 +183,59 @@ public function setGenerateReturnTypeHints($generate) {
158183 $ this ->options ['generateReturnTypeHints ' ] = $ generate ;
159184 return $ this ;
160185 }
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+ }
161241}
0 commit comments