ソースを参照

Fix errors reported by psalm.

ADmad 6 年 前
コミット
dc1d947f45

+ 0 - 50
psalm-baseline.xml

@@ -687,17 +687,6 @@
       <code>$cookie['httponly']</code>
     </PossiblyInvalidArgument>
   </file>
-  <file src="src/Http/MiddlewareQueue.php">
-    <InvalidOperand occurrences="1">
-      <code>$i</code>
-    </InvalidOperand>
-    <PossiblyNullArgument occurrences="1">
-      <code>$i</code>
-    </PossiblyNullArgument>
-    <PossiblyNullOperand occurrences="1">
-      <code>$i</code>
-    </PossiblyNullOperand>
-  </file>
   <file src="src/Http/Response.php">
     <PossiblyInvalidArgument occurrences="5">
       <code>env('HTTP_ACCEPT_ENCODING')</code>
@@ -715,18 +704,6 @@
       <code>$weak ? 'W/' : null</code>
     </PossiblyNullArgument>
   </file>
-  <file src="src/Http/ResponseEmitter.php">
-    <PossiblyInvalidArgument occurrences="8">
-      <code>$data['expires']</code>
-      <code>$data['name']</code>
-      <code>$data['value']</code>
-      <code>$data['expires']</code>
-      <code>$data['path']</code>
-      <code>$data['domain']</code>
-      <code>$data['secure']</code>
-      <code>$data['httponly']</code>
-    </PossiblyInvalidArgument>
-  </file>
   <file src="src/Http/ServerRequest.php">
     <LessSpecificImplementedReturnType occurrences="2">
       <code>array</code>
@@ -756,15 +733,6 @@
       <code>$uri-&gt;getPort()</code>
     </PossiblyNullOperand>
   </file>
-  <file src="src/Http/ServerRequestFactory.php">
-    <NoInterfaceProperties occurrences="5">
-      <code>$uri-&gt;webroot</code>
-      <code>$uri-&gt;webroot</code>
-      <code>$uri-&gt;base</code>
-      <code>$uri-&gt;base</code>
-      <code>$uri-&gt;webroot</code>
-    </NoInterfaceProperties>
-  </file>
   <file src="src/Http/Session.php">
     <PossiblyInvalidArgument occurrences="1">
       <code>$config['handler']</code>
@@ -838,11 +806,6 @@
       <code>$stage[1]</code>
     </PossiblyUndefinedArrayOffset>
   </file>
-  <file src="src/I18n/RelativeTimeFormatter.php">
-    <PossiblyNullArgument occurrences="1">
-      <code>$other</code>
-    </PossiblyNullArgument>
-  </file>
   <file src="src/I18n/Time.php">
     <InvalidOperand occurrences="1">
       <code>$this-&gt;format('m')</code>
@@ -1032,15 +995,7 @@
       <code>$message</code>
     </MissingParamType>
   </file>
-  <file src="src/Routing/Middleware/RoutingMiddleware.php">
-    <PossiblyInvalidArgument occurrences="1">
-      <code>$e-&gt;getCode()</code>
-    </PossiblyInvalidArgument>
-  </file>
   <file src="src/Routing/Route/Route.php">
-    <PossiblyNullArgument occurrences="1">
-      <code>$this-&gt;_compiledRoute</code>
-    </PossiblyNullArgument>
     <PossiblyNullOperand occurrences="4">
       <code>$option</code>
       <code>$option</code>
@@ -1194,11 +1149,6 @@
       <code>$io</code>
     </PossiblyNullPropertyAssignmentValue>
   </file>
-  <file src="src/TestSuite/MiddlewareDispatcher.php">
-    <RedundantCondition occurrences="1">
-      <code>$this-&gt;app instanceof HttpApplicationInterface</code>
-    </RedundantCondition>
-  </file>
   <file src="src/TestSuite/TestCase.php">
     <PossiblyFalseArgument occurrences="1">
       <code>$tag</code>

+ 3 - 2
src/Http/MiddlewareQueue.php

@@ -45,6 +45,7 @@ class MiddlewareQueue implements Countable, SeekableIterator
      * The queue of middlewares.
      *
      * @var array
+     * @psalm-var array<int, mixed>
      */
     protected $queue = [];
 
