@@ -69,7 +69,7 @@ public function getTypeFromFunctionCall(
6969 static fn (Type $ type ): bool => $ type ->toString ()->isLowercaseString ()->yes ()
7070 );
7171
72- $ singlePlaceholderEarlyReturn = null ;
72+ $ singlePlaceholderEarlyReturn = [] ;
7373 $ allPatternsNonEmpty = count ($ formatStrings ) !== 0 ;
7474 $ allPatternsNonFalsy = count ($ formatStrings ) !== 0 ;
7575 foreach ($ formatStrings as $ constantString ) {
@@ -93,8 +93,11 @@ public function getTypeFromFunctionCall(
9393 $ allPatternsNonFalsy = false ;
9494 }
9595
96- // The printf format is %[argnum$][flags][width][.precision]specifier.
97- if (preg_match ('/^%(?P<argnum>[0-9]*\$)?(?P<width>[0-9]*)\.?[0-9]*(?P<specifier>[sbdeEfFgGhHouxX])$/ ' , $ constantString ->getValue (), $ matches ) === 1 ) {
96+ if (
97+ \is_array ($ singlePlaceholderEarlyReturn )
98+ // The printf format is %[argnum$][flags][width][.precision]specifier.
99+ && preg_match ('/^%(?P<argnum>[0-9]*\$)?(?P<width>[0-9]*)\.?[0-9]*(?P<specifier>[sbdeEfFgGhHouxX])$/ ' , $ constantString ->getValue (), $ matches ) === 1
100+ ) {
98101 if ($ matches ['argnum ' ] !== '' ) {
99102 // invalid positional argument
100103 if ($ matches ['argnum ' ] === '0$ ' ) {
@@ -132,14 +135,14 @@ public function getTypeFromFunctionCall(
132135 continue 2 ;
133136 }
134137 }
135- $ singlePlaceholderEarlyReturn = TypeCombinator::union (...$ result );
138+ $ singlePlaceholderEarlyReturn[] = TypeCombinator::union (...$ result );
136139
137140 continue ;
138141 }
139142
140- $ singlePlaceholderEarlyReturn = $ checkArgType ->toString ();
143+ $ singlePlaceholderEarlyReturn[] = $ checkArgType ->toString ();
141144 } elseif ($ matches ['specifier ' ] !== 's ' ) {
142- $ singlePlaceholderEarlyReturn = $ this ->getStringReturnType (
145+ $ singlePlaceholderEarlyReturn[] = $ this ->getStringReturnType (
143146 new AccessoryNumericStringType (),
144147 $ isLowercase ,
145148 );
@@ -149,11 +152,10 @@ public function getTypeFromFunctionCall(
149152 }
150153
151154 $ singlePlaceholderEarlyReturn = null ;
152- break ;
153155 }
154156
155- if ($ singlePlaceholderEarlyReturn !== null ) {
156- return $ singlePlaceholderEarlyReturn ;
157+ if (\is_array ( $ singlePlaceholderEarlyReturn) && \count ( $ singlePlaceholderEarlyReturn ) > 0 ) {
158+ return TypeCombinator:: union (... $ singlePlaceholderEarlyReturn) ;
157159 }
158160
159161 if ($ allPatternsNonFalsy ) {
0 commit comments