@@ -51,16 +51,22 @@ public function process(File $file, $position)
51
51
return ;
52
52
}
53
53
54
- list ($ hasNonVoidReturnType , $ hasVoidReturnType , $ hasNoReturnType ) = $ this ->returnTypeInfo (
55
- $ file ,
56
- $ position
57
- );
54
+ list (
55
+ $ hasNonVoidReturnType ,
56
+ $ hasVoidReturnType ,
57
+ $ hasNoReturnType ,
58
+ $ hasNullable
59
+ ) = $ this ->returnTypeInfo ($ file , $ position );
58
60
59
61
list ($ nonVoidReturnCount , $ voidReturnCount , $ nullReturnCount ) = PhpcsHelpers::countReturns (
60
62
$ file ,
61
63
$ position
62
64
);
63
65
66
+ if ($ hasNullable ) {
67
+ $ voidReturnCount -= $ nullReturnCount ;
68
+ }
69
+
64
70
$ this ->maybeErrors (
65
71
$ hasNonVoidReturnType ,
66
72
$ hasVoidReturnType ,
@@ -151,15 +157,27 @@ private function returnTypeInfo(File $file, int $functionPosition): array
151
157
);
152
158
153
159
$ returnType = $ tokens [$ returnTypeToken ] ?? null ;
154
- if ($ returnType && $ returnType ['type ' ] !== "T_RETURN_TYPE " ) {
155
- $ returnType = null ;
160
+ if ($ returnType && $ returnType ['code ' ] !== T_RETURN_TYPE ) {
161
+ return [false , false , true , false ];
162
+ }
163
+
164
+ $ start = $ tokens [$ functionPosition ]['parenthesis_closer ' ] + 1 ;
165
+ $ end = $ tokens [$ functionPosition ]['scope_opener ' ];
166
+ $ hasNullable = false ;
167
+ for ($ i = $ start ; $ i < $ end ; $ i ++) {
168
+ if ($ tokens [$ i ]['code ' ] === T_NULLABLE ) {
169
+ $ hasNullable = true ;
170
+ break ;
171
+ }
172
+ if ($ tokens [$ i ]['code ' ] === T_WHITESPACE ) {
173
+ continue ;
174
+ }
156
175
}
157
176
158
- $ hasNonVoidReturnType = $ returnType && $ returnType ['content ' ] !== 'void ' ;
159
- $ hasVoidReturnType = $ returnType && $ returnType ['content ' ] === 'void ' ;
160
- $ hasNoReturnType = !$ returnType ;
177
+ $ hasNonVoidReturnType = $ returnType ['content ' ] !== 'void ' ;
178
+ $ hasVoidReturnType = $ returnType ['content ' ] === 'void ' ;
161
179
162
- return [$ hasNonVoidReturnType , $ hasVoidReturnType , $ hasNoReturnType ];
180
+ return [$ hasNonVoidReturnType , $ hasVoidReturnType , false , $ hasNullable ];
163
181
}
164
182
165
183
/**
0 commit comments