Преглед изворни кода

Fix type issues (#7996)

* Fix type issues found by Psalm
Matthew Brown пре 6 година
родитељ
комит
65903aacfd
34 измењених фајлова са 59 додато и 66 уклоњено
  1. 4 2
      src/Composer/Command/BaseCommand.php
  2. 1 1
      src/Composer/Command/ConfigCommand.php
  3. 1 15
      src/Composer/Command/DiagnoseCommand.php
  4. 6 6
      src/Composer/Command/ShowCommand.php
  5. 4 1
      src/Composer/Command/SuggestsCommand.php
  6. 1 1
      src/Composer/Config/ConfigSourceInterface.php
  7. 1 1
      src/Composer/Config/JsonConfigSource.php
  8. 1 1
      src/Composer/Console/Application.php
  9. 4 4
      src/Composer/DependencyResolver/GenericRule.php
  10. 3 3
      src/Composer/DependencyResolver/PoolBuilder.php
  11. 1 1
      src/Composer/DependencyResolver/Problem.php
  12. 3 2
      src/Composer/DependencyResolver/Solver.php
  13. 1 3
      src/Composer/Downloader/DownloadManager.php
  14. 3 3
      src/Composer/Downloader/GitDownloader.php
  15. 1 1
      src/Composer/Downloader/PerforceDownloader.php
  16. 2 1
      src/Composer/EventDispatcher/EventDispatcher.php
  17. 1 1
      src/Composer/Factory.php
  18. 3 3
      src/Composer/IO/IOInterface.php
  19. 1 1
      src/Composer/Installer.php
  20. 1 1
      src/Composer/Installer/InstallerInterface.php
  21. 1 1
      src/Composer/Installer/LibraryInstaller.php
  22. 1 1
      src/Composer/Package/BasePackage.php
  23. 1 1
      src/Composer/Package/PackageInterface.php
  24. 1 1
      src/Composer/Package/Version/VersionSelector.php
  25. 1 1
      src/Composer/Repository/Pear/BaseChannelReader.php
  26. 1 1
      src/Composer/Repository/Pear/ChannelRest10Reader.php
  27. 1 1
      src/Composer/Repository/PearRepository.php
  28. 3 3
      src/Composer/Repository/Vcs/VcsDriverInterface.php
  29. 1 1
      src/Composer/Util/AuthHelper.php
  30. 1 0
      src/Composer/Util/Filesystem.php
  31. 1 1
      src/Composer/Util/HttpDownloader.php
  32. 1 0
      src/Composer/Util/Loop.php
  33. 1 1
      src/Composer/Util/RemoteFilesystem.php
  34. 1 1
      src/Composer/Util/Svn.php

+ 4 - 2
src/Composer/Command/BaseCommand.php

@@ -27,6 +27,8 @@ use Symfony\Component\Console\Command\Command;
 /**
  * Base class for Composer commands
  *
+ * @method Application getApplication()
+ *
  * @author Ryan Weaver <ryan@knplabs.com>
  * @author Konstantin Kudryashov <ever.zet@gmail.com>
  */
@@ -46,7 +48,7 @@ abstract class BaseCommand extends Command
      * @param  bool              $required
      * @param  bool|null         $disablePlugins
      * @throws \RuntimeException
-     * @return Composer
+     * @return Composer|null
      */
     public function getComposer($required = true, $disablePlugins = null)
     {
@@ -173,7 +175,7 @@ abstract class BaseCommand extends Command
 
         if ($input->getOption('prefer-source') || $input->getOption('prefer-dist') || ($keepVcsRequiresPreferSource && $input->hasOption('keep-vcs') && $input->getOption('keep-vcs'))) {
             $preferSource = $input->getOption('prefer-source') || ($keepVcsRequiresPreferSource && $input->hasOption('keep-vcs') && $input->getOption('keep-vcs'));
-            $preferDist = $input->getOption('prefer-dist');
+            $preferDist = (bool) $input->getOption('prefer-dist');
         }
 
         return array($preferSource, $preferDist);

+ 1 - 1
src/Composer/Command/ConfigCommand.php

@@ -226,7 +226,7 @@ EOT
         }
 
         $settingKey = $input->getArgument('setting-key');
-        if (!$settingKey) {
+        if (!$settingKey || !is_string($settingKey)) {
             return 0;
         }
 

+ 1 - 15
src/Composer/Command/DiagnoseCommand.php

@@ -602,20 +602,6 @@ EOT
                         $text .= "Install either of them or recompile php without --disable-iconv";
                         break;
 
-                    case 'unicode':
-                        $text = PHP_EOL."The detect_unicode setting must be disabled.".PHP_EOL;
-                        $text .= "Add the following to the end of your `php.ini`:".PHP_EOL;
-                        $text .= "    detect_unicode = Off";
-                        $displayIniMessage = true;
-                        break;
-
-                    case 'suhosin':
-                        $text = PHP_EOL."The suhosin.executor.include.whitelist setting is incorrect.".PHP_EOL;
-                        $text .= "Add the following to the end of your `php.ini` or suhosin.ini (Example path [for Debian]: /etc/php5/cli/conf.d/suhosin.ini):".PHP_EOL;
-                        $text .= "    suhosin.executor.include.whitelist = phar ".$current;
-                        $displayIniMessage = true;
-                        break;
-
                     case 'php':
                         $text = PHP_EOL."Your PHP ({$current}) is too old, you must upgrade to PHP 5.3.2 or higher.";
                         break;
@@ -713,7 +699,7 @@ EOT
     /**
      * Check if allow_url_fopen is ON
      *
-     * @return bool|string
+     * @return true|string
      */
     private function checkConnectivity()
     {

+ 6 - 6
src/Composer/Command/ShowCommand.php

@@ -823,10 +823,10 @@ EOT
     /**
      * Display a package tree
      *
-     * @param PackageInterface|string $package
-     * @param array                   $packagesInTree
-     * @param string                  $previousTreeBar
-     * @param int                     $level
+     * @param array|string $package
+     * @param array        $packagesInTree
+     * @param string       $previousTreeBar
+     * @param int          $level
      */
     protected function displayTree(
         $package,
@@ -835,7 +835,7 @@ EOT
         $level = 1
     ) {
         $previousTreeBar = str_replace('├', '│', $previousTreeBar);
-        if (isset($package['requires'])) {
+        if (is_array($package) && isset($package['requires'])) {
             $requires = $package['requires'];
             $treeBar = $previousTreeBar . '  ├';
             $i = 0;
@@ -968,7 +968,7 @@ EOT
      * @param string           $phpVersion
      * @param bool             $minorOnly
      *
-     * @return PackageInterface|null
+     * @return PackageInterface|false
      */
     private function findLatestPackage(PackageInterface $package, Composer $composer, $phpVersion, $minorOnly = false)
     {

+ 4 - 1
src/Composer/Command/SuggestsCommand.php

@@ -43,6 +43,9 @@ EOT
         ;
     }
 
+    /**
+     * {@inheritDoc}
+     */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $lock = $this->getComposer()->getLocker()->getLockData();
@@ -117,7 +120,7 @@ EOT
                 $io->write(sprintf('<info>%s</info>', $suggestion));
             }
 
-            return;
+            return null;
         }
 
         // Grouped by package

+ 1 - 1
src/Composer/Config/ConfigSourceInterface.php

@@ -39,7 +39,7 @@ interface ConfigSourceInterface
      * Add a config setting
      *
      * @param string $name  Name
-     * @param string $value Value
+     * @param string|array $value Value
      */
     public function addConfigSetting($name, $value);
 

+ 1 - 1
src/Composer/Config/JsonConfigSource.php

@@ -259,7 +259,7 @@ class JsonConfigSource implements ConfigSourceInterface
      *
      * @param  array $array
      * @param  mixed $value
-     * @return array
+     * @return int
      */
     private function arrayUnshiftRef(&$array, &$value)
     {

+ 1 - 1
src/Composer/Console/Application.php

@@ -284,7 +284,7 @@ class Application extends BaseApplication
 
             return $result;
         } catch (ScriptExecutionException $e) {
-            return $e->getCode();
+            return (int) $e->getCode();
         } catch (\Exception $e) {
             $this->hintCommonErrors($e);
             restore_error_handler();

+ 4 - 4
src/Composer/DependencyResolver/GenericRule.php

@@ -23,10 +23,10 @@ class GenericRule extends Rule
     protected $literals;
 
     /**
-     * @param array                 $literals
-     * @param int                   $reason     A RULE_* constant describing the reason for generating this rule
-     * @param Link|PackageInterface $reasonData
-     * @param array                 $job        The job this rule was created from
+     * @param array                          $literals
+     * @param int|null                       $reason     A RULE_* constant describing the reason for generating this rule
+     * @param Link|PackageInterface|int|null $reasonData
+     * @param array                          $job        The job this rule was created from
      */
     public function __construct(array $literals, $reason, $reasonData, $job = null)
     {

+ 3 - 3
src/Composer/DependencyResolver/PoolBuilder.php

@@ -176,12 +176,12 @@ class PoolBuilder
             if (!isset($this->loadedNames[$require])) {
                 $loadNames[$require] = null;
             }
-            if ($link->getConstraint()) {
+            if ($linkConstraint = $link->getConstraint()) {
                 if (!array_key_exists($require, $this->nameConstraints)) {
-                    $this->nameConstraints[$require] = new MultiConstraint(array($link->getConstraint()), false);
+                    $this->nameConstraints[$require] = new MultiConstraint(array($linkConstraint), false);
                 } elseif ($this->nameConstraints[$require]) {
                     // TODO addConstraint function?
-                    $this->nameConstraints[$require] = new MultiConstraint(array_merge(array($link->getConstraint()), $this->nameConstraints[$require]->getConstraints()), false);
+                    $this->nameConstraints[$require] = new MultiConstraint(array_merge(array($linkConstraint), $this->nameConstraints[$require]->getConstraints()), false);
                 }
             } else {
                 $this->nameConstraints[$require] = null;

+ 1 - 1
src/Composer/DependencyResolver/Problem.php

@@ -180,7 +180,7 @@ class Problem
      * Store a reason descriptor but ignore duplicates
      *
      * @param string $id     A canonical identifier for the reason
-     * @param string $reason The reason descriptor
+     * @param string|array $reason The reason descriptor
      */
     protected function addReason($id, $reason)
     {

+ 3 - 2
src/Composer/DependencyResolver/Solver.php

@@ -13,6 +13,7 @@
 namespace Composer\DependencyResolver;
 
 use Composer\IO\IOInterface;
+use Composer\Package\PackageInterface;
 use Composer\Repository\RepositoryInterface;
 use Composer\Repository\PlatformRepository;
 use Composer\Repository\RepositorySet;
@@ -44,7 +45,7 @@ class Solver
     protected $watchGraph;
     /** @var Decisions */
     protected $decisions;
-    /** @var int[] */
+    /** @var PackageInterface[] */
     protected $installedMap;
 
     /** @var int */
@@ -691,7 +692,7 @@ class Solver
         /**
          * @todo this makes $disableRules always false; determine the rationale and possibly remove dead code?
          */
-        $disableRules = array();
+        $disableRules = false;
 
         $level = 1;
         $systemLevel = $level + 1;

+ 1 - 3
src/Composer/Downloader/DownloadManager.php

@@ -294,9 +294,7 @@ class DownloadManager
 
         // if downloader type changed, or update failed and user asks for reinstall,
         // we wipe the dir and do a new install instead of updating it
-        if ($initialDownloader) {
-            $initialDownloader->remove($initial, $targetDir);
-        }
+        $initialDownloader->remove($initial, $targetDir);
         $this->install($target, $targetDir);
     }
 

+ 3 - 3
src/Composer/Downloader/GitDownloader.php

@@ -362,7 +362,7 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface
         ) {
             $command = sprintf('git checkout '.$force.'-B %s %s -- && git reset --hard %2$s --', ProcessExecutor::escape($branch), ProcessExecutor::escape('composer/'.$reference));
             if (0 === $this->process->execute($command, $output, $path)) {
-                return;
+                return null;
             }
         }
 
@@ -380,14 +380,14 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface
             ) {
                 $command = sprintf('git reset --hard %s --', ProcessExecutor::escape($reference));
                 if (0 === $this->process->execute($command, $output, $path)) {
-                    return;
+                    return null;
                 }
             }
         }
 
         $command = sprintf($template, ProcessExecutor::escape($gitRef));
         if (0 === $this->process->execute($command, $output, $path)) {
-            return;
+            return null;
         }
 
         // reference was not found (prints "fatal: reference is not a tree: $ref")

+ 1 - 1
src/Composer/Downloader/PerforceDownloader.php

@@ -88,7 +88,7 @@ class PerforceDownloader extends VcsDownloader
     {
         $this->io->writeError('Perforce driver does not check for local changes before overriding', true);
 
-        return;
+        return null;
     }
 
     /**

+ 2 - 1
src/Composer/EventDispatcher/EventDispatcher.php

@@ -199,6 +199,7 @@ class EventDispatcher
                     }
 
                     try {
+                        /** @var InstallerEvent $event */
                         $return = $this->dispatch($scriptName, new Script\Event($scriptName, $event->getComposer(), $event->getIO(), $event->isDevMode(), $args, $flags));
                     } catch (ScriptExecutionException $e) {
                         $this->io->writeError(sprintf('<error>Script %s was called via %s</error>', $callable, $event->getName()), true, IOInterface::QUIET);
@@ -499,7 +500,7 @@ class EventDispatcher
      *
      * @param  Event             $event
      * @throws \RuntimeException
-     * @return number
+     * @return int
      */
     protected function pushEvent(Event $event)
     {

+ 1 - 1
src/Composer/Factory.php

@@ -413,7 +413,7 @@ class Factory
     /**
      * @param  IOInterface $io             IO instance
      * @param  bool        $disablePlugins Whether plugins should not be loaded
-     * @return Composer
+     * @return Composer|null
      */
     public static function createGlobal(IOInterface $io, $disablePlugins = false)
     {

+ 3 - 3
src/Composer/IO/IOInterface.php

@@ -108,7 +108,7 @@ interface IOInterface extends LoggerInterface
      * @param string $default  The default answer if none is given by the user
      *
      * @throws \RuntimeException If there is no data to read in the input stream
-     * @return string            The user answer
+     * @return string|null       The user answer
      */
     public function ask($question, $default = null);
 
@@ -146,7 +146,7 @@ interface IOInterface extends LoggerInterface
      *
      * @param string $question The question to ask
      *
-     * @return string The answer
+     * @return string|null The answer
      */
     public function askAndHideAnswer($question);
 
@@ -161,7 +161,7 @@ interface IOInterface extends LoggerInterface
      * @param bool        $multiselect  Select more than one value separated by comma
      *
      * @throws \InvalidArgumentException
-     * @return int|string|array          The selected value or values (the key of the choices array)
+     * @return int|string|array|bool    The selected value or values (the key of the choices array)
      */
     public function select($question, $choices, $default, $attempts = false, $errorMessage = 'Value "%s" is invalid', $multiselect = false);
 

+ 1 - 1
src/Composer/Installer.php

@@ -959,7 +959,7 @@ class Installer
      * @param  RepositoryInterface         $lockedRepository
      * @param  string                      $task
      * @param  array|null                  $operations
-     * @return array
+     * @return array|null
      */
     private function processDevPackages($localRepo, Pool $pool, $policy, $repositories, $installedRepo, $lockedRepository, $task, array $operations = null)
     {

+ 1 - 1
src/Composer/Installer/InstallerInterface.php

@@ -48,7 +48,7 @@ interface InstallerInterface
      *
      * @param  PackageInterface $package     package instance
      * @param  PackageInterface $prevPackage previous package instance in case of an update
-     * @return PromiseInterface
+     * @return PromiseInterface|null
      */
     public function download(PackageInterface $package, PackageInterface $prevPackage = null);
 

+ 1 - 1
src/Composer/Installer/LibraryInstaller.php

@@ -43,7 +43,7 @@ class LibraryInstaller implements InstallerInterface, BinaryPresenceInterface
      *
      * @param IOInterface     $io
      * @param Composer        $composer
-     * @param string          $type
+     * @param string|null     $type
      * @param Filesystem      $filesystem
      * @param BinaryInstaller $binaryInstaller
      */

+ 1 - 1
src/Composer/Package/BasePackage.php

@@ -239,7 +239,7 @@ abstract class BasePackage implements PackageInterface
      * Build a regexp from a package name, expanding * globs as required
      *
      * @param  string $whiteListedPattern
-     * @param  bool $wrap Wrap the cleaned string by the given string
+     * @param  string $wrap Wrap the cleaned string by the given string
      * @return string
      */
     public static function packageNameToRegexp($whiteListedPattern, $wrap = '{^%s$}i')

+ 1 - 1
src/Composer/Package/PackageInterface.php

@@ -76,7 +76,7 @@ interface PackageInterface
     /**
      * Returns the package targetDir property
      *
-     * @return string The package targetDir
+     * @return string|null The package targetDir
      */
     public function getTargetDir();
 

+ 1 - 1
src/Composer/Package/Version/VersionSelector.php

@@ -45,7 +45,7 @@ class VersionSelector
      * @param  string                $targetPackageVersion
      * @param  string                $targetPhpVersion
      * @param  string                $preferredStability
-     * @return PackageInterface|bool
+     * @return PackageInterface|false
      */
     public function findBestCandidate($packageName, $targetPackageVersion = null, $targetPhpVersion = null, $preferredStability = 'stable')
     {

+ 1 - 1
src/Composer/Repository/Pear/BaseChannelReader.php

@@ -47,7 +47,7 @@ abstract class BaseChannelReader
      * @param string $origin server
      * @param string $path   relative path to content
      * @throws \UnexpectedValueException
-     * @return \SimpleXMLElement
+     * @return string
      */
     protected function requestContent($origin, $path)
     {

+ 1 - 1
src/Composer/Repository/Pear/ChannelRest10Reader.php

@@ -150,7 +150,7 @@ class ChannelRest10Reader extends BaseChannelReader
      * @param string $baseUrl
      * @param string $packageName
      * @param string $version
-     * @return DependencyInfo[]
+     * @return DependencyInfo
      */
     private function readPackageReleaseDependencies($baseUrl, $packageName, $version)
     {

+ 1 - 1
src/Composer/Repository/PearRepository.php

@@ -97,7 +97,7 @@ class PearRepository extends ArrayRepository implements ConfigurableRepositoryIn
      *
      * @param  ChannelInfo         $channelInfo
      * @param  SemverVersionParser $versionParser
-     * @return CompletePackage
+     * @return CompletePackage[]
      */
     private function buildComposerPackages(ChannelInfo $channelInfo, SemverVersionParser $versionParser)
     {

+ 3 - 3
src/Composer/Repository/Vcs/VcsDriverInterface.php

@@ -38,7 +38,7 @@ interface VcsDriverInterface
      *
      * @param  string $file
      * @param  string $identifier
-     * @return string
+     * @return string|null
      */
     public function getFileContent($file, $identifier);
 
@@ -46,7 +46,7 @@ interface VcsDriverInterface
      * Get the changedate for $identifier.
      *
      * @param  string    $identifier
-     * @return \DateTime
+     * @return \DateTime|null
      */
     public function getChangeDate($identifier);
 
@@ -73,7 +73,7 @@ interface VcsDriverInterface
 
     /**
      * @param  string $identifier Any identifier to a specific branch/tag/commit
-     * @return array  With type, url reference and shasum keys.
+     * @return array|null  With type, url reference and shasum keys.
      */
     public function getDist($identifier);
 

+ 1 - 1
src/Composer/Util/AuthHelper.php

@@ -73,7 +73,7 @@ class AuthHelper
      * @param string|null $reason a message/description explaining why this was called
      * @param string $warning an authentication warning returned by the server as {"warning": ".."}, if present
      * @param string[] $headers
-     * @return array containing retry (bool) and storeAuth (string|bool) keys, if retry is true the request should be
+     * @return array|null containing retry (bool) and storeAuth (string|bool) keys, if retry is true the request should be
      *               retried, if storeAuth is true then on a successful retry the authentication should be persisted to auth.json
      */
     public function promptAuthIfNeeded($url, $origin, $statusCode, $reason = null, $warning = null, $headers = array())

+ 1 - 0
src/Composer/Util/Filesystem.php

@@ -292,6 +292,7 @@ class Filesystem
         $this->ensureDirectoryExists($target);
 
         $result = true;
+        /** @var RecursiveDirectoryIterator $ri */
         foreach ($ri as $file) {
             $targetPath = $target . DIRECTORY_SEPARATOR . $ri->getSubPathName();
             if ($file->isDir()) {

+ 1 - 1
src/Composer/Util/HttpDownloader.php

@@ -117,7 +117,7 @@ class HttpDownloader
     /**
      * Merges new options
      *
-     * @return array $options
+     * @return void
      */
     public function setOptions(array $options)
     {

+ 1 - 0
src/Composer/Util/Loop.php

@@ -29,6 +29,7 @@ class Loop
 
     public function wait(array $promises)
     {
+        /** @var \Exception|null */
         $uncaught = null;
 
         \React\Promise\all($promises)->then(

+ 1 - 1
src/Composer/Util/RemoteFilesystem.php

@@ -398,7 +398,7 @@ class RemoteFilesystem
         // fail 4xx and 5xx responses and capture the response
         if ($statusCode && $statusCode >= 400 && $statusCode <= 599) {
             if (!$this->retry) {
-                if ($this->progress && !$this->retry && !$isRedirect) {
+                if ($this->progress && !$isRedirect) {
                     $this->io->overwriteError("Downloading (<error>failed</error>)", false);
                 }
 

+ 1 - 1
src/Composer/Util/Svn.php

@@ -304,7 +304,7 @@ class Svn
             $this->createAuthFromUrl();
         }
 
-        return $this->hasAuth;
+        return (bool) $this->hasAuth;
     }
 
     /**