2929use function count ;
3030use function in_array ;
3131use function intval ;
32+ use function is_array ;
3233use function is_string ;
3334use function preg_match ;
3435use function sprintf ;
@@ -69,7 +70,7 @@ public function getTypeFromFunctionCall(
6970 static fn (Type $ type ): bool => $ type ->toString ()->isLowercaseString ()->yes ()
7071 );
7172
72- $ singlePlaceholderEarlyReturn = null ;
73+ $ singlePlaceholderEarlyReturn = [] ;
7374 $ allPatternsNonEmpty = count ($ formatStrings ) !== 0 ;
7475 $ allPatternsNonFalsy = count ($ formatStrings ) !== 0 ;
7576 foreach ($ formatStrings as $ constantString ) {
@@ -93,8 +94,11 @@ public function getTypeFromFunctionCall(
9394 $ allPatternsNonFalsy = false ;
9495 }
9596
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 ) {
97+ if (
98+ is_array ($ singlePlaceholderEarlyReturn )
99+ // The printf format is %[argnum$][flags][width][.precision]specifier.
100+ && preg_match ('/^%(?P<argnum>[0-9]*\$)?(?P<width>[0-9]*)\.?[0-9]*(?P<specifier>[sbdeEfFgGhHouxX])$/ ' , $ constantString ->getValue (), $ matches ) === 1
101+ ) {
98102 if ($ matches ['argnum ' ] !== '' ) {
99103 // invalid positional argument
100104 if ($ matches ['argnum ' ] === '0$ ' ) {
@@ -132,14 +136,14 @@ public function getTypeFromFunctionCall(
132136 continue 2 ;
133137 }
134138 }
135- $ singlePlaceholderEarlyReturn = TypeCombinator::union (...$ result );
139+ $ singlePlaceholderEarlyReturn[] = TypeCombinator::union (...$ result );
136140
137141 continue ;
138142 }
139143
140- $ singlePlaceholderEarlyReturn = $ checkArgType ->toString ();
144+ $ singlePlaceholderEarlyReturn[] = $ checkArgType ->toString ();
141145 } elseif ($ matches ['specifier ' ] !== 's ' ) {
142- $ singlePlaceholderEarlyReturn = $ this ->getStringReturnType (
146+ $ singlePlaceholderEarlyReturn[] = $ this ->getStringReturnType (
143147 new AccessoryNumericStringType (),
144148 $ isLowercase ,
145149 );
@@ -149,11 +153,10 @@ public function getTypeFromFunctionCall(
149153 }
150154
151155 $ singlePlaceholderEarlyReturn = null ;
152- break ;
153156 }
154157
155- if ($ singlePlaceholderEarlyReturn !== null ) {
156- return $ singlePlaceholderEarlyReturn ;
158+ if (is_array ( $ singlePlaceholderEarlyReturn) && count ( $ singlePlaceholderEarlyReturn ) > 0 ) {
159+ return TypeCombinator:: union (... $ singlePlaceholderEarlyReturn) ;
157160 }
158161
159162 if ($ allPatternsNonFalsy ) {
0 commit comments