2424
2525use Ramsey \Dev \LibraryStarterKit \Task \Builder ;
2626use RuntimeException ;
27- use Symfony \Component \Finder \SplFileInfo ;
2827
2928use function in_array ;
3029use function json_decode ;
3736
3837/**
3938 * Updates values in the composer.json file
39+ *
40+ * @psalm-type ComposerAuthorType = array{name: string, email?: string | null, homepage?: string | null}
41+ * @psalm-type ComposerAutoloadType = array{psr-4?: array<string, string>}
42+ * @psalm-type ComposerType = array{name: string, description: string, type: string, keywords: string[], license: string | null, authors: ComposerAuthorType[], require?: array<string, string>, require-dev?: array<string, string>, autoload?: ComposerAutoloadType, autoload-dev?: ComposerAutoloadType, scripts?: array<string, string | string[]>, scripts-descriptions?: array<string, string>, suggest?: array<string, string>}
4043 */
4144class UpdateComposerJson extends Builder
4245{
@@ -63,7 +66,7 @@ public function build(): void
6366 $ this ->getConsole ()->section ('Updating composer.json ' );
6467
6568 /**
66- * @var array<string, mixed> |null $composer
69+ * @psalm- var ComposerType |null $composer
6770 */
6871 $ composer = json_decode ($ this ->getComposerContents (), true );
6972 if ($ composer === null ) {
@@ -122,7 +125,6 @@ private function getComposerContents(): string
122125
123126 $ composerContents = null ;
124127
125- /** @var SplFileInfo $file */
126128 foreach ($ finder as $ file ) {
127129 $ composerContents = $ file ->getContents ();
128130
@@ -137,12 +139,12 @@ private function getComposerContents(): string
137139 }
138140
139141 /**
140- * @param array<string, mixed> $composer
142+ * @psalm- param ComposerType $composer
141143 */
142144 private function buildAuthors (array &$ composer ): void
143145 {
144- $ author = [];
145- $ author ['name ' ] = $ this ->getAnswers ()->authorName ;
146+ /** @var ComposerAuthorType $author */
147+ $ author = ['name ' => $ this ->getAnswers ()->authorName ] ;
146148
147149 if (trim ((string ) $ this ->getAnswers ()->authorEmail ) !== '' ) {
148150 $ author ['email ' ] = $ this ->getAnswers ()->authorEmail ;
@@ -156,73 +158,61 @@ private function buildAuthors(array &$composer): void
156158 }
157159
158160 /**
159- * @param array<string, mixed> $composer
161+ * @psalm- param ComposerType $composer
160162 */
161163 private function buildRequire (array &$ composer ): void
162164 {
163165 if (!isset ($ composer ['require ' ])) {
164166 return ;
165167 }
166168
167- /** @var array<string, string> $require */
168- $ require = $ composer ['require ' ];
169-
170169 $ composer ['require ' ] = $ this ->filterPropertiesByWhitelist (
171- $ require ,
170+ $ composer [ ' require ' ] ,
172171 self ::WHITELIST_REQUIRE ,
173172 );
174173 }
175174
176175 /**
177- * @param array<string, mixed> $composer
176+ * @psalm- param ComposerType $composer
178177 */
179178 private function buildRequireDev (array &$ composer ): void
180179 {
181180 if (!isset ($ composer ['require-dev ' ])) {
182181 return ;
183182 }
184183
185- /** @var array<string, string> $requireDev */
186- $ requireDev = $ composer ['require-dev ' ];
187-
188184 $ composer ['require-dev ' ] = $ this ->filterPropertiesByWhitelist (
189- $ requireDev ,
185+ $ composer [ ' require-dev ' ] ,
190186 self ::WHITELIST_REQUIRE_DEV ,
191187 );
192188 }
193189
194190 /**
195- * @param array<string, mixed> $composer
191+ * @psalm- param ComposerType $composer
196192 */
197193 private function buildAutoload (array &$ composer ): void
198194 {
199195 if (!isset ($ composer ['autoload ' ]['psr-4 ' ])) {
200196 return ;
201197 }
202198
203- /** @var array<string, string> $autoload */
204- $ autoload = $ composer ['autoload ' ]['psr-4 ' ];
205-
206199 $ composer ['autoload ' ]['psr-4 ' ] = $ this ->filterPropertiesByWhitelist (
207- $ autoload ,
200+ $ composer [ ' autoload ' ][ ' psr-4 ' ] ,
208201 self ::WHITELIST_AUTOLOAD ,
209202 );
210203 }
211204
212205 /**
213- * @param array<string, mixed> $composer
206+ * @psalm- param ComposerType $composer
214207 */
215208 private function buildAutoloadDev (array &$ composer ): void
216209 {
217210 if (!isset ($ composer ['autoload-dev ' ]['psr-4 ' ])) {
218211 return ;
219212 }
220213
221- /** @var array<string, string> $autoloadDev */
222- $ autoloadDev = $ composer ['autoload-dev ' ]['psr-4 ' ];
223-
224214 $ composer ['autoload-dev ' ]['psr-4 ' ] = $ this ->filterPropertiesByWhitelist (
225- $ autoloadDev ,
215+ $ composer [ ' autoload-dev ' ][ ' psr-4 ' ] ,
226216 self ::WHITELIST_AUTOLOAD_DEV ,
227217 );
228218 }
0 commit comments