@@ -173,7 +174,7 @@ class MiddlewareQueue implements Countable, SeekableIterator
     public function insertBefore(string $class, $middleware)
     {
         $found = false;
-        $i = null;
+        $i = 0;
         foreach ($this->queue as $i => $object) {
             if ((is_string($object) && $object === $class)
                 || is_a($object, $class)
@@ -202,7 +203,7 @@ class MiddlewareQueue implements Countable, SeekableIterator
     public function insertAfter(string $class, $middleware)
     {
         $found = false;
-        $i = null;
+        $i = 0;
         foreach ($this->queue as $i => $object) {
             if ((is_string($object) && $object === $class)
                 || is_a($object, $class)

+ 2 - 1
src/Http/ResponseEmitter.php

@@ -267,9 +267,10 @@ class ResponseEmitter implements EmitterInterface
                 $key = strtolower($key);
                 $data[$key] = $value;
             }
-            if (!empty($data['expires'])) {
+            if (is_string($data['expires'])) {
                 $data['expires'] = strtotime($data['expires']);
             }
+            /** @psalm-suppress PossiblyInvalidArgument */
             setcookie(
                 $data['name'],
                 $data['value'],

+ 4 - 0
src/Http/ServerRequestFactory.php

@@ -61,11 +61,13 @@ abstract class ServerRequestFactory implements ServerRequestFactoryInterface
     ): ServerRequest {
         $server = normalizeServer($server ?: $_SERVER);
         $uri = static::createUri($server);
+        /** @psalm-suppress NoInterfaceProperties */
         $sessionConfig = (array)Configure::read('Session') + [
             'defaults' => 'php',
             'cookiePath' => $uri->webroot,
         ];
         $session = Session::create($sessionConfig);
+        /** @psalm-suppress NoInterfaceProperties */
         $request = new ServerRequest([
             'environment' => $server,
             'uri' => $uri,
@@ -157,7 +159,9 @@ abstract class ServerRequestFactory implements ServerRequestFactoryInterface
 
         // Splat on some extra attributes to save
         // some method calls.
+        /** @psalm-suppress NoInterfaceProperties */
         $uri->base = $base;
+        /** @psalm-suppress NoInterfaceProperties */
         $uri->webroot = $webroot;
 
         return $uri;

+ 1 - 0
src/I18n/RelativeTimeFormatter.php

@@ -44,6 +44,7 @@ class RelativeTimeFormatter implements DifferenceFormatterInterface
         if ($isNow) {
             $other = $date->now($date->getTimezone());
         }
+        /** @psalm-suppress PossiblyNullArgument */
         $diffInterval = $date->diff($other);
 
         switch (true) {

+ 4 - 0
src/Network/Socket.php

@@ -16,6 +16,7 @@ declare(strict_types=1);
  */
 namespace Cake\Network;
 
+use Cake\Core\Exception\Exception as CakeException;
 use Cake\Core\InstanceConfigTrait;
 use Cake\Network\Exception\SocketException;
 use Cake\Validation\Validation;
@@ -487,6 +488,9 @@ class Socket
         }
 
         try {
+            if ($this->connection === null) {
+                throw new CakeException('You must call connect() first.');
+            }
             $enableCryptoResult = stream_socket_enable_crypto($this->connection, $enable, $method);
         } catch (Exception $e) {
             $this->setLastError(null, $e->getMessage());

+ 1 - 1
src/Routing/Middleware/RoutingMiddleware.php

@@ -147,7 +147,7 @@ class RoutingMiddleware implements MiddlewareInterface
         } catch (RedirectException $e) {
             return new RedirectResponse(
                 $e->getMessage(),
-                $e->getCode()
+                (int)$e->getCode()
             );
         }
         $matching = Router::getRouteCollection()->getMiddleware($middleware);

+ 6 - 10
src/Routing/Route/Route.php

@@ -255,7 +255,7 @@ class Route
      */
     public function compiled(): bool
     {
-        return !empty($this->_compiledRoute);
+        return $this->_compiledRoute !== null;
     }
 
     /**
@@ -265,16 +265,14 @@ class Route
      * and populates $this->names with the named routing elements.
      *
      * @return string Returns a string regular expression of the compiled route.
-     * @psalm-suppress InvalidNullableReturnType
      */
     public function compile(): string
     {
-        if ($this->_compiledRoute) {
-            return $this->_compiledRoute;
+        if ($this->_compiledRoute === null) {
+            $this->_writeRoute();
         }
-        $this->_writeRoute();
 
-        /** @psalm-suppress NullableReturnStatement */
+        /** @var string */
         return $this->_compiledRoute;
     }
 
@@ -420,12 +418,10 @@ class Route
      */
     public function parse(string $url, string $method): ?array
     {
-        if (empty($this->_compiledRoute)) {
-            $this->compile();
-        }
+        $compiledRoute = $this->compile();
         [$url, $ext] = $this->_parseExtension($url);
 
-        if (!preg_match($this->_compiledRoute, urldecode($url), $route)) {
+        if (!preg_match($compiledRoute, urldecode($url), $route)) {
             return null;
         }
 

+ 2 - 1
src/TestSuite/MiddlewareDispatcher.php

@@ -61,7 +61,7 @@ class MiddlewareDispatcher
     /**
      * The application that is being dispatched.
      *
-     * @var \Cake\Core\HttpApplicationInterface
+     * @var \Cake\Core\HttpApplicationInterface|\Cake\Core\ConsoleApplicationInterface
      */
     protected $app;
 
@@ -76,6 +76,7 @@ class MiddlewareDispatcher
      *   flag may be necessary if you are using Router methods in your test case setup, and using array URLs
      *   when doing requests in your tests.
      * @throws \LogicException If it cannot load class for use in integration testing.
+     * @psalm-param \Cake\Core\HttpApplicationInterface::class|\Cake\Core\ConsoleApplicationInterface::class|null $class
      */
     public function __construct(
         TestCase $test,