From 131da999ac571bcd5bc3dae535dd392d1a36cb53 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Wed, 17 Aug 2022 15:20:07 +0300 Subject: [PATCH] Fix CS (#11003) --- .php-cs-fixer.php | 26 +- phpstan/baseline.neon | 20 +- src/Composer/Advisory/Auditor.php | 22 +- .../Advisory/PartialSecurityAdvisory.php | 10 + src/Composer/Advisory/SecurityAdvisory.php | 12 +- src/Composer/Autoload/AutoloadGenerator.php | 103 +-- src/Composer/Autoload/ClassMapGenerator.php | 5 +- src/Composer/Autoload/PhpFileCleaner.php | 36 +- src/Composer/Cache.php | 26 +- src/Composer/Command/AboutCommand.php | 3 - src/Composer/Command/ArchiveCommand.php | 12 +- src/Composer/Command/AuditCommand.php | 19 +- src/Composer/Command/BaseCommand.php | 11 +- .../Command/BaseDependencyCommand.php | 41 +- src/Composer/Command/BumpCommand.php | 17 +- .../Command/CheckPlatformReqsCommand.php | 47 +- src/Composer/Command/ClearCacheCommand.php | 15 +- src/Composer/Command/CompletionTrait.php | 7 +- src/Composer/Command/ConfigCommand.php | 256 +++--- src/Composer/Command/CreateProjectCommand.php | 59 +- src/Composer/Command/DependsCommand.php | 8 +- src/Composer/Command/DiagnoseCommand.php | 46 +- src/Composer/Command/DumpAutoloadCommand.php | 6 +- src/Composer/Command/ExecCommand.php | 5 +- src/Composer/Command/FundCommand.php | 17 +- src/Composer/Command/GlobalCommand.php | 9 +- src/Composer/Command/HomeCommand.php | 22 +- src/Composer/Command/InitCommand.php | 92 +-- src/Composer/Command/InstallCommand.php | 8 +- src/Composer/Command/LicensesCommand.php | 39 +- src/Composer/Command/OutdatedCommand.php | 11 +- .../Command/PackageDiscoveryTrait.php | 37 +- src/Composer/Command/ProhibitsCommand.php | 8 +- src/Composer/Command/ReinstallCommand.php | 17 +- src/Composer/Command/RemoveCommand.php | 16 +- src/Composer/Command/RequireCommand.php | 32 +- src/Composer/Command/RunScriptCommand.php | 20 +- src/Composer/Command/ScriptAliasCommand.php | 7 +- src/Composer/Command/SearchCommand.php | 15 +- src/Composer/Command/SelfUpdateCommand.php | 27 +- src/Composer/Command/ShowCommand.php | 176 ++-- src/Composer/Command/StatusCommand.php | 26 +- src/Composer/Command/SuggestsCommand.php | 15 +- src/Composer/Command/UpdateCommand.php | 19 +- src/Composer/Command/ValidateCommand.php | 37 +- src/Composer/Compiler.php | 34 +- src/Composer/Composer.php | 3 - src/Composer/Config.php | 115 +-- src/Composer/Config/ConfigSourceInterface.php | 24 - src/Composer/Config/JsonConfigSource.php | 44 +- src/Composer/Console/Application.php | 34 +- src/Composer/Console/GithubActionError.php | 15 - src/Composer/Console/HtmlOutputFormatter.php | 14 +- src/Composer/Console/Input/InputArgument.php | 2 +- src/Composer/Console/Input/InputOption.php | 2 +- src/Composer/DependencyResolver/Decisions.php | 77 +- .../DependencyResolver/DefaultPolicy.php | 26 +- .../DependencyResolver/GenericRule.php | 5 - .../DependencyResolver/LockTransaction.php | 17 +- .../DependencyResolver/MultiConflictRule.php | 5 - .../Operation/InstallOperation.php | 6 - .../Operation/MarkAliasInstalledOperation.php | 2 - .../MarkAliasUninstalledOperation.php | 2 - .../Operation/SolverOperation.php | 2 - .../Operation/UninstallOperation.php | 6 - .../Operation/UpdateOperation.php | 8 - .../DependencyResolver/PolicyInterface.php | 4 - src/Composer/DependencyResolver/Pool.php | 44 +- .../DependencyResolver/PoolBuilder.php | 76 +- .../DependencyResolver/PoolOptimizer.php | 84 +- src/Composer/DependencyResolver/Problem.php | 125 ++- src/Composer/DependencyResolver/Request.php | 45 +- src/Composer/DependencyResolver/Rule.php | 60 +- .../DependencyResolver/Rule2Literals.php | 6 +- src/Composer/DependencyResolver/RuleSet.php | 33 +- .../DependencyResolver/RuleSetGenerator.php | 46 +- .../DependencyResolver/RuleWatchChain.php | 3 - .../DependencyResolver/RuleWatchGraph.php | 6 +- .../DependencyResolver/RuleWatchNode.php | 4 - src/Composer/DependencyResolver/Solver.php | 75 +- .../DependencyResolver/SolverBugException.php | 3 - .../SolverProblemsException.php | 14 +- .../DependencyResolver/Transaction.php | 35 +- src/Composer/Downloader/ArchiveDownloader.php | 14 +- src/Composer/Downloader/DownloadManager.php | 36 +- .../Downloader/DownloaderInterface.php | 12 +- src/Composer/Downloader/FileDownloader.php | 48 +- .../Downloader/FilesystemException.php | 7 +- src/Composer/Downloader/FossilDownloader.php | 2 +- src/Composer/Downloader/GitDownloader.php | 69 +- src/Composer/Downloader/GzipDownloader.php | 6 - src/Composer/Downloader/HgDownloader.php | 2 +- src/Composer/Downloader/PathDownloader.php | 24 +- .../Downloader/PerforceDownloader.php | 16 +- src/Composer/Downloader/SvnDownloader.php | 14 +- .../Downloader/TransportException.php | 13 +- src/Composer/Downloader/VcsDownloader.php | 27 +- src/Composer/Downloader/ZipDownloader.php | 25 +- src/Composer/EventDispatcher/Event.php | 4 +- .../EventDispatcher/EventDispatcher.php | 67 +- src/Composer/Factory.php | 55 +- .../IgnoreAllPlatformRequirementFilter.php | 4 - .../IgnoreListPlatformRequirementFilter.php | 12 +- ...IgnoreNothingPlatformRequirementFilter.php | 1 - .../PlatformRequirementFilterFactory.php | 8 - .../PlatformRequirementFilterInterface.php | 4 - src/Composer/IO/BaseIO.php | 30 +- src/Composer/IO/BufferIO.php | 13 +- src/Composer/IO/ConsoleIO.php | 27 +- src/Composer/IO/IOInterface.php | 1 - src/Composer/Installer.php | 119 +-- src/Composer/Installer/BinaryInstaller.php | 48 +- .../Installer/InstallationManager.php | 130 +-- src/Composer/Installer/InstallerEvent.php | 22 - src/Composer/Installer/InstallerInterface.php | 8 +- src/Composer/Installer/LibraryInstaller.php | 12 +- .../Installer/MetapackageInstaller.php | 6 +- src/Composer/Installer/NoopInstaller.php | 6 +- src/Composer/Installer/PackageEvent.php | 20 - src/Composer/Installer/PluginInstaller.php | 6 +- src/Composer/Installer/ProjectInstaller.php | 13 +- .../Installer/SuggestedPackagesReporter.php | 36 +- src/Composer/Json/JsonFile.php | 25 +- src/Composer/Json/JsonFormatter.php | 2 - src/Composer/Json/JsonManipulator.php | 89 +-- src/Composer/Json/JsonValidationException.php | 3 +- .../PHPStan/ConfigReturnTypeExtension.php | 11 +- src/Composer/Package/AliasPackage.php | 10 +- .../Archiver/ArchivableFilesFilter.php | 7 +- .../Archiver/ArchivableFilesFinder.php | 6 +- .../Package/Archiver/ArchiveManager.php | 9 +- .../Package/Archiver/ArchiverInterface.php | 2 +- .../Package/Archiver/BaseExcludeFilter.php | 10 +- .../Package/Archiver/GitExcludeFilter.php | 4 +- .../Package/Archiver/PharArchiver.php | 10 +- src/Composer/Package/Archiver/ZipArchiver.php | 9 +- src/Composer/Package/BasePackage.php | 36 +- src/Composer/Package/Comparer/Comparer.php | 26 +- src/Composer/Package/CompletePackage.php | 16 +- .../Package/CompletePackageInterface.php | 22 - src/Composer/Package/Dumper/ArrayDumper.php | 12 +- src/Composer/Package/Link.php | 27 +- src/Composer/Package/Loader/ArrayLoader.php | 27 +- .../Package/Loader/RootPackageLoader.php | 30 +- .../Package/Loader/ValidatingArrayLoader.php | 62 +- src/Composer/Package/Locker.php | 61 +- src/Composer/Package/Package.php | 102 +-- src/Composer/Package/PackageInterface.php | 40 - src/Composer/Package/RootAliasPackage.php | 4 +- src/Composer/Package/RootPackage.php | 8 +- src/Composer/Package/RootPackageInterface.php | 38 - .../Package/Version/VersionBumper.php | 8 - .../Package/Version/VersionGuesser.php | 48 +- .../Package/Version/VersionParser.php | 22 +- .../Package/Version/VersionSelector.php | 24 +- src/Composer/PartialComposer.php | 36 - src/Composer/Platform/HhvmDetector.php | 8 +- src/Composer/Platform/Runtime.php | 27 +- src/Composer/Platform/Version.php | 29 +- src/Composer/Plugin/CommandEvent.php | 10 +- .../Plugin/PluginBlockedException.php | 2 +- src/Composer/Plugin/PluginInterface.php | 6 - src/Composer/Plugin/PluginManager.php | 85 +- src/Composer/Plugin/PostFileDownloadEvent.php | 8 - src/Composer/Plugin/PreCommandRunEvent.php | 5 - src/Composer/Plugin/PreFileDownloadEvent.php | 20 +- src/Composer/Plugin/PrePoolCreateEvent.php | 7 - .../Question/StrictConfirmationQuestion.php | 4 - src/Composer/Repository/ArrayRepository.php | 37 +- .../Repository/ArtifactRepository.php | 11 +- .../Repository/CanonicalPackagesTrait.php | 4 +- .../Repository/ComposerRepository.php | 221 +++-- .../Repository/CompositeRepository.php | 38 +- .../Repository/FilesystemRepository.php | 14 +- src/Composer/Repository/FilterRepository.php | 21 +- .../Repository/InstalledRepository.php | 35 +- src/Composer/Repository/PackageRepository.php | 2 +- src/Composer/Repository/PathRepository.php | 14 +- .../Repository/PlatformRepository.php | 75 +- src/Composer/Repository/RepositoryFactory.php | 41 +- .../Repository/RepositoryInterface.php | 2 +- src/Composer/Repository/RepositoryManager.php | 23 +- src/Composer/Repository/RepositorySet.php | 62 +- src/Composer/Repository/RepositoryUtils.php | 2 +- .../Repository/RootPackageRepository.php | 2 +- src/Composer/Repository/Vcs/FossilDriver.php | 12 +- .../Repository/Vcs/GitBitbucketDriver.php | 37 +- src/Composer/Repository/Vcs/GitDriver.php | 7 +- src/Composer/Repository/Vcs/GitHubDriver.php | 51 +- src/Composer/Repository/Vcs/GitLabDriver.php | 49 +- src/Composer/Repository/Vcs/HgDriver.php | 8 +- .../Repository/Vcs/PerforceDriver.php | 12 +- src/Composer/Repository/Vcs/SvnDriver.php | 17 +- src/Composer/Repository/Vcs/VcsDriver.php | 11 +- .../Repository/Vcs/VcsDriverInterface.php | 13 - src/Composer/Repository/VcsRepository.php | 38 +- .../Repository/VersionCacheInterface.php | 2 - .../Repository/WritableArrayRepository.php | 3 +- src/Composer/Script/Event.php | 12 +- src/Composer/SelfUpdate/Keys.php | 9 +- src/Composer/SelfUpdate/Versions.php | 14 +- src/Composer/Util/AuthHelper.php | 25 +- src/Composer/Util/Bitbucket.php | 43 +- src/Composer/Util/ComposerMirror.php | 34 +- src/Composer/Util/ConfigValidator.php | 22 +- src/Composer/Util/ErrorHandler.php | 9 +- src/Composer/Util/Filesystem.php | 62 +- src/Composer/Util/Git.php | 80 +- src/Composer/Util/GitHub.php | 22 +- src/Composer/Util/GitLab.php | 43 +- src/Composer/Util/Hg.php | 12 +- src/Composer/Util/Http/CurlDownloader.php | 109 +-- src/Composer/Util/Http/CurlResponse.php | 2 +- src/Composer/Util/Http/ProxyHelper.php | 19 +- src/Composer/Util/Http/ProxyManager.php | 29 +- src/Composer/Util/Http/RequestProxy.php | 2 - src/Composer/Util/Http/Response.php | 13 +- src/Composer/Util/HttpDownloader.php | 62 +- src/Composer/Util/IniHelper.php | 2 - src/Composer/Util/Loop.php | 16 +- src/Composer/Util/NoProxyPattern.php | 75 +- src/Composer/Util/PackageSorter.php | 16 +- src/Composer/Util/Perforce.php | 138 +--- src/Composer/Util/Platform.php | 20 +- src/Composer/Util/ProcessExecutor.php | 31 +- src/Composer/Util/RemoteFilesystem.php | 47 +- src/Composer/Util/Silencer.php | 4 +- src/Composer/Util/StreamContextFactory.php | 23 +- src/Composer/Util/Svn.php | 46 +- src/Composer/Util/SyncHelper.php | 11 +- src/Composer/Util/Tar.php | 11 +- src/Composer/Util/TlsHelper.php | 19 +- src/Composer/Util/Url.php | 11 - src/Composer/Util/Zip.php | 10 +- tests/Composer/Test/Advisory/AuditorTest.php | 43 +- tests/Composer/Test/AllFunctionalTest.php | 18 +- tests/Composer/Test/ApplicationTest.php | 1 - .../Test/Autoload/AutoloadGeneratorTest.php | 731 +++++++++-------- .../Test/Autoload/ClassLoaderTest.php | 10 +- tests/Composer/Test/CacheTest.php | 6 +- .../Test/Command/ArchiveCommandTest.php | 14 +- .../Composer/Test/Command/BumpCommandTest.php | 9 +- .../Test/Command/ConfigCommandTest.php | 4 - .../Test/Command/RunScriptCommandTest.php | 41 +- .../Test/CompletionFunctionalTest.php | 2 +- tests/Composer/Test/ComposerTest.php | 2 +- .../Test/Config/JsonConfigSourceTest.php | 46 +- tests/Composer/Test/ConfigTest.php | 276 ++++--- .../Test/Console/HtmlOutputFormatterTest.php | 4 +- .../DependencyResolver/DefaultPolicyTest.php | 60 +- .../DependencyResolver/PoolBuilderTest.php | 32 +- .../DependencyResolver/PoolOptimizerTest.php | 16 +- .../Test/DependencyResolver/PoolTest.php | 21 +- .../Test/DependencyResolver/RequestTest.php | 8 +- .../RuleSetIteratorTest.php | 32 +- .../Test/DependencyResolver/RuleSetTest.php | 62 +- .../Test/DependencyResolver/RuleTest.php | 30 +- .../Test/DependencyResolver/SolverTest.php | 503 ++++++------ .../DependencyResolver/TransactionTest.php | 76 +- .../Test/Downloader/ArchiveDownloaderTest.php | 33 +- .../Test/Downloader/DownloadManagerTest.php | 135 ++-- .../Test/Downloader/FileDownloaderTest.php | 25 +- .../Test/Downloader/FossilDownloaderTest.php | 19 +- .../Test/Downloader/GitDownloaderTest.php | 125 ++- .../Test/Downloader/HgDownloaderTest.php | 19 +- .../Downloader/PerforceDownloaderTest.php | 12 +- .../Test/Downloader/XzDownloaderTest.php | 2 +- .../Test/Downloader/ZipDownloaderTest.php | 21 +- .../EventDispatcher/EventDispatcherTest.php | 197 +++-- ...IgnoreAllPlatformRequirementFilterTest.php | 11 +- ...gnoreListPlatformRequirementFilterTest.php | 28 +- ...reNothingPlatformRequirementFilterTest.php | 10 +- .../PlatformRequirementFilterFactoryTest.php | 10 +- tests/Composer/Test/IO/BufferIOTest.php | 4 +- tests/Composer/Test/IO/ConsoleIOTest.php | 14 +- tests/Composer/Test/IO/NullIOTest.php | 6 +- tests/Composer/Test/InstalledVersionsTest.php | 174 ++-- .../Test/Installer/BinaryInstallerTest.php | 25 +- .../Installer/InstallationManagerTest.php | 14 +- .../Test/Installer/LibraryInstallerTest.php | 8 +- .../Installer/MetapackageInstallerTest.php | 2 +- .../SuggestedPackagesReporterTest.php | 34 +- tests/Composer/Test/InstallerTest.php | 135 ++-- .../Composer/Test/Json/ComposerSchemaTest.php | 27 +- tests/Composer/Test/Json/JsonFileTest.php | 28 +- .../Test/Json/JsonManipulatorTest.php | 185 ++--- .../Test/Json/JsonValidationExceptionTest.php | 10 +- tests/Composer/Test/Mock/FactoryMock.php | 16 +- .../Composer/Test/Mock/HttpDownloaderMock.php | 16 +- .../Test/Mock/InstallationManagerMock.php | 12 +- .../Test/Mock/ProcessExecutorMock.php | 25 +- .../Archiver/ArchivableFilesFinderTest.php | 34 +- .../Package/Archiver/ArchiveManagerTest.php | 8 - .../Test/Package/Archiver/ArchiverTest.php | 2 - .../Package/Archiver/GitExcludeFilterTest.php | 9 +- .../Package/Archiver/PharArchiverTest.php | 11 +- .../Test/Package/Archiver/ZipArchiverTest.php | 29 +- .../Composer/Test/Package/BasePackageTest.php | 48 +- .../Test/Package/CompletePackageTest.php | 19 +- .../Test/Package/Dumper/ArrayDumperTest.php | 187 +++-- .../Test/Package/Loader/ArrayLoaderTest.php | 180 +++-- .../Package/Loader/RootPackageLoaderTest.php | 52 +- .../Loader/ValidatingArrayLoaderTest.php | 527 ++++++------ tests/Composer/Test/Package/LockerTest.php | 64 +- .../Test/Package/RootAliasPackageTest.php | 20 +- .../Package/Version/VersionBumperTest.php | 7 +- .../Package/Version/VersionGuesserTest.php | 196 ++--- .../Package/Version/VersionParserTest.php | 38 +- .../Package/Version/VersionSelectorTest.php | 114 ++- tests/Composer/Test/Platform/VersionTest.php | 112 ++- .../Test/Plugin/PluginInstallerTest.php | 97 ++- .../StrictConfirmationQuestionTest.php | 53 +- .../Test/Repository/ArrayRepositoryTest.php | 18 +- .../Repository/ArtifactRepositoryTest.php | 14 +- .../Repository/ComposerRepositoryTest.php | 204 +++-- .../Repository/CompositeRepositoryTest.php | 27 +- .../Repository/FilesystemRepositoryTest.php | 39 +- .../Test/Repository/FilterRepositoryTest.php | 24 +- .../Repository/InstalledRepositoryTest.php | 14 +- .../Test/Repository/PathRepositoryTest.php | 57 +- .../Repository/PlatformRepositoryTest.php | 752 +++++++++--------- .../Test/Repository/RepositoryFactoryTest.php | 20 +- .../Test/Repository/RepositoryManagerTest.php | 31 +- .../Test/Repository/RepositoryUtilsTest.php | 1 - .../Test/Repository/Vcs/FossilDriverTest.php | 21 +- .../Repository/Vcs/GitBitbucketDriverTest.php | 102 ++- .../Test/Repository/Vcs/GitDriverTest.php | 23 +- .../Test/Repository/Vcs/GitHubDriverTest.php | 96 +-- .../Test/Repository/Vcs/GitLabDriverTest.php | 150 ++-- .../Test/Repository/Vcs/HgDriverTest.php | 39 +- .../Repository/Vcs/PerforceDriverTest.php | 22 +- .../Test/Repository/Vcs/SvnDriverTest.php | 45 +- .../Test/Repository/VcsRepositoryTest.php | 21 +- tests/Composer/Test/Script/EventTest.php | 3 - tests/Composer/Test/TestCase.php | 28 +- tests/Composer/Test/Util/AuthHelperTest.php | 161 ++-- tests/Composer/Test/Util/BitbucketTest.php | 107 ++- .../Test/Util/ConfigValidatorTest.php | 6 +- tests/Composer/Test/Util/ErrorHandlerTest.php | 4 +- tests/Composer/Test/Util/FilesystemTest.php | 220 +++-- tests/Composer/Test/Util/GitTest.php | 56 +- .../Test/Util/Http/ProxyHelperTest.php | 83 +- .../Test/Util/Http/ProxyManagerTest.php | 52 +- .../Test/Util/Http/RequestProxyTest.php | 29 +- .../Composer/Test/Util/HttpDownloaderTest.php | 26 +- tests/Composer/Test/Util/IniHelperTest.php | 18 +- .../Test/Util/MetadataMinifierTest.php | 20 +- .../Composer/Test/Util/NoProxyPatternTest.php | 86 +- .../Composer/Test/Util/PackageSorterTest.php | 173 ++-- tests/Composer/Test/Util/PerforceTest.php | 51 +- .../Test/Util/ProcessExecutorTest.php | 83 +- .../Test/Util/RemoteFilesystemTest.php | 103 +-- tests/Composer/Test/Util/SilencerTest.php | 4 +- .../Test/Util/StreamContextFactoryTest.php | 107 ++- tests/Composer/Test/Util/SvnTest.php | 54 +- tests/Composer/Test/Util/TlsHelperTest.php | 50 +- tests/Composer/Test/Util/UrlTest.php | 78 +- 357 files changed, 5943 insertions(+), 9174 deletions(-) diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php index 28db75b8b..7eefc2970 100644 --- a/.php-cs-fixer.php +++ b/.php-cs-fixer.php @@ -24,12 +24,12 @@ $config = new PhpCsFixer\Config(); return $config->setRules([ '@PSR2' => true, 'binary_operator_spaces' => true, - 'blank_line_before_statement' => array('statements' => array('declare', 'return')), - 'cast_spaces' => array('space' => 'single'), - 'header_comment' => array('header' => $header), + 'blank_line_before_statement' => ['statements' => ['declare', 'return']], + 'cast_spaces' => ['space' => 'single'], + 'header_comment' => ['header' => $header], 'include' => true, - 'class_attributes_separation' => array('elements' => array('method' => 'one', 'trait_import' => 'none')), + 'class_attributes_separation' => ['elements' => ['method' => 'one', 'trait_import' => 'none']], 'no_blank_lines_after_class_opening' => true, 'no_blank_lines_after_phpdoc' => true, 'no_empty_statement' => true, @@ -40,6 +40,8 @@ return $config->setRules([ 'object_operator_without_whitespace' => true, //'phpdoc_align' => true, 'phpdoc_indent' => true, + 'no_empty_comment' => true, + 'no_empty_phpdoc' => true, 'phpdoc_no_access' => true, 'phpdoc_no_package' => true, //'phpdoc_order' => true, @@ -62,13 +64,12 @@ return $config->setRules([ 'single_import_per_statement' => true, // PHP 7.2 migration - // TODO later once 2.2 is more stable - // 'array_syntax' => true, - // 'list_syntax' => true, - // 'regular_callable_call' => true, - // 'static_lambda' => true, - // 'nullable_type_declaration_for_default_null_value' => true, - // 'explicit_indirect_variable' => true, + 'array_syntax' => true, + 'list_syntax' => true, + 'regular_callable_call' => true, + 'static_lambda' => true, + 'nullable_type_declaration_for_default_null_value' => true, + 'explicit_indirect_variable' => true, 'visibility_required' => ['elements' => ['property', 'method', 'const']], 'non_printable_character' => true, 'combine_nested_dirname' => true, @@ -76,6 +77,9 @@ return $config->setRules([ 'ternary_to_null_coalescing' => true, 'phpdoc_to_param_type' => true, 'declare_strict_types' => true, + 'no_superfluous_phpdoc_tags' => [ + 'allow_mixed' => true, + ], // TODO php 7.4 migration (one day..) // 'phpdoc_to_property_type' => true, diff --git a/phpstan/baseline.neon b/phpstan/baseline.neon index 04cb1296d..bfa6364bf 100644 --- a/phpstan/baseline.neon +++ b/phpstan/baseline.neon @@ -865,11 +865,6 @@ parameters: count: 2 path: ../src/Composer/Command/ShowCommand.php - - - message: "#^Only booleans are allowed in a negated boolean, array\\ given\\.$#" - count: 1 - path: ../src/Composer/Command/ShowCommand.php - - message: "#^Only booleans are allowed in a negated boolean, array\\\\|string given\\.$#" count: 1 @@ -1415,6 +1410,16 @@ parameters: count: 4 path: ../src/Composer/DependencyResolver/PoolOptimizer.php + - + message: "#^Cannot access offset 'constraint' on array\\{package\\: Composer\\\\Package\\\\BasePackage\\}\\|array\\{packageName\\: string, constraint\\: Composer\\\\Semver\\\\Constraint\\\\ConstraintInterface\\}\\|Composer\\\\Package\\\\BasePackage\\|Composer\\\\Package\\\\Link\\|int\\|string\\.$#" + count: 1 + path: ../src/Composer/DependencyResolver/Problem.php + + - + message: "#^Cannot access offset 'packageName' on array\\{package\\: Composer\\\\Package\\\\BasePackage\\}\\|array\\{packageName\\: string, constraint\\: Composer\\\\Semver\\\\Constraint\\\\ConstraintInterface\\}\\|Composer\\\\Package\\\\BasePackage\\|Composer\\\\Package\\\\Link\\|int\\|string\\.$#" + count: 1 + path: ../src/Composer/DependencyResolver/Problem.php + - message: "#^Cannot call method getRepoName\\(\\) on Composer\\\\Repository\\\\RepositoryInterface\\|null\\.$#" count: 3 @@ -1530,6 +1535,11 @@ parameters: count: 1 path: ../src/Composer/DependencyResolver/Rule.php + - + message: "#^Method Composer\\\\DependencyResolver\\\\Rule\\:\\:getReason\\(\\) should return 2\\|3\\|6\\|7\\|10\\|12\\|13\\|14 but returns int\\.$#" + count: 1 + path: ../src/Composer/DependencyResolver/Rule.php + - message: "#^Only booleans are allowed in &&, array\\ given on the left side\\.$#" count: 1 diff --git a/src/Composer/Advisory/Auditor.php b/src/Composer/Advisory/Auditor.php index 7ceac1a1d..c72645a83 100644 --- a/src/Composer/Advisory/Auditor.php +++ b/src/Composer/Advisory/Auditor.php @@ -1,5 +1,15 @@ + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Composer\Advisory; use Composer\IO\ConsoleIO; @@ -31,7 +41,6 @@ class Auditor ]; /** - * @param IOInterface $io * @param PackageInterface[] $packages * @param self::FORMAT_* $format The format that will be used to output audit results. * @param bool $warningOnly If true, outputs a warning. If false, outputs an error. @@ -43,6 +52,7 @@ class Auditor $advisories = $repoSet->getMatchingSecurityAdvisories($packages, $format === self::FORMAT_SUMMARY); if (self::FORMAT_JSON === $format) { $io->write(JsonFile::encode(['advisories' => $advisories])); + return count($advisories); } @@ -73,14 +83,13 @@ class Auditor foreach ($advisories as $packageAdvisories) { $count += count($packageAdvisories); } + return [count($advisories), $count]; } /** - * @param IOInterface $io * @param array> $advisories * @param self::FORMAT_* $format The format that will be used to output audit results. - * @return void */ private function outputAdvisories(IOInterface $io, array $advisories, string $format): void { @@ -90,13 +99,16 @@ class Auditor throw new InvalidArgumentException('Cannot use table format with ' . get_class($io)); } $this->outputAvisoriesTable($io, $advisories); + return; case self::FORMAT_PLAIN: $this->outputAdvisoriesPlain($io, $advisories); + return; case self::FORMAT_SUMMARY: // We've already output the number of advisories in audit() $io->writeError('Run composer audit for a full list of advisories.'); + return; default: throw new InvalidArgumentException('Invalid format "'.$format.'".'); @@ -104,9 +116,7 @@ class Auditor } /** - * @param ConsoleIO $io * @param array> $advisories - * @return void */ private function outputAvisoriesTable(ConsoleIO $io, array $advisories): void { @@ -138,9 +148,7 @@ class Auditor } /** - * @param IOInterface $io * @param array> $advisories - * @return void */ private function outputAdvisoriesPlain(IOInterface $io, array $advisories): void { diff --git a/src/Composer/Advisory/PartialSecurityAdvisory.php b/src/Composer/Advisory/PartialSecurityAdvisory.php index 7a4cc7e12..c5234591b 100644 --- a/src/Composer/Advisory/PartialSecurityAdvisory.php +++ b/src/Composer/Advisory/PartialSecurityAdvisory.php @@ -1,5 +1,15 @@ + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Composer\Advisory; use Composer\Semver\Constraint\ConstraintInterface; diff --git a/src/Composer/Advisory/SecurityAdvisory.php b/src/Composer/Advisory/SecurityAdvisory.php index e8b53e925..a574ed4b0 100644 --- a/src/Composer/Advisory/SecurityAdvisory.php +++ b/src/Composer/Advisory/SecurityAdvisory.php @@ -1,5 +1,15 @@ + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Composer\Advisory; use Composer\Semver\Constraint\ConstraintInterface; @@ -41,7 +51,7 @@ class SecurityAdvisory extends PartialSecurityAdvisory * @param non-empty-array $sources * @readonly */ - public function __construct(string $packageName, string $advisoryId, ConstraintInterface $affectedVersions, string $title, array $sources, \DateTimeImmutable $reportedAt, ?string $cve = null, ?string $link = null) + public function __construct(string $packageName, string $advisoryId, ConstraintInterface $affectedVersions, string $title, array $sources, DateTimeImmutable $reportedAt, ?string $cve = null, ?string $link = null) { parent::__construct($packageName, $advisoryId, $affectedVersions); diff --git a/src/Composer/Autoload/AutoloadGenerator.php b/src/Composer/Autoload/AutoloadGenerator.php index a5b85e4d8..2a20265df 100644 --- a/src/Composer/Autoload/AutoloadGenerator.php +++ b/src/Composer/Autoload/AutoloadGenerator.php @@ -80,7 +80,7 @@ class AutoloadGenerator */ private $platformRequirementFilter; - public function __construct(EventDispatcher $eventDispatcher, IOInterface $io = null) + public function __construct(EventDispatcher $eventDispatcher, ?IOInterface $io = null) { $this->eventDispatcher = $eventDispatcher; $this->io = $io ?? new NullIO(); @@ -89,7 +89,6 @@ class AutoloadGenerator } /** - * @param bool $devMode * @return void */ public function setDevMode(bool $devMode = true) @@ -100,7 +99,6 @@ class AutoloadGenerator /** * Whether generated autoloader considers the class map authoritative. * - * @param bool $classMapAuthoritative * @return void */ public function setClassMapAuthoritative(bool $classMapAuthoritative) @@ -111,8 +109,6 @@ class AutoloadGenerator /** * Whether generated autoloader considers APCu caching. * - * @param bool $apcu - * @param string|null $apcuPrefix * @return void */ public function setApcu(bool $apcu, ?string $apcuPrefix = null) @@ -124,7 +120,6 @@ class AutoloadGenerator /** * Whether to run scripts or not * - * @param bool $runScripts * @return void */ public function setRunScripts(bool $runScripts = true) @@ -160,8 +155,6 @@ class AutoloadGenerator } /** - * @param string $targetDir - * @param bool $scanPsrPackages * @return ClassMap * @throws \Seld\JsonLint\ParsingException * @throws \RuntimeException @@ -193,9 +186,9 @@ class AutoloadGenerator Platform::putEnv('COMPOSER_DEV_MODE', $this->devMode ? '1' : '0'); } - $this->eventDispatcher->dispatchScript(ScriptEvents::PRE_AUTOLOAD_DUMP, $this->devMode, array(), array( + $this->eventDispatcher->dispatchScript(ScriptEvents::PRE_AUTOLOAD_DUMP, $this->devMode, [], [ 'optimize' => $scanPsrPackages, - )); + ]); } $classMapGenerator = new ClassMapGenerator(['php', 'inc', 'hh']); @@ -257,7 +250,7 @@ EOF; // Process the 'psr-0' base directories. foreach ($autoloads['psr-0'] as $namespace => $paths) { - $exportedPaths = array(); + $exportedPaths = []; foreach ($paths as $path) { $exportedPaths[] = $this->getPathCode($filesystem, $basePath, $vendorPath, $path); } @@ -269,7 +262,7 @@ EOF; // Process the 'psr-4' base directories. foreach ($autoloads['psr-4'] as $namespace => $paths) { - $exportedPaths = array(); + $exportedPaths = []; foreach ($paths as $path) { $exportedPaths[] = $this->getPathCode($filesystem, $basePath, $vendorPath, $path); } @@ -322,12 +315,12 @@ EOF; } if ($scanPsrPackages) { - $namespacesToScan = array(); + $namespacesToScan = []; // Scan the PSR-0/4 directories for class files, and add them to the class map - foreach (array('psr-4', 'psr-0') as $psrType) { + foreach (['psr-4', 'psr-0'] as $psrType) { foreach ($autoloads[$psrType] as $namespace => $paths) { - $namespacesToScan[$namespace][] = array('paths' => $paths, 'type' => $psrType); + $namespacesToScan[$namespace][] = ['paths' => $paths, 'type' => $psrType]; } } @@ -441,9 +434,9 @@ EOF; $filesystem->safeCopy(__DIR__.'/../../../LICENSE', $targetDir.'/LICENSE'); if ($this->runScripts) { - $this->eventDispatcher->dispatchScript(ScriptEvents::POST_AUTOLOAD_DUMP, $this->devMode, array(), array( + $this->eventDispatcher->dispatchScript(ScriptEvents::POST_AUTOLOAD_DUMP, $this->devMode, [], [ 'optimize' => $scanPsrPackages, - )); + ]); } return $classMap; @@ -479,14 +472,13 @@ EOF; } /** - * @param InstallationManager $installationManager * @param PackageInterface[] $packages * @return array */ public function buildPackageMap(InstallationManager $installationManager, PackageInterface $rootPackage, array $packages) { // build package => install path map - $packageMap = array(array($rootPackage, '')); + $packageMap = [[$rootPackage, '']]; foreach ($packages as $package) { if ($package instanceof AliasPackage) { @@ -494,10 +486,10 @@ EOF; } $this->validatePackage($package); - $packageMap[] = array( + $packageMap[] = [ $package, $installationManager->getInstallPath($package), - ); + ]; } return $packageMap; @@ -562,20 +554,19 @@ EOF; krsort($psr0); krsort($psr4); - return array( + return [ 'psr-0' => $psr0, 'psr-4' => $psr4, 'classmap' => $classmap, 'files' => $files, 'exclude-from-classmap' => $exclude, - ); + ]; } /** * Registers an autoloader based on an autoload-map returned by parseAutoloads * * @param array $autoloads see parseAutoloads return value - * @param null|string $vendorDir * @return ClassLoader */ public function createLoader(array $autoloads, ?string $vendorDir = null) @@ -619,18 +610,14 @@ EOF; /** * @param array $packageMap - * @param string $basePath - * @param string $vendorPath - * @param string $vendorPathCode - * @param string $appBaseDirCode * @return ?string */ protected function getIncludePathsFile(array $packageMap, Filesystem $filesystem, string $basePath, string $vendorPath, string $vendorPathCode, string $appBaseDirCode) { - $includePaths = array(); + $includePaths = []; foreach ($packageMap as $item) { - list($package, $installPath) = $item; + [$package, $installPath] = $item; if (null !== $package->getTargetDir() && strlen($package->getTargetDir()) > 0) { $installPath = substr($installPath, 0, -strlen('/'.$package->getTargetDir())); @@ -667,10 +654,6 @@ EOF; /** * @param array $files - * @param string $basePath - * @param string $vendorPath - * @param string $vendorPathCode - * @param string $appBaseDirCode * @return ?string */ protected function getIncludeFilesFile(array $files, Filesystem $filesystem, string $basePath, string $vendorPath, string $vendorPathCode, string $appBaseDirCode) @@ -700,9 +683,6 @@ EOF; } /** - * @param string $basePath - * @param string $vendorPath - * @param string $path * @return string */ protected function getPathCode(Filesystem $filesystem, string $basePath, string $vendorPath, string $path) @@ -740,8 +720,8 @@ EOF; protected function getPlatformCheck(array $packageMap, $checkPlatform, array $devPackageNames) { $lowestPhpVersion = Bound::zero(); - $requiredExtensions = array(); - $extensionProviders = array(); + $requiredExtensions = []; + $extensionProviders = []; foreach ($packageMap as $item) { $package = $item[0]; @@ -891,8 +871,6 @@ PLATFORM_CHECK; } /** - * @param string $vendorPathToTargetDirCode - * @param string $suffix * @return string */ protected function getAutoloadFile(string $vendorPathToTargetDirCode, string $suffix) @@ -922,16 +900,9 @@ AUTOLOAD; } /** - * @param bool $useClassMap - * @param bool $useIncludePath - * @param null|string $targetDirLoader - * @param bool $useIncludeFiles * @param string $vendorPathCode unused in this method * @param string $appBaseDirCode unused in this method - * @param string $suffix - * @param bool $useGlobalIncludePath * @param string $prependAutoloader 'true'|'false' - * @param bool $checkPlatform * @return string */ protected function getAutoloadRealFile(bool $useClassMap, bool $useIncludePath, ?string $targetDirLoader, bool $useIncludeFiles, string $vendorPathCode, string $appBaseDirCode, string $suffix, bool $useGlobalIncludePath, string $prependAutoloader, bool $checkPlatform) @@ -1081,8 +1052,6 @@ FOOTER; } /** - * @param string $suffix - * @param string $targetDir * @param string $vendorPath input for findShortestPathCode * @param string $basePath input for findShortestPathCode * @return string @@ -1134,9 +1103,9 @@ HEADER; $prefix = "\0Composer\Autoload\ClassLoader\0"; $prefixLen = strlen($prefix); if (file_exists($targetDir . '/autoload_files.php')) { - $maps = array('files' => require $targetDir . '/autoload_files.php'); + $maps = ['files' => require $targetDir . '/autoload_files.php']; } else { - $maps = array(); + $maps = []; } foreach ((array) $loader as $prop => $value) { @@ -1148,12 +1117,12 @@ HEADER; foreach ($maps as $prop => $value) { $value = strtr( var_export($value, true), - array( + [ $absoluteVendorPathCode => $vendorPathCode, $absoluteVendorPharPathCode => $vendorPharPathCode, $absoluteAppBaseDirCode => $appBaseDirCode, $absoluteAppBaseDirPharCode => $appBaseDirPharCode, - ) + ] ); $value = ltrim(Preg::replace('/^ */m', ' $0$0', $value)); @@ -1182,10 +1151,10 @@ INITIALIZER; */ protected function parseAutoloadsType(array $packageMap, string $type, RootPackageInterface $rootPackage) { - $autoloads = array(); + $autoloads = []; foreach ($packageMap as $item) { - list($package, $installPath) = $item; + [$package, $installPath] = $item; $autoload = $package->getAutoload(); if ($this->devMode && $package === $rootPackage) { @@ -1205,7 +1174,7 @@ INITIALIZER; if (($type === 'files' || $type === 'classmap' || $type === 'exclude-from-classmap') && $package->getTargetDir() && !Filesystem::isReadable($installPath.'/'.$path)) { // remove target-dir from file paths of the root package if ($package === $rootPackage) { - $targetDir = str_replace('\\', '[\\\\/]', preg_quote(str_replace(array('/', '\\'), '', $package->getTargetDir()))); + $targetDir = str_replace('\\', '[\\\\/]', preg_quote(str_replace(['/', '\\'], '', $package->getTargetDir()))); $path = ltrim(Preg::replace('{^'.$targetDir.'}', '', ltrim($path, '\\/')), '\\/'); } else { // add target-dir from file paths that don't have it @@ -1218,7 +1187,7 @@ INITIALIZER; $path = Preg::replace('{/+}', '/', preg_quote(trim(strtr($path, '\\', '/'), '/'))); // add support for wildcards * and ** - $path = strtr($path, array('\\*\\*' => '.+?', '\\*' => '[^/]+?')); + $path = strtr($path, ['\\*\\*' => '.+?', '\\*' => '[^/]+?']); // add support for up-level relative paths $updir = null; @@ -1266,7 +1235,6 @@ INITIALIZER; } /** - * @param string $path * @return string */ protected function getFileIdentifier(PackageInterface $package, string $path) @@ -1278,16 +1246,15 @@ INITIALIZER; * Filters out dev-dependencies * * @param array $packageMap - * @param RootPackageInterface $rootPackage * @return array * * @phpstan-param array $packageMap */ protected function filterPackageMap(array $packageMap, RootPackageInterface $rootPackage) { - $packages = array(); - $include = array(); - $replacedBy = array(); + $packages = []; + $include = []; + $replacedBy = []; foreach ($packageMap as $item) { $package = $item[0]; @@ -1339,11 +1306,11 @@ INITIALIZER; */ protected function sortPackageMap(array $packageMap) { - $packages = array(); - $paths = array(); + $packages = []; + $paths = []; foreach ($packageMap as $item) { - list($package, $path) = $item; + [$package, $path] = $item; $name = $package->getName(); $packages[$name] = $package; $paths[$name] = $path; @@ -1351,11 +1318,11 @@ INITIALIZER; $sortedPackages = PackageSorter::sortPackages($packages); - $sortedPackageMap = array(); + $sortedPackageMap = []; foreach ($sortedPackages as $package) { $name = $package->getName(); - $sortedPackageMap[] = array($packages[$name], $paths[$name]); + $sortedPackageMap[] = [$packages[$name], $paths[$name]]; } return $sortedPackageMap; diff --git a/src/Composer/Autoload/ClassMapGenerator.php b/src/Composer/Autoload/ClassMapGenerator.php index 33dd0f324..316757fe9 100644 --- a/src/Composer/Autoload/ClassMapGenerator.php +++ b/src/Composer/Autoload/ClassMapGenerator.php @@ -36,11 +36,10 @@ class ClassMapGenerator * * @param \Traversable|array $dirs Directories or a single path to search in * @param string $file The name of the class map file - * @return void */ public static function dump(iterable $dirs, string $file): void { - $maps = array(); + $maps = []; foreach ($dirs as $dir) { $maps = array_merge($maps, static::createMap($dir)); @@ -61,7 +60,7 @@ class ClassMapGenerator * @return array A class map array * @throws \RuntimeException When the path is neither an existing file nor directory */ - public static function createMap($path, string $excluded = null, IOInterface $io = null, ?string $namespace = null, ?string $autoloadType = null, array &$scannedFiles = array()): array + public static function createMap($path, ?string $excluded = null, ?IOInterface $io = null, ?string $namespace = null, ?string $autoloadType = null, array &$scannedFiles = []): array { $generator = new \Composer\ClassMapGenerator\ClassMapGenerator(['php', 'inc', 'hh']); $fileList = new FileList(); diff --git a/src/Composer/Autoload/PhpFileCleaner.php b/src/Composer/Autoload/PhpFileCleaner.php index d6a840b68..0c00f878b 100644 --- a/src/Composer/Autoload/PhpFileCleaner.php +++ b/src/Composer/Autoload/PhpFileCleaner.php @@ -49,25 +49,20 @@ class PhpFileCleaner /** * @param string[] $types - * @return void */ public static function setTypeConfig(array $types): void { foreach ($types as $type) { - self::$typeConfig[$type[0]] = array( + self::$typeConfig[$type[0]] = [ 'name' => $type, 'length' => \strlen($type), 'pattern' => '{.\b(?])'.$type.'\s++[a-zA-Z_\x7f-\xff:][a-zA-Z0-9_\x7f-\xff:\-]*+}Ais', - ); + ]; } self::$restPattern = '{[^?"\'contents = $contents; @@ -75,9 +70,6 @@ class PhpFileCleaner $this->maxMatches = $maxMatches; } - /** - * @return string - */ public function clean(): string { $clean = ''; @@ -149,9 +141,6 @@ class PhpFileCleaner return $clean; } - /** - * @return void - */ private function skipToPhp(): void { while ($this->index < $this->len) { @@ -164,10 +153,6 @@ class PhpFileCleaner } } - /** - * @param string $delimiter - * @return void - */ private function skipString(string $delimiter): void { $this->index += 1; @@ -184,9 +169,6 @@ class PhpFileCleaner } } - /** - * @return void - */ private function skipComment(): void { $this->index += 2; @@ -200,9 +182,6 @@ class PhpFileCleaner } } - /** - * @return void - */ private function skipToNewline(): void { while ($this->index < $this->len) { @@ -213,10 +192,6 @@ class PhpFileCleaner } } - /** - * @param string $delimiter - * @return void - */ private function skipHeredoc(string $delimiter): void { $firstDelimiterChar = $delimiter[0]; @@ -256,10 +231,6 @@ class PhpFileCleaner } } - /** - * @param string $char - * @return bool - */ private function peek(string $char): bool { return $this->index + 1 < $this->len && $this->contents[$this->index + 1] === $char; @@ -268,9 +239,8 @@ class PhpFileCleaner /** * @param non-empty-string $regex * @param null|array $match - * @return bool */ - private function match($regex, array &$match = null): bool + private function match($regex, ?array &$match = null): bool { return Preg::isMatch($regex, $this->contents, $match, 0, $this->index); } diff --git a/src/Composer/Cache.php b/src/Composer/Cache.php index ccf990fca..eddc402f2 100644 --- a/src/Composer/Cache.php +++ b/src/Composer/Cache.php @@ -42,13 +42,12 @@ class Cache private $readOnly; /** - * @param IOInterface $io * @param string $cacheDir location of the cache * @param string $allowlist List of characters that are allowed in path names (used in a regex character class) * @param Filesystem $filesystem optional filesystem instance * @param bool $readOnly whether the cache is in readOnly mode */ - public function __construct(IOInterface $io, string $cacheDir, string $allowlist = 'a-z0-9.', Filesystem $filesystem = null, bool $readOnly = false) + public function __construct(IOInterface $io, string $cacheDir, string $allowlist = 'a-z0-9.', ?Filesystem $filesystem = null, bool $readOnly = false) { $this->io = $io; $this->root = rtrim($cacheDir, '/\\') . '/'; @@ -62,8 +61,6 @@ class Cache } /** - * @param bool $readOnly - * * @return void */ public function setReadOnly(bool $readOnly) @@ -80,8 +77,6 @@ class Cache } /** - * @param string $path - * * @return bool */ public static function isUsable(string $path) @@ -121,8 +116,6 @@ class Cache } /** - * @param string $file - * * @return string|false */ public function read(string $file) @@ -140,9 +133,6 @@ class Cache } /** - * @param string $file - * @param string $contents - * * @return bool */ public function write(string $file, string $contents) @@ -184,8 +174,6 @@ class Cache /** * Copy a file into the cache * - * @param string $file - * @param string $source * * @return bool */ @@ -210,8 +198,6 @@ class Cache /** * Copy a file out of the cache * - * @param string $file - * @param string $target * * @return bool */ @@ -259,8 +245,6 @@ class Cache } /** - * @param string $file - * * @return bool */ public function remove(string $file) @@ -290,7 +274,6 @@ class Cache } /** - * @param string $file * @return int|false * @phpstan-return int<0, max>|false */ @@ -307,9 +290,6 @@ class Cache } /** - * @param int $ttl - * @param int $maxSize - * * @return bool */ public function gc(int $ttl, int $maxSize) @@ -362,8 +342,6 @@ class Cache } /** - * @param string $file - * * @return string|false */ public function sha1(string $file) @@ -379,8 +357,6 @@ class Cache } /** - * @param string $file - * * @return string|false */ public function sha256(string $file) diff --git a/src/Composer/Command/AboutCommand.php b/src/Composer/Command/AboutCommand.php index 8568e3df1..b4bd2296d 100644 --- a/src/Composer/Command/AboutCommand.php +++ b/src/Composer/Command/AboutCommand.php @@ -21,9 +21,6 @@ use Symfony\Component\Console\Output\OutputInterface; */ class AboutCommand extends BaseCommand { - /** - * @return void - */ protected function configure(): void { $this diff --git a/src/Composer/Command/ArchiveCommand.php b/src/Composer/Command/ArchiveCommand.php index 63f684777..a356cc50f 100644 --- a/src/Composer/Command/ArchiveCommand.php +++ b/src/Composer/Command/ArchiveCommand.php @@ -43,15 +43,12 @@ class ArchiveCommand extends BaseCommand private const FORMATS = ['tar', 'tar.gz', 'tar.bz2', 'zip']; - /** - * @return void - */ protected function configure(): void { $this ->setName('archive') ->setDescription('Creates an archive of this composer package') - ->setDefinition(array( + ->setDefinition([ new InputArgument('package', InputArgument::OPTIONAL, 'The package to archive instead of the current project', null, $this->suggestAvailablePackage()), new InputArgument('version', InputArgument::OPTIONAL, 'A version constraint to find the package to archive'), new InputOption('format', 'f', InputOption::VALUE_REQUIRED, 'Format of the resulting archive: tar, tar.gz, tar.bz2 or zip (default tar)', null, self::FORMATS), @@ -59,7 +56,7 @@ class ArchiveCommand extends BaseCommand new InputOption('file', null, InputOption::VALUE_REQUIRED, 'Write the archive with the given file name.' .' Note that the format will be appended.'), new InputOption('ignore-filters', null, InputOption::VALUE_NONE, 'Ignore filters when saving package'), - )) + ]) ->setHelp( <<archive command creates an archive of the specified format @@ -150,9 +147,6 @@ EOT } /** - * @param string $packageName - * @param string|null $version - * * @return (BasePackage&CompletePackageInterface)|false */ protected function selectPackage(IOInterface $io, string $packageName, ?string $version = null) @@ -161,7 +155,7 @@ EOT if ($composer = $this->tryComposer()) { $localRepo = $composer->getRepositoryManager()->getLocalRepository(); - $repo = new CompositeRepository(array_merge(array($localRepo), $composer->getRepositoryManager()->getRepositories())); + $repo = new CompositeRepository(array_merge([$localRepo], $composer->getRepositoryManager()->getRepositories())); } else { $defaultRepos = RepositoryFactory::defaultReposWithDefaultManager($io); $io->writeError('No composer.json found in the current directory, searching packages from ' . implode(', ', array_keys($defaultRepos))); diff --git a/src/Composer/Command/AuditCommand.php b/src/Composer/Command/AuditCommand.php index 497161ac7..5a91a1743 100644 --- a/src/Composer/Command/AuditCommand.php +++ b/src/Composer/Command/AuditCommand.php @@ -1,5 +1,15 @@ + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Composer\Command; use Composer\Composer; @@ -19,11 +29,11 @@ class AuditCommand extends BaseCommand $this ->setName('audit') ->setDescription('Checks for security vulnerability advisories for installed packages') - ->setDefinition(array( + ->setDefinition([ new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables auditing of require-dev packages.'), new InputOption('format', 'f', InputOption::VALUE_REQUIRED, 'Output format. Must be "table", "plain", "json", or "summary".', Auditor::FORMAT_TABLE, Auditor::FORMATS), new InputOption('locked', null, InputOption::VALUE_NONE, 'Audit based on the lock file instead of the installed packages.'), - )) + ]) ->setHelp( <<audit command checks for security vulnerability advisories for installed packages. @@ -43,6 +53,7 @@ EOT if (count($packages) === 0) { $this->getIO()->writeError('No packages - skipping audit.'); + return 0; } @@ -56,7 +67,6 @@ EOT } /** - * @param InputInterface $input * @return PackageInterface[] */ private function getPackages(Composer $composer, InputInterface $input): array @@ -66,11 +76,12 @@ EOT throw new \UnexpectedValueException('Valid composer.json and composer.lock files are required to run this command with --locked'); } $locker = $composer->getLocker(); + return $locker->getLockedRepository(!$input->getOption('no-dev'))->getPackages(); } $rootPkg = $composer->getPackage(); - $installedRepo = new InstalledRepository(array($composer->getRepositoryManager()->getLocalRepository())); + $installedRepo = new InstalledRepository([$composer->getRepositoryManager()->getLocalRepository()]); if ($input->getOption('no-dev')) { return RepositoryUtils::filterRequiredPackages($installedRepo->getPackages(), $rootPkg); diff --git a/src/Composer/Command/BaseCommand.php b/src/Composer/Command/BaseCommand.php index f5fa9797c..b83fb00c4 100644 --- a/src/Composer/Command/BaseCommand.php +++ b/src/Composer/Command/BaseCommand.php @@ -93,7 +93,7 @@ abstract class BaseCommand extends Command * @param bool|null $disableScripts If null, reads --no-scripts as default * @throws \RuntimeException */ - public function requireComposer(bool $disablePlugins = null, bool $disableScripts = null): Composer + public function requireComposer(?bool $disablePlugins = null, ?bool $disableScripts = null): Composer { if (null === $this->composer) { $application = parent::getApplication(); @@ -119,7 +119,7 @@ abstract class BaseCommand extends Command * @param bool|null $disablePlugins If null, reads --no-plugins as default * @param bool|null $disableScripts If null, reads --no-scripts as default */ - public function tryComposer(bool $disablePlugins = null, bool $disableScripts = null): ?Composer + public function tryComposer(?bool $disablePlugins = null, ?bool $disableScripts = null): ?Composer { if (null === $this->composer) { $application = parent::getApplication(); @@ -239,7 +239,7 @@ abstract class BaseCommand extends Command $composer->getEventDispatcher()->dispatch($preCommandRunEvent->getName(), $preCommandRunEvent); } - if (true === $input->hasParameterOption(array('--no-ansi')) && $input->hasOption('no-progress')) { + if (true === $input->hasParameterOption(['--no-ansi']) && $input->hasOption('no-progress')) { $input->setOption('no-progress', true); } @@ -282,7 +282,6 @@ abstract class BaseCommand extends Command /** * Returns preferSource and preferDist values based on the configuration. * - * @param bool $keepVcsRequiresPreferSource * * @return bool[] An array composed of the preferSource and preferDist values */ @@ -336,7 +335,7 @@ abstract class BaseCommand extends Command $preferDist = $input->getOption('prefer-dist'); } - return array($preferSource, $preferDist); + return [$preferSource, $preferDist]; } protected function getPlatformRequirementFilter(InputInterface $input): PlatformRequirementFilterInterface @@ -364,7 +363,7 @@ abstract class BaseCommand extends Command */ protected function formatRequirements(array $requirements) { - $requires = array(); + $requires = []; $requirements = $this->normalizeRequirements($requirements); foreach ($requirements as $requirement) { if (!isset($requirement['version'])) { diff --git a/src/Composer/Command/BaseDependencyCommand.php b/src/Composer/Command/BaseDependencyCommand.php index 6bccf931d..76a9c5fb6 100644 --- a/src/Composer/Command/BaseDependencyCommand.php +++ b/src/Composer/Command/BaseDependencyCommand.php @@ -18,7 +18,6 @@ use Composer\Package\CompletePackageInterface; use Composer\Package\RootPackage; use Composer\Repository\InstalledArrayRepository; use Composer\Repository\CompositeRepository; -use Composer\Repository\RepositoryInterface; use Composer\Repository\RootPackageRepository; use Composer\Repository\InstalledRepository; use Composer\Repository\PlatformRepository; @@ -77,19 +76,20 @@ abstract class BaseDependencyCommand extends BaseCommand if (count($localRepo->getPackages()) === 0 && (count($rootPkg->getRequires()) > 0 || count($rootPkg->getDevRequires()) > 0)) { $output->writeln('No dependencies installed. Try running composer install or update, or use --locked.'); + return 1; } $repos[] = $localRepo; - $platformOverrides = $composer->getConfig()->get('platform') ?: array(); + $platformOverrides = $composer->getConfig()->get('platform') ?: []; $repos[] = new PlatformRepository([], $platformOverrides); } $installedRepo = new InstalledRepository($repos); // Parse package name and constraint - list($needle, $textConstraint) = array_pad( + [$needle, $textConstraint] = array_pad( explode(':', $input->getArgument(self::ARGUMENT_PACKAGE)), 2, $input->hasArgument(self::ARGUMENT_CONSTRAINT) ? $input->getArgument(self::ARGUMENT_CONSTRAINT) : '*' @@ -106,12 +106,12 @@ abstract class BaseDependencyCommand extends BaseCommand if (!$installedRepo->findPackage($needle, $textConstraint)) { $defaultRepos = new CompositeRepository(RepositoryFactory::defaultRepos($this->getIO(), $composer->getConfig(), $composer->getRepositoryManager())); if ($match = $defaultRepos->findPackage($needle, $textConstraint)) { - $installedRepo->addRepository(new InstalledArrayRepository(array(clone $match))); + $installedRepo->addRepository(new InstalledArrayRepository([clone $match])); } } // Include replaced packages for inverted lookups as they are then the actual starting point to consider - $needles = array($needle); + $needles = [$needle]; if ($inverted) { foreach ($packages as $package) { $needles = array_merge($needles, array_map(static function (Link $link): string { @@ -161,29 +161,27 @@ abstract class BaseDependencyCommand extends BaseCommand * Assembles and prints a bottom-up table of the dependencies. * * @param array{PackageInterface, Link, mixed}[] $results - * - * @return void */ protected function printTable(OutputInterface $output, $results): void { - $table = array(); - $doubles = array(); + $table = []; + $doubles = []; do { - $queue = array(); - $rows = array(); + $queue = []; + $rows = []; foreach ($results as $result) { /** * @var PackageInterface $package * @var Link $link */ - list($package, $link, $children) = $result; + [$package, $link, $children] = $result; $unique = (string) $link; if (isset($doubles[$unique])) { continue; } $doubles[$unique] = true; $version = $package->getPrettyVersion() === RootPackage::DEFAULT_PRETTY_VERSION ? '-' : $package->getPrettyVersion(); - $rows[] = array($package->getPrettyName(), $version, $link->getDescription(), sprintf('%s (%s)', $link->getTarget(), $link->getPrettyConstraint())); + $rows[] = [$package->getPrettyName(), $version, $link->getDescription(), sprintf('%s (%s)', $link->getTarget(), $link->getPrettyConstraint())]; if ($children) { $queue = array_merge($queue, $children); } @@ -197,18 +195,16 @@ abstract class BaseDependencyCommand extends BaseCommand /** * Init styles for tree - * - * @return void */ protected function initStyles(OutputInterface $output): void { - $this->colors = array( + $this->colors = [ 'green', 'yellow', 'cyan', 'magenta', 'blue', - ); + ]; foreach ($this->colors as $color) { $style = new OutputFormatterStyle($color); @@ -222,15 +218,13 @@ abstract class BaseDependencyCommand extends BaseCommand * @param array{PackageInterface, Link, mixed[]|bool}[] $results Results to be printed at this level. * @param string $prefix Prefix of the current tree level. * @param int $level Current level of recursion. - * - * @return void */ protected function printTree(array $results, string $prefix = '', int $level = 1): void { $count = count($results); $idx = 0; foreach ($results as $result) { - list($package, $link, $children) = $result; + [$package, $link, $children] = $result; $color = $this->colors[$level % count($this->colors)]; $prevColor = $this->colors[($level - 1) % count($this->colors)]; @@ -246,16 +240,11 @@ abstract class BaseDependencyCommand extends BaseCommand } } - /** - * @param string $line - * - * @return void - */ private function writeTreeLine(string $line): void { $io = $this->getIO(); if (!$io->isDecorated()) { - $line = str_replace(array('└', '├', '──', '│'), array('`-', '|-', '-', '|'), $line); + $line = str_replace(['└', '├', '──', '│'], ['`-', '|-', '-', '|'], $line); } $io->write($line); diff --git a/src/Composer/Command/BumpCommand.php b/src/Composer/Command/BumpCommand.php index ae083ccf7..d7ae33488 100644 --- a/src/Composer/Command/BumpCommand.php +++ b/src/Composer/Command/BumpCommand.php @@ -12,29 +12,18 @@ namespace Composer\Command; -use Composer\DependencyResolver\Request; use Composer\Package\AliasPackage; use Composer\Package\Locker; use Composer\Package\Version\VersionBumper; -use Composer\Package\Version\VersionSelector; use Composer\Util\Filesystem; use Symfony\Component\Console\Input\InputInterface; use Composer\Console\Input\InputArgument; use Composer\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Composer\Factory; -use Composer\Installer; -use Composer\Installer\InstallerEvents; use Composer\Json\JsonFile; use Composer\Json\JsonManipulator; -use Composer\Package\Version\VersionParser; -use Composer\Package\Loader\ArrayLoader; -use Composer\Package\BasePackage; -use Composer\Plugin\CommandEvent; -use Composer\Plugin\PluginEvents; -use Composer\Repository\CompositeRepository; use Composer\Repository\PlatformRepository; -use Composer\IO\IOInterface; use Composer\Util\Silencer; /** @@ -52,11 +41,11 @@ final class BumpCommand extends BaseCommand $this ->setName('bump') ->setDescription('Increases the lower limit of your composer.json requirements to the currently installed versions') - ->setDefinition(array( + ->setDefinition([ new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, 'Optional package name(s) to restrict which packages are bumped.', null, $this->suggestRootRequirement()), new InputOption('dev-only', 'D', InputOption::VALUE_NONE, 'Only bump requirements in "require-dev".'), new InputOption('no-dev-only', 'R', InputOption::VALUE_NONE, 'Only bump requirements in "require".'), - )) + ]) ->setHelp( <<bump command increases the lower limit of your composer.json requirements @@ -135,7 +124,7 @@ EOT $tasks = []; if (!$input->getOption('no-dev-only')) { $tasks['require-dev'] = $composer->getPackage()->getDevRequires(); - }; + } if (!$input->getOption('dev-only')) { $tasks['require'] = $composer->getPackage()->getRequires(); } diff --git a/src/Composer/Command/CheckPlatformReqsCommand.php b/src/Composer/Command/CheckPlatformReqsCommand.php index d7108e91d..5ac4d6594 100644 --- a/src/Composer/Command/CheckPlatformReqsCommand.php +++ b/src/Composer/Command/CheckPlatformReqsCommand.php @@ -24,18 +24,15 @@ use Composer\Json\JsonFile; class CheckPlatformReqsCommand extends BaseCommand { - /** - * @return void - */ protected function configure(): void { $this->setName('check-platform-reqs') ->setDescription('Check that platform requirements are satisfied') - ->setDefinition(array( + ->setDefinition([ new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables checking of require-dev packages requirements.'), new InputOption('lock', null, InputOption::VALUE_NONE, 'Checks requirements only from the lock file, not from installed packages.'), new InputOption('format', 'f', InputOption::VALUE_REQUIRED, 'Format of the output: text or json', 'text', ['json', 'text']), - )) + ]) ->setHelp( <<requireComposer(); - $requires = array(); - $removePackages = array(); + $requires = []; + $removePackages = []; if ($input->getOption('lock')) { $this->getIO()->writeError('Checking '.($input->getOption('no-dev') ? 'non-dev ' : '').'platform requirements using the lock file'); $installedRepo = $composer->getLocker()->getLockedRepository(!$input->getOption('no-dev')); @@ -76,10 +73,10 @@ EOT } foreach ($requires as $require => $link) { - $requires[$require] = array($link); + $requires[$require] = [$link]; } - $installedRepo = new InstalledRepository(array($installedRepo, new RootPackageRepository(clone $composer->getPackage()))); + $installedRepo = new InstalledRepository([$installedRepo, new RootPackageRepository(clone $composer->getPackage())]); foreach ($installedRepo->getPackages() as $package) { if (in_array($package->getName(), $removePackages, true)) { continue; @@ -91,9 +88,9 @@ EOT ksort($requires); - $installedRepo->addRepository(new PlatformRepository(array(), array())); + $installedRepo->addRepository(new PlatformRepository([], [])); - $results = array(); + $results = []; $exitCode = 0; /** @@ -103,7 +100,7 @@ EOT if (PlatformRepository::isPlatformPackage($require)) { $candidates = $installedRepo->findPackagesWithReplacersAndProviders($require); if ($candidates) { - $reqResults = array(); + $reqResults = []; foreach ($candidates as $candidate) { $candidateConstraint = null; if ($candidate->getName() === $require) { @@ -125,26 +122,26 @@ EOT foreach ($links as $link) { if (!$link->getConstraint()->matches($candidateConstraint)) { - $reqResults[] = array( + $reqResults[] = [ $candidate->getName() === $require ? $candidate->getPrettyName() : $require, $candidateConstraint->getPrettyString(), $link, 'failed', $candidate->getName() === $require ? '' : 'provided by '.$candidate->getPrettyName().'', - ); + ]; // skip to next candidate continue 2; } } - $results[] = array( + $results[] = [ $candidate->getName() === $require ? $candidate->getPrettyName() : $require, $candidateConstraint->getPrettyString(), null, 'success', $candidate->getName() === $require ? '' : 'provided by '.$candidate->getPrettyName().'', - ); + ]; // candidate matched, skip to next requirement continue 2; @@ -157,13 +154,13 @@ EOT continue; } - $results[] = array( + $results[] = [ $require, 'n/a', $links[0], 'missing', '', - ); + ]; $exitCode = max($exitCode, 2); } @@ -176,20 +173,18 @@ EOT /** * @param mixed[] $results - * - * @return void */ protected function printTable(OutputInterface $output, array $results, string $format): void { - $rows = array(); + $rows = []; foreach ($results as $result) { /** * @var Link|null $link */ - list($platformPackage, $version, $link, $status, $provider) = $result; + [$platformPackage, $version, $link, $status, $provider] = $result; if ('json' === $format) { - $rows[] = array( + $rows[] = [ "name" => $platformPackage, "version" => $version, "status" => strip_tags($status), @@ -200,15 +195,15 @@ EOT 'constraint' => $link->getPrettyConstraint(), ] : null, "provider" => $provider === '' ? null : strip_tags($provider), - ); + ]; } else { - $rows[] = array( + $rows[] = [ $platformPackage, $version, $link, $link ? sprintf('%s %s %s (%s)', $link->getSource(), $link->getDescription(), $link->getTarget(), $link->getPrettyConstraint()) : '', rtrim($status.' '.$provider), - ); + ]; } } diff --git a/src/Composer/Command/ClearCacheCommand.php b/src/Composer/Command/ClearCacheCommand.php index 98c8fbde1..028aa4212 100644 --- a/src/Composer/Command/ClearCacheCommand.php +++ b/src/Composer/Command/ClearCacheCommand.php @@ -23,18 +23,15 @@ use Symfony\Component\Console\Output\OutputInterface; */ class ClearCacheCommand extends BaseCommand { - /** - * @return void - */ protected function configure(): void { $this ->setName('clear-cache') - ->setAliases(array('clearcache', 'cc')) + ->setAliases(['clearcache', 'cc']) ->setDescription('Clears composer\'s internal package cache') - ->setDefinition(array( + ->setDefinition([ new InputOption('gc', null, InputOption::VALUE_NONE, 'Only run garbage collection, not a full cache clear'), - )) + ]) ->setHelp( <<clear-cache deletes all cached packages from composer's @@ -51,12 +48,12 @@ EOT $config = Factory::createConfig(); $io = $this->getIO(); - $cachePaths = array( + $cachePaths = [ 'cache-vcs-dir' => $config->get('cache-vcs-dir'), 'cache-repo-dir' => $config->get('cache-repo-dir'), 'cache-files-dir' => $config->get('cache-files-dir'), 'cache-dir' => $config->get('cache-dir'), - ); + ]; foreach ($cachePaths as $key => $cachePath) { // only individual dirs get garbage collected @@ -83,7 +80,7 @@ EOT if ($key === 'cache-files-dir') { $cache->gc($config->get('cache-files-ttl'), $config->get('cache-files-maxsize')); } elseif ($key === 'cache-repo-dir') { - $cache->gc($config->get('cache-ttl'), 1024*1024*1024 /* 1GB, this should almost never clear anything that is not outdated */); + $cache->gc($config->get('cache-ttl'), 1024 * 1024 * 1024 /* 1GB, this should almost never clear anything that is not outdated */); } elseif ($key === 'cache-vcs-dir') { $cache->gcVcsCache($config->get('cache-ttl')); } diff --git a/src/Composer/Command/CompletionTrait.php b/src/Composer/Command/CompletionTrait.php index 0aad31fe3..1b936263e 100644 --- a/src/Composer/Command/CompletionTrait.php +++ b/src/Composer/Command/CompletionTrait.php @@ -33,7 +33,7 @@ trait CompletionTrait /** * @see BaseCommand::requireComposer() */ - abstract public function requireComposer(bool $disablePlugins = null, bool $disableScripts = null): Composer; + abstract public function requireComposer(?bool $disablePlugins = null, ?bool $disableScripts = null): Composer; /** * Suggestion values for "prefer-install" option @@ -80,9 +80,9 @@ trait CompletionTrait $platformHint = []; if ($includePlatformPackages) { if ($locker->isLocked()) { - $platformRepo = new PlatformRepository(array(), $locker->getPlatformOverrides()); + $platformRepo = new PlatformRepository([], $locker->getPlatformOverrides()); } else { - $platformRepo = new PlatformRepository(array(), $composer->getConfig()->get('platform')); + $platformRepo = new PlatformRepository([], $composer->getConfig()->get('platform')); } if ($input->getCompletionValue() === '') { // to reduce noise, when no text is yet entered we list only two entries for ext- and lib- prefixes @@ -203,6 +203,7 @@ trait CompletionTrait $repos = new PlatformRepository([], $this->requireComposer()->getConfig()->get('platform')); $pattern = BasePackage::packageNameToRegexp($input->getCompletionValue().'*'); + return array_filter(array_map(static function (PackageInterface $package) { return $package->getName(); }, $repos->getPackages()), static function (string $name) use ($pattern): bool { diff --git a/src/Composer/Command/ConfigCommand.php b/src/Composer/Command/ConfigCommand.php index f1fc6c3a1..72c356b8b 100644 --- a/src/Composer/Command/ConfigCommand.php +++ b/src/Composer/Command/ConfigCommand.php @@ -59,15 +59,12 @@ class ConfigCommand extends BaseCommand */ protected $authConfigSource; - /** - * @return void - */ protected function configure(): void { $this ->setName('config') ->setDescription('Sets config options') - ->setDefinition(array( + ->setDefinition([ new InputOption('global', 'g', InputOption::VALUE_NONE, 'Apply command to the global config file'), new InputOption('editor', 'e', InputOption::VALUE_NONE, 'Open editor'), new InputOption('auth', 'a', InputOption::VALUE_NONE, 'Affect auth config file (only used for --editor)'), @@ -81,7 +78,7 @@ class ConfigCommand extends BaseCommand new InputOption('source', null, InputOption::VALUE_NONE, 'Display where the config value is loaded from'), new InputArgument('setting-key', null, 'Setting key'), new InputArgument('setting-value', InputArgument::IS_ARRAY, 'Setting value'), - )) + ]) ->setHelp( <<getOption('global') && !$this->configFile->exists()) { touch($this->configFile->getPath()); - $this->configFile->write(array('config' => new \ArrayObject)); + $this->configFile->write(['config' => new \ArrayObject]); Silencer::call('chmod', $this->configFile->getPath(), 0600); } if ($input->getOption('global') && !$this->authConfigFile->exists()) { touch($this->authConfigFile->getPath()); - $this->authConfigFile->write(array('bitbucket-oauth' => new \ArrayObject, 'github-oauth' => new \ArrayObject, 'gitlab-oauth' => new \ArrayObject, 'gitlab-token' => new \ArrayObject, 'http-basic' => new \ArrayObject, 'bearer' => new \ArrayObject)); + $this->authConfigFile->write(['bitbucket-oauth' => new \ArrayObject, 'github-oauth' => new \ArrayObject, 'gitlab-oauth' => new \ArrayObject, 'gitlab-token' => new \ArrayObject, 'http-basic' => new \ArrayObject, 'bearer' => new \ArrayObject]); Silencer::call('chmod', $this->authConfigFile->getPath(), 0600); } @@ -219,7 +215,7 @@ EOT if (Platform::isWindows()) { $editor = 'notepad'; } else { - foreach (array('editor', 'vim', 'vi', 'nano', 'pico', 'ed') as $candidate) { + foreach (['editor', 'vim', 'vi', 'nano', 'pico', 'ed'] as $candidate) { if (exec('which '.$candidate)) { $editor = $candidate; break; @@ -238,7 +234,7 @@ EOT if (false === $input->getOption('global')) { $this->config->merge($this->configFile->read(), $this->configFile->getPath()); - $this->config->merge(array('config' => $this->authConfigFile->exists() ? $this->authConfigFile->read() : array()), $this->authConfigFile->getPath()); + $this->config->merge(['config' => $this->authConfigFile->exists() ? $this->authConfigFile->read() : []], $this->authConfigFile->getPath()); } // List the configuration of the file settings @@ -254,18 +250,18 @@ EOT } // If the user enters in a config variable, parse it and save to file - if (array() !== $input->getArgument('setting-value') && $input->getOption('unset')) { + if ([] !== $input->getArgument('setting-value') && $input->getOption('unset')) { throw new \RuntimeException('You can not combine a setting value with --unset'); } // show the value if no value is provided - if (array() === $input->getArgument('setting-value') && !$input->getOption('unset')) { - $properties = array('name', 'type', 'description', 'homepage', 'version', 'minimum-stability', 'prefer-stable', 'keywords', 'license', 'extra'); + if ([] === $input->getArgument('setting-value') && !$input->getOption('unset')) { + $properties = ['name', 'type', 'description', 'homepage', 'version', 'minimum-stability', 'prefer-stable', 'keywords', 'license', 'extra']; $rawData = $this->configFile->read(); $data = $this->config->all(); if (Preg::isMatch('/^repos?(?:itories)?(?:\.(.+))?/', $settingKey, $matches)) { if (!isset($matches[1]) || $matches[1] === '') { - $value = $data['repositories'] ?? array(); + $value = $data['repositories'] ?? []; } else { if (!isset($data['repositories'][$matches[1]])) { throw new \InvalidArgumentException('There is no '.$matches[1].' repository defined'); @@ -321,36 +317,36 @@ EOT $values = $input->getArgument('setting-value'); // what the user is trying to add/change $booleanValidator = static function ($val): bool { - return in_array($val, array('true', 'false', '1', '0'), true); + return in_array($val, ['true', 'false', '1', '0'], true); }; $booleanNormalizer = static function ($val): bool { return $val !== 'false' && (bool) $val; }; // handle config values - $uniqueConfigValues = array( - 'process-timeout' => array('is_numeric', 'intval'), - 'use-include-path' => array($booleanValidator, $booleanNormalizer), - 'use-github-api' => array($booleanValidator, $booleanNormalizer), - 'preferred-install' => array( + $uniqueConfigValues = [ + 'process-timeout' => ['is_numeric', 'intval'], + 'use-include-path' => [$booleanValidator, $booleanNormalizer], + 'use-github-api' => [$booleanValidator, $booleanNormalizer], + 'preferred-install' => [ static function ($val): bool { - return in_array($val, array('auto', 'source', 'dist'), true); + return in_array($val, ['auto', 'source', 'dist'], true); }, static function ($val) { return $val; }, - ), - 'gitlab-protocol' => array( + ], + 'gitlab-protocol' => [ static function ($val): bool { - return in_array($val, array('git', 'http', 'https'), true); + return in_array($val, ['git', 'http', 'https'], true); }, static function ($val) { return $val; }, - ), - 'store-auths' => array( + ], + 'store-auths' => [ static function ($val): bool { - return in_array($val, array('true', 'false', 'prompt'), true); + return in_array($val, ['true', 'false', 'prompt'], true); }, static function ($val) { if ('prompt' === $val) { @@ -359,56 +355,56 @@ EOT return $val !== 'false' && (bool) $val; }, - ), - 'notify-on-install' => array($booleanValidator, $booleanNormalizer), - 'vendor-dir' => array('is_string', static function ($val) { + ], + 'notify-on-install' => [$booleanValidator, $booleanNormalizer], + 'vendor-dir' => ['is_string', static function ($val) { return $val; - }), - 'bin-dir' => array('is_string', static function ($val) { + }], + 'bin-dir' => ['is_string', static function ($val) { return $val; - }), - 'archive-dir' => array('is_string', static function ($val) { + }], + 'archive-dir' => ['is_string', static function ($val) { return $val; - }), - 'archive-format' => array('is_string', static function ($val) { + }], + 'archive-format' => ['is_string', static function ($val) { return $val; - }), - 'data-dir' => array('is_string', static function ($val) { + }], + 'data-dir' => ['is_string', static function ($val) { return $val; - }), - 'cache-dir' => array('is_string', static function ($val) { + }], + 'cache-dir' => ['is_string', static function ($val) { return $val; - }), - 'cache-files-dir' => array('is_string', static function ($val) { + }], + 'cache-files-dir' => ['is_string', static function ($val) { return $val; - }), - 'cache-repo-dir' => array('is_string', static function ($val) { + }], + 'cache-repo-dir' => ['is_string', static function ($val) { return $val; - }), - 'cache-vcs-dir' => array('is_string', static function ($val) { + }], + 'cache-vcs-dir' => ['is_string', static function ($val) { return $val; - }), - 'cache-ttl' => array('is_numeric', 'intval'), - 'cache-files-ttl' => array('is_numeric', 'intval'), - 'cache-files-maxsize' => array( + }], + 'cache-ttl' => ['is_numeric', 'intval'], + 'cache-files-ttl' => ['is_numeric', 'intval'], + 'cache-files-maxsize' => [ static function ($val): bool { return Preg::isMatch('/^\s*([0-9.]+)\s*(?:([kmg])(?:i?b)?)?\s*$/i', $val); }, static function ($val) { return $val; }, - ), - 'bin-compat' => array( + ], + 'bin-compat' => [ static function ($val): bool { - return in_array($val, array('auto', 'full', 'symlink')); + return in_array($val, ['auto', 'full', 'symlink']); }, static function ($val) { return $val; }, - ), - 'discard-changes' => array( + ], + 'discard-changes' => [ static function ($val): bool { - return in_array($val, array('stash', 'true', 'false', '1', '0'), true); + return in_array($val, ['stash', 'true', 'false', '1', '0'], true); }, static function ($val) { if ('stash' === $val) { @@ -417,40 +413,40 @@ EOT return $val !== 'false' && (bool) $val; }, - ), - 'autoloader-suffix' => array('is_string', static function ($val) { + ], + 'autoloader-suffix' => ['is_string', static function ($val) { return $val === 'null' ? null : $val; - }), - 'sort-packages' => array($booleanValidator, $booleanNormalizer), - 'optimize-autoloader' => array($booleanValidator, $booleanNormalizer), - 'classmap-authoritative' => array($booleanValidator, $booleanNormalizer), - 'apcu-autoloader' => array($booleanValidator, $booleanNormalizer), - 'prepend-autoloader' => array($booleanValidator, $booleanNormalizer), - 'disable-tls' => array($booleanValidator, $booleanNormalizer), - 'secure-http' => array($booleanValidator, $booleanNormalizer), - 'cafile' => array( + }], + 'sort-packages' => [$booleanValidator, $booleanNormalizer], + 'optimize-autoloader' => [$booleanValidator, $booleanNormalizer], + 'classmap-authoritative' => [$booleanValidator, $booleanNormalizer], + 'apcu-autoloader' => [$booleanValidator, $booleanNormalizer], + 'prepend-autoloader' => [$booleanValidator, $booleanNormalizer], + 'disable-tls' => [$booleanValidator, $booleanNormalizer], + 'secure-http' => [$booleanValidator, $booleanNormalizer], + 'cafile' => [ static function ($val): bool { return file_exists($val) && Filesystem::isReadable($val); }, static function ($val) { return $val === 'null' ? null : $val; }, - ), - 'capath' => array( + ], + 'capath' => [ static function ($val): bool { return is_dir($val) && Filesystem::isReadable($val); }, static function ($val) { return $val === 'null' ? null : $val; }, - ), - 'github-expose-hostname' => array($booleanValidator, $booleanNormalizer), - 'htaccess-protect' => array($booleanValidator, $booleanNormalizer), - 'lock' => array($booleanValidator, $booleanNormalizer), - 'allow-plugins' => array($booleanValidator, $booleanNormalizer), - 'platform-check' => array( + ], + 'github-expose-hostname' => [$booleanValidator, $booleanNormalizer], + 'htaccess-protect' => [$booleanValidator, $booleanNormalizer], + 'lock' => [$booleanValidator, $booleanNormalizer], + 'allow-plugins' => [$booleanValidator, $booleanNormalizer], + 'platform-check' => [ static function ($val): bool { - return in_array($val, array('php-only', 'true', 'false', '1', '0'), true); + return in_array($val, ['php-only', 'true', 'false', '1', '0'], true); }, static function ($val) { if ('php-only' === $val) { @@ -459,10 +455,10 @@ EOT return $val !== 'false' && (bool) $val; }, - ), - 'use-parent-dir' => array( + ], + 'use-parent-dir' => [ static function ($val): bool { - return in_array($val, array('true', 'false', 'prompt'), true); + return in_array($val, ['true', 'false', 'prompt'], true); }, static function ($val) { if ('prompt' === $val) { @@ -471,17 +467,17 @@ EOT return $val !== 'false' && (bool) $val; }, - ), - ); - $multiConfigValues = array( - 'github-protocols' => array( + ], + ]; + $multiConfigValues = [ + 'github-protocols' => [ static function ($vals) { if (!is_array($vals)) { return 'array expected'; } foreach ($vals as $val) { - if (!in_array($val, array('git', 'https', 'ssh'))) { + if (!in_array($val, ['git', 'https', 'ssh'])) { return 'valid protocols include: git, https, ssh'; } } @@ -491,8 +487,8 @@ EOT static function ($vals) { return $vals; }, - ), - 'github-domains' => array( + ], + 'github-domains' => [ static function ($vals) { if (!is_array($vals)) { return 'array expected'; @@ -503,8 +499,8 @@ EOT static function ($vals) { return $vals; }, - ), - 'gitlab-domains' => array( + ], + 'gitlab-domains' => [ static function ($vals) { if (!is_array($vals)) { return 'array expected'; @@ -515,8 +511,8 @@ EOT static function ($vals) { return $vals; }, - ), - ); + ], + ]; if ($input->getOption('unset') && (isset($uniqueConfigValues[$settingKey]) || isset($multiConfigValues[$settingKey]))) { if ($settingKey === 'disable-tls' && $this->config->get('disable-tls')) { @@ -545,7 +541,7 @@ EOT return 0; } - list($validator) = $uniqueConfigValues['preferred-install']; + [$validator] = $uniqueConfigValues['preferred-install']; if (!$validator($values[0])) { throw new \RuntimeException('Invalid value for '.$settingKey.'. Should be one of: auto, source, or dist'); } @@ -578,34 +574,34 @@ EOT } // handle properties - $uniqueProps = array( - 'name' => array('is_string', static function ($val) { + $uniqueProps = [ + 'name' => ['is_string', static function ($val) { return $val; - }), - 'type' => array('is_string', static function ($val) { + }], + 'type' => ['is_string', static function ($val) { return $val; - }), - 'description' => array('is_string', static function ($val) { + }], + 'description' => ['is_string', static function ($val) { return $val; - }), - 'homepage' => array('is_string', static function ($val) { + }], + 'homepage' => ['is_string', static function ($val) { return $val; - }), - 'version' => array('is_string', static function ($val) { + }], + 'version' => ['is_string', static function ($val) { return $val; - }), - 'minimum-stability' => array( + }], + 'minimum-stability' => [ static function ($val): bool { return isset(BasePackage::$stabilities[VersionParser::normalizeStability($val)]); }, static function ($val): string { return VersionParser::normalizeStability($val); }, - ), - 'prefer-stable' => array($booleanValidator, $booleanNormalizer), - ); - $multiProps = array( - 'keywords' => array( + ], + 'prefer-stable' => [$booleanValidator, $booleanNormalizer], + ]; + $multiProps = [ + 'keywords' => [ static function ($vals) { if (!is_array($vals)) { return 'array expected'; @@ -616,8 +612,8 @@ EOT static function ($vals) { return $vals; }, - ), - 'license' => array( + ], + 'license' => [ static function ($vals) { if (!is_array($vals)) { return 'array expected'; @@ -628,8 +624,8 @@ EOT static function ($vals) { return $vals; }, - ), - ); + ], + ]; if ($input->getOption('global') && (isset($uniqueProps[$settingKey]) || isset($multiProps[$settingKey]) || strpos($settingKey, 'extra.') === 0)) { throw new \InvalidArgumentException('The ' . $settingKey . ' property can not be set in the global config.json file. Use `composer global config` to apply changes to the global composer.json'); @@ -659,10 +655,10 @@ EOT } if (2 === count($values)) { - $this->configSource->addRepository($matches[1], array( + $this->configSource->addRepository($matches[1], [ 'type' => $values[0], 'url' => $values[1], - ), $input->getOption('append')); + ], $input->getOption('append')); return 0; } @@ -727,7 +723,7 @@ EOT } // handle unsetting extra/suggest - if (in_array($settingKey, array('suggest', 'extra'), true) && $input->getOption('unset')) { + if (in_array($settingKey, ['suggest', 'extra'], true) && $input->getOption('unset')) { $this->configSource->removeProperty($settingKey); return 0; @@ -767,11 +763,11 @@ EOT throw new \RuntimeException('Expected two arguments (consumer-key, consumer-secret), got '.count($values)); } $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]); - $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], array('consumer-key' => $values[0], 'consumer-secret' => $values[1])); + $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], ['consumer-key' => $values[0], 'consumer-secret' => $values[1]]); } elseif ($matches[1] === 'gitlab-token' && 2 === count($values)) { $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]); - $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], array('username' => $values[0], 'token' => $values[1])); - } elseif (in_array($matches[1], array('github-oauth', 'gitlab-oauth', 'gitlab-token', 'bearer'), true)) { + $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], ['username' => $values[0], 'token' => $values[1]]); + } elseif (in_array($matches[1], ['github-oauth', 'gitlab-oauth', 'gitlab-token', 'bearer'], true)) { if (1 !== count($values)) { throw new \RuntimeException('Too many arguments, expected only one token'); } @@ -782,7 +778,7 @@ EOT throw new \RuntimeException('Expected two arguments (username, password), got '.count($values)); } $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]); - $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], array('username' => $values[0], 'password' => $values[1])); + $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], ['username' => $values[0], 'password' => $values[1]]); } return 0; @@ -812,16 +808,12 @@ EOT } /** - * @param string $key * @param array{callable, callable} $callbacks Validator and normalizer callbacks * @param array $values - * @param string $method - * - * @return void */ protected function handleSingleValue(string $key, array $callbacks, array $values, string $method): void { - list($validator, $normalizer) = $callbacks; + [$validator, $normalizer] = $callbacks; if (1 !== count($values)) { throw new \RuntimeException('You can only pass one value. Example: php composer.phar config process-timeout 300'); } @@ -843,20 +835,16 @@ EOT } } - call_user_func(array($this->configSource, $method), $key, $normalizedValue); + call_user_func([$this->configSource, $method], $key, $normalizedValue); } /** - * @param string $key * @param array{callable, callable} $callbacks Validator and normalizer callbacks * @param array $values - * @param string $method - * - * @return void */ protected function handleMultiValue(string $key, array $callbacks, array $values, string $method): void { - list($validator, $normalizer) = $callbacks; + [$validator, $normalizer] = $callbacks; if (true !== $validation = $validator($values)) { throw new \RuntimeException(sprintf( '%s is an invalid value'.($validation ? ' ('.$validation.')' : ''), @@ -864,7 +852,7 @@ EOT )); } - call_user_func(array($this->configSource, $method), $key, $normalizer($values)); + call_user_func([$this->configSource, $method], $key, $normalizer($values)); } /** @@ -872,17 +860,13 @@ EOT * * @param array $contents * @param array $rawContents - * @param string|null $k - * @param bool $showSource - * - * @return void */ protected function listConfiguration(array $contents, array $rawContents, OutputInterface $output, ?string $k = null, bool $showSource = false): void { $origK = $k; $io = $this->getIO(); foreach ($contents as $key => $value) { - if ($k === null && !in_array($key, array('config', 'repositories'))) { + if ($k === null && !in_array($key, ['config', 'repositories'])) { continue; } diff --git a/src/Composer/Command/CreateProjectCommand.php b/src/Composer/Command/CreateProjectCommand.php index d34cd4225..c084feaa0 100644 --- a/src/Composer/Command/CreateProjectCommand.php +++ b/src/Composer/Command/CreateProjectCommand.php @@ -65,15 +65,12 @@ class CreateProjectCommand extends BaseCommand */ protected $suggestedPackagesReporter; - /** - * @return void - */ protected function configure(): void { $this ->setName('create-project') ->setDescription('Creates new project from a package into given directory') - ->setDefinition(array( + ->setDefinition([ new InputArgument('package', InputArgument::OPTIONAL, 'Package name to be installed', null, $this->suggestAvailablePackage()), new InputArgument('directory', InputArgument::OPTIONAL, 'Directory where the files should be created'), new InputArgument('version', InputArgument::OPTIONAL, 'Version, will default to latest'), @@ -98,7 +95,7 @@ class CreateProjectCommand extends BaseCommand new InputOption('ignore-platform-req', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Ignore a specific platform requirement (php & ext- packages).'), new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore all platform requirements (php & ext- packages).'), new InputOption('ask', null, InputOption::VALUE_NONE, 'Whether to ask for project directory.'), - )) + ]) ->setHelp( <<create-project command creates a new project from a given @@ -134,7 +131,7 @@ EOT $config = Factory::createConfig(); $io = $this->getIO(); - list($preferSource, $preferDist) = $this->getPreferredInstallOptions($config, $input, true); + [$preferSource, $preferDist] = $this->getPreferredInstallOptions($config, $input, true); if ($input->getOption('dev')) { $io->writeError('You are using the deprecated option "dev". Dev packages are installed by default now.'); @@ -176,25 +173,11 @@ EOT } /** - * @param string|null $packageName - * @param string|null $directory - * @param string|null $packageVersion - * @param string|null $stability - * @param bool $preferSource - * @param bool $preferDist - * @param bool $installDevPackages * @param string|array|null $repositories - * @param bool $disablePlugins - * @param bool $disableScripts - * @param bool $noProgress - * @param bool $noInstall - * @param bool $secureHttp - * @param bool $addRepository * - * @return int * @throws \Exception */ - public function installProject(IOInterface $io, Config $config, InputInterface $input, ?string $packageName = null, ?string $directory = null, ?string $packageVersion = null, ?string $stability = 'stable', bool $preferSource = false, bool $preferDist = false, bool $installDevPackages = false, $repositories = null, bool $disablePlugins = false, bool $disableScripts = false, bool $noProgress = false, bool $noInstall = false, PlatformRequirementFilterInterface $platformRequirementFilter = null, bool $secureHttp = true, bool $addRepository = false): int + public function installProject(IOInterface $io, Config $config, InputInterface $input, ?string $packageName = null, ?string $directory = null, ?string $packageVersion = null, ?string $stability = 'stable', bool $preferSource = false, bool $preferDist = false, bool $installDevPackages = false, $repositories = null, bool $disablePlugins = false, bool $disableScripts = false, bool $noProgress = false, bool $noInstall = false, ?PlatformRequirementFilterInterface $platformRequirementFilter = null, bool $secureHttp = true, bool $addRepository = false): int { $oldCwd = Platform::getCwd(); @@ -230,8 +213,8 @@ EOT $configSource = new JsonConfigSource(new JsonFile('composer.json')); if ( - (isset($repoConfig['packagist']) && $repoConfig === array('packagist' => false)) - || (isset($repoConfig['packagist.org']) && $repoConfig === array('packagist.org' => false)) + (isset($repoConfig['packagist']) && $repoConfig === ['packagist' => false]) + || (isset($repoConfig['packagist.org']) && $repoConfig === ['packagist.org' => false]) ) { $configSource->addRepository('packagist.org', false); } else { @@ -250,7 +233,7 @@ EOT // use the new config including the newly installed project $config = $composer->getConfig(); - list($preferSource, $preferDist) = $this->getPreferredInstallOptions($config, $input); + [$preferSource, $preferDist] = $this->getPreferredInstallOptions($config, $input); // install dependencies of the created project if ($noInstall === false) { @@ -300,7 +283,7 @@ EOT ) { $finder = new Finder(); $finder->depth(0)->directories()->in(Platform::getCwd())->ignoreVCS(false)->ignoreDotFiles(false); - foreach (array('.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg', '.fslckout', '_FOSSIL_') as $vcsName) { + foreach (['.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg', '.fslckout', '_FOSSIL_'] as $vcsName) { $finder->name($vcsName); } @@ -349,30 +332,18 @@ EOT } /** - * @param string $packageName - * @param string|null $directory - * @param string|null $packageVersion - * @param string|null $stability - * @param bool $preferSource - * @param bool $preferDist - * @param bool $installDevPackages * @param array|null $repositories - * @param bool $disablePlugins - * @param bool $disableScripts - * @param bool $noProgress - * @param bool $secureHttp * - * @return bool * @throws \Exception */ - protected function installRootPackage(IOInterface $io, Config $config, string $packageName, PlatformRequirementFilterInterface $platformRequirementFilter, ?string $directory = null, ?string $packageVersion = null, ?string $stability = 'stable', bool $preferSource = false, bool $preferDist = false, bool $installDevPackages = false, array $repositories = null, bool $disablePlugins = false, bool $disableScripts = false, bool $noProgress = false, bool $secureHttp = true): bool + protected function installRootPackage(IOInterface $io, Config $config, string $packageName, PlatformRequirementFilterInterface $platformRequirementFilter, ?string $directory = null, ?string $packageVersion = null, ?string $stability = 'stable', bool $preferSource = false, bool $preferDist = false, bool $installDevPackages = false, ?array $repositories = null, bool $disablePlugins = false, bool $disableScripts = false, bool $noProgress = false, bool $secureHttp = true): bool { if (!$secureHttp) { - $config->merge(array('config' => array('secure-http' => false)), Config::SOURCE_COMMAND); + $config->merge(['config' => ['secure-http' => false]], Config::SOURCE_COMMAND); } $parser = new VersionParser(); - $requirements = $parser->parseNameVersionPairs(array($packageName)); + $requirements = $parser->parseNameVersionPairs([$packageName]); $name = strtolower($requirements[0]['name']); if (!$packageVersion && isset($requirements[0]['version'])) { $packageVersion = $requirements[0]['version']; @@ -428,8 +399,8 @@ EOT foreach ($repositories as $repo) { $repoConfig = RepositoryFactory::configFromString($io, $config, $repo, true); if ( - (isset($repoConfig['packagist']) && $repoConfig === array('packagist' => false)) - || (isset($repoConfig['packagist.org']) && $repoConfig === array('packagist.org' => false)) + (isset($repoConfig['packagist']) && $repoConfig === ['packagist' => false]) + || (isset($repoConfig['packagist.org']) && $repoConfig === ['packagist.org' => false]) ) { continue; } @@ -438,7 +409,7 @@ EOT } $platformOverrides = $config->get('platform'); - $platformRepo = new PlatformRepository(array(), $platformOverrides); + $platformRepo = new PlatformRepository([], $platformOverrides); // find the latest version if there are multiple $versionSelector = new VersionSelector($repositorySet, $platformRepo); @@ -487,7 +458,7 @@ EOT $im = $composer->getInstallationManager(); $im->setOutputProgress(!$noProgress); $im->addInstaller($projectInstaller); - $im->execute(new InstalledArrayRepository(), array(new InstallOperation($package))); + $im->execute(new InstalledArrayRepository(), [new InstallOperation($package)]); $im->notifyInstalls($io); // collect suggestions diff --git a/src/Composer/Command/DependsCommand.php b/src/Composer/Command/DependsCommand.php index 17425fb89..ea0b0eab6 100644 --- a/src/Composer/Command/DependsCommand.php +++ b/src/Composer/Command/DependsCommand.php @@ -26,21 +26,19 @@ class DependsCommand extends BaseDependencyCommand /** * Configure command metadata. - * - * @return void */ protected function configure(): void { $this ->setName('depends') - ->setAliases(array('why')) + ->setAliases(['why']) ->setDescription('Shows which packages cause the given package to be installed') - ->setDefinition(array( + ->setDefinition([ new InputArgument(self::ARGUMENT_PACKAGE, InputArgument::REQUIRED, 'Package to inspect', null, $this->suggestInstalledPackage(true, true)), new InputOption(self::OPTION_RECURSIVE, 'r', InputOption::VALUE_NONE, 'Recursively resolves up to the root package'), new InputOption(self::OPTION_TREE, 't', InputOption::VALUE_NONE, 'Prints the results as a nested tree'), new InputOption('locked', null, InputOption::VALUE_NONE, 'Read dependency information from composer.lock'), - )) + ]) ->setHelp( <<merge(array('config' => array('secure-http' => false)), Config::SOURCE_COMMAND); + $config->merge(['config' => ['secure-http' => false]], Config::SOURCE_COMMAND); $config->prohibitUrlByConfig('http://repo.packagist.org', new NullIO); $this->httpDownloader = Factory::createHttpDownloader($io, $config); @@ -162,8 +159,8 @@ EOT $io->write(sprintf('Composer version: %s', Composer::getVersion())); - $platformOverrides = $config->get('platform') ?: array(); - $platformRepo = new PlatformRepository(array(), $platformOverrides); + $platformOverrides = $config->get('platform') ?: []; + $platformRepo = new PlatformRepository([], $platformOverrides); $phpPkg = $platformRepo->findPackage('php', '*'); $phpVersion = $phpPkg->getPrettyVersion(); if ($phpPkg instanceof CompletePackageInterface && false !== strpos($phpPkg->getDescription(), 'overridden')) { @@ -182,7 +179,7 @@ EOT $finder = new ExecutableFinder; $hasSystemUnzip = (bool) $finder->find('unzip'); $bin7zip = ''; - if ($hasSystem7zip = (bool) $finder->find('7z', null, array('C:\Program Files\7-Zip'))) { + if ($hasSystem7zip = (bool) $finder->find('7z', null, ['C:\Program Files\7-Zip'])) { $bin7zip = '7z'; } if (!Platform::isWindows() && !$hasSystem7zip && $hasSystem7zip = (bool) $finder->find('7zz')) { @@ -205,13 +202,13 @@ EOT private function checkComposerSchema() { $validator = new ConfigValidator($this->getIO()); - list($errors, , $warnings) = $validator->validate(Factory::getComposerFile()); + [$errors, , $warnings] = $validator->validate(Factory::getComposerFile()); if ($errors || $warnings) { - $messages = array( + $messages = [ 'error' => $errors, 'warning' => $warnings, - ); + ]; $output = ''; foreach ($messages as $style => $msgs) { @@ -250,8 +247,6 @@ EOT } /** - * @param string $proto - * * @return string|string[]|true */ private function checkHttp(string $proto, Config $config) @@ -261,7 +256,7 @@ EOT return $result; } - $result = array(); + $result = []; if ($proto === 'https' && $config->get('disable-tls') === true) { $tlsWarning = 'Composer is configured to disable SSL/TLS protection. This will leave remote HTTPS requests vulnerable to Man-In-The-Middle attacks.'; } @@ -319,9 +314,6 @@ EOT } /** - * @param string $domain - * @param string $token - * * @return string|true|\Exception */ private function checkGithubOauth(string $domain, string $token) @@ -335,9 +327,9 @@ EOT try { $url = $domain === 'github.com' ? 'https://api.'.$domain.'/' : 'https://'.$domain.'/api/v3/'; - $this->httpDownloader->get($url, array( + $this->httpDownloader->get($url, [ 'retry-auth-failure' => false, - )); + ]); return true; } catch (\Exception $e) { @@ -350,12 +342,11 @@ EOT } /** - * @param string $domain * @param string $token * @throws TransportException * @return mixed|string */ - private function getGithubRateLimit(string $domain, string $token = null) + private function getGithubRateLimit(string $domain, ?string $token = null) { $result = $this->checkConnectivity(); if ($result !== true) { @@ -367,7 +358,7 @@ EOT } $url = $domain === 'github.com' ? 'https://api.'.$domain.'/rate_limit' : 'https://'.$domain.'/api/rate_limit'; - $data = $this->httpDownloader->get($url, array('retry-auth-failure' => false))->decodeJson(); + $data = $this->httpDownloader->get($url, ['retry-auth-failure' => false])->decodeJson(); return $data['resources']['core']; } @@ -397,7 +388,7 @@ EOT private function checkPubKeys(Config $config) { $home = $config->get('home'); - $errors = array(); + $errors = []; $io = $this->getIO(); if (file_exists($home.'/keys.tags.pub') && file_exists($home.'/keys.dev.pub')) { @@ -447,9 +438,6 @@ EOT return true; } - /** - * @return string - */ private function getCurlVersion(): string { if (extension_loaded('curl')) { @@ -469,8 +457,6 @@ EOT /** * @param bool|string|string[]|\Exception $result - * - * @return void */ private function outputResult($result): void { @@ -492,7 +478,7 @@ EOT $hadError = true; } else { if (!is_array($result)) { - $result = array($result); + $result = [$result]; } foreach ($result as $message) { if (false !== strpos($message, '')) { @@ -529,8 +515,8 @@ EOT }; // code below taken from getcomposer.org/installer, any changes should be made there and replicated here - $errors = array(); - $warnings = array(); + $errors = []; + $warnings = []; $displayIniMessage = false; $iniMessage = PHP_EOL.PHP_EOL.IniHelper::getMessage(); diff --git a/src/Composer/Command/DumpAutoloadCommand.php b/src/Composer/Command/DumpAutoloadCommand.php index 23a7e2782..c53c966a6 100644 --- a/src/Composer/Command/DumpAutoloadCommand.php +++ b/src/Composer/Command/DumpAutoloadCommand.php @@ -30,9 +30,9 @@ class DumpAutoloadCommand extends BaseCommand { $this ->setName('dump-autoload') - ->setAliases(array('dumpautoload')) + ->setAliases(['dumpautoload']) ->setDescription('Dumps the autoloader') - ->setDefinition(array( + ->setDefinition([ new InputOption('optimize', 'o', InputOption::VALUE_NONE, 'Optimizes PSR0 and PSR4 packages to be loaded with classmaps too, good for production.'), new InputOption('classmap-authoritative', 'a', InputOption::VALUE_NONE, 'Autoload classes from the classmap only. Implicitly enables `--optimize`.'), new InputOption('apcu', null, InputOption::VALUE_NONE, 'Use APCu to cache found/not-found classes.'), @@ -42,7 +42,7 @@ class DumpAutoloadCommand extends BaseCommand new InputOption('ignore-platform-req', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Ignore a specific platform requirement (php & ext- packages).'), new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore all platform requirements (php & ext- packages).'), new InputOption('strict-psr', null, InputOption::VALUE_NONE, 'Return a failed status code (1) if PSR-4 or PSR-0 mapping errors are present. Requires --optimize to work.'), - )) + ]) ->setHelp( <<php composer.phar dump-autoload diff --git a/src/Composer/Command/ExecCommand.php b/src/Composer/Command/ExecCommand.php index 3d18d3d52..abaa1aff3 100644 --- a/src/Composer/Command/ExecCommand.php +++ b/src/Composer/Command/ExecCommand.php @@ -30,7 +30,7 @@ class ExecCommand extends BaseCommand $this ->setName('exec') ->setDescription('Executes a vendored binary/script') - ->setDefinition(array( + ->setDefinition([ new InputOption('list', 'l', InputOption::VALUE_NONE), new InputArgument('binary', InputArgument::OPTIONAL, 'The binary to run, e.g. phpunit', null, function () { return $this->getBinaries(false); @@ -40,7 +40,7 @@ class ExecCommand extends BaseCommand InputArgument::IS_ARRAY | InputArgument::OPTIONAL, 'Arguments to pass to the binary. Use -- to separate from composer arguments' ), - )) + ]) ->setHelp( <<setName('fund') ->setDescription('Discover how to help fund the maintenance of your dependencies') - ->setDefinition(array( + ->setDefinition([ new InputOption('format', 'f', InputOption::VALUE_REQUIRED, 'Format of the output: text or json', 'text', ['text', 'json']), - )) + ]) ; } @@ -49,9 +46,9 @@ class FundCommand extends BaseCommand $repo = $composer->getRepositoryManager()->getLocalRepository(); $remoteRepos = new CompositeRepository($composer->getRepositoryManager()->getRepositories()); - $fundings = array(); + $fundings = []; - $packagesToLoad = array(); + $packagesToLoad = []; foreach ($repo->getPackages() as $package) { if ($package instanceof AliasPackage) { continue; @@ -60,7 +57,7 @@ class FundCommand extends BaseCommand } // load all packages dev versions in parallel - $result = $remoteRepos->loadPackages($packagesToLoad, array('dev' => BasePackage::STABILITY_DEV), array()); + $result = $remoteRepos->loadPackages($packagesToLoad, ['dev' => BasePackage::STABILITY_DEV], []); // collect funding data from default branches foreach ($result['packages'] as $package) { @@ -92,7 +89,7 @@ class FundCommand extends BaseCommand $io = $this->getIO(); $format = $input->getOption('format'); - if (!in_array($format, array('text', 'json'))) { + if (!in_array($format, ['text', 'json'])) { $io->writeError(sprintf('Unsupported format "%s". See help for supported formats.', $format)); return 1; @@ -137,7 +134,7 @@ class FundCommand extends BaseCommand private function insertFundingData(array $fundings, CompletePackageInterface $package): array { foreach ($package->getFunding() as $fundingOption) { - list($vendor, $packageName) = explode('/', $package->getPrettyName()); + [$vendor, $packageName] = explode('/', $package->getPrettyName()); // ignore malformed funding entries if (empty($fundingOption['url'])) { continue; diff --git a/src/Composer/Command/GlobalCommand.php b/src/Composer/Command/GlobalCommand.php index 8fc6ba9bb..1d8996624 100644 --- a/src/Composer/Command/GlobalCommand.php +++ b/src/Composer/Command/GlobalCommand.php @@ -51,18 +51,15 @@ class GlobalCommand extends BaseCommand } } - /** - * @return void - */ protected function configure(): void { $this ->setName('global') ->setDescription('Allows running commands in the global composer dir ($COMPOSER_HOME)') - ->setDefinition(array( + ->setDefinition([ new InputArgument('command-name', InputArgument::REQUIRED, ''), new InputArgument('args', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, ''), - )) + ]) ->setHelp( <<__toString()); - $args = array(); + $args = []; foreach ($tokens as $token) { if ($token && $token[0] !== '-') { $args[] = $token; diff --git a/src/Composer/Command/HomeCommand.php b/src/Composer/Command/HomeCommand.php index 8fcd2b78a..5aec6f4c1 100644 --- a/src/Composer/Command/HomeCommand.php +++ b/src/Composer/Command/HomeCommand.php @@ -32,20 +32,18 @@ class HomeCommand extends BaseCommand /** * @inheritDoc - * - * @return void */ protected function configure(): void { $this ->setName('browse') - ->setAliases(array('home')) + ->setAliases(['home']) ->setDescription('Opens the package\'s repository URL or homepage in your browser') - ->setDefinition(array( + ->setDefinition([ new InputArgument('packages', InputArgument::IS_ARRAY, 'Package(s) to browse to.', null, $this->suggestInstalledPackage()), new InputOption('homepage', 'H', InputOption::VALUE_NONE, 'Open the homepage instead of the repository URL.'), new InputOption('show', 's', InputOption::VALUE_NONE, 'Only show the homepage or repository URL.'), - )) + ]) ->setHelp( <<getArgument('packages'); if (count($packages) === 0) { $io->writeError('No package specified, opening homepage for the root package'); - $packages = array($this->requireComposer()->getPackage()->getName()); + $packages = [$this->requireComposer()->getPackage()->getName()]; } foreach ($packages as $packageName) { @@ -98,11 +96,6 @@ EOT return $return; } - /** - * @param bool $showHomepage - * @param bool $showOnly - * @return bool - */ private function handlePackage(CompletePackageInterface $package, bool $showHomepage, bool $showOnly): bool { $support = $package->getSupport(); @@ -126,9 +119,6 @@ EOT /** * opens a url in your system default browser - * - * @param string $url - * @return void */ private function openBrowser(string $url): void { @@ -166,8 +156,8 @@ EOT if ($composer) { return array_merge( - array(new RootPackageRepository(clone $composer->getPackage())), // root package - array($composer->getRepositoryManager()->getLocalRepository()), // installed packages + [new RootPackageRepository(clone $composer->getPackage())], // root package + [$composer->getRepositoryManager()->getLocalRepository()], // installed packages $composer->getRepositoryManager()->getRepositories() // remotes ); } diff --git a/src/Composer/Command/InitCommand.php b/src/Composer/Command/InitCommand.php index c2ca0d24d..7cd11e666 100644 --- a/src/Composer/Command/InitCommand.php +++ b/src/Composer/Command/InitCommand.php @@ -53,7 +53,7 @@ class InitCommand extends BaseCommand $this ->setName('init') ->setDescription('Creates a basic composer.json file in current directory') - ->setDefinition(array( + ->setDefinition([ new InputOption('name', null, InputOption::VALUE_REQUIRED, 'Name of the package'), new InputOption('description', null, InputOption::VALUE_REQUIRED, 'Description of package'), new InputOption('author', null, InputOption::VALUE_REQUIRED, 'Author name of package'), @@ -65,7 +65,7 @@ class InitCommand extends BaseCommand new InputOption('license', 'l', InputOption::VALUE_REQUIRED, 'License of package'), new InputOption('repository', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Add custom repositories, either by URL or using JSON arrays'), new InputOption('autoload', 'a', InputOption::VALUE_REQUIRED, 'Add PSR-4 autoload mapping. Maps your package\'s namespace to the provided directory. (Expects a relative path, e.g. src/)'), - )) + ]) ->setHelp( <<init command creates a basic composer.json file @@ -86,7 +86,7 @@ EOT { $io = $this->getIO(); - $allowlist = array('name', 'description', 'author', 'type', 'homepage', 'require', 'require-dev', 'stability', 'license', 'autoload'); + $allowlist = ['name', 'description', 'author', 'type', 'homepage', 'require', 'require-dev', 'stability', 'license', 'autoload']; $options = array_filter(array_intersect_key($input->getOptions(), array_flip($allowlist))); if (isset($options['name']) && !Preg::isMatch('{^[a-z0-9_.-]+/[a-z0-9_.-]+$}D', $options['name'])) { @@ -114,13 +114,13 @@ EOT } $options['require'] = isset($options['require']) ? $this->formatRequirements($options['require']) : new \stdClass; - if (array() === $options['require']) { + if ([] === $options['require']) { $options['require'] = new \stdClass; } if (isset($options['require-dev'])) { $options['require-dev'] = $this->formatRequirements($options['require-dev']); - if (array() === $options['require-dev']) { + if ([] === $options['require-dev']) { $options['require-dev'] = new \stdClass; } } @@ -130,18 +130,18 @@ EOT if (isset($options['autoload'])) { $autoloadPath = $options['autoload']; $namespace = $this->namespaceFromPackageName((string) $input->getOption('name')); - $options['autoload'] = (object) array( - 'psr-4' => array( + $options['autoload'] = (object) [ + 'psr-4' => [ $namespace . '\\' => $autoloadPath, - ), - ); + ], + ]; } $file = new JsonFile(Factory::getComposerFile()); $json = JsonFile::encode($options); if ($input->isInteractive()) { - $io->writeError(array('', $json, '')); + $io->writeError(['', $json, '']); if (!$io->askConfirmation('Do you confirm generation [yes]? ')) { $io->writeError('Command aborted'); @@ -229,13 +229,13 @@ EOT $io->loadConfiguration($config); $repoManager = RepositoryFactory::manager($io, $config); - $repos = array(new PlatformRepository); + $repos = [new PlatformRepository]; $createDefaultPackagistRepo = true; foreach ($repositories as $repo) { $repoConfig = RepositoryFactory::configFromString($io, $config, $repo, true); if ( - (isset($repoConfig['packagist']) && $repoConfig === array('packagist' => false)) - || (isset($repoConfig['packagist.org']) && $repoConfig === array('packagist.org' => false)) + (isset($repoConfig['packagist']) && $repoConfig === ['packagist' => false]) + || (isset($repoConfig['packagist.org']) && $repoConfig === ['packagist.org' => false]) ) { $createDefaultPackagistRepo = false; continue; @@ -244,28 +244,28 @@ EOT } if ($createDefaultPackagistRepo) { - $repos[] = RepositoryFactory::createRepo($io, $config, array( + $repos[] = RepositoryFactory::createRepo($io, $config, [ 'type' => 'composer', 'url' => 'https://repo.packagist.org', - ), $repoManager); + ], $repoManager); } $this->repos = new CompositeRepository($repos); unset($repos, $config, $repositories); } - $io->writeError(array( + $io->writeError([ '', $formatter->formatBlock('Welcome to the Composer config generator', 'bg=blue;fg=white', true), '', - )); + ]); // namespace - $io->writeError(array( + $io->writeError([ '', 'This command will guide you through creating your composer.json config.', '', - )); + ]); $cwd = realpath("."); @@ -397,7 +397,7 @@ EOT ); $input->setOption('license', $license); - $io->writeError(array('', 'Define your dependencies.', '')); + $io->writeError(['', 'Define your dependencies.', '']); // prepare to resolve dependencies $repos = $this->getRepos(); @@ -414,7 +414,7 @@ EOT $question = 'Would you like to define your dependencies (require) interactively [yes]? '; $require = $input->getOption('require'); - $requirements = array(); + $requirements = []; if (count($require) > 0 || $io->askConfirmation($question)) { $requirements = $this->determineRequirements($input, $output, $require, $platformRepo, $preferredStability); } @@ -422,7 +422,7 @@ EOT $question = 'Would you like to define your dev dependencies (require-dev) interactively [yes]? '; $requireDev = $input->getOption('require-dev'); - $devRequirements = array(); + $devRequirements = []; if (count($requireDev) > 0 || $io->askConfirmation($question)) { $devRequirements = $this->determineRequirements($input, $output, $requireDev, $platformRepo, $preferredStability); } @@ -460,7 +460,6 @@ EOT } /** - * @param string $author * @return array{name: string, email: string|null} */ private function parseAuthorString(string $author): array @@ -471,10 +470,10 @@ EOT throw new \InvalidArgumentException('Invalid email "'.$match['email'].'"'); } - return array( + return [ 'name' => trim($match['name']), 'email' => $hasEmail ? $match['email'] : null, - ); + ]; } throw new \InvalidArgumentException( @@ -484,8 +483,6 @@ EOT } /** - * @param string $author - * * @return array */ protected function formatAuthors(string $author): array @@ -495,17 +492,13 @@ EOT unset($author['email']); } - return array($author); + return [$author]; } /** * Extract namespace from package's vendor name. * * new_projects.acme-extra/package-name becomes "NewProjectsAcmeExtra\PackageName" - * - * @param string $packageName - * - * @return string|null */ public function namespaceFromPackageName(string $packageName): ?string { @@ -538,11 +531,11 @@ EOT $finder = new ExecutableFinder(); $gitBin = $finder->find('git'); - $cmd = new Process(array($gitBin, 'config', '-l')); + $cmd = new Process([$gitBin, 'config', '-l']); $cmd->run(); if ($cmd->isSuccessful()) { - $this->gitConfig = array(); + $this->gitConfig = []; Preg::matchAll('{^([^=]+)=(.*)$}m', $cmd->getOutput(), $matches); foreach ($matches[1] as $key => $match) { $this->gitConfig[$match] = $matches[2][$key]; @@ -551,7 +544,7 @@ EOT return $this->gitConfig; } - return $this->gitConfig = array(); + return $this->gitConfig = []; } /** @@ -564,11 +557,6 @@ EOT * "/$vendor/" * "/$vendor/*" * "$vendor/*" - * - * @param string $ignoreFile - * @param string $vendor - * - * @return bool */ protected function hasVendorIgnore(string $ignoreFile, string $vendor = 'vendor'): bool { @@ -588,12 +576,6 @@ EOT return false; } - /** - * @param string $ignoreFile - * @param string $vendor - * - * @return void - */ protected function addVendorIgnore(string $ignoreFile, string $vendor = '/vendor/'): void { $contents = ""; @@ -608,11 +590,6 @@ EOT file_put_contents($ignoreFile, $contents . $vendor. "\n"); } - /** - * @param string $email - * - * @return bool - */ protected function isValidEmail(string $email): bool { // assume it's valid if we can't validate it @@ -623,29 +600,23 @@ EOT return false !== filter_var($email, FILTER_VALIDATE_EMAIL); } - /** - * @return void - */ private function updateDependencies(OutputInterface $output): void { try { $updateCommand = $this->getApplication()->find('update'); $this->getApplication()->resetComposer(); - $updateCommand->run(new ArrayInput(array()), $output); + $updateCommand->run(new ArrayInput([]), $output); } catch (\Exception $e) { $this->getIO()->writeError('Could not update dependencies. Run `composer update` to see more information.'); } } - /** - * @return void - */ private function runDumpAutoloadCommand(OutputInterface $output): void { try { $command = $this->getApplication()->find('dump-autoload'); $this->getApplication()->resetComposer(); - $command->run(new ArrayInput(array()), $output); + $command->run(new ArrayInput([]), $output); } catch (\Exception $e) { $this->getIO()->writeError('Could not run dump-autoload.'); } @@ -653,12 +624,11 @@ EOT /** * @param array> $options - * @return bool */ private function hasDependencies(array $options): bool { $requires = (array) $options['require']; - $devRequires = isset($options['require-dev']) ? (array) $options['require-dev'] : array(); + $devRequires = isset($options['require-dev']) ? (array) $options['require-dev'] : []; return !empty($requires) || !empty($devRequires); } diff --git a/src/Composer/Command/InstallCommand.php b/src/Composer/Command/InstallCommand.php index 0e5dbdf9b..87d7986da 100644 --- a/src/Composer/Command/InstallCommand.php +++ b/src/Composer/Command/InstallCommand.php @@ -39,9 +39,9 @@ class InstallCommand extends BaseCommand { $this ->setName('install') - ->setAliases(array('i')) + ->setAliases(['i']) ->setDescription('Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json') - ->setDefinition(array( + ->setDefinition([ new InputOption('prefer-source', null, InputOption::VALUE_NONE, 'Forces installation from package sources when possible, including VCS information.'), new InputOption('prefer-dist', null, InputOption::VALUE_NONE, 'Forces installation from package dist (default behavior).'), new InputOption('prefer-install', null, InputOption::VALUE_REQUIRED, 'Forces installation from package dist|source|auto (auto chooses source for dev versions, dist for the rest).', null, $this->suggestPreferInstall()), @@ -62,7 +62,7 @@ class InstallCommand extends BaseCommand new InputOption('ignore-platform-req', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Ignore a specific platform requirement (php & ext- packages).'), new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore all platform requirements (php & ext- packages).'), new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, 'Should not be provided, use composer require instead to add a given package to composer.json.'), - )) + ]) ->setHelp( <<install command reads the composer.lock file from @@ -113,7 +113,7 @@ EOT $install = Installer::create($io, $composer); $config = $composer->getConfig(); - list($preferSource, $preferDist) = $this->getPreferredInstallOptions($config, $input); + [$preferSource, $preferDist] = $this->getPreferredInstallOptions($config, $input); $optimize = $input->getOption('optimize-autoloader') || $config->get('optimize-autoloader'); $authoritative = $input->getOption('classmap-authoritative') || $config->get('classmap-authoritative'); diff --git a/src/Composer/Command/LicensesCommand.php b/src/Composer/Command/LicensesCommand.php index 7b7069f66..9305eceee 100644 --- a/src/Composer/Command/LicensesCommand.php +++ b/src/Composer/Command/LicensesCommand.php @@ -17,8 +17,6 @@ use Composer\Json\JsonFile; use Composer\Package\CompletePackageInterface; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; -use Composer\Package\PackageInterface; -use Composer\Repository\RepositoryInterface; use Composer\Repository\RepositoryUtils; use Composer\Util\PackageInfo; use Composer\Util\PackageSorter; @@ -33,18 +31,15 @@ use Symfony\Component\Console\Style\SymfonyStyle; */ class LicensesCommand extends BaseCommand { - /** - * @return void - */ protected function configure(): void { $this ->setName('licenses') ->setDescription('Shows information about licenses of dependencies') - ->setDefinition(array( + ->setDefinition([ new InputOption('format', 'f', InputOption::VALUE_REQUIRED, 'Format of the output: text, json or summary', 'text', ['text', 'json', 'summary']), new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables search in require-dev packages.'), - )) + ]) ->setHelp( <<setStyle('compact'); - $table->setHeaders(array('Name', 'Version', 'Licenses')); + $table->setHeaders(['Name', 'Version', 'Licenses']); foreach ($packages as $package) { $link = PackageInfo::getViewSourceOrHomepageUrl($package); if ($link !== null) { @@ -94,36 +89,36 @@ EOT $name = $package->getPrettyName(); } - $table->addRow(array( + $table->addRow([ $name, $package->getFullPrettyVersion(), - implode(', ', $package instanceof CompletePackageInterface ? $package->getLicense() : array()) ?: 'none', - )); + implode(', ', $package instanceof CompletePackageInterface ? $package->getLicense() : []) ?: 'none', + ]); } $table->render(); break; case 'json': - $dependencies = array(); + $dependencies = []; foreach ($packages as $package) { - $dependencies[$package->getPrettyName()] = array( + $dependencies[$package->getPrettyName()] = [ 'version' => $package->getFullPrettyVersion(), - 'license' => $package instanceof CompletePackageInterface ? $package->getLicense() : array(), - ); + 'license' => $package instanceof CompletePackageInterface ? $package->getLicense() : [], + ]; } - $io->write(JsonFile::encode(array( + $io->write(JsonFile::encode([ 'name' => $root->getPrettyName(), 'version' => $root->getFullPrettyVersion(), 'license' => $root->getLicense(), 'dependencies' => $dependencies, - ))); + ])); break; case 'summary': - $usedLicenses = array(); + $usedLicenses = []; foreach ($packages as $package) { - $licenses = $package instanceof CompletePackageInterface ? $package->getLicense() : array(); + $licenses = $package instanceof CompletePackageInterface ? $package->getLicense() : []; if (count($licenses) === 0) { $licenses[] = 'none'; } @@ -138,14 +133,14 @@ EOT // Sort licenses so that the most used license will appear first arsort($usedLicenses, SORT_NUMERIC); - $rows = array(); + $rows = []; foreach ($usedLicenses as $usedLicense => $numberOfDependencies) { - $rows[] = array($usedLicense, $numberOfDependencies); + $rows[] = [$usedLicense, $numberOfDependencies]; } $symfonyIo = new SymfonyStyle($input, $output); $symfonyIo->table( - array('License', 'Number of dependencies'), + ['License', 'Number of dependencies'], $rows ); break; diff --git a/src/Composer/Command/OutdatedCommand.php b/src/Composer/Command/OutdatedCommand.php index b711f8ca0..05f22ebbb 100644 --- a/src/Composer/Command/OutdatedCommand.php +++ b/src/Composer/Command/OutdatedCommand.php @@ -25,15 +25,12 @@ class OutdatedCommand extends BaseCommand { use CompletionTrait; - /** - * @return void - */ protected function configure(): void { $this ->setName('outdated') ->setDescription('Shows a list of installed packages that have updates available, including their latest version') - ->setDefinition(array( + ->setDefinition([ new InputArgument('package', InputArgument::OPTIONAL, 'Package to inspect. Or a name including a wildcard (*) to filter lists of packages instead.', null, $this->suggestInstalledPackage(false)), new InputOption('outdated', 'o', InputOption::VALUE_NONE, 'Show only packages that are outdated (this is the default, but present here for compat with `show`'), new InputOption('all', 'a', InputOption::VALUE_NONE, 'Show all installed packages with their latest versions'), @@ -48,7 +45,7 @@ class OutdatedCommand extends BaseCommand new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables search in require-dev packages.'), new InputOption('ignore-platform-req', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Ignore a specific platform requirement (php & ext- packages). Use with the --outdated option'), new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore all platform requirements (php & ext- packages). Use with the --outdated option'), - )) + ]) ->setHelp( << 'show', '--latest' => true, - ); + ]; if (!$input->getOption('all')) { $args['--outdated'] = true; } diff --git a/src/Composer/Command/PackageDiscoveryTrait.php b/src/Composer/Command/PackageDiscoveryTrait.php index bc84a9c6f..a7cd22c42 100644 --- a/src/Composer/Command/PackageDiscoveryTrait.php +++ b/src/Composer/Command/PackageDiscoveryTrait.php @@ -39,14 +39,11 @@ trait PackageDiscoveryTrait /** @var RepositorySet[] */ private $repositorySets; - /** - * @return CompositeRepository - */ protected function getRepos(): CompositeRepository { if (null === $this->repos) { $this->repos = new CompositeRepository(array_merge( - array(new PlatformRepository), + [new PlatformRepository], RepositoryFactory::defaultReposWithDefaultManager($this->getIO()) )); } @@ -89,11 +86,11 @@ trait PackageDiscoveryTrait * @return array * @throws \Exception */ - final protected function determineRequirements(InputInterface $input, OutputInterface $output, array $requires = array(), ?PlatformRepository $platformRepo = null, string $preferredStability = 'stable', bool $checkProvidedVersions = true, bool $fixed = false): array + final protected function determineRequirements(InputInterface $input, OutputInterface $output, array $requires = [], ?PlatformRepository $platformRepo = null, string $preferredStability = 'stable', bool $checkProvidedVersions = true, bool $fixed = false): array { if (count($requires) > 0) { $requires = $this->normalizeRequirements($requires); - $result = array(); + $result = []; $io = $this->getIO(); foreach ($requires as $requirement) { @@ -103,7 +100,7 @@ trait PackageDiscoveryTrait if (!isset($requirement['version'])) { // determine the best version automatically - list($name, $version) = $this->findBestVersionAndNameForPackage($input, $requirement['name'], $platformRepo, $preferredStability, $fixed); + [$name, $version] = $this->findBestVersionAndNameForPackage($input, $requirement['name'], $platformRepo, $preferredStability, $fixed); $requirement['version'] = $version; // replace package name from packagist.org @@ -130,7 +127,7 @@ trait PackageDiscoveryTrait if (null !== $composer) { $installedRepo = $composer->getRepositoryManager()->getLocalRepository(); } - $existingPackages = array(); + $existingPackages = []; if (null !== $installedRepo) { foreach ($installedRepo->getPackages() as $package) { $existingPackages[] = $package->getName(); @@ -163,10 +160,10 @@ trait PackageDiscoveryTrait if (!$exactMatch) { $providers = $this->getRepos()->getProviders($package); if (count($providers) > 0) { - array_unshift($matches, array('name' => $package, 'description' => '')); + array_unshift($matches, ['name' => $package, 'description' => '']); } - $choices = array(); + $choices = []; foreach ($matches as $position => $foundPackage) { $abandoned = ''; if (isset($foundPackage['abandoned'])) { @@ -181,11 +178,11 @@ trait PackageDiscoveryTrait $choices[] = sprintf(' %5s %s %s', "[$position]", $foundPackage['name'], $abandoned); } - $io->writeError(array( + $io->writeError([ '', sprintf('Found %s packages matching %s', count($matches), $package), '', - )); + ]); $io->writeError($choices); $io->writeError(''); @@ -242,7 +239,7 @@ trait PackageDiscoveryTrait ); if (false === $constraint) { - list(, $constraint) = $this->findBestVersionAndNameForPackage($input, $package, $platformRepo, $preferredStability); + [, $constraint] = $this->findBestVersionAndNameForPackage($input, $package, $platformRepo, $preferredStability); $io->writeError(sprintf( 'Using version %s for %s', @@ -292,7 +289,7 @@ trait PackageDiscoveryTrait // platform packages can not be found in the pool in versions other than the local platform's has // so if platform reqs are ignored we just take the user's word for it if ($platformRequirementFilter->isIgnored($name)) { - return array($name, '*'); + return [$name, '*']; } // Check if it is a virtual package provided by others @@ -308,7 +305,7 @@ trait PackageDiscoveryTrait }, 3, '*'); } - return array($name, $constraint); + return [$name, $constraint]; } // Check whether the package requirements were the problem @@ -371,10 +368,10 @@ trait PackageDiscoveryTrait )); } - return array( + return [ $package->getPrettyName(), $fixed ? $package->getPrettyVersion() : $versionSelector->findRecommendedRequireVersion($package), - ); + ]; } /** @@ -393,9 +390,9 @@ trait PackageDiscoveryTrait } // ignore search errors - return array(); + return []; } - $similarPackages = array(); + $similarPackages = []; $installedRepo = $this->requireComposer()->getRepositoryManager()->getLocalRepository(); @@ -413,7 +410,7 @@ trait PackageDiscoveryTrait private function getPlatformExceptionDetails(PackageInterface $candidate, ?PlatformRepository $platformRepo = null): string { - $details = array(); + $details = []; if (null === $platformRepo) { return ''; } diff --git a/src/Composer/Command/ProhibitsCommand.php b/src/Composer/Command/ProhibitsCommand.php index 8300ccf70..06d03a8ce 100644 --- a/src/Composer/Command/ProhibitsCommand.php +++ b/src/Composer/Command/ProhibitsCommand.php @@ -26,22 +26,20 @@ class ProhibitsCommand extends BaseDependencyCommand /** * Configure command metadata. - * - * @return void */ protected function configure(): void { $this ->setName('prohibits') - ->setAliases(array('why-not')) + ->setAliases(['why-not']) ->setDescription('Shows which packages prevent the given package from being installed') - ->setDefinition(array( + ->setDefinition([ new InputArgument(self::ARGUMENT_PACKAGE, InputArgument::REQUIRED, 'Package to inspect', null, $this->suggestAvailablePackage()), new InputArgument(self::ARGUMENT_CONSTRAINT, InputArgument::REQUIRED, 'Version constraint, which version you expected to be installed'), new InputOption(self::OPTION_RECURSIVE, 'r', InputOption::VALUE_NONE, 'Recursively resolves up to the root package'), new InputOption(self::OPTION_TREE, 't', InputOption::VALUE_NONE, 'Prints the results as a nested tree'), new InputOption('locked', null, InputOption::VALUE_NONE, 'Read dependency information from composer.lock'), - )) + ]) ->setHelp( <<setName('reinstall') ->setDescription('Uninstalls and reinstalls the given package names') - ->setDefinition(array( + ->setDefinition([ new InputOption('prefer-source', null, InputOption::VALUE_NONE, 'Forces installation from package sources when possible, including VCS information.'), new InputOption('prefer-dist', null, InputOption::VALUE_NONE, 'Forces installation from package dist (default behavior).'), new InputOption('prefer-install', null, InputOption::VALUE_REQUIRED, 'Forces installation from package dist|source|auto (auto chooses source for dev versions, dist for the rest).', null, $this->suggestPreferInstall()), @@ -55,7 +52,7 @@ class ReinstallCommand extends BaseCommand new InputOption('ignore-platform-req', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Ignore a specific platform requirement (php & ext- packages).'), new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore all platform requirements (php & ext- packages).'), new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::REQUIRED, 'List of package names to reinstall, can include a wildcard (*) to match any substring.', null, $this->suggestInstalledPackage(false)), - )) + ]) ->setHelp( <<reinstall command looks up installed packages by name, @@ -78,8 +75,8 @@ EOT $composer = $this->requireComposer(); $localRepo = $composer->getRepositoryManager()->getLocalRepository(); - $packagesToReinstall = array(); - $packageNamesToReinstall = array(); + $packagesToReinstall = []; + $packageNamesToReinstall = []; foreach ($input->getArgument('packages') as $pattern) { $patternRegexp = BasePackage::packageNameToRegexp($pattern); $matched = false; @@ -102,7 +99,7 @@ EOT return 1; } - $uninstallOperations = array(); + $uninstallOperations = []; foreach ($packagesToReinstall as $package) { $uninstallOperations[] = new UninstallOperation($package); } @@ -119,7 +116,7 @@ EOT $installOperations = $transaction->getOperations(); // reverse-sort the uninstalls based on the install order - $installOrder = array(); + $installOrder = []; foreach ($installOperations as $index => $op) { if ($op instanceof InstallOperation && !$op->getPackage() instanceof AliasPackage) { $installOrder[$op->getPackage()->getName()] = $index; @@ -134,7 +131,7 @@ EOT $eventDispatcher->dispatch($commandEvent->getName(), $commandEvent); $config = $composer->getConfig(); - list($preferSource, $preferDist) = $this->getPreferredInstallOptions($config, $input); + [$preferSource, $preferDist] = $this->getPreferredInstallOptions($config, $input); $installationManager = $composer->getInstallationManager(); $downloadManager = $composer->getDownloadManager(); diff --git a/src/Composer/Command/RemoveCommand.php b/src/Composer/Command/RemoveCommand.php index 73a28ff6b..eb1757b47 100644 --- a/src/Composer/Command/RemoveCommand.php +++ b/src/Composer/Command/RemoveCommand.php @@ -43,7 +43,7 @@ class RemoveCommand extends BaseCommand $this ->setName('remove') ->setDescription('Removes a package from the require or require-dev') - ->setDefinition(array( + ->setDefinition([ new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::REQUIRED, 'Packages that should be removed.', null, $this->suggestRootRequirement()), new InputOption('dev', null, InputOption::VALUE_NONE, 'Removes a package from the require-dev section.'), new InputOption('dry-run', null, InputOption::VALUE_NONE, 'Outputs the operations but will not execute anything (implicitly enables --verbose).'), @@ -64,7 +64,7 @@ class RemoveCommand extends BaseCommand new InputOption('classmap-authoritative', 'a', InputOption::VALUE_NONE, 'Autoload classes from the classmap only. Implicitly enables `--optimize-autoloader`.'), new InputOption('apcu-autoloader', null, InputOption::VALUE_NONE, 'Use APCu to cache found/not-found classes.'), new InputOption('apcu-autoloader-prefix', null, InputOption::VALUE_REQUIRED, 'Use a custom prefix for the APCu autoloader cache. Implicitly enables --apcu-autoloader'), - )) + ]) ->setHelp( <<remove command removes a package from the current @@ -92,7 +92,7 @@ EOT $lockedPackages = $locker->getLockedRepository()->getPackages(); - $required = array(); + $required = []; foreach (array_merge($composer->getPackage()->getRequires(), $composer->getPackage()->getDevRequires()) as $link) { $required[$link->getTarget()] = true; } @@ -113,7 +113,7 @@ EOT } } while ($found); - $unused = array(); + $unused = []; foreach ($lockedPackages as $package) { $unused[] = $package->getName(); } @@ -154,7 +154,7 @@ EOT } // make sure name checks are done case insensitively - foreach (array('require', 'require-dev') as $linkType) { + foreach (['require', 'require-dev'] as $linkType) { if (isset($composer[$linkType])) { foreach ($composer[$linkType] as $name => $version) { $composer[$linkType][strtolower($name)] = $name; @@ -163,7 +163,7 @@ EOT } $dryRun = $input->getOption('dry-run'); - $toRemove = array(); + $toRemove = []; foreach ($packages as $package) { if (isset($composer[$type][$package])) { if ($dryRun) { @@ -224,10 +224,10 @@ EOT if ($dryRun) { $rootPackage = $composer->getPackage(); - $links = array( + $links = [ 'require' => $rootPackage->getRequires(), 'require-dev' => $rootPackage->getDevRequires(), - ); + ]; foreach ($toRemove as $type => $names) { foreach ($names as $name) { unset($links[$type][$name]); diff --git a/src/Composer/Command/RequireCommand.php b/src/Composer/Command/RequireCommand.php index b8014a9f5..83c33aed6 100644 --- a/src/Composer/Command/RequireCommand.php +++ b/src/Composer/Command/RequireCommand.php @@ -14,7 +14,6 @@ namespace Composer\Command; use Composer\DependencyResolver\Request; use Composer\Package\CompletePackageInterface; -use Composer\Package\PackageInterface; use Composer\Util\Filesystem; use Composer\Util\PackageSorter; use Seld\Signal\SignalHandler; @@ -71,9 +70,9 @@ class RequireCommand extends BaseCommand { $this ->setName('require') - ->setAliases(array('r')) + ->setAliases(['r']) ->setDescription('Adds required packages to your composer.json and installs them') - ->setDefinition(array( + ->setDefinition([ new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, 'Optional package name can also include a version constraint, e.g. foo/bar or foo/bar:1.0.0 or foo/bar=1.0.0 or "foo/bar 1.0.0"', null, $this->suggestAvailablePackageInclPlatform()), new InputOption('dev', null, InputOption::VALUE_NONE, 'Add requirement to require-dev.'), new InputOption('dry-run', null, InputOption::VALUE_NONE, 'Outputs the operations but will not execute anything (implicitly enables --verbose).'), @@ -101,7 +100,7 @@ class RequireCommand extends BaseCommand new InputOption('classmap-authoritative', 'a', InputOption::VALUE_NONE, 'Autoload classes from the classmap only. Implicitly enables `--optimize-autoloader`.'), new InputOption('apcu-autoloader', null, InputOption::VALUE_NONE, 'Use APCu to cache found/not-found classes.'), new InputOption('apcu-autoloader-prefix', null, InputOption::VALUE_REQUIRED, 'Use a custom prefix for the APCu autoloader cache. Implicitly enables --apcu-autoloader'), - )) + ]) ->setHelp( <<getConfig()->get('platform'); // initialize $this->repos as it is used by the PackageDiscoveryTrait $this->repos = new CompositeRepository(array_merge( - array($platformRepo = new PlatformRepository(array(), $platformOverrides)), + [$platformRepo = new PlatformRepository([], $platformOverrides)], $repos )); @@ -285,7 +284,7 @@ EOT } $input->setOption('dev', true); - list($requireKey, $removeKey) = array($removeKey, $requireKey); + [$requireKey, $removeKey] = [$removeKey, $requireKey]; } } } @@ -334,13 +333,12 @@ EOT /** * @param array $newRequirements - * @param string $requireKey * @return string[] */ private function getInconsistentRequireKeys(array $newRequirements, string $requireKey): array { $requireKeys = $this->getPackagesByRequireKey(); - $inconsistentRequirements = array(); + $inconsistentRequirements = []; foreach ($requireKeys as $package => $packageRequireKey) { if (!isset($newRequirements[$package])) { continue; @@ -359,8 +357,8 @@ EOT private function getPackagesByRequireKey(): array { $composerDefinition = $this->json->read(); - $require = array(); - $requireDev = array(); + $require = []; + $requireDev = []; if (isset($composerDefinition['require'])) { $require = $composerDefinition['require']; @@ -378,9 +376,6 @@ EOT /** * @param array $requirements - * @param string $requireKey - * @param string $removeKey - * @return int * @throws \Exception */ private function doUpdate(InputInterface $input, OutputInterface $output, IOInterface $io, array $requirements, string $requireKey, string $removeKey): int @@ -396,10 +391,10 @@ EOT if ($input->getOption('dry-run')) { $rootPackage = $composer->getPackage(); - $links = array( + $links = [ 'require' => $rootPackage->getRequires(), 'require-dev' => $rootPackage->getDevRequires(), - ); + ]; $loader = new ArrayLoader(); $newLinks = $loader->parseLinks($rootPackage->getName(), $rootPackage->getPrettyVersion(), BasePackage::$supportedLinkTypes[$requireKey]['method'], $requirements); $links[$requireKey] = array_merge($links[$requireKey], $newLinks); @@ -435,7 +430,7 @@ EOT $install = Installer::create($io, $composer); - list($preferSource, $preferDist) = $this->getPreferredInstallOptions($composer->getConfig(), $input); + [$preferSource, $preferDist] = $this->getPreferredInstallOptions($composer->getConfig(), $input); $install ->setDryRun($input->getOption('dry-run')) @@ -480,10 +475,6 @@ EOT /** * @param array $new - * @param string $requireKey - * @param string $removeKey - * @param bool $sortPackages - * @return bool */ private function updateFileCleanly(JsonFile $json, array $new, string $requireKey, string $removeKey, bool $sortPackages): bool { @@ -509,7 +500,6 @@ EOT protected function interact(InputInterface $input, OutputInterface $output): void { - } private function revertComposerFile(): void diff --git a/src/Composer/Command/RunScriptCommand.php b/src/Composer/Command/RunScriptCommand.php index 27aa32f4c..4e1bccd27 100644 --- a/src/Composer/Command/RunScriptCommand.php +++ b/src/Composer/Command/RunScriptCommand.php @@ -29,7 +29,7 @@ class RunScriptCommand extends BaseCommand /** * @var string[] Array with command events */ - protected $scriptEvents = array( + protected $scriptEvents = [ ScriptEvents::PRE_INSTALL_CMD, ScriptEvents::POST_INSTALL_CMD, ScriptEvents::PRE_UPDATE_CMD, @@ -42,18 +42,15 @@ class RunScriptCommand extends BaseCommand ScriptEvents::POST_ARCHIVE_CMD, ScriptEvents::PRE_AUTOLOAD_DUMP, ScriptEvents::POST_AUTOLOAD_DUMP, - ); + ]; - /** - * @return void - */ protected function configure(): void { $this ->setName('run-script') - ->setAliases(array('run')) + ->setAliases(['run']) ->setDescription('Runs the scripts defined in composer.json') - ->setDefinition(array( + ->setDefinition([ new InputArgument('script', InputArgument::OPTIONAL, 'Script name to run.', null, function () { return array_keys($this->requireComposer()->getPackage()->getScripts()); }), @@ -62,7 +59,7 @@ class RunScriptCommand extends BaseCommand new InputOption('dev', null, InputOption::VALUE_NONE, 'Sets the dev mode.'), new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables the dev mode.'), new InputOption('list', 'l', InputOption::VALUE_NONE, 'List scripts.'), - )) + ]) ->setHelp( <<run-script command runs scripts defined in composer.json: @@ -115,9 +112,6 @@ EOT return $composer->getEventDispatcher()->dispatchScript($script, $devMode, $args); } - /** - * @return int - */ protected function listScripts(OutputInterface $output): int { $scripts = $this->requireComposer()->getPackage()->getScripts(); @@ -128,7 +122,7 @@ EOT $io = $this->getIO(); $io->writeError('scripts:'); - $table = array(); + $table = []; foreach ($scripts as $name => $script) { $description = ''; try { @@ -139,7 +133,7 @@ EOT } catch (\Symfony\Component\Console\Exception\CommandNotFoundException $e) { // ignore scripts that have no command associated, like native Composer script listeners } - $table[] = array(' '.$name, $description); + $table[] = [' '.$name, $description]; } $this->renderTable($table, $output); diff --git a/src/Composer/Command/ScriptAliasCommand.php b/src/Composer/Command/ScriptAliasCommand.php index 9d3b9bf31..34a41e058 100644 --- a/src/Composer/Command/ScriptAliasCommand.php +++ b/src/Composer/Command/ScriptAliasCommand.php @@ -35,19 +35,16 @@ class ScriptAliasCommand extends BaseCommand parent::__construct(); } - /** - * @return void - */ protected function configure(): void { $this ->setName($this->script) ->setDescription($this->description) - ->setDefinition(array( + ->setDefinition([ new InputOption('dev', null, InputOption::VALUE_NONE, 'Sets the dev mode.'), new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables the dev mode.'), new InputArgument('args', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, ''), - )) + ]) ->setHelp( <<run-script command runs scripts defined in composer.json: diff --git a/src/Composer/Command/SearchCommand.php b/src/Composer/Command/SearchCommand.php index fd0e75b43..955251731 100644 --- a/src/Composer/Command/SearchCommand.php +++ b/src/Composer/Command/SearchCommand.php @@ -30,21 +30,18 @@ use Composer\Plugin\PluginEvents; */ class SearchCommand extends BaseCommand { - /** - * @return void - */ protected function configure(): void { $this ->setName('search') ->setDescription('Searches for packages') - ->setDefinition(array( + ->setDefinition([ new InputOption('only-name', 'N', InputOption::VALUE_NONE, 'Search only in package names'), new InputOption('only-vendor', 'O', InputOption::VALUE_NONE, 'Search only for vendor / organization names, returns only "vendor" as result'), new InputOption('type', 't', InputOption::VALUE_REQUIRED, 'Search for a specific package type'), new InputOption('format', 'f', InputOption::VALUE_REQUIRED, 'Format of the output: text or json', 'text', ['json', 'text']), new InputArgument('tokens', InputArgument::IS_ARRAY | InputArgument::REQUIRED, 'tokens to search for'), - )) + ]) ->setHelp( <<getIO(); $format = $input->getOption('format'); - if (!in_array($format, array('text', 'json'))) { + if (!in_array($format, ['text', 'json'])) { $io->writeError(sprintf('Unsupported format "%s". See help for supported formats.', $format)); return 1; } if (!($composer = $this->tryComposer())) { - $composer = Factory::create($this->getIO(), array(), $input->hasParameterOption('--no-plugins')); + $composer = Factory::create($this->getIO(), [], $input->hasParameterOption('--no-plugins')); } $localRepo = $composer->getRepositoryManager()->getLocalRepository(); - $installedRepo = new CompositeRepository(array($localRepo, $platformRepo)); - $repos = new CompositeRepository(array_merge(array($installedRepo), $composer->getRepositoryManager()->getRepositories())); + $installedRepo = new CompositeRepository([$localRepo, $platformRepo]); + $repos = new CompositeRepository(array_merge([$installedRepo], $composer->getRepositoryManager()->getRepositories())); $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'search', $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); diff --git a/src/Composer/Command/SelfUpdateCommand.php b/src/Composer/Command/SelfUpdateCommand.php index abbfb726e..518ca592e 100644 --- a/src/Composer/Command/SelfUpdateCommand.php +++ b/src/Composer/Command/SelfUpdateCommand.php @@ -39,16 +39,13 @@ class SelfUpdateCommand extends BaseCommand private const HOMEPAGE = 'getcomposer.org'; private const OLD_INSTALL_EXT = '-old.phar'; - /** - * @return void - */ protected function configure(): void { $this ->setName('self-update') - ->setAliases(array('selfupdate')) + ->setAliases(['selfupdate']) ->setDescription('Updates composer.phar to the latest version') - ->setDefinition(array( + ->setDefinition([ new InputOption('rollback', 'r', InputOption::VALUE_NONE, 'Revert to an older installation of composer'), new InputOption('clean-backups', null, InputOption::VALUE_NONE, 'Delete old backups during an update. This makes the current version of composer the only backup available after the update'), new InputArgument('version', InputArgument::OPTIONAL, 'The version to update to'), @@ -61,7 +58,7 @@ class SelfUpdateCommand extends BaseCommand new InputOption('2', null, InputOption::VALUE_NONE, 'Force an update to the stable channel, but only use 2.x versions'), new InputOption('2.2', null, InputOption::VALUE_NONE, 'Force an update to the stable channel, but only use 2.2.x LTS versions'), new InputOption('set-channel-only', null, InputOption::VALUE_NONE, 'Only store the channel as the default one and then exit'), - )) + ]) ->setHelp( <<self-update command checks getcomposer.org for newer @@ -361,7 +358,6 @@ TAGSPUBKEY } /** - * @return void * @throws \Exception */ protected function fetchKeys(IOInterface $io, Config $config): void @@ -410,9 +406,6 @@ TAGSPUBKEY } /** - * @param string $rollbackDir - * @param string $localFilename - * @return int * @throws FilesystemException */ protected function rollback(OutputInterface $output, string $rollbackDir, string $localFilename): int @@ -449,7 +442,7 @@ TAGSPUBKEY * @throws FilesystemException If the file cannot be moved * @return bool Whether the phar is valid and has been moved */ - protected function setLocalPhar(string $localFilename, string $newFilename, string $backupTarget = null): bool + protected function setLocalPhar(string $localFilename, string $newFilename, ?string $backupTarget = null): bool { $io = $this->getIO(); $perms = @fileperms($localFilename); @@ -498,12 +491,6 @@ TAGSPUBKEY } } - /** - * @param string $rollbackDir - * @param string|null $except - * - * @return void - */ protected function cleanBackups(string $rollbackDir, ?string $except = null): void { $finder = $this->getOldInstallationFinder($rollbackDir); @@ -533,10 +520,6 @@ TAGSPUBKEY return null; } - /** - * @param string $rollbackDir - * @return Finder - */ protected function getOldInstallationFinder(string $rollbackDir): Finder { return Finder::create() @@ -583,8 +566,6 @@ TAGSPUBKEY /** * Returns true if this is a non-admin Windows user account - * - * @return bool */ protected function isWindowsNonAdminUser(): bool { diff --git a/src/Composer/Command/ShowCommand.php b/src/Composer/Command/ShowCommand.php index 3471156ff..7506113ce 100644 --- a/src/Composer/Command/ShowCommand.php +++ b/src/Composer/Command/ShowCommand.php @@ -75,9 +75,9 @@ class ShowCommand extends BaseCommand { $this ->setName('show') - ->setAliases(array('info')) + ->setAliases(['info']) ->setDescription('Shows information about packages') - ->setDefinition(array( + ->setDefinition([ new InputArgument('package', InputArgument::OPTIONAL, 'Package to inspect. Or a name including a wildcard (*) to filter lists of packages instead.', null, $this->suggestPackageBasedOnMode()), new InputArgument('version', InputArgument::OPTIONAL, 'Version or version constraint to inspect'), new InputOption('all', null, InputOption::VALUE_NONE, 'List all packages'), @@ -101,7 +101,7 @@ class ShowCommand extends BaseCommand new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables search in require-dev packages.'), new InputOption('ignore-platform-req', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Ignore a specific platform requirement (php & ext- packages). Use with the --outdated option'), new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore all platform requirements (php & ext- packages). Use with the --outdated option'), - )) + ]) ->setHelp( <<getOption('format'); - if (!in_array($format, array('text', 'json'))) { + if (!in_array($format, ['text', 'json'])) { $io->writeError(sprintf('Unsupported format "%s". See help for supported formats.', $format)); return 1; @@ -188,11 +188,11 @@ EOT $platformReqFilter = $this->getPlatformRequirementFilter($input); // init repos - $platformOverrides = array(); + $platformOverrides = []; if ($composer) { $platformOverrides = $composer->getConfig()->get('platform'); } - $platformRepo = new PlatformRepository(array(), $platformOverrides); + $platformRepo = new PlatformRepository([], $platformOverrides); $lockedRepo = null; if ($input->getOption('self')) { @@ -205,11 +205,11 @@ EOT if ($input->getArgument('package')) { throw new \InvalidArgumentException('You cannot use --self together with a package name'); } - $repos = $installedRepo = new InstalledRepository(array(new RootPackageRepository($package))); + $repos = $installedRepo = new InstalledRepository([new RootPackageRepository($package)]); } elseif ($input->getOption('platform')) { - $repos = $installedRepo = new InstalledRepository(array($platformRepo)); + $repos = $installedRepo = new InstalledRepository([$platformRepo]); } elseif ($input->getOption('available')) { - $installedRepo = new InstalledRepository(array($platformRepo)); + $installedRepo = new InstalledRepository([$platformRepo]); if ($composer) { $repos = new CompositeRepository($composer->getRepositoryManager()->getRepositories()); $installedRepo->addRepository($composer->getRepositoryManager()->getLocalRepository()); @@ -223,36 +223,36 @@ EOT $locker = $composer->getLocker(); if ($locker->isLocked()) { $lockedRepo = $locker->getLockedRepository(true); - $installedRepo = new InstalledRepository(array($lockedRepo, $localRepo, $platformRepo)); + $installedRepo = new InstalledRepository([$lockedRepo, $localRepo, $platformRepo]); } else { - $installedRepo = new InstalledRepository(array($localRepo, $platformRepo)); + $installedRepo = new InstalledRepository([$localRepo, $platformRepo]); } - $repos = new CompositeRepository(array_merge(array(new FilterRepository($installedRepo, array('canonical' => false))), $composer->getRepositoryManager()->getRepositories())); + $repos = new CompositeRepository(array_merge([new FilterRepository($installedRepo, ['canonical' => false])], $composer->getRepositoryManager()->getRepositories())); } elseif ($input->getOption('all')) { $defaultRepos = RepositoryFactory::defaultReposWithDefaultManager($io); $io->writeError('No composer.json found in the current directory, showing available packages from ' . implode(', ', array_keys($defaultRepos))); - $installedRepo = new InstalledRepository(array($platformRepo)); - $repos = new CompositeRepository(array_merge(array($installedRepo), $defaultRepos)); + $installedRepo = new InstalledRepository([$platformRepo]); + $repos = new CompositeRepository(array_merge([$installedRepo], $defaultRepos)); } elseif ($input->getOption('locked')) { if (!$composer || !$composer->getLocker()->isLocked()) { throw new \UnexpectedValueException('A valid composer.json and composer.lock files is required to run this command with --locked'); } $locker = $composer->getLocker(); $lockedRepo = $locker->getLockedRepository(!$input->getOption('no-dev')); - $repos = $installedRepo = new InstalledRepository(array($lockedRepo)); + $repos = $installedRepo = new InstalledRepository([$lockedRepo]); } else { // --installed / default case if (!$composer) { $composer = $this->requireComposer(); } $rootPkg = $composer->getPackage(); - $repos = $installedRepo = new InstalledRepository(array($composer->getRepositoryManager()->getLocalRepository())); + $repos = $installedRepo = new InstalledRepository([$composer->getRepositoryManager()->getLocalRepository()]); if ($input->getOption('no-dev')) { $packages = RepositoryUtils::filterRequiredPackages($installedRepo->getPackages(), $rootPkg); - $repos = $installedRepo = new InstalledRepository(array(new InstalledArrayRepository(array_map(static function ($pkg): PackageInterface { + $repos = $installedRepo = new InstalledRepository([new InstalledArrayRepository(array_map(static function ($pkg): PackageInterface { return clone $pkg; - }, $packages)))); + }, $packages))]); } if (!$installedRepo->getPackages() && ($rootPkg->getRequires() || $rootPkg->getDevRequires())) { @@ -274,9 +274,9 @@ EOT // show single package or single version if (isset($package)) { - $versions = array($package->getPrettyVersion() => $package->getVersion()); + $versions = [$package->getPrettyVersion() => $package->getVersion()]; } elseif (null !== $packageFilter && !str_contains($packageFilter, '*')) { - list($package, $versions) = $this->getPackage($installedRepo, $repos, $packageFilter, $input->getArgument('version')); + [$package, $versions] = $this->getPackage($installedRepo, $repos, $packageFilter, $input->getArgument('version')); if (!isset($package)) { $options = $input->getOptions(); @@ -306,9 +306,9 @@ EOT $arrayTree = $this->generatePackageTree($package, $installedRepo, $repos); if ('json' === $format) { - $io->write(JsonFile::encode(array('installed' => array($arrayTree)))); + $io->write(JsonFile::encode(['installed' => [$arrayTree]])); } else { - $this->displayPackageTree(array($arrayTree)); + $this->displayPackageTree([$arrayTree]); } return $exitCode; @@ -350,7 +350,7 @@ EOT usort($packages, static function (BasePackage $a, BasePackage $b): int { return strcmp((string) $a, (string) $b); }); - $arrayTree = array(); + $arrayTree = []; foreach ($packages as $package) { if (in_array($package->getName(), $rootRequires, true)) { $arrayTree[] = $this->generatePackageTree($package, $installedRepo, $repos); @@ -358,7 +358,7 @@ EOT } if ('json' === $format) { - $io->write(JsonFile::encode(array('installed' => $arrayTree))); + $io->write(JsonFile::encode(['installed' => $arrayTree])); } else { $this->displayPackageTree($arrayTree); } @@ -368,7 +368,7 @@ EOT // list packages /** @var array> $packages */ - $packages = array(); + $packages = []; $packageFilterRegex = null; if (null !== $packageFilter) { $packageFilterRegex = '{^'.str_replace('\\*', '.*?', preg_quote($packageFilter)).'$}i'; @@ -430,11 +430,11 @@ EOT $ignoredPackages = array_map('strtolower', $input->getOption('ignore')); $indent = $showAllTypes ? ' ' : ''; /** @var PackageInterface[] $latestPackages */ - $latestPackages = array(); + $latestPackages = []; $exitCode = 0; - $viewData = array(); - $viewMetaData = array(); - foreach (array('platform' => true, 'locked' => true, 'available' => false, 'installed' => true) as $type => $showVersion) { + $viewData = []; + $viewMetaData = []; + foreach (['platform' => true, 'locked' => true, 'available' => false, 'installed' => true] as $type => $showVersion) { if (isset($packages[$type])) { ksort($packages[$type]); @@ -460,9 +460,9 @@ EOT $hasOutdatedPackages = false; - $viewData[$type] = array(); + $viewData[$type] = []; foreach ($packages[$type] as $package) { - $packageViewData = array(); + $packageViewData = []; if (is_object($package)) { $latestPackage = null; if ($showLatest && isset($latestPackages[$package->getPrettyName()])) { @@ -531,12 +531,12 @@ EOT } $viewData[$type][] = $packageViewData; } - $viewMetaData[$type] = array( + $viewMetaData[$type] = [ 'nameLength' => $nameLength, 'versionLength' => $versionLength, 'latestLength' => $latestLength, 'writeLatest' => $writeLatest, - ); + ]; if ($input->getOption('strict') && $hasOutdatedPackages) { $exitCode = 1; break; @@ -647,7 +647,7 @@ EOT $updateStatus = $package['latest-status']; $style = $this->updateStatusToVersionStyle($updateStatus); if (!$io->isDecorated()) { - $latestVersion = str_replace(array('up-to-date', 'semver-safe-update', 'update-possible'), array('=', '!', '~'), $updateStatus) . ' ' . $latestVersion; + $latestVersion = str_replace(['up-to-date', 'semver-safe-update', 'update-possible'], ['=', '!', '~'], $updateStatus) . ' ' . $latestVersion; } $io->write(' <' . $style . '>' . str_pad($latestVersion, $latestLength, ' ') . '', false); } @@ -696,7 +696,6 @@ EOT /** * finds a package by name and version if provided * - * @param string $name * @param ConstraintInterface|string $version * @throws \InvalidArgumentException * @return array{CompletePackageInterface|null, array} @@ -712,7 +711,7 @@ EOT $repositorySet->addRepository($repos); $matchedPackage = null; - $versions = array(); + $versions = []; if (PlatformRepository::isPlatformPackage($name)) { $pool = $repositorySet->createPoolWithAllPackages(); } else { @@ -739,18 +738,15 @@ EOT $matchedPackage = $pool->literalToPackage($preferred[0]); } - return array($matchedPackage, $versions); + return [$matchedPackage, $versions]; } /** * Prints package info. * * @param array $versions - * @param PackageInterface|null $latestPackage - * - * @return void */ - protected function printPackageInfo(CompletePackageInterface $package, array $versions, InstalledRepository $installedRepo, PackageInterface $latestPackage = null): void + protected function printPackageInfo(CompletePackageInterface $package, array $versions, InstalledRepository $installedRepo, ?PackageInterface $latestPackage = null): void { $io = $this->getIO(); @@ -774,16 +770,13 @@ EOT * Prints package metadata. * * @param array $versions - * @param PackageInterface|null $latestPackage - * - * @return void */ - protected function printMeta(CompletePackageInterface $package, array $versions, InstalledRepository $installedRepo, PackageInterface $latestPackage = null): void + protected function printMeta(CompletePackageInterface $package, array $versions, InstalledRepository $installedRepo, ?PackageInterface $latestPackage = null): void { $io = $this->getIO(); $io->write('name : ' . $package->getPrettyName()); $io->write('descrip. : ' . $package->getDescription()); - $io->write('keywords : ' . implode(', ', $package->getKeywords() ?: array())); + $io->write('keywords : ' . implode(', ', $package->getKeywords() ?: [])); $this->printVersions($package, $versions, $installedRepo); if ($latestPackage) { $style = $this->getVersionStyle($latestPackage, $package); @@ -843,8 +836,6 @@ EOT * Prints all available versions of this package and highlights the installed one if any. * * @param array $versions - * - * @return void */ protected function printVersions(CompletePackageInterface $package, array $versions, InstalledRepository $installedRepo): void { @@ -870,12 +861,9 @@ EOT /** * print link objects * - * @param string $linkType * @param string $title - * - * @return void */ - protected function printLinks(CompletePackageInterface $package, string $linkType, string $title = null): void + protected function printLinks(CompletePackageInterface $package, string $linkType, ?string $title = null): void { $title = $title ?: $linkType; $io = $this->getIO(); @@ -890,8 +878,6 @@ EOT /** * Prints the licenses of a package with metadata - * - * @return void */ protected function printLicenses(CompletePackageInterface $package): void { @@ -922,19 +908,17 @@ EOT * Prints package info in JSON format. * * @param array $versions - * - * @return void */ - protected function printPackageInfoAsJson(CompletePackageInterface $package, array $versions, InstalledRepository $installedRepo, PackageInterface $latestPackage = null): void + protected function printPackageInfoAsJson(CompletePackageInterface $package, array $versions, InstalledRepository $installedRepo, ?PackageInterface $latestPackage = null): void { - $json = array( + $json = [ 'name' => $package->getPrettyName(), 'description' => $package->getDescription(), - 'keywords' => $package->getKeywords() ?: array(), + 'keywords' => $package->getKeywords() ?: [], 'type' => $package->getType(), 'homepage' => $package->getHomepage(), 'names' => $package->getNames(), - ); + ]; $json = $this->appendVersions($json, $versions); $json = $this->appendLicenses($json, $package); @@ -946,19 +930,19 @@ EOT } if (null !== $package->getSourceType()) { - $json['source'] = array( + $json['source'] = [ 'type' => $package->getSourceType(), 'url' => $package->getSourceUrl(), 'reference' => $package->getSourceReference(), - ); + ]; } if (null !== $package->getDistType()) { - $json['dist'] = array( + $json['dist'] = [ 'type' => $package->getDistType(), 'url' => $package->getDistUrl(), 'reference' => $package->getDistReference(), - ); + ]; } if ($installedRepo->hasPackage($package)) { @@ -1021,11 +1005,11 @@ EOT return $licenseId; } - return array( + return [ 'name' => $license[0], 'osi' => $licenseId, 'url' => $license[2], - ); + ]; }, $licenses); } @@ -1039,11 +1023,11 @@ EOT private function appendAutoload(array $json, CompletePackageInterface $package): array { if ($package->getAutoload()) { - $autoload = array(); + $autoload = []; foreach ($package->getAutoload() as $type => $autoloads) { if ($type === 'psr-0' || $type === 'psr-4') { - $psr = array(); + $psr = []; foreach ($autoloads as $name => $path) { if (!$path) { @@ -1080,7 +1064,6 @@ EOT /** * @param array $json - * @param string $linkType * @return array */ private function appendLink(array $json, CompletePackageInterface $package, string $linkType): array @@ -1088,7 +1071,7 @@ EOT $links = $package->{'get' . ucfirst($linkType)}(); if ($links) { - $json[$linkType] = array(); + $json[$linkType] = []; foreach ($links as $link) { $json[$linkType][$link->getTarget()] = $link->getPrettyConstraint(); @@ -1100,18 +1083,16 @@ EOT /** * Init styles for tree - * - * @return void */ protected function initStyles(OutputInterface $output): void { - $this->colors = array( + $this->colors = [ 'green', 'yellow', 'cyan', 'magenta', 'blue', - ); + ]; foreach ($this->colors as $color) { $style = new OutputFormatterStyle($color); @@ -1123,7 +1104,6 @@ EOT * Display the tree * * @param array> $arrayTree - * @return void */ protected function displayPackageTree(array $arrayTree): void { @@ -1162,7 +1142,7 @@ EOT $this->writeTreeLine($info); $treeBar = str_replace('└', ' ', $treeBar); - $packagesInTree = array($package['name'], $requireName); + $packagesInTree = [$package['name'], $requireName]; $this->displayTree($require, $packagesInTree, $treeBar, $level + 1); } @@ -1182,14 +1162,14 @@ EOT ): array { $requires = $package->getRequires(); ksort($requires); - $children = array(); + $children = []; foreach ($requires as $requireName => $require) { - $packagesInTree = array($package->getName(), $requireName); + $packagesInTree = [$package->getName(), $requireName]; - $treeChildDesc = array( + $treeChildDesc = [ 'name' => $requireName, 'version' => $require->getPrettyConstraint(), - ); + ]; $deepChildren = $this->addTree($requireName, $require, $installedRepo, $remoteRepos, $packagesInTree); @@ -1199,11 +1179,11 @@ EOT $children[] = $treeChildDesc; } - $tree = array( + $tree = [ 'name' => $package->getPrettyName(), 'version' => $package->getPrettyVersion(), 'description' => $package instanceof CompletePackageInterface ? $package->getDescription() : '', - ); + ]; if ($children) { $tree['requires'] = $children; @@ -1217,10 +1197,6 @@ EOT * * @param array>|string|null>|string $package * @param array $packagesInTree - * @param string $previousTreeBar - * @param int $level - * - * @return void */ protected function displayTree( $package, @@ -1270,7 +1246,6 @@ EOT /** * Display a package tree * - * @param string $name * @param string[] $packagesInTree * @return array>|string>> */ @@ -1281,8 +1256,8 @@ EOT RepositoryInterface $remoteRepos, array $packagesInTree ): array { - $children = array(); - list($package) = $this->getPackage( + $children = []; + [$package] = $this->getPackage( $installedRepo, $remoteRepos, $name, @@ -1294,10 +1269,10 @@ EOT foreach ($requires as $requireName => $require) { $currentTree = $packagesInTree; - $treeChildDesc = array( + $treeChildDesc = [ 'name' => $requireName, 'version' => $require->getPrettyConstraint(), - ); + ]; if (!in_array($requireName, $currentTree, true)) { $currentTree[] = $requireName; @@ -1314,21 +1289,14 @@ EOT return $children; } - /** - * @param string $updateStatus - * @return string - */ private function updateStatusToVersionStyle(string $updateStatus): string { // 'up-to-date' is printed green // 'semver-safe-update' is printed red // 'update-possible' is printed yellow - return str_replace(array('up-to-date', 'semver-safe-update', 'update-possible'), array('info', 'highlight', 'comment'), $updateStatus); + return str_replace(['up-to-date', 'semver-safe-update', 'update-possible'], ['info', 'highlight', 'comment'], $updateStatus); } - /** - * @return string - */ private function getUpdateStatus(PackageInterface $latestPackage, PackageInterface $package): string { if ($latestPackage->getFullPrettyVersion() === $package->getFullPrettyVersion()) { @@ -1348,16 +1316,11 @@ EOT return 'update-possible'; } - /** - * @param string $line - * - * @return void - */ private function writeTreeLine(string $line): void { $io = $this->getIO(); if (!$io->isDecorated()) { - $line = str_replace(array('└', '├', '──', '│'), array('`-', '|-', '-', '|'), $line); + $line = str_replace(['└', '├', '──', '│'], ['`-', '|-', '-', '|'], $line); } $io->write($line); @@ -1419,9 +1382,6 @@ EOT return $candidate !== false ? $candidate : null; } - /** - * @return RepositorySet - */ private function getRepositorySet(Composer $composer): RepositorySet { if (!$this->repositorySet) { diff --git a/src/Composer/Command/StatusCommand.php b/src/Composer/Command/StatusCommand.php index b1e2b843e..417d166a4 100644 --- a/src/Composer/Command/StatusCommand.php +++ b/src/Composer/Command/StatusCommand.php @@ -37,7 +37,6 @@ class StatusCommand extends BaseCommand private const EXIT_CODE_VERSION_CHANGES = 4; /** - * @return void * @throws \Symfony\Component\Console\Exception\InvalidArgumentException */ protected function configure(): void @@ -45,9 +44,9 @@ class StatusCommand extends BaseCommand $this ->setName('status') ->setDescription('Shows a list of locally modified packages') - ->setDefinition(array( + ->setDefinition([ new InputOption('verbose', 'v|vv|vvv', InputOption::VALUE_NONE, 'Show modified files for each directory that contains changes.'), - )) + ]) ->setHelp( <<getDownloadManager(); $im = $composer->getInstallationManager(); - $errors = array(); + $errors = []; $io = $this->getIO(); - $unpushedChanges = array(); - $vcsVersionChanges = array(); + $unpushedChanges = []; + $vcsVersionChanges = []; $parser = new VersionParser; $guesser = new VersionGuesser($composer->getConfig(), $composer->getLoop()->getProcessExecutor() ?? new ProcessExecutor($io), $parser); @@ -130,16 +126,16 @@ EOT $currentVersion = $guesser->guessVersion($dumper->dump($package), $targetDir); if ($previousRef && $currentVersion && $currentVersion['commit'] !== $previousRef) { - $vcsVersionChanges[$targetDir] = array( - 'previous' => array( + $vcsVersionChanges[$targetDir] = [ + 'previous' => [ 'version' => $package->getPrettyVersion(), 'ref' => $previousRef, - ), - 'current' => array( + ], + 'current' => [ 'version' => $currentVersion['pretty_version'], 'ref' => $currentVersion['commit'], - ), - ); + ], + ]; } } } diff --git a/src/Composer/Command/SuggestsCommand.php b/src/Composer/Command/SuggestsCommand.php index 63bc19ef9..df63b3eb4 100644 --- a/src/Composer/Command/SuggestsCommand.php +++ b/src/Composer/Command/SuggestsCommand.php @@ -25,22 +25,19 @@ class SuggestsCommand extends BaseCommand { use CompletionTrait; - /** - * @return void - */ protected function configure(): void { $this ->setName('suggests') ->setDescription('Shows package suggestions') - ->setDefinition(array( + ->setDefinition([ new InputOption('by-package', null, InputOption::VALUE_NONE, 'Groups output by suggesting package (default)'), new InputOption('by-suggestion', null, InputOption::VALUE_NONE, 'Groups output by suggested package'), new InputOption('all', 'a', InputOption::VALUE_NONE, 'Show suggestions from all dependencies, including transitive ones'), new InputOption('list', null, InputOption::VALUE_NONE, 'Show only list of suggested package names'), new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Exclude suggestions from require-dev packages'), new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, 'Packages that you want to list suggestions from.', null, $this->suggestInstalledPackage()), - )) + ]) ->setHelp( <<requireComposer(); - $installedRepos = array( + $installedRepos = [ new RootPackageRepository(clone $composer->getPackage()), - ); + ]; $locker = $composer->getLocker(); if ($locker->isLocked()) { - $installedRepos[] = new PlatformRepository(array(), $locker->getPlatformOverrides()); + $installedRepos[] = new PlatformRepository([], $locker->getPlatformOverrides()); $installedRepos[] = $locker->getLockedRepository(!$input->getOption('no-dev')); } else { - $installedRepos[] = new PlatformRepository(array(), $composer->getConfig()->get('platform')); + $installedRepos[] = new PlatformRepository([], $composer->getConfig()->get('platform')); $installedRepos[] = $composer->getRepositoryManager()->getLocalRepository(); } diff --git a/src/Composer/Command/UpdateCommand.php b/src/Composer/Command/UpdateCommand.php index f88ea539d..5a0469d32 100644 --- a/src/Composer/Command/UpdateCommand.php +++ b/src/Composer/Command/UpdateCommand.php @@ -21,10 +21,7 @@ use Composer\Pcre\Preg; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Composer\Package\Version\VersionParser; -use Composer\Semver\Constraint\ConstraintInterface; use Composer\Util\HttpDownloader; -use Composer\Semver\Constraint\MultiConstraint; -use Composer\Package\Link; use Composer\Advisory\Auditor; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Input\InputInterface; @@ -48,9 +45,9 @@ class UpdateCommand extends BaseCommand { $this ->setName('update') - ->setAliases(array('u', 'upgrade')) + ->setAliases(['u', 'upgrade']) ->setDescription('Updates your dependencies to the latest version according to composer.json, and updates the composer.lock file') - ->setDefinition(array( + ->setDefinition([ new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, 'Packages that should be updated, if not provided all packages are.', null, $this->suggestInstalledPackage(false)), new InputOption('with', null, InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'Temporary version constraint to add, e.g. foo/bar:1.0.0 or foo/bar=1.0.0'), new InputOption('prefer-source', null, InputOption::VALUE_NONE, 'Forces installation from package sources when possible, including VCS information.'), @@ -79,7 +76,7 @@ class UpdateCommand extends BaseCommand new InputOption('prefer-lowest', null, InputOption::VALUE_NONE, 'Prefer lowest versions of dependencies (can also be set via the COMPOSER_PREFER_LOWEST=1 env var).'), new InputOption('interactive', 'i', InputOption::VALUE_NONE, 'Interactive interface with autocompletion to select the packages to update.'), new InputOption('root-reqs', null, InputOption::VALUE_NONE, 'Restricts the update to your first degree dependencies.'), - )) + ]) ->setHelp( <<update command reads the composer.json file from the @@ -180,7 +177,7 @@ EOT // the arguments lock/nothing/mirrors are not package names but trigger a mirror update instead // they are further mutually exclusive with listing actual package names $filteredPackages = array_filter($packages, static function ($package): bool { - return !in_array($package, array('lock', 'nothing', 'mirrors'), true); + return !in_array($package, ['lock', 'nothing', 'mirrors'], true); }); $updateMirrors = $input->getOption('lock') || count($filteredPackages) !== count($packages); $packages = $filteredPackages; @@ -199,7 +196,7 @@ EOT $install = Installer::create($io, $composer); $config = $composer->getConfig(); - list($preferSource, $preferDist) = $this->getPreferredInstallOptions($config, $input); + [$preferSource, $preferDist] = $this->getPreferredInstallOptions($config, $input); $optimize = $input->getOption('optimize-autoloader') || $config->get('optimize-autoloader'); $authoritative = $input->getOption('classmap-authoritative') || $config->get('classmap-authoritative'); @@ -257,7 +254,7 @@ EOT $composer->getPackage()->getRequires(), $composer->getPackage()->getDevRequires() ); - $autocompleterValues = array(); + $autocompleterValues = []; foreach ($requires as $require) { $target = $require->getTarget(); $autocompleterValues[strtolower($target)] = $target; @@ -294,9 +291,9 @@ EOT } $table = new Table($output); - $table->setHeaders(array('Selected packages')); + $table->setHeaders(['Selected packages']); foreach ($packages as $package) { - $table->addRow(array($package)); + $table->addRow([$package]); } $table->render(); diff --git a/src/Composer/Command/ValidateCommand.php b/src/Composer/Command/ValidateCommand.php index 79b41bd21..42f7f4fbf 100644 --- a/src/Composer/Command/ValidateCommand.php +++ b/src/Composer/Command/ValidateCommand.php @@ -36,14 +36,13 @@ class ValidateCommand extends BaseCommand { /** * configure - * @return void */ protected function configure(): void { $this ->setName('validate') ->setDescription('Validates a composer.json and composer.lock') - ->setDefinition(array( + ->setDefinition([ new InputOption('no-check-all', null, InputOption::VALUE_NONE, 'Do not validate requires for overly strict/loose constraints'), new InputOption('check-lock', null, InputOption::VALUE_NONE, 'Check if lock file is up to date (even when config.lock is false)'), new InputOption('no-check-lock', null, InputOption::VALUE_NONE, 'Do not check if lock file is up to date'), @@ -52,7 +51,7 @@ class ValidateCommand extends BaseCommand new InputOption('with-dependencies', 'A', InputOption::VALUE_NONE, 'Also validate the composer.json of all installed dependencies'), new InputOption('strict', null, InputOption::VALUE_NONE, 'Return a non-zero exit code for warnings as well as errors'), new InputArgument('file', InputArgument::OPTIONAL, 'path to composer.json file'), - )) + ]) ->setHelp( <<getOption('no-check-lock'); $checkVersion = $input->getOption('no-check-version') ? 0 : ConfigValidator::CHECK_VERSION; $isStrict = $input->getOption('strict'); - list($errors, $publishErrors, $warnings) = $validator->validate($file, $checkAll, $checkVersion); + [$errors, $publishErrors, $warnings] = $validator->validate($file, $checkAll, $checkVersion); - $lockErrors = array(); + $lockErrors = []; $composer = Factory::create($io, $file, $input->hasParameterOption('--no-plugins')); // config.lock = false ~= implicit --no-check-lock; --check-lock overrides $checkLock = ($checkLock && $composer->getConfig()->get('lock')) || $input->getOption('check-lock'); @@ -102,14 +101,14 @@ EOT if ($locker->isLocked()) { $missingRequirements = false; - $sets = array( - array('repo' => $locker->getLockedRepository(false), 'method' => 'getRequires', 'description' => 'Required'), - array('repo' => $locker->getLockedRepository(true), 'method' => 'getDevRequires', 'description' => 'Required (in require-dev)'), - ); + $sets = [ + ['repo' => $locker->getLockedRepository(false), 'method' => 'getRequires', 'description' => 'Required'], + ['repo' => $locker->getLockedRepository(true), 'method' => 'getDevRequires', 'description' => 'Required (in require-dev)'], + ]; foreach ($sets as $set) { - $installedRepo = new InstalledRepository(array($set['repo'])); + $installedRepo = new InstalledRepository([$set['repo']]); - foreach (call_user_func(array($composer->getPackage(), $set['method'])) as $link) { + foreach (call_user_func([$composer->getPackage(), $set['method']]) as $link) { if (PlatformRepository::isPlatformPackage($link->getTarget())) { continue; } @@ -143,7 +142,7 @@ EOT $path = $composer->getInstallationManager()->getInstallPath($package); $file = $path . '/composer.json'; if (is_dir($path) && file_exists($file)) { - list($errors, $publishErrors, $warnings) = $validator->validate($file, $checkAll, $checkVersion); + [$errors, $publishErrors, $warnings] = $validator->validate($file, $checkAll, $checkVersion); $this->outputResult($io, $package->getPrettyName(), $errors, $warnings, $checkPublish, $publishErrors); @@ -161,18 +160,12 @@ EOT } /** - * @param string $name * @param string[] $errors * @param string[] $warnings - * @param bool $checkPublish * @param string[] $publishErrors - * @param bool $checkLock * @param string[] $lockErrors - * @param bool $printSchemaUrl - * - * @return void */ - private function outputResult(IOInterface $io, string $name, array &$errors, array &$warnings, bool $checkPublish = false, array $publishErrors = array(), bool $checkLock = false, array $lockErrors = array(), bool $printSchemaUrl = false): void + private function outputResult(IOInterface $io, string $name, array &$errors, array &$warnings, bool $checkPublish = false, array $publishErrors = [], bool $checkLock = false, array $lockErrors = [], bool $printSchemaUrl = false): void { $doPrintSchemaUrl = false; @@ -209,7 +202,7 @@ EOT } // Avoid setting the exit code to 1 in case --strict and --no-check-publish/--no-check-lock are combined - $extraWarnings = array(); + $extraWarnings = []; // If checking publish errors, display them as errors, otherwise just show them as warnings if ($publishErrors) { @@ -237,10 +230,10 @@ EOT } } - $messages = array( + $messages = [ 'error' => $errors, 'warning' => array_merge($warnings, $extraWarnings), - ); + ]; foreach ($messages as $style => $msgs) { foreach ($msgs as $msg) { diff --git a/src/Composer/Compiler.php b/src/Composer/Compiler.php index 08c805e72..53c252b03 100644 --- a/src/Composer/Compiler.php +++ b/src/Composer/Compiler.php @@ -40,7 +40,6 @@ class Compiler * * @param string $pharFile The full path to the file to create * - * @return void * * @throws \RuntimeException */ @@ -50,13 +49,13 @@ class Compiler unlink($pharFile); } - $process = new Process(array('git', 'log', '--pretty=%H', '-n1', 'HEAD'), __DIR__); + $process = new Process(['git', 'log', '--pretty=%H', '-n1', 'HEAD'], __DIR__); if ($process->run() !== 0) { throw new \RuntimeException('Can\'t run git log. You must ensure to run compile from composer git repository clone and that git binary is available.'); } $this->version = trim($process->getOutput()); - $process = new Process(array('git', 'log', '-n1', '--pretty=%ci', 'HEAD'), __DIR__); + $process = new Process(['git', 'log', '-n1', '--pretty=%ci', 'HEAD'], __DIR__); if ($process->run() !== 0) { throw new \RuntimeException('Can\'t run git log. You must ensure to run compile from composer git repository clone and that git binary is available.'); } @@ -64,7 +63,7 @@ class Compiler $this->versionDate = new \DateTime(trim($process->getOutput())); $this->versionDate->setTimezone(new \DateTimeZone('UTC')); - $process = new Process(array('git', 'describe', '--tags', '--exact-match', 'HEAD'), __DIR__); + $process = new Process(['git', 'describe', '--tags', '--exact-match', 'HEAD'], __DIR__); if ($process->run() === 0) { $this->version = trim($process->getOutput()); } else { @@ -132,19 +131,19 @@ class Compiler ; $extraFiles = []; - foreach (array( + foreach ([ __DIR__ . '/../../vendor/composer/spdx-licenses/res/spdx-exceptions.json', __DIR__ . '/../../vendor/composer/spdx-licenses/res/spdx-licenses.json', CaBundle::getBundledCaBundlePath(), __DIR__ . '/../../vendor/symfony/console/Resources/bin/hiddeninput.exe', __DIR__ . '/../../vendor/symfony/console/Resources/completion.bash', - ) as $file) { + ] as $file) { $extraFiles[$file] = realpath($file); if (!file_exists($file)) { throw new \RuntimeException('Extra file listed is missing from the filesystem: '.$file); } } - $unexpectedFiles = array(); + $unexpectedFiles = []; foreach ($finder as $file) { if (false !== ($index = array_search($file->getRealPath(), $extraFiles, true))) { @@ -197,10 +196,6 @@ class Compiler ]); } - /** - * @param \SplFileInfo $file - * @return string - */ private function getRelativeFilePath(\SplFileInfo $file): string { $realPath = $file->getRealPath(); @@ -212,11 +207,6 @@ class Compiler return strtr($relativePath, '\\', '/'); } - /** - * @param bool $strip - * - * @return void - */ private function addFile(\Phar $phar, \SplFileInfo $file, bool $strip = true): void { $path = $this->getRelativeFilePath($file); @@ -230,11 +220,11 @@ class Compiler if ($path === 'src/Composer/Composer.php') { $content = strtr( $content, - array( + [ '@package_version@' => $this->version, '@package_branch_alias_version@' => $this->branchAliasVersion, '@release_date@' => $this->versionDate->format('Y-m-d H:i:s'), - ) + ] ); $content = Preg::replace('{SOURCE_VERSION = \'[^\']+\';}', 'SOURCE_VERSION = \'\';', $content); } @@ -242,9 +232,6 @@ class Compiler $phar->addFromString($path, $content); } - /** - * @return void - */ private function addComposerBin(\Phar $phar): void { $content = file_get_contents(__DIR__.'/../../bin/composer'); @@ -268,7 +255,7 @@ class Compiler foreach (token_get_all($source) as $token) { if (is_string($token)) { $output .= $token; - } elseif (in_array($token[0], array(T_COMMENT, T_DOC_COMMENT))) { + } elseif (in_array($token[0], [T_COMMENT, T_DOC_COMMENT])) { $output .= str_repeat("\n", substr_count($token[1], "\n")); } elseif (T_WHITESPACE === $token[0]) { // reduce wide spaces @@ -286,9 +273,6 @@ class Compiler return $output; } - /** - * @return string - */ private function getStub(): string { $stub = <<<'EOF' diff --git a/src/Composer/Composer.php b/src/Composer/Composer.php index e07bac101..c6f083dfd 100644 --- a/src/Composer/Composer.php +++ b/src/Composer/Composer.php @@ -67,9 +67,6 @@ class Composer extends PartialComposer */ public const RUNTIME_API_VERSION = '2.2.2'; - /** - * @return string - */ public static function getVersion(): string { // no replacement done, this must be a source checkout diff --git a/src/Composer/Config.php b/src/Composer/Config.php index 6ed4d46dc..141efa6ff 100644 --- a/src/Composer/Config.php +++ b/src/Composer/Config.php @@ -31,14 +31,14 @@ class Config public const RELATIVE_PATHS = 1; /** @var array */ - public static $defaultConfig = array( + public static $defaultConfig = [ 'process-timeout' => 300, 'use-include-path' => false, - 'allow-plugins' => array(), + 'allow-plugins' => [], 'use-parent-dir' => 'prompt', 'preferred-install' => 'dist', 'notify-on-install' => true, - 'github-protocols' => array('https', 'ssh', 'git'), + 'github-protocols' => ['https', 'ssh', 'git'], 'gitlab-protocol' => null, 'vendor-dir' => 'vendor', 'bin-dir' => '{$vendor-dir}/bin', @@ -59,38 +59,38 @@ class Config 'classmap-authoritative' => false, 'apcu-autoloader' => false, 'prepend-autoloader' => true, - 'github-domains' => array('github.com'), + 'github-domains' => ['github.com'], 'bitbucket-expose-hostname' => true, 'disable-tls' => false, 'secure-http' => true, - 'secure-svn-domains' => array(), + 'secure-svn-domains' => [], 'cafile' => null, 'capath' => null, 'github-expose-hostname' => true, - 'gitlab-domains' => array('gitlab.com'), + 'gitlab-domains' => ['gitlab.com'], 'store-auths' => 'prompt', - 'platform' => array(), + 'platform' => [], 'archive-format' => 'tar', 'archive-dir' => '.', 'htaccess-protect' => true, 'use-github-api' => true, 'lock' => true, 'platform-check' => 'php-only', - 'bitbucket-oauth' => array(), - 'github-oauth' => array(), - 'gitlab-oauth' => array(), - 'gitlab-token' => array(), - 'http-basic' => array(), - 'bearer' => array(), - ); + 'bitbucket-oauth' => [], + 'github-oauth' => [], + 'gitlab-oauth' => [], + 'gitlab-token' => [], + 'http-basic' => [], + 'bearer' => [], + ]; /** @var array */ - public static $defaultRepositories = array( - 'packagist.org' => array( + public static $defaultRepositories = [ + 'packagist.org' => [ 'type' => 'composer', 'url' => 'https://repo.packagist.org', - ), - ); + ], + ]; /** @var array */ private $config; @@ -105,11 +105,11 @@ class Config /** @var bool */ private $useEnvironment; /** @var array */ - private $warnedHosts = array(); + private $warnedHosts = []; /** @var array */ - private $sslVerifyWarnedHosts = array(); + private $sslVerifyWarnedHosts = []; /** @var array */ - private $sourceOfConfigValue = array(); + private $sourceOfConfigValue = []; /** * @param bool $useEnvironment Use COMPOSER_ environment variables to replace config settings @@ -133,33 +133,21 @@ class Config } } - /** - * @return void - */ public function setConfigSource(ConfigSourceInterface $source): void { $this->configSource = $source; } - /** - * @return ConfigSourceInterface - */ public function getConfigSource(): ConfigSourceInterface { return $this->configSource; } - /** - * @return void - */ public function setAuthConfigSource(ConfigSourceInterface $source): void { $this->authConfigSource = $source; } - /** - * @return ConfigSourceInterface - */ public function getAuthConfigSource(): ConfigSourceInterface { return $this->authConfigSource; @@ -169,33 +157,30 @@ class Config * Merges new config values with the existing ones (overriding) * * @param array{config?: array, repositories?: array} $config - * @param string $source - * - * @return void */ public function merge(array $config, string $source = self::SOURCE_UNKNOWN): void { // override defaults with given config if (!empty($config['config']) && is_array($config['config'])) { foreach ($config['config'] as $key => $val) { - if (in_array($key, array('bitbucket-oauth', 'github-oauth', 'gitlab-oauth', 'gitlab-token', 'http-basic', 'bearer'), true) && isset($this->config[$key])) { + if (in_array($key, ['bitbucket-oauth', 'github-oauth', 'gitlab-oauth', 'gitlab-token', 'http-basic', 'bearer'], true) && isset($this->config[$key])) { $this->config[$key] = array_merge($this->config[$key], $val); $this->setSourceOfConfigValue($val, $key, $source); - } elseif (in_array($key, array('allow-plugins'), true) && isset($this->config[$key]) && is_array($this->config[$key]) && is_array($val)) { + } elseif (in_array($key, ['allow-plugins'], true) && isset($this->config[$key]) && is_array($this->config[$key]) && is_array($val)) { // merging $val first to get the local config on top of the global one, then appending the global config, // then merging local one again to make sure the values from local win over global ones for keys present in both $this->config[$key] = array_merge($val, $this->config[$key], $val); $this->setSourceOfConfigValue($val, $key, $source); - } elseif (in_array($key, array('gitlab-domains', 'github-domains'), true) && isset($this->config[$key])) { + } elseif (in_array($key, ['gitlab-domains', 'github-domains'], true) && isset($this->config[$key])) { $this->config[$key] = array_unique(array_merge($this->config[$key], $val)); $this->setSourceOfConfigValue($val, $key, $source); } elseif ('preferred-install' === $key && isset($this->config[$key])) { if (is_array($val) || is_array($this->config[$key])) { if (is_string($val)) { - $val = array('*' => $val); + $val = ['*' => $val]; } if (is_string($this->config[$key])) { - $this->config[$key] = array('*' => $this->config[$key]); + $this->config[$key] = ['*' => $this->config[$key]]; $this->sourceOfConfigValue[$key . '*'] = $source; } $this->config[$key] = array_merge($this->config[$key], $val); @@ -267,7 +252,6 @@ class Config /** * Returns a setting * - * @param string $key * @param int $flags Options (see class constants) * @throws \RuntimeException * @@ -379,7 +363,7 @@ class Config case 'bin-compat': $value = $this->getComposerEnv('COMPOSER_BIN_COMPAT') ?: $this->config[$key]; - if (!in_array($value, array('auto', 'full', 'proxy', 'symlink'))) { + if (!in_array($value, ['auto', 'full', 'proxy', 'symlink'])) { throw new \RuntimeException( "Invalid value for 'bin-compat': {$value}. Expected auto, full or proxy" ); @@ -393,7 +377,7 @@ class Config case 'discard-changes': if ($env = $this->getComposerEnv('COMPOSER_DISCARD_CHANGES')) { - if (!in_array($env, array('stash', 'true', 'false', '1', '0'), true)) { + if (!in_array($env, ['stash', 'true', 'false', '1', '0'], true)) { throw new \RuntimeException( "Invalid value for COMPOSER_DISCARD_CHANGES: {$env}. Expected 1, 0, true, false or stash" ); @@ -406,7 +390,7 @@ class Config return $env !== 'false' && (bool) $env; } - if (!in_array($this->config[$key], array(true, false, 'stash'), true)) { + if (!in_array($this->config[$key], [true, false, 'stash'], true)) { throw new \RuntimeException( "Invalid value for 'discard-changes': {$this->config[$key]}. Expected true, false or stash" ); @@ -442,15 +426,13 @@ class Config } /** - * @param int $flags - * * @return array */ public function all(int $flags = 0): array { - $all = array( + $all = [ 'repositories' => $this->getRepositories(), - ); + ]; foreach (array_keys($this->config) as $key) { $all['config'][$key] = $this->get($key, $flags); } @@ -458,10 +440,6 @@ class Config return $all; } - /** - * @param string $key - * @return string - */ public function getSourceOfValue(string $key): string { $this->get($key); @@ -471,10 +449,6 @@ class Config /** * @param mixed $configValue - * @param string $path - * @param string $source - * - * @return void */ private function setSourceOfConfigValue($configValue, string $path, string $source): void { @@ -492,17 +466,14 @@ class Config */ public function raw(): array { - return array( + return [ 'repositories' => $this->getRepositories(), 'config' => $this->config, - ); + ]; } /** * Checks whether a setting exists - * - * @param string $key - * @return bool */ public function has(string $key): bool { @@ -532,9 +503,6 @@ class Config * Turns relative paths in absolute paths without realpath() * * Since the dirs might not exist yet we can not call realpath or it will fail. - * - * @param string $path - * @return string */ private function realpath(string $path): string { @@ -551,7 +519,6 @@ class Config * This should be used to read COMPOSER_ environment variables * that overload config values. * - * @param string $var * @return string|bool */ private function getComposerEnv(string $var) @@ -563,11 +530,6 @@ class Config return false; } - /** - * @param string $name - * - * @return void - */ private function disableRepoByName(string $name): void { if (isset($this->repositories[$name])) { @@ -580,13 +542,10 @@ class Config /** * Validates that the passed URL is allowed to be used by current config, or throws an exception. * - * @param string $url * @param IOInterface $io * @param mixed[] $repoOptions - * - * @return void */ - public function prohibitUrlByConfig(string $url, IOInterface $io = null, array $repoOptions = []): void + public function prohibitUrlByConfig(string $url, ?IOInterface $io = null, array $repoOptions = []): void { // Return right away if the URL is malformed or custom (see issue #5173) if (false === filter_var($url, FILTER_VALIDATE_URL)) { @@ -596,7 +555,7 @@ class Config // Extract scheme and throw exception on known insecure protocols $scheme = parse_url($url, PHP_URL_SCHEME); $hostname = parse_url($url, PHP_URL_HOST); - if (in_array($scheme, array('http', 'git', 'ftp', 'svn'))) { + if (in_array($scheme, ['http', 'git', 'ftp', 'svn'])) { if ($this->get('secure-http')) { if ($scheme === 'svn') { if (in_array($hostname, $this->get('secure-svn-domains'), true)) { @@ -608,7 +567,7 @@ class Config throw new TransportException("Your configuration does not allow connections to $url. See https://getcomposer.org/doc/06-config.md#secure-http for details."); } - if ($io !== null) { + if ($io !== null) { if (is_string($hostname)) { if (!isset($this->warnedHosts[$hostname])) { $io->writeError("Warning: Accessing $hostname over $scheme which is an insecure protocol."); @@ -644,8 +603,6 @@ class Config * "vendor/bin/long-running-script --watch" * ] * } - * - * @return void */ public static function disableProcessTimeout(): void { diff --git a/src/Composer/Config/ConfigSourceInterface.php b/src/Composer/Config/ConfigSourceInterface.php index f94ab630e..31f21f0e0 100644 --- a/src/Composer/Config/ConfigSourceInterface.php +++ b/src/Composer/Config/ConfigSourceInterface.php @@ -26,17 +26,11 @@ interface ConfigSourceInterface * @param string $name Name * @param mixed[]|false $config Configuration * @param bool $append Whether the repo should be appended (true) or prepended (false) - * - * @return void */ public function addRepository(string $name, $config, bool $append = true): void; /** * Remove a repository - * - * @param string $name - * - * @return void */ public function removeRepository(string $name): void; @@ -45,17 +39,11 @@ interface ConfigSourceInterface * * @param string $name Name * @param mixed $value Value - * - * @return void */ public function addConfigSetting(string $name, $value): void; /** * Remove a config setting - * - * @param string $name - * - * @return void */ public function removeConfigSetting(string $name): void; @@ -64,17 +52,11 @@ interface ConfigSourceInterface * * @param string $name Name * @param string|string[] $value Value - * - * @return void */ public function addProperty(string $name, $value): void; /** * Remove a property - * - * @param string $name - * - * @return void */ public function removeProperty(string $name): void; @@ -84,8 +66,6 @@ interface ConfigSourceInterface * @param string $type Type (require, require-dev, provide, suggest, replace, conflict) * @param string $name Name * @param string $value Value - * - * @return void */ public function addLink(string $type, string $name, string $value): void; @@ -94,15 +74,11 @@ interface ConfigSourceInterface * * @param string $type Type (require, require-dev, provide, suggest, replace, conflict) * @param string $name Name - * - * @return void */ public function removeLink(string $type, string $name): void; /** * Gives a user-friendly name to this source (file path or so) - * - * @return string */ public function getName(): string; } diff --git a/src/Composer/Config/JsonConfigSource.php b/src/Composer/Config/JsonConfigSource.php index a4f82d322..bff50d869 100644 --- a/src/Composer/Config/JsonConfigSource.php +++ b/src/Composer/Config/JsonConfigSource.php @@ -39,9 +39,6 @@ class JsonConfigSource implements ConfigSourceInterface /** * Constructor - * - * @param JsonFile $file - * @param bool $authConfig */ public function __construct(JsonFile $file, bool $authConfig = false) { @@ -70,7 +67,7 @@ class JsonConfigSource implements ConfigSourceInterface if ($index === $repo) { continue; } - if (is_numeric($index) && ($val === array('packagist' => false) || $val === array('packagist.org' => false))) { + if (is_numeric($index) && ($val === ['packagist' => false] || $val === ['packagist.org' => false])) { unset($config['repositories'][$index]); $config['repositories']['packagist.org'] = false; break; @@ -81,7 +78,7 @@ class JsonConfigSource implements ConfigSourceInterface if ($append) { $config['repositories'][$repo] = $repoConfig; } else { - $config['repositories'] = array($repo => $repoConfig) + $config['repositories']; + $config['repositories'] = [$repo => $repoConfig] + $config['repositories']; } }, $name, $config, $append); } @@ -104,7 +101,7 @@ class JsonConfigSource implements ConfigSourceInterface $authConfig = $this->authConfig; $this->manipulateJson('addConfigSetting', static function (&$config, $key, $val) use ($authConfig): void { if (Preg::isMatch('{^(bitbucket-oauth|github-oauth|gitlab-oauth|gitlab-token|bearer|http-basic|platform)\.}', $key)) { - list($key, $host) = explode('.', $key, 2); + [$key, $host] = explode('.', $key, 2); if ($authConfig) { $config[$key][$host] = $val; } else { @@ -124,7 +121,7 @@ class JsonConfigSource implements ConfigSourceInterface $authConfig = $this->authConfig; $this->manipulateJson('removeConfigSetting', static function (&$config, $key) use ($authConfig): void { if (Preg::isMatch('{^(bitbucket-oauth|github-oauth|gitlab-oauth|gitlab-token|bearer|http-basic|platform)\.}', $key)) { - list($key, $host) = explode('.', $key, 2); + [$key, $host] = explode('.', $key, 2); if ($authConfig) { unset($config[$key][$host]); } else { @@ -148,7 +145,7 @@ class JsonConfigSource implements ConfigSourceInterface $arr = &$config[reset($bits)]; foreach ($bits as $bit) { if (!isset($arr[$bit])) { - $arr[$bit] = array(); + $arr[$bit] = []; } $arr = &$arr[$bit]; } @@ -208,11 +205,7 @@ class JsonConfigSource implements ConfigSourceInterface } /** - * @param string $method - * @param callable $fallback * @param mixed ...$args - * - * @return void */ private function manipulateJson(string $method, callable $fallback, ...$args): void { @@ -239,38 +232,38 @@ class JsonConfigSource implements ConfigSourceInterface // override manipulator method for auth config files if ($this->authConfig && $method === 'addConfigSetting') { $method = 'addSubNode'; - list($mainNode, $name) = explode('.', $args[0], 2); - $args = array($mainNode, $name, $args[1]); + [$mainNode, $name] = explode('.', $args[0], 2); + $args = [$mainNode, $name, $args[1]]; } elseif ($this->authConfig && $method === 'removeConfigSetting') { $method = 'removeSubNode'; - list($mainNode, $name) = explode('.', $args[0], 2); - $args = array($mainNode, $name); + [$mainNode, $name] = explode('.', $args[0], 2); + $args = [$mainNode, $name]; } // try to update cleanly - if (call_user_func_array(array($manipulator, $method), $args)) { + if (call_user_func_array([$manipulator, $method], $args)) { file_put_contents($this->file->getPath(), $manipulator->getContents()); } else { // on failed clean update, call the fallback and rewrite the whole file $config = $this->file->read(); $this->arrayUnshiftRef($args, $config); - call_user_func_array($fallback, $args); + $fallback(...$args); // avoid ending up with arrays for keys that should be objects - foreach (array('require', 'require-dev', 'conflict', 'provide', 'replace', 'suggest', 'config', 'autoload', 'autoload-dev', 'scripts', 'scripts-descriptions', 'support') as $prop) { - if (isset($config[$prop]) && $config[$prop] === array()) { + foreach (['require', 'require-dev', 'conflict', 'provide', 'replace', 'suggest', 'config', 'autoload', 'autoload-dev', 'scripts', 'scripts-descriptions', 'support'] as $prop) { + if (isset($config[$prop]) && $config[$prop] === []) { $config[$prop] = new \stdClass; } } - foreach (array('psr-0', 'psr-4') as $prop) { - if (isset($config['autoload'][$prop]) && $config['autoload'][$prop] === array()) { + foreach (['psr-0', 'psr-4'] as $prop) { + if (isset($config['autoload'][$prop]) && $config['autoload'][$prop] === []) { $config['autoload'][$prop] = new \stdClass; } - if (isset($config['autoload-dev'][$prop]) && $config['autoload-dev'][$prop] === array()) { + if (isset($config['autoload-dev'][$prop]) && $config['autoload-dev'][$prop] === []) { $config['autoload-dev'][$prop] = new \stdClass; } } - foreach (array('platform', 'http-basic', 'bearer', 'gitlab-token', 'gitlab-oauth', 'github-oauth', 'preferred-install') as $prop) { - if (isset($config['config'][$prop]) && $config['config'][$prop] === array()) { + foreach (['platform', 'http-basic', 'bearer', 'gitlab-token', 'gitlab-oauth', 'github-oauth', 'preferred-install'] as $prop) { + if (isset($config['config'][$prop]) && $config['config'][$prop] === []) { $config['config'][$prop] = new \stdClass; } } @@ -295,7 +288,6 @@ class JsonConfigSource implements ConfigSourceInterface * * @param mixed[] $array * @param mixed $value - * @return int */ private function arrayUnshiftRef(array &$array, &$value): int { diff --git a/src/Composer/Console/Application.php b/src/Composer/Console/Application.php index fc0144bd4..5e4d84616 100644 --- a/src/Composer/Console/Application.php +++ b/src/Composer/Console/Application.php @@ -129,7 +129,7 @@ class Application extends BaseApplication $this->signalHandler->unregister(); } - public function run(InputInterface $input = null, OutputInterface $output = null): int + public function run(?InputInterface $input = null, ?OutputInterface $output = null): int { if (null === $output) { $output = Factory::createOutput(); @@ -148,9 +148,9 @@ class Application extends BaseApplication $input->setInteractive(false); } - $io = $this->io = new ConsoleIO($input, $output, new HelperSet(array( + $io = $this->io = new ConsoleIO($input, $output, new HelperSet([ new QuestionHelper(), - ))); + ])); // Register error handler again to pass it the IO instance ErrorHandler::register($io); @@ -183,7 +183,7 @@ class Application extends BaseApplication } // prompt user for dir change if no composer.json is present in current dir - if ($io->isInteractive() && null === $newWorkDir && !in_array($commandName, array('', 'list', 'init', 'about', 'help', 'diagnose', 'self-update', 'global', 'create-project', 'outdated'), true) && !file_exists(Factory::getComposerFile()) && ($useParentDirIfNoJsonAvailable = $this->getUseParentDirConfigValue()) !== false) { + if ($io->isInteractive() && null === $newWorkDir && !in_array($commandName, ['', 'list', 'init', 'about', 'help', 'diagnose', 'self-update', 'global', 'create-project', 'outdated'], true) && !file_exists(Factory::getComposerFile()) && ($useParentDirIfNoJsonAvailable = $this->getUseParentDirConfigValue()) !== false) { $dir = dirname(Platform::getCwd(true)); $home = realpath(Platform::getEnv('HOME') ?: Platform::getEnv('USERPROFILE') ?: '/'); @@ -207,12 +207,12 @@ class Application extends BaseApplication // avoid loading plugins/initializing the Composer instance earlier than necessary if no plugin command is needed // if showing the version, we never need plugin commands - $mayNeedPluginCommand = false === $input->hasParameterOption(array('--version', '-V')) + $mayNeedPluginCommand = false === $input->hasParameterOption(['--version', '-V']) && ( // not a composer command, so try loading plugin ones false === $commandName // list command requires plugin commands to show them - || in_array($commandName, array('', 'list', 'help'), true) + || in_array($commandName, ['', 'list', 'help'], true) ); if ($mayNeedPluginCommand && !$this->disablePluginsByDefault && !$this->hasPluginCommands) { @@ -389,14 +389,13 @@ class Application extends BaseApplication } /** - * @param InputInterface $input * @throws \RuntimeException * @return ?string */ private function getNewWorkingDir(InputInterface $input): ?string { /** @var string|null $workingDir */ - $workingDir = $input->getParameterOption(array('--working-dir', '-d'), null, true); + $workingDir = $input->getParameterOption(['--working-dir', '-d'], null, true); if (null !== $workingDir && !is_dir($workingDir)) { throw new \RuntimeException('Invalid working directory specified, '.$workingDir.' does not exist.'); } @@ -404,9 +403,6 @@ class Application extends BaseApplication return $workingDir; } - /** - * @return void - */ private function hintCommonErrors(\Throwable $exception, OutputInterface $output): void { $io = $this->getIO(); @@ -457,9 +453,6 @@ class Application extends BaseApplication } /** - * @param bool $required - * @param bool|null $disablePlugins - * @param bool|null $disableScripts * @throws JsonValidationException * @throws \InvalidArgumentException * @return ?Composer If $required is true then the return value is guaranteed @@ -496,8 +489,6 @@ class Application extends BaseApplication /** * Removes the cached composer instance - * - * @return void */ public function resetComposer(): void { @@ -507,9 +498,6 @@ class Application extends BaseApplication } } - /** - * @return IOInterface - */ public function getIO(): IOInterface { return $this->io; @@ -526,7 +514,7 @@ class Application extends BaseApplication */ protected function getDefaultCommands(): array { - $commands = array_merge(parent::getDefaultCommands(), array( + $commands = array_merge(parent::getDefaultCommands(), [ new Command\AboutCommand(), new Command\ConfigCommand(), new Command\DependsCommand(), @@ -557,7 +545,7 @@ class Application extends BaseApplication new Command\FundCommand(), new Command\ReinstallCommand(), new Command\BumpCommand(), - )); + ]); if (strpos(__FILE__, 'phar:') === 0 || '1' === Platform::getEnv('COMPOSER_TESTS_ARE_RUNNING')) { $commands[] = new Command\SelfUpdateCommand(); @@ -599,7 +587,7 @@ class Application extends BaseApplication */ private function getPluginCommands(): array { - $commands = array(); + $commands = []; $composer = $this->getComposer(false, false); if (null === $composer) { @@ -608,7 +596,7 @@ class Application extends BaseApplication if (null !== $composer) { $pm = $composer->getPluginManager(); - foreach ($pm->getPluginCapabilities('Composer\Plugin\Capability\CommandProvider', array('composer' => $composer, 'io' => $this->io)) as $capability) { + foreach ($pm->getPluginCapabilities('Composer\Plugin\Capability\CommandProvider', ['composer' => $composer, 'io' => $this->io]) as $capability) { $newCommands = $capability->getCommands(); if (!is_array($newCommands)) { throw new \UnexpectedValueException('Plugin capability '.get_class($capability).' failed to return an array from getCommands'); diff --git a/src/Composer/Console/GithubActionError.php b/src/Composer/Console/GithubActionError.php index 7489a9a38..8a19a1945 100644 --- a/src/Composer/Console/GithubActionError.php +++ b/src/Composer/Console/GithubActionError.php @@ -27,13 +27,6 @@ final class GithubActionError $this->io = $io; } - /** - * @param string $message - * @param null|string $file - * @param null|int $line - * - * @return void - */ public function emit(string $message, ?string $file = null, ?int $line = null): void { if (Platform::getEnv('GITHUB_ACTIONS') && !Platform::getEnv('COMPOSER_TESTS_ARE_RUNNING')) { @@ -51,10 +44,6 @@ final class GithubActionError } } - /** - * @param string $data - * @return string - */ private function escapeData(string $data): string { // see https://github.com/actions/toolkit/blob/4f7fb6513a355689f69f0849edeb369a4dc81729/packages/core/src/command.ts#L80-L85 @@ -65,10 +54,6 @@ final class GithubActionError return $data; } - /** - * @param string $property - * @return string - */ private function escapeProperty(string $property): string { // see https://github.com/actions/toolkit/blob/4f7fb6513a355689f69f0849edeb369a4dc81729/packages/core/src/command.ts#L87-L94 diff --git a/src/Composer/Console/HtmlOutputFormatter.php b/src/Composer/Console/HtmlOutputFormatter.php index 04afda4fc..84254cc64 100644 --- a/src/Composer/Console/HtmlOutputFormatter.php +++ b/src/Composer/Console/HtmlOutputFormatter.php @@ -23,7 +23,7 @@ use Symfony\Component\Console\Formatter\OutputFormatterStyle; class HtmlOutputFormatter extends OutputFormatter { /** @var array */ - private static $availableForegroundColors = array( + private static $availableForegroundColors = [ 30 => 'black', 31 => 'red', 32 => 'green', @@ -32,9 +32,9 @@ class HtmlOutputFormatter extends OutputFormatter 35 => 'magenta', 36 => 'cyan', 37 => 'white', - ); + ]; /** @var array */ - private static $availableBackgroundColors = array( + private static $availableBackgroundColors = [ 40 => 'black', 41 => 'red', 42 => 'green', @@ -43,20 +43,20 @@ class HtmlOutputFormatter extends OutputFormatter 45 => 'magenta', 46 => 'cyan', 47 => 'white', - ); + ]; /** @var array */ - private static $availableOptions = array( + private static $availableOptions = [ 1 => 'bold', 4 => 'underscore', //5 => 'blink', //7 => 'reverse', //8 => 'conceal' - ); + ]; /** * @param array $styles Array of "name => FormatterStyle" instances */ - public function __construct(array $styles = array()) + public function __construct(array $styles = []) { parent::__construct(true, $styles); } diff --git a/src/Composer/Console/Input/InputArgument.php b/src/Composer/Console/Input/InputArgument.php index 69c6dfb02..a73cd4921 100644 --- a/src/Composer/Console/Input/InputArgument.php +++ b/src/Composer/Console/Input/InputArgument.php @@ -44,7 +44,7 @@ class InputArgument extends BaseInputArgument * * @throws InvalidArgumentException When argument mode is not valid */ - public function __construct(string $name, int $mode = null, string $description = '', $default = null, $suggestedValues = []) + public function __construct(string $name, ?int $mode = null, string $description = '', $default = null, $suggestedValues = []) { parent::__construct($name, $mode, $description, $default); diff --git a/src/Composer/Console/Input/InputOption.php b/src/Composer/Console/Input/InputOption.php index 2d370ba51..aa5cfde97 100644 --- a/src/Composer/Console/Input/InputOption.php +++ b/src/Composer/Console/Input/InputOption.php @@ -43,7 +43,7 @@ class InputOption extends BaseInputOption * * @throws InvalidArgumentException If option mode is invalid or incompatible */ - public function __construct(string $name, $shortcut = null, int $mode = null, string $description = '', $default = null, $suggestedValues = []) + public function __construct(string $name, $shortcut = null, ?int $mode = null, string $description = '', $default = null, $suggestedValues = []) { parent::__construct($name, $shortcut, $mode, $description, $default); diff --git a/src/Composer/DependencyResolver/Decisions.php b/src/Composer/DependencyResolver/Decisions.php index 543ab2efa..931e83475 100644 --- a/src/Composer/DependencyResolver/Decisions.php +++ b/src/Composer/DependencyResolver/Decisions.php @@ -30,32 +30,23 @@ class Decisions implements \Iterator, \Countable /** * @var array */ - protected $decisionQueue = array(); + protected $decisionQueue = []; public function __construct(Pool $pool) { $this->pool = $pool; - $this->decisionMap = array(); + $this->decisionMap = []; } - /** - * @param int $literal - * @param int $level - * @return void - */ public function decide(int $literal, int $level, Rule $why): void { $this->addDecision($literal, $level); - $this->decisionQueue[] = array( + $this->decisionQueue[] = [ self::DECISION_LITERAL => $literal, self::DECISION_REASON => $why, - ); + ]; } - /** - * @param int $literal - * @return bool - */ public function satisfy(int $literal): bool { $packageId = abs($literal); @@ -66,10 +57,6 @@ class Decisions implements \Iterator, \Countable ); } - /** - * @param int $literal - * @return bool - */ public function conflict(int $literal): bool { $packageId = abs($literal); @@ -80,28 +67,16 @@ class Decisions implements \Iterator, \Countable ); } - /** - * @param int $literalOrPackageId - * @return bool - */ public function decided(int $literalOrPackageId): bool { return !empty($this->decisionMap[abs($literalOrPackageId)]); } - /** - * @param int $literalOrPackageId - * @return bool - */ public function undecided(int $literalOrPackageId): bool { return empty($this->decisionMap[abs($literalOrPackageId)]); } - /** - * @param int $literalOrPackageId - * @return bool - */ public function decidedInstall(int $literalOrPackageId): bool { $packageId = abs($literalOrPackageId); @@ -109,10 +84,6 @@ class Decisions implements \Iterator, \Countable return isset($this->decisionMap[$packageId]) && $this->decisionMap[$packageId] > 0; } - /** - * @param int $literalOrPackageId - * @return int - */ public function decisionLevel(int $literalOrPackageId): int { $packageId = abs($literalOrPackageId); @@ -123,10 +94,6 @@ class Decisions implements \Iterator, \Countable return 0; } - /** - * @param int $literalOrPackageId - * @return Rule|null - */ public function decisionRule(int $literalOrPackageId): ?Rule { $packageId = abs($literalOrPackageId); @@ -141,7 +108,6 @@ class Decisions implements \Iterator, \Countable } /** - * @param int $queueOffset * @return array{0: int, 1: Rule} a literal and decision reason */ public function atOffset(int $queueOffset): array @@ -149,34 +115,21 @@ class Decisions implements \Iterator, \Countable return $this->decisionQueue[$queueOffset]; } - /** - * @param int $queueOffset - * @return bool - */ public function validOffset(int $queueOffset): bool { return $queueOffset >= 0 && $queueOffset < \count($this->decisionQueue); } - /** - * @return Rule - */ public function lastReason(): Rule { return $this->decisionQueue[\count($this->decisionQueue) - 1][self::DECISION_REASON]; } - /** - * @return int - */ public function lastLiteral(): int { return $this->decisionQueue[\count($this->decisionQueue) - 1][self::DECISION_LITERAL]; } - /** - * @return void - */ public function reset(): void { while ($decision = array_pop($this->decisionQueue)) { @@ -184,10 +137,6 @@ class Decisions implements \Iterator, \Countable } } - /** - * @param int $offset - * @return void - */ public function resetToOffset(int $offset): void { while (\count($this->decisionQueue) > $offset + 1) { @@ -196,9 +145,6 @@ class Decisions implements \Iterator, \Countable } } - /** - * @return void - */ public function revertLast(): void { $this->decisionMap[abs($this->lastLiteral())] = 0; @@ -239,26 +185,18 @@ class Decisions implements \Iterator, \Countable return false !== current($this->decisionQueue); } - /** - * @return bool - */ public function isEmpty(): bool { return \count($this->decisionQueue) === 0; } - /** - * @param int $literal - * @param int $level - * @return void - */ protected function addDecision(int $literal, int $level): void { $packageId = abs($literal); $previousDecision = $this->decisionMap[$packageId] ?? 0; if ($previousDecision !== 0) { - $literalString = $this->pool->literalToPrettyString($literal, array()); + $literalString = $this->pool->literalToPrettyString($literal, []); $package = $this->pool->literalToPackage($literal); throw new SolverBugException( "Trying to decide $literalString on level $level, even though $package was previously decided as ".$previousDecision."." @@ -272,10 +210,7 @@ class Decisions implements \Iterator, \Countable } } - /** - * @return string - */ - public function toString(Pool $pool = null): string + public function toString(?Pool $pool = null): string { $decisionMap = $this->decisionMap; ksort($decisionMap); diff --git a/src/Composer/DependencyResolver/DefaultPolicy.php b/src/Composer/DependencyResolver/DefaultPolicy.php index 545ce2baa..52cbff350 100644 --- a/src/Composer/DependencyResolver/DefaultPolicy.php +++ b/src/Composer/DependencyResolver/DefaultPolicy.php @@ -32,10 +32,6 @@ class DefaultPolicy implements PolicyInterface /** @var array> */ private $sortingCachePerPool; - /** - * @param bool $preferStable - * @param bool $preferLowest - */ public function __construct(bool $preferStable = false, bool $preferLowest = false) { $this->preferStable = $preferStable; @@ -44,7 +40,6 @@ class DefaultPolicy implements PolicyInterface /** * @param string $operator One of Constraint::STR_OP_* - * @return bool * * @phpstan-param Constraint::STR_OP_* $operator */ @@ -65,7 +60,7 @@ class DefaultPolicy implements PolicyInterface * @param string $requiredPackage * @return int[] */ - public function selectPreferredPackages(Pool $pool, array $literals, string $requiredPackage = null): array + public function selectPreferredPackages(Pool $pool, array $literals, ?string $requiredPackage = null): array { sort($literals); $resultCacheKey = implode(',', $literals).$requiredPackage; @@ -94,7 +89,7 @@ class DefaultPolicy implements PolicyInterface $sortedLiterals = $this->pruneRemoteAliases($pool, $sortedLiterals); } - $selected = \call_user_func_array('array_merge', array_values($packages)); + $selected = array_merge(...array_values($packages)); // now sort the result across all packages to respect replaces across packages usort($selected, function ($a, $b) use ($pool, $requiredPackage, $poolId): int { @@ -116,12 +111,12 @@ class DefaultPolicy implements PolicyInterface */ protected function groupLiteralsByName(Pool $pool, array $literals): array { - $packages = array(); + $packages = []; foreach ($literals as $literal) { $packageName = $pool->literalToPackage($literal)->getName(); if (!isset($packages[$packageName])) { - $packages[$packageName] = array(); + $packages[$packageName] = []; } $packages[$packageName][] = $literal; } @@ -131,9 +126,6 @@ class DefaultPolicy implements PolicyInterface /** * @protected - * @param null|string $requiredPackage - * @param bool $ignoreReplace - * @return int */ public function compareByPriority(Pool $pool, BasePackage $a, BasePackage $b, ?string $requiredPackage = null, bool $ignoreReplace = false): int { @@ -185,8 +177,6 @@ class DefaultPolicy implements PolicyInterface * * Replace constraints are ignored. This method should only be used for * prioritisation, not for actual constraint verification. - * - * @return bool */ protected function replaces(BasePackage $source, BasePackage $target): bool { @@ -194,7 +184,7 @@ class DefaultPolicy implements PolicyInterface if ($link->getTarget() === $target->getName() // && (null === $link->getConstraint() || // $link->getConstraint()->matches(new Constraint('==', $target->getVersion())))) { - ) { + ) { return true; } } @@ -209,7 +199,7 @@ class DefaultPolicy implements PolicyInterface protected function pruneToBestVersion(Pool $pool, array $literals): array { $operator = $this->preferLowest ? '<' : '>'; - $bestLiterals = array($literals[0]); + $bestLiterals = [$literals[0]]; $bestPackage = $pool->literalToPackage($literals[0]); foreach ($literals as $i => $literal) { if (0 === $i) { @@ -220,7 +210,7 @@ class DefaultPolicy implements PolicyInterface if ($this->versionCompare($package, $bestPackage, $operator)) { $bestPackage = $package; - $bestLiterals = array($literal); + $bestLiterals = [$literal]; } elseif ($this->versionCompare($package, $bestPackage, '==')) { $bestLiterals[] = $literal; } @@ -254,7 +244,7 @@ class DefaultPolicy implements PolicyInterface return $literals; } - $selected = array(); + $selected = []; foreach ($literals as $literal) { $package = $pool->literalToPackage($literal); diff --git a/src/Composer/DependencyResolver/GenericRule.php b/src/Composer/DependencyResolver/GenericRule.php index d119d944b..f7cf7f23c 100644 --- a/src/Composer/DependencyResolver/GenericRule.php +++ b/src/Composer/DependencyResolver/GenericRule.php @@ -64,9 +64,6 @@ class GenericRule extends Rule return $this->literals === $rule->getLiterals(); } - /** - * @return bool - */ public function isAssertion(): bool { return 1 === \count($this->literals); @@ -74,8 +71,6 @@ class GenericRule extends Rule /** * Formats a rule as a string of the format (Literal1|Literal2|...) - * - * @return string */ public function __toString(): string { diff --git a/src/Composer/DependencyResolver/LockTransaction.php b/src/Composer/DependencyResolver/LockTransaction.php index 8e407b1fe..a9f8b7d0a 100644 --- a/src/Composer/DependencyResolver/LockTransaction.php +++ b/src/Composer/DependencyResolver/LockTransaction.php @@ -59,12 +59,10 @@ class LockTransaction extends Transaction } // TODO make this a bit prettier instead of the two text indexes? - /** - * @return void - */ + public function setResultPackages(Pool $pool, Decisions $decisions): void { - $this->resultPackages = array('all' => array(), 'non-dev' => array(), 'dev' => array()); + $this->resultPackages = ['all' => [], 'non-dev' => [], 'dev' => []]; foreach ($decisions as $i => $decision) { $literal = $decision[Decisions::DECISION_LITERAL]; @@ -79,15 +77,12 @@ class LockTransaction extends Transaction } } - /** - * @return void - */ public function setNonDevPackages(LockTransaction $extractionResult): void { $packages = $extractionResult->getNewLockPackages(false); $this->resultPackages['dev'] = $this->resultPackages['non-dev']; - $this->resultPackages['non-dev'] = array(); + $this->resultPackages['non-dev'] = []; foreach ($packages as $package) { foreach ($this->resultPackages['dev'] as $i => $resultPackage) { @@ -102,13 +97,11 @@ class LockTransaction extends Transaction // TODO additionalFixedRepository needs to be looked at here as well? /** - * @param bool $devMode - * @param bool $updateMirrors * @return BasePackage[] */ public function getNewLockPackages(bool $devMode, bool $updateMirrors = false): array { - $packages = array(); + $packages = []; foreach ($this->resultPackages[$devMode ? 'dev' : 'non-dev'] as $package) { if (!$package instanceof AliasPackage) { // if we're just updating mirrors we need to reset references to the same as currently "present" packages' references to keep the lock file as-is @@ -139,7 +132,7 @@ class LockTransaction extends Transaction */ public function getAliases(array $aliases): array { - $usedAliases = array(); + $usedAliases = []; foreach ($this->resultPackages['all'] as $package) { if ($package instanceof AliasPackage) { diff --git a/src/Composer/DependencyResolver/MultiConflictRule.php b/src/Composer/DependencyResolver/MultiConflictRule.php index d065a2a30..4826489d2 100644 --- a/src/Composer/DependencyResolver/MultiConflictRule.php +++ b/src/Composer/DependencyResolver/MultiConflictRule.php @@ -74,9 +74,6 @@ class MultiConflictRule extends Rule return false; } - /** - * @return bool - */ public function isAssertion(): bool { return false; @@ -93,8 +90,6 @@ class MultiConflictRule extends Rule /** * Formats a rule as a string of the format (Literal1|Literal2|...) - * - * @return string */ public function __toString(): string { diff --git a/src/Composer/DependencyResolver/Operation/InstallOperation.php b/src/Composer/DependencyResolver/Operation/InstallOperation.php index 7869402ab..6aa24f49d 100644 --- a/src/Composer/DependencyResolver/Operation/InstallOperation.php +++ b/src/Composer/DependencyResolver/Operation/InstallOperation.php @@ -35,8 +35,6 @@ class InstallOperation extends SolverOperation implements OperationInterface /** * Returns package instance. - * - * @return PackageInterface */ public function getPackage(): PackageInterface { @@ -51,10 +49,6 @@ class InstallOperation extends SolverOperation implements OperationInterface return self::format($this->package, $lock); } - /** - * @param bool $lock - * @return string - */ public static function format(PackageInterface $package, bool $lock = false): string { return ($lock ? 'Locking ' : 'Installing ').''.$package->getPrettyName().' ('.$package->getFullPrettyVersion().')'; diff --git a/src/Composer/DependencyResolver/Operation/MarkAliasInstalledOperation.php b/src/Composer/DependencyResolver/Operation/MarkAliasInstalledOperation.php index 84d48e3c4..5deac9632 100644 --- a/src/Composer/DependencyResolver/Operation/MarkAliasInstalledOperation.php +++ b/src/Composer/DependencyResolver/Operation/MarkAliasInstalledOperation.php @@ -35,8 +35,6 @@ class MarkAliasInstalledOperation extends SolverOperation implements OperationIn /** * Returns package instance. - * - * @return AliasPackage */ public function getPackage(): AliasPackage { diff --git a/src/Composer/DependencyResolver/Operation/MarkAliasUninstalledOperation.php b/src/Composer/DependencyResolver/Operation/MarkAliasUninstalledOperation.php index b28e4942c..9988f6ca7 100644 --- a/src/Composer/DependencyResolver/Operation/MarkAliasUninstalledOperation.php +++ b/src/Composer/DependencyResolver/Operation/MarkAliasUninstalledOperation.php @@ -35,8 +35,6 @@ class MarkAliasUninstalledOperation extends SolverOperation implements Operation /** * Returns package instance. - * - * @return AliasPackage */ public function getPackage(): AliasPackage { diff --git a/src/Composer/DependencyResolver/Operation/SolverOperation.php b/src/Composer/DependencyResolver/Operation/SolverOperation.php index 2eb9804ba..66f0da50f 100644 --- a/src/Composer/DependencyResolver/Operation/SolverOperation.php +++ b/src/Composer/DependencyResolver/Operation/SolverOperation.php @@ -26,8 +26,6 @@ abstract class SolverOperation implements OperationInterface /** * Returns operation type. - * - * @return string */ public function getOperationType(): string { diff --git a/src/Composer/DependencyResolver/Operation/UninstallOperation.php b/src/Composer/DependencyResolver/Operation/UninstallOperation.php index 9caa3248c..f6f5a4735 100644 --- a/src/Composer/DependencyResolver/Operation/UninstallOperation.php +++ b/src/Composer/DependencyResolver/Operation/UninstallOperation.php @@ -35,8 +35,6 @@ class UninstallOperation extends SolverOperation implements OperationInterface /** * Returns package instance. - * - * @return PackageInterface */ public function getPackage(): PackageInterface { @@ -51,10 +49,6 @@ class UninstallOperation extends SolverOperation implements OperationInterface return self::format($this->package, $lock); } - /** - * @param bool $lock - * @return string - */ public static function format(PackageInterface $package, bool $lock = false): string { return 'Removing '.$package->getPrettyName().' ('.$package->getFullPrettyVersion().')'; diff --git a/src/Composer/DependencyResolver/Operation/UpdateOperation.php b/src/Composer/DependencyResolver/Operation/UpdateOperation.php index f9f0fd4f5..48010fb1a 100644 --- a/src/Composer/DependencyResolver/Operation/UpdateOperation.php +++ b/src/Composer/DependencyResolver/Operation/UpdateOperation.php @@ -46,8 +46,6 @@ class UpdateOperation extends SolverOperation implements OperationInterface /** * Returns initial package. - * - * @return PackageInterface */ public function getInitialPackage(): PackageInterface { @@ -56,8 +54,6 @@ class UpdateOperation extends SolverOperation implements OperationInterface /** * Returns target package. - * - * @return PackageInterface */ public function getTargetPackage(): PackageInterface { @@ -72,10 +68,6 @@ class UpdateOperation extends SolverOperation implements OperationInterface return self::format($this->initialPackage, $this->targetPackage, $lock); } - /** - * @param bool $lock - * @return string - */ public static function format(PackageInterface $initialPackage, PackageInterface $targetPackage, bool $lock = false): string { $fromVersion = $initialPackage->getFullPrettyVersion(); diff --git a/src/Composer/DependencyResolver/PolicyInterface.php b/src/Composer/DependencyResolver/PolicyInterface.php index 655ea7191..928e7e0a9 100644 --- a/src/Composer/DependencyResolver/PolicyInterface.php +++ b/src/Composer/DependencyResolver/PolicyInterface.php @@ -21,16 +21,12 @@ use Composer\Semver\Constraint\Constraint; interface PolicyInterface { /** - * @param string $operator - * @return bool - * * @phpstan-param Constraint::STR_OP_* $operator */ public function versionCompare(PackageInterface $a, PackageInterface $b, string $operator): bool; /** * @param int[] $literals - * @param null|string $requiredPackage * @return int[] */ public function selectPreferredPackages(Pool $pool, array $literals, ?string $requiredPackage = null): array; diff --git a/src/Composer/DependencyResolver/Pool.php b/src/Composer/DependencyResolver/Pool.php index 73a9052b8..48f47cb2c 100644 --- a/src/Composer/DependencyResolver/Pool.php +++ b/src/Composer/DependencyResolver/Pool.php @@ -27,19 +27,19 @@ use Composer\Semver\Constraint\Constraint; class Pool implements \Countable { /** @var BasePackage[] */ - protected $packages = array(); + protected $packages = []; /** @var array */ - protected $packageByName = array(); + protected $packageByName = []; /** @var VersionParser */ protected $versionParser; /** @var array> */ - protected $providerCache = array(); + protected $providerCache = []; /** @var BasePackage[] */ protected $unacceptableFixedOrLockedPackages; /** @var array> Map of package name => normalized version => pretty version */ - protected $removedVersions = array(); + protected $removedVersions = []; /** @var array> Map of package object hash => removed normalized versions => removed pretty version */ - protected $removedVersionsByPackage = array(); + protected $removedVersionsByPackage = []; /** * @param BasePackage[] $packages @@ -47,7 +47,7 @@ class Pool implements \Countable * @param array> $removedVersions * @param array> $removedVersionsByPackage */ - public function __construct(array $packages = array(), array $unacceptableFixedOrLockedPackages = array(), array $removedVersions = array(), array $removedVersionsByPackage = array()) + public function __construct(array $packages = [], array $unacceptableFixedOrLockedPackages = [], array $removedVersions = [], array $removedVersionsByPackage = []) { $this->versionParser = new VersionParser; $this->setPackages($packages); @@ -57,16 +57,15 @@ class Pool implements \Countable } /** - * @param string $name * @return array */ public function getRemovedVersions(string $name, ConstraintInterface $constraint): array { if (!isset($this->removedVersions[$name])) { - return array(); + return []; } - $result = array(); + $result = []; foreach ($this->removedVersions[$name] as $version => $prettyVersion) { if ($constraint->matches(new Constraint('==', $version))) { $result[$version] = $prettyVersion; @@ -77,13 +76,12 @@ class Pool implements \Countable } /** - * @param string $objectHash * @return array */ public function getRemovedVersionsByPackage(string $objectHash): array { if (!isset($this->removedVersionsByPackage[$objectHash])) { - return array(); + return []; } return $this->removedVersionsByPackage[$objectHash]; @@ -91,7 +89,6 @@ class Pool implements \Countable /** * @param BasePackage[] $packages - * @return void */ private function setPackages(array $packages): void { @@ -118,9 +115,6 @@ class Pool implements \Countable /** * Retrieves the package object for a given package id. - * - * @param int $id - * @return BasePackage */ public function packageById(int $id): BasePackage { @@ -143,7 +137,7 @@ class Pool implements \Countable * packages must match or null to return all * @return BasePackage[] A set of packages */ - public function whatProvides(string $name, ConstraintInterface $constraint = null): array + public function whatProvides(string $name, ?ConstraintInterface $constraint = null): array { $key = (string) $constraint; if (isset($this->providerCache[$name][$key])) { @@ -159,13 +153,13 @@ class Pool implements \Countable * packages must match or null to return all * @return BasePackage[] */ - private function computeWhatProvides(string $name, ConstraintInterface $constraint = null): array + private function computeWhatProvides(string $name, ?ConstraintInterface $constraint = null): array { if (!isset($this->packageByName[$name])) { - return array(); + return []; } - $matches = array(); + $matches = []; foreach ($this->packageByName[$name] as $candidate) { if ($this->match($candidate, $name, $constraint)) { @@ -176,10 +170,6 @@ class Pool implements \Countable return $matches; } - /** - * @param int $literal - * @return BasePackage - */ public function literalToPackage(int $literal): BasePackage { $packageId = abs($literal); @@ -188,9 +178,7 @@ class Pool implements \Countable } /** - * @param int $literal * @param array $installedMap - * @return string */ public function literalToPrettyString(int $literal, array $installedMap): string { @@ -210,9 +198,8 @@ class Pool implements \Countable * provided or replaced packages * * @param string $name Name of the package to be matched - * @return bool */ - public function match(BasePackage $candidate, string $name, ConstraintInterface $constraint = null): bool + public function match(BasePackage $candidate, string $name, ?ConstraintInterface $constraint = null): bool { $candidateName = $candidate->getName(); $candidateVersion = $candidate->getVersion(); @@ -252,9 +239,6 @@ class Pool implements \Countable return false; } - /** - * @return bool - */ public function isUnacceptableFixedOrLockedPackage(BasePackage $package): bool { return \in_array($package, $this->unacceptableFixedOrLockedPackages, true); diff --git a/src/Composer/DependencyResolver/PoolBuilder.php b/src/Composer/DependencyResolver/PoolBuilder.php index cb9732ff2..9de4bed71 100644 --- a/src/Composer/DependencyResolver/PoolBuilder.php +++ b/src/Composer/DependencyResolver/PoolBuilder.php @@ -78,34 +78,34 @@ class PoolBuilder * @var array[] * @phpstan-var array */ - private $aliasMap = array(); + private $aliasMap = []; /** * @var ConstraintInterface[] * @phpstan-var array */ - private $packagesToLoad = array(); + private $packagesToLoad = []; /** * @var ConstraintInterface[] * @phpstan-var array */ - private $loadedPackages = array(); + private $loadedPackages = []; /** * @var array[] * @phpstan-var array>> */ - private $loadedPerRepo = array(); + private $loadedPerRepo = []; /** * @var BasePackage[] */ - private $packages = array(); + private $packages = []; /** * @var BasePackage[] */ - private $unacceptableFixedOrLockedPackages = array(); + private $unacceptableFixedOrLockedPackages = []; /** @var string[] */ - private $updateAllowList = array(); + private $updateAllowList = []; /** @var array> */ - private $skippedLoad = array(); + private $skippedLoad = []; /** * Keeps a list of dependencies which are locked but were auto-unlocked as they are path repositories @@ -115,7 +115,7 @@ class PoolBuilder * * @var array */ - private $pathRepoUnlocked = array(); + private $pathRepoUnlocked = []; /** * Keeps a list of dependencies which are root requirements, and as such @@ -127,12 +127,12 @@ class PoolBuilder * * @var array */ - private $maxExtendedReqs = array(); + private $maxExtendedReqs = []; /** * @var array * @phpstan-var array */ - private $updateAllowWarned = array(); + private $updateAllowWarned = []; /** @var int */ private $indexCounter = 0; @@ -148,7 +148,7 @@ class PoolBuilder * @phpstan-param array $rootReferences * @param array $temporaryConstraints Runtime temporary constraints that will be used to filter packages */ - public function __construct(array $acceptableStabilities, array $stabilityFlags, array $rootAliases, array $rootReferences, IOInterface $io, EventDispatcher $eventDispatcher = null, PoolOptimizer $poolOptimizer = null, array $temporaryConstraints = []) + public function __construct(array $acceptableStabilities, array $stabilityFlags, array $rootAliases, array $rootReferences, IOInterface $io, ?EventDispatcher $eventDispatcher = null, ?PoolOptimizer $poolOptimizer = null, array $temporaryConstraints = []) { $this->acceptableStabilities = $acceptableStabilities; $this->stabilityFlags = $stabilityFlags; @@ -162,7 +162,6 @@ class PoolBuilder /** * @param RepositoryInterface[] $repositories - * @return Pool */ public function buildPool(array $repositories, Request $request): Pool { @@ -248,7 +247,7 @@ class PoolBuilder } $constraint = $this->temporaryConstraints[$package->getName()]; - $packageAndAliases = array($i => $package); + $packageAndAliases = [$i => $package]; if (isset($this->aliasMap[spl_object_hash($package)])) { $packageAndAliases += $this->aliasMap[spl_object_hash($package)]; } @@ -287,14 +286,14 @@ class PoolBuilder $pool = new Pool($this->packages, $this->unacceptableFixedOrLockedPackages); - $this->aliasMap = array(); - $this->packagesToLoad = array(); - $this->loadedPackages = array(); - $this->loadedPerRepo = array(); - $this->packages = array(); - $this->unacceptableFixedOrLockedPackages = array(); - $this->maxExtendedReqs = array(); - $this->skippedLoad = array(); + $this->aliasMap = []; + $this->packagesToLoad = []; + $this->loadedPackages = []; + $this->loadedPerRepo = []; + $this->packages = []; + $this->unacceptableFixedOrLockedPackages = []; + $this->maxExtendedReqs = []; + $this->skippedLoad = []; $this->indexCounter = 0; $this->io->debug('Built pool.'); @@ -306,10 +305,6 @@ class PoolBuilder return $pool; } - /** - * @param string $name - * @return void - */ private function markPackageNameForLoading(Request $request, string $name, ConstraintInterface $constraint): void { // Skip platform requires at this stage @@ -344,7 +339,7 @@ class PoolBuilder } // extend the constraint to be loaded - $constraint = Intervals::compactConstraint(MultiConstraint::create(array($this->packagesToLoad[$name], $constraint), false)); + $constraint = Intervals::compactConstraint(MultiConstraint::create([$this->packagesToLoad[$name], $constraint], false)); } $this->packagesToLoad[$name] = $constraint; @@ -361,13 +356,12 @@ class PoolBuilder // We have already loaded that package but not in the constraint that's // required. We extend the constraint and mark that package as not being loaded // yet so we get the required package versions - $this->packagesToLoad[$name] = Intervals::compactConstraint(MultiConstraint::create(array($this->loadedPackages[$name], $constraint), false)); + $this->packagesToLoad[$name] = Intervals::compactConstraint(MultiConstraint::create([$this->loadedPackages[$name], $constraint], false)); unset($this->loadedPackages[$name]); } /** * @param RepositoryInterface[] $repositories - * @return void */ private function loadPackagesMarkedForLoading(Request $request, array $repositories): void { @@ -376,7 +370,7 @@ class PoolBuilder } $packageBatch = $this->packagesToLoad; - $this->packagesToLoad = array(); + $this->packagesToLoad = []; foreach ($repositories as $repoIndex => $repository) { if (empty($packageBatch)) { @@ -388,7 +382,7 @@ class PoolBuilder if ($repository instanceof PlatformRepository || $repository === $request->getLockedRepository()) { continue; } - $result = $repository->loadPackages($packageBatch, $this->acceptableStabilities, $this->stabilityFlags, $this->loadedPerRepo[$repoIndex] ?? array()); + $result = $repository->loadPackages($packageBatch, $this->acceptableStabilities, $this->stabilityFlags, $this->loadedPerRepo[$repoIndex] ?? []); foreach ($result['namesFound'] as $name) { // avoid loading the same package again from other repositories once it has been found @@ -402,9 +396,7 @@ class PoolBuilder } /** - * @param bool $propagateUpdate * @param RepositoryInterface[] $repositories - * @return void */ private function loadPackage(Request $request, array $repositories, BasePackage $package, bool $propagateUpdate): void { @@ -509,7 +501,6 @@ class PoolBuilder * Checks if a particular name is required directly in the request * * @param string $name packageName - * @return bool */ private function isRootRequire(Request $request, string $name): bool { @@ -519,17 +510,16 @@ class PoolBuilder } /** - * @param string $name * @return string[] */ private function getSkippedRootRequires(Request $request, string $name): array { if (!isset($this->skippedLoad[$name])) { - return array(); + return []; } $rootRequires = $request->getRequires(); - $matches = array(); + $matches = []; if (isset($rootRequires[$name])) { return array_map(static function (PackageInterface $package) use ($name): string { @@ -562,8 +552,6 @@ class PoolBuilder /** * Checks whether the update allow list allows this package in the lock file to be updated - * - * @return bool */ private function isUpdateAllowed(BasePackage $package): bool { @@ -577,9 +565,6 @@ class PoolBuilder return false; } - /** - * @return void - */ private function warnAboutNonMatchingUpdateAllowList(Request $request): void { foreach ($this->updateAllowList as $pattern => $void) { @@ -609,8 +594,6 @@ class PoolBuilder * found that this package actually needs to be updated * * @param RepositoryInterface[] $repositories - * @param string $name - * @return void */ private function unlockPackage(Request $request, array $repositories, string $name): void { @@ -675,8 +658,6 @@ class PoolBuilder /** * @param RepositoryInterface[] $repositories - * @param int $index - * @return void */ private function removeLoadedPackage(Request $request, array $repositories, BasePackage $package, int $index): void { @@ -693,9 +674,6 @@ class PoolBuilder } } - /** - * @return Pool - */ private function runOptimizer(Request $request, Pool $pool): Pool { if (null === $this->poolOptimizer) { diff --git a/src/Composer/DependencyResolver/PoolOptimizer.php b/src/Composer/DependencyResolver/PoolOptimizer.php index d2f37c89c..c53891fb6 100644 --- a/src/Composer/DependencyResolver/PoolOptimizer.php +++ b/src/Composer/DependencyResolver/PoolOptimizer.php @@ -36,41 +36,38 @@ class PoolOptimizer /** * @var array */ - private $irremovablePackages = array(); + private $irremovablePackages = []; /** * @var array> */ - private $requireConstraintsPerPackage = array(); + private $requireConstraintsPerPackage = []; /** * @var array> */ - private $conflictConstraintsPerPackage = array(); + private $conflictConstraintsPerPackage = []; /** * @var array */ - private $packagesToRemove = array(); + private $packagesToRemove = []; /** * @var array */ - private $aliasesPerPackage = array(); + private $aliasesPerPackage = []; /** * @var array> */ - private $removedVersionsByPackage = array(); + private $removedVersionsByPackage = []; public function __construct(PolicyInterface $policy) { $this->policy = $policy; } - /** - * @return Pool - */ public function optimize(Request $request, Pool $pool): Pool { $this->prepare($request, $pool); @@ -86,22 +83,19 @@ class PoolOptimizer // even more gains when ran again. Might change // in the future with additional optimizations. - $this->irremovablePackages = array(); - $this->requireConstraintsPerPackage = array(); - $this->conflictConstraintsPerPackage = array(); - $this->packagesToRemove = array(); - $this->aliasesPerPackage = array(); - $this->removedVersionsByPackage = array(); + $this->irremovablePackages = []; + $this->requireConstraintsPerPackage = []; + $this->conflictConstraintsPerPackage = []; + $this->packagesToRemove = []; + $this->aliasesPerPackage = []; + $this->removedVersionsByPackage = []; return $optimizedPool; } - /** - * @return void - */ private function prepare(Request $request, Pool $pool): void { - $irremovablePackageConstraintGroups = array(); + $irremovablePackageConstraintGroups = []; // Mark fixed or locked packages as irremovable foreach ($request->getFixedOrLockedPackages() as $package) { @@ -131,7 +125,7 @@ class PoolOptimizer } } - $irremovablePackageConstraints = array(); + $irremovablePackageConstraints = []; foreach ($irremovablePackageConstraintGroups as $packageName => $constraints) { $irremovablePackageConstraints[$packageName] = 1 === \count($constraints) ? $constraints[0] : new MultiConstraint($constraints, false); } @@ -149,9 +143,6 @@ class PoolOptimizer } } - /** - * @return void - */ private function markPackageIrremovable(BasePackage $package): void { $this->irremovablePackages[$package->id] = true; @@ -172,8 +163,8 @@ class PoolOptimizer */ private function applyRemovalsToPool(Pool $pool): Pool { - $packages = array(); - $removedVersions = array(); + $packages = []; + $removedVersions = []; foreach ($pool->getPackages() as $package) { if (!isset($this->packagesToRemove[$package->id])) { $packages[] = $package; @@ -187,13 +178,10 @@ class PoolOptimizer return $optimizedPool; } - /** - * @return void - */ private function optimizeByIdenticalDependencies(Request $request, Pool $pool): void { - $identicalDefinitionsPerPackage = array(); - $packageIdenticalDefinitionLookup = array(); + $identicalDefinitionsPerPackage = []; + $packageIdenticalDefinitionLookup = []; foreach ($pool->getPackages() as $package) { @@ -213,7 +201,7 @@ class PoolOptimizer } foreach ($this->requireConstraintsPerPackage[$packageName] as $requireConstraint) { - $groupHashParts = array(); + $groupHashParts = []; if (CompilingMatcher::match($requireConstraint, Constraint::OP_EQ, $package->getVersion())) { $groupHashParts[] = 'require:' . (string) $requireConstraint; @@ -242,7 +230,7 @@ class PoolOptimizer $groupHash = implode('', $groupHashParts); $identicalDefinitionsPerPackage[$packageName][$groupHash][$dependencyHash][] = $package; - $packageIdenticalDefinitionLookup[$package->id][$packageName] = array('groupHash' => $groupHash, 'dependencyHash' => $dependencyHash); + $packageIdenticalDefinitionLookup[$package->id][$packageName] = ['groupHash' => $groupHash, 'dependencyHash' => $dependencyHash]; } } } @@ -258,7 +246,7 @@ class PoolOptimizer // Otherwise we find out which one is the preferred package in this constraint group which is // then not allowed to be removed either - $literals = array(); + $literals = []; foreach ($packages as $package) { $literals[] = $package->id; @@ -272,19 +260,16 @@ class PoolOptimizer } } - /** - * @return string - */ private function calculateDependencyHash(BasePackage $package): string { $hash = ''; - $hashRelevantLinks = array( + $hashRelevantLinks = [ 'requires' => $package->getRequires(), 'conflicts' => $package->getConflicts(), 'replaces' => $package->getReplaces(), 'provides' => $package->getProvides(), - ); + ]; foreach ($hashRelevantLinks as $key => $links) { if (0 === \count($links)) { @@ -294,7 +279,7 @@ class PoolOptimizer // start new hash section $hash .= $key . ':'; - $subhash = array(); + $subhash = []; foreach ($links as $link) { // To get the best dependency hash matches we should use Intervals::compactConstraint() here. @@ -315,10 +300,6 @@ class PoolOptimizer return $hash; } - /** - * @param int $id - * @return void - */ private function markPackageForRemoval(int $id): void { // We are not allowed to remove packages if they have been marked as irremovable @@ -332,7 +313,6 @@ class PoolOptimizer /** * @param array>>> $identicalDefinitionsPerPackage * @param array> $packageIdenticalDefinitionLookup - * @return void */ private function keepPackage(BasePackage $package, array $identicalDefinitionsPerPackage, array $packageIdenticalDefinitionLookup): void { @@ -388,8 +368,6 @@ class PoolOptimizer * Use the list of locked packages to constrain the loaded packages * This will reduce packages with significant numbers of historical versions to a smaller number * and reduce the resulting rule set that is generated - * - * @return void */ private function optimizeImpossiblePackagesAway(Request $request, Pool $pool): void { @@ -397,7 +375,7 @@ class PoolOptimizer return; } - $packageIndex = array(); + $packageIndex = []; foreach ($pool->getPackages() as $package) { $id = $package->id; @@ -455,11 +433,9 @@ class PoolOptimizer * two require constraint groups in order for us to keep the best matching package for "^2.14" AND "^3.3" as otherwise, we'd * only keep either one which can cause trouble (e.g. when using --prefer-lowest). * - * @param string $package - * @param ConstraintInterface $constraint * @return void */ - private function extractRequireConstraintsPerPackage($package, ConstraintInterface $constraint) + private function extractRequireConstraintsPerPackage(string $package, ConstraintInterface $constraint) { foreach ($this->expandDisjunctiveMultiConstraints($constraint) as $expanded) { $this->requireConstraintsPerPackage[$package][(string) $expanded] = $expanded; @@ -471,11 +447,9 @@ class PoolOptimizer * two conflict constraint groups in order for us to keep the best matching package for "^2.14" AND "^3.3" as otherwise, we'd * only keep either one which can cause trouble (e.g. when using --prefer-lowest). * - * @param string $package - * @param ConstraintInterface $constraint * @return void */ - private function extractConflictConstraintsPerPackage($package, ConstraintInterface $constraint) + private function extractConflictConstraintsPerPackage(string $package, ConstraintInterface $constraint) { foreach ($this->expandDisjunctiveMultiConstraints($constraint) as $expanded) { $this->conflictConstraintsPerPackage[$package][(string) $expanded] = $expanded; @@ -483,8 +457,6 @@ class PoolOptimizer } /** - * - * @param ConstraintInterface $constraint * @return ConstraintInterface[] */ private function expandDisjunctiveMultiConstraints(ConstraintInterface $constraint) @@ -498,6 +470,6 @@ class PoolOptimizer } // Regular constraints and conjunctive MultiConstraints - return array($constraint); + return [$constraint]; } } diff --git a/src/Composer/DependencyResolver/Problem.php b/src/Composer/DependencyResolver/Problem.php index fd38b5f23..9ded041f4 100644 --- a/src/Composer/DependencyResolver/Problem.php +++ b/src/Composer/DependencyResolver/Problem.php @@ -43,7 +43,7 @@ class Problem * A set of reasons for the problem, each is a rule or a root require and a rule * @var array> */ - protected $reasons = array(); + protected $reasons = []; /** @var int */ protected $section = 0; @@ -52,7 +52,6 @@ class Problem * Add a rule as a reason * * @param Rule $rule A rule which is a reason for this problem - * @return void */ public function addRule(Rule $rule): void { @@ -72,22 +71,20 @@ class Problem /** * A human readable textual representation of the problem's reasons * - * @param bool $isVerbose * @param array $installedMap A map of all present packages * @param array $learnedPool - * @return string */ - public function getPrettyString(RepositorySet $repositorySet, Request $request, Pool $pool, bool $isVerbose, array $installedMap = array(), array $learnedPool = array()): string + public function getPrettyString(RepositorySet $repositorySet, Request $request, Pool $pool, bool $isVerbose, array $installedMap = [], array $learnedPool = []): string { // TODO doesn't this entirely defeat the purpose of the problem sections? what's the point of sections? - $reasons = call_user_func_array('array_merge', array_reverse($this->reasons)); + $reasons = array_merge(...array_reverse($this->reasons)); if (count($reasons) === 1) { reset($reasons); $rule = current($reasons); - if (!in_array($rule->getReason(), array(Rule::RULE_ROOT_REQUIRE, Rule::RULE_FIXED), true)) { - throw new \LogicException("Single reason problems must contain a request rule."); + if ($rule->getReason() !== Rule::RULE_ROOT_REQUIRE) { + throw new \LogicException("Single reason problems must contain a root require rule."); } $reasonData = $rule->getReasonData(); @@ -97,7 +94,7 @@ class Problem if (isset($constraint)) { $packages = $pool->whatProvides($packageName, $constraint); } else { - $packages = array(); + $packages = []; } if (empty($packages)) { @@ -110,19 +107,16 @@ class Problem /** * @param Rule[] $rules - * @param string $indent - * @param bool $isVerbose * @param array $installedMap A map of all present packages * @param array $learnedPool - * @return string * @internal */ - public static function formatDeduplicatedRules(array $rules, string $indent, RepositorySet $repositorySet, Request $request, Pool $pool, bool $isVerbose, array $installedMap = array(), array $learnedPool = array()): string + public static function formatDeduplicatedRules(array $rules, string $indent, RepositorySet $repositorySet, Request $request, Pool $pool, bool $isVerbose, array $installedMap = [], array $learnedPool = []): string { - $messages = array(); - $templates = array(); + $messages = []; + $templates = []; $parser = new VersionParser; - $deduplicatableRuleTypes = array(Rule::RULE_PACKAGE_REQUIRES, Rule::RULE_PACKAGE_CONFLICT); + $deduplicatableRuleTypes = [Rule::RULE_PACKAGE_REQUIRES, Rule::RULE_PACKAGE_CONFLICT]; foreach ($rules as $rule) { $message = $rule->getPrettyString($repositorySet, $request, $pool, $isVerbose, $installedMap, $learnedPool); if (in_array($rule->getReason(), $deduplicatableRuleTypes, true) && Preg::isMatch('{^(?P\S+) (?P\S+) (?Prequires|conflicts)}', $message, $m)) { @@ -138,7 +132,7 @@ class Problem } } - $result = array(); + $result = []; foreach (array_unique($messages) as $message) { if (isset($templates[$message])) { foreach ($templates[$message] as $package => $versions) { @@ -162,9 +156,6 @@ class Problem return "\n$indent- ".implode("\n$indent- ", $result); } - /** - * @return bool - */ public function isCausedByLock(RepositorySet $repositorySet, Request $request, Pool $pool): bool { foreach ($this->reasons as $sectionRules) { @@ -183,7 +174,6 @@ class Problem * * @param string $id A canonical identifier for the reason * @param Rule $reason The reason descriptor - * @return void */ protected function addReason(string $id, Rule $reason): void { @@ -196,9 +186,6 @@ class Problem } } - /** - * @return void - */ public function nextSection(): void { $this->section++; @@ -206,11 +193,9 @@ class Problem /** * @internal - * @param bool $isVerbose - * @param string $packageName * @return array{0: string, 1: string} */ - public static function getMissingPackageReason(RepositorySet $repositorySet, Request $request, Pool $pool, bool $isVerbose, string $packageName, ConstraintInterface $constraint = null): array + public static function getMissingPackageReason(RepositorySet $repositorySet, Request $request, Pool $pool, bool $isVerbose, string $packageName, ?ConstraintInterface $constraint = null): array { if (PlatformRepository::isPlatformPackage($packageName)) { // handle php/php-*/hhvm @@ -220,24 +205,24 @@ class Problem $msg = "- Root composer.json requires ".$packageName.self::constraintToText($constraint).' but '; if (defined('HHVM_VERSION') || ($packageName === 'hhvm' && count($pool->whatProvides($packageName)) > 0)) { - return array($msg, 'your HHVM version does not satisfy that requirement.'); + return [$msg, 'your HHVM version does not satisfy that requirement.']; } if ($packageName === 'hhvm') { - return array($msg, 'HHVM was not detected on this machine, make sure it is in your PATH.'); + return [$msg, 'HHVM was not detected on this machine, make sure it is in your PATH.']; } if (null === $version) { - return array($msg, 'the '.$packageName.' package is disabled by your platform config. Enable it again with "composer config platform.'.$packageName.' --unset".'); + return [$msg, 'the '.$packageName.' package is disabled by your platform config. Enable it again with "composer config platform.'.$packageName.' --unset".']; } - return array($msg, 'your '.$packageName.' version ('. $version .') does not satisfy that requirement.'); + return [$msg, 'your '.$packageName.' version ('. $version .') does not satisfy that requirement.']; } // handle php extensions if (0 === stripos($packageName, 'ext-')) { if (false !== strpos($packageName, ' ')) { - return array('- ', "PHP extension ".$packageName.' should be required as '.str_replace(' ', '-', $packageName).'.'); + return ['- ', "PHP extension ".$packageName.' should be required as '.str_replace(' ', '-', $packageName).'.']; } $ext = substr($packageName, 4); @@ -246,16 +231,16 @@ class Problem $version = self::getPlatformPackageVersion($pool, $packageName, phpversion($ext) ?: '0'); if (null === $version) { if (extension_loaded($ext)) { - return array( + return [ $msg, 'the '.$packageName.' package is disabled by your platform config. Enable it again with "composer config platform.'.$packageName.' --unset".', - ); + ]; } - return array($msg, 'it is missing from your system. Install or enable PHP\'s '.$ext.' extension.'); + return [$msg, 'it is missing from your system. Install or enable PHP\'s '.$ext.' extension.']; } - return array($msg, 'it has the wrong version installed ('.$version.').'); + return [$msg, 'it has the wrong version installed ('.$version.').']; } // handle linked libs @@ -263,10 +248,10 @@ class Problem if (strtolower($packageName) === 'lib-icu') { $error = extension_loaded('intl') ? 'it has the wrong version installed, try upgrading the intl extension.' : 'it is missing from your system, make sure the intl extension is loaded.'; - return array("- Root composer.json requires linked library ".$packageName.self::constraintToText($constraint).' but ', $error); + return ["- Root composer.json requires linked library ".$packageName.self::constraintToText($constraint).' but ', $error]; } - return array("- Root composer.json requires linked library ".$packageName.self::constraintToText($constraint).' but ', 'it has the wrong version installed or is missing from your system, make sure to load the extension providing it.'); + return ["- Root composer.json requires linked library ".$packageName.self::constraintToText($constraint).' but ', 'it has the wrong version installed or is missing from your system, make sure to load the extension providing it.']; } } @@ -275,7 +260,7 @@ class Problem if ($package->getName() === $packageName) { $lockedPackage = $package; if ($pool->isUnacceptableFixedOrLockedPackage($package)) { - return array("- ", $package->getPrettyName().' is fixed to '.$package->getPrettyVersion().' (lock file version) by a partial update but that version is rejected by your minimum-stability. Make sure you list it as an argument for the update command.'); + return ["- ", $package->getPrettyName().' is fixed to '.$package->getPrettyVersion().' (lock file version) by a partial update but that version is rejected by your minimum-stability. Make sure you list it as an argument for the update command.']; } break; } @@ -290,7 +275,7 @@ class Problem return $rootReqs[$packageName]->matches(new Constraint('==', $p->getVersion())); }); if (0 === count($filtered)) { - return array("- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found '.self::getPackageList($packages, $isVerbose, $pool, $constraint).' but '.(self::hasMultipleNames($packages) ? 'these conflict' : 'it conflicts').' with your root composer.json require ('.$rootReqs[$packageName]->getPrettyString().').'); + return ["- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found '.self::getPackageList($packages, $isVerbose, $pool, $constraint).' but '.(self::hasMultipleNames($packages) ? 'these conflict' : 'it conflicts').' with your root composer.json require ('.$rootReqs[$packageName]->getPrettyString().').']; } } @@ -300,7 +285,7 @@ class Problem return $tempReqs[$packageName]->matches(new Constraint('==', $p->getVersion())); }); if (0 === count($filtered)) { - return array("- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found '.self::getPackageList($packages, $isVerbose, $pool, $constraint).' but '.(self::hasMultipleNames($packages) ? 'these conflict' : 'it conflicts').' with your temporary update constraint ('.$packageName.':'.$tempReqs[$packageName]->getPrettyString().').'); + return ["- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found '.self::getPackageList($packages, $isVerbose, $pool, $constraint).' but '.(self::hasMultipleNames($packages) ? 'these conflict' : 'it conflicts').' with your temporary update constraint ('.$packageName.':'.$tempReqs[$packageName]->getPrettyString().').']; } } @@ -310,7 +295,7 @@ class Problem return $fixedConstraint->matches(new Constraint('==', $p->getVersion())); }); if (0 === count($filtered)) { - return array("- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found '.self::getPackageList($packages, $isVerbose, $pool, $constraint).' but the package is fixed to '.$lockedPackage->getPrettyVersion().' (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.'); + return ["- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found '.self::getPackageList($packages, $isVerbose, $pool, $constraint).' but the package is fixed to '.$lockedPackage->getPrettyVersion().' (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.']; } } @@ -319,10 +304,10 @@ class Problem }); if (!$nonLockedPackages) { - return array("- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found '.self::getPackageList($packages, $isVerbose, $pool, $constraint).' in the lock file but not in remote repositories, make sure you avoid updating this package to keep the one from the lock file.'); + return ["- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found '.self::getPackageList($packages, $isVerbose, $pool, $constraint).' in the lock file but not in remote repositories, make sure you avoid updating this package to keep the one from the lock file.']; } - return array("- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found '.self::getPackageList($packages, $isVerbose, $pool, $constraint).' but these were not loaded, likely because '.(self::hasMultipleNames($packages) ? 'they conflict' : 'it conflicts').' with another require.'); + return ["- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found '.self::getPackageList($packages, $isVerbose, $pool, $constraint).' but these were not loaded, likely because '.(self::hasMultipleNames($packages) ? 'they conflict' : 'it conflicts').' with another require.']; } // check if the package is found when bypassing stability checks @@ -332,7 +317,7 @@ class Problem return self::computeCheckForLowerPrioRepo($pool, $isVerbose, $packageName, $packages, $allReposPackages, 'minimum-stability', $constraint); } - return array("- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found '.self::getPackageList($packages, $isVerbose, $pool, $constraint).' but '.(self::hasMultipleNames($packages) ? 'these do' : 'it does').' not match your minimum-stability.'); + return ["- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found '.self::getPackageList($packages, $isVerbose, $pool, $constraint).' but '.(self::hasMultipleNames($packages) ? 'these do' : 'it does').' not match your minimum-stability.']; } // check if the package is found when bypassing the constraint and stability checks @@ -345,7 +330,7 @@ class Problem $suffix = ''; if ($constraint instanceof Constraint && $constraint->getVersion() === 'dev-master') { foreach ($packages as $candidate) { - if (in_array($candidate->getVersion(), array('dev-default', 'dev-main'), true)) { + if (in_array($candidate->getVersion(), ['dev-default', 'dev-main'], true)) { $suffix = ' Perhaps dev-master was renamed to '.$candidate->getPrettyVersion().'?'; break; } @@ -359,13 +344,13 @@ class Problem $suffix = ' See https://getcomposer.org/dep-on-root for details and assistance.'; } - return array("- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found '.self::getPackageList($packages, $isVerbose, $pool, $constraint).' but '.(self::hasMultipleNames($packages) ? 'these do' : 'it does').' not match the constraint.' . $suffix); + return ["- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found '.self::getPackageList($packages, $isVerbose, $pool, $constraint).' but '.(self::hasMultipleNames($packages) ? 'these do' : 'it does').' not match the constraint.' . $suffix]; } if (!Preg::isMatch('{^[A-Za-z0-9_./-]+$}', $packageName)) { $illegalChars = Preg::replace('{[A-Za-z0-9_./-]+}', '', $packageName); - return array("- Root composer.json requires $packageName, it ", 'could not be found, it looks like its name is invalid, "'.$illegalChars.'" is not allowed in package names.'); + return ["- Root composer.json requires $packageName, it ", 'could not be found, it looks like its name is invalid, "'.$illegalChars.'" is not allowed in package names.']; } if ($providers = $repositorySet->getProviders($packageName)) { @@ -379,23 +364,20 @@ class Problem $providersStr .= ' ... and '.(count($providers) - $maxProviders).' more.'."\n"; } - return array("- Root composer.json requires $packageName".self::constraintToText($constraint).", it ", "could not be found in any version, but the following packages provide it:\n".$providersStr." Consider requiring one of these to satisfy the $packageName requirement."); + return ["- Root composer.json requires $packageName".self::constraintToText($constraint).", it ", "could not be found in any version, but the following packages provide it:\n".$providersStr." Consider requiring one of these to satisfy the $packageName requirement."]; } - return array("- Root composer.json requires $packageName, it ", "could not be found in any version, there may be a typo in the package name."); + return ["- Root composer.json requires $packageName, it ", "could not be found in any version, there may be a typo in the package name."]; } /** * @internal * @param PackageInterface[] $packages - * @param bool $isVerbose - * @param bool $useRemovedVersionGroup - * @return string */ - public static function getPackageList(array $packages, bool $isVerbose, Pool $pool = null, ConstraintInterface $constraint = null, bool $useRemovedVersionGroup = false): string + public static function getPackageList(array $packages, bool $isVerbose, ?Pool $pool = null, ?ConstraintInterface $constraint = null, bool $useRemovedVersionGroup = false): string { - $prepared = array(); - $hasDefaultBranch = array(); + $prepared = []; + $hasDefaultBranch = []; foreach ($packages as $package) { $prepared[$package->getName()]['name'] = $package->getPrettyName(); $prepared[$package->getName()]['versions'][$package->getVersion()] = $package->getPrettyVersion().($package instanceof AliasPackage ? ' (alias of '.$package->getAliasOf()->getPrettyVersion().')' : ''); @@ -414,7 +396,7 @@ class Problem } } - $preparedStrings = array(); + $preparedStrings = []; foreach ($prepared as $name => $package) { // remove the implicit default branch alias to avoid cruft in the display if (isset($package['versions'][VersionParser::DEFAULT_BRANCH_ALIAS], $hasDefaultBranch[$name])) { @@ -433,7 +415,6 @@ class Problem } /** - * @param string $packageName * @param string $version the effective runtime version of the platform package * @return ?string a version string or null if it appears the package was artificially disabled */ @@ -477,8 +458,6 @@ class Problem /** * @param string[] $versions an array of pretty versions, with normalized versions as keys - * @param int $max - * @param int $maxDev * @return list a list of pretty versions and '...' where versions were removed */ private static function condenseVersionList(array $versions, int $max, int $maxDev = 16): array @@ -487,8 +466,8 @@ class Problem return $versions; } - $filtered = array(); - $byMajor = array(); + $filtered = []; + $byMajor = []; foreach ($versions as $version => $pretty) { if (0 === stripos($version, 'dev-')) { $byMajor['dev'][] = $pretty; @@ -513,7 +492,6 @@ class Problem /** * @param PackageInterface[] $packages - * @return bool */ private static function hasMultipleNames(array $packages): bool { @@ -530,16 +508,13 @@ class Problem } /** - * @param bool $isVerbose - * @param string $packageName * @param PackageInterface[] $higherRepoPackages * @param PackageInterface[] $allReposPackages - * @param string $reason * @return array{0: string, 1: string} */ - private static function computeCheckForLowerPrioRepo(Pool $pool, bool $isVerbose, string $packageName, array $higherRepoPackages, array $allReposPackages, string $reason, ConstraintInterface $constraint = null): array + private static function computeCheckForLowerPrioRepo(Pool $pool, bool $isVerbose, string $packageName, array $higherRepoPackages, array $allReposPackages, string $reason, ?ConstraintInterface $constraint = null): array { - $nextRepoPackages = array(); + $nextRepoPackages = []; $nextRepo = null; foreach ($allReposPackages as $package) { @@ -554,10 +529,10 @@ class Problem if ($higherRepoPackages) { $topPackage = reset($higherRepoPackages); if ($topPackage instanceof RootPackageInterface) { - return array( + return [ "- Root composer.json requires $packageName".self::constraintToText($constraint).', it is ', 'satisfiable by '.self::getPackageList($nextRepoPackages, $isVerbose, $pool, $constraint).' from '.$nextRepo->getRepoName().' but '.$topPackage->getPrettyName().' is the root package and cannot be modified. See https://getcomposer.org/dep-on-root for details and assistance.', - ); + ]; } } @@ -573,20 +548,18 @@ class Problem } } - return array("- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', + return ["- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found ' . self::getPackageList($higherRepoPackages, $isVerbose, $pool, $constraint).' but ' . ($singular ? 'it does' : 'these do') . ' not match your '.$reason.' and ' . ($singular ? 'is' : 'are') . ' therefore not installable. '.$suggestion, - ); + ]; } - return array("- Root composer.json requires $packageName".self::constraintToText($constraint) . ', it is ', 'satisfiable by '.self::getPackageList($nextRepoPackages, $isVerbose, $pool, $constraint).' from '.$nextRepo->getRepoName().' but '.self::getPackageList($higherRepoPackages, $isVerbose, $pool, $constraint).' from '.reset($higherRepoPackages)->getRepository()->getRepoName().' has higher repository priority. The packages from the higher priority repository do not match your '.$reason.' and are therefore not installable. That repository is canonical so the lower priority repo\'s packages are not installable. See https://getcomposer.org/repoprio for details and assistance.'); + return ["- Root composer.json requires $packageName".self::constraintToText($constraint) . ', it is ', 'satisfiable by '.self::getPackageList($nextRepoPackages, $isVerbose, $pool, $constraint).' from '.$nextRepo->getRepoName().' but '.self::getPackageList($higherRepoPackages, $isVerbose, $pool, $constraint).' from '.reset($higherRepoPackages)->getRepository()->getRepoName().' has higher repository priority. The packages from the higher priority repository do not match your '.$reason.' and are therefore not installable. That repository is canonical so the lower priority repo\'s packages are not installable. See https://getcomposer.org/repoprio for details and assistance.']; } /** * Turns a constraint into text usable in a sentence describing a request - * - * @return string */ - protected static function constraintToText(ConstraintInterface $constraint = null): string + protected static function constraintToText(?ConstraintInterface $constraint = null): string { return $constraint ? ' '.$constraint->getPrettyString() : ''; } diff --git a/src/Composer/DependencyResolver/Request.php b/src/Composer/DependencyResolver/Request.php index e08ae06c7..edd263086 100644 --- a/src/Composer/DependencyResolver/Request.php +++ b/src/Composer/DependencyResolver/Request.php @@ -43,28 +43,24 @@ class Request /** @var ?LockArrayRepository */ protected $lockedRepository; /** @var array */ - protected $requires = array(); + protected $requires = []; /** @var array */ - protected $fixedPackages = array(); + protected $fixedPackages = []; /** @var array */ - protected $lockedPackages = array(); + protected $lockedPackages = []; /** @var array */ - protected $fixedLockedPackages = array(); + protected $fixedLockedPackages = []; /** @var string[] */ - protected $updateAllowList = array(); + protected $updateAllowList = []; /** @var false|self::UPDATE_* */ protected $updateAllowTransitiveDependencies = false; - public function __construct(LockArrayRepository $lockedRepository = null) + public function __construct(?LockArrayRepository $lockedRepository = null) { $this->lockedRepository = $lockedRepository; } - /** - * @param string $packageName - * @return void - */ - public function requireName(string $packageName, ConstraintInterface $constraint = null): void + public function requireName(string $packageName, ?ConstraintInterface $constraint = null): void { $packageName = strtolower($packageName); @@ -82,8 +78,6 @@ class Request * * This is used for platform packages which cannot be modified by Composer. A rule enforcing their installation is * generated for dependency resolution. Partial updates with dependencies cannot in any way modify these packages. - * - * @return void */ public function fixPackage(BasePackage $package): void { @@ -99,8 +93,6 @@ class Request * However unlike fixed packages there will not be a special rule enforcing their installation for the solver, so * if nothing requires these packages they will be removed. Additionally in a partial update these packages can be * unlocked, meaning other versions can be installed if explicitly requested as part of the update. - * - * @return void */ public function lockPackage(BasePackage $package): void { @@ -113,8 +105,6 @@ class Request * This is necessary for the composer install step which verifies the lock file integrity and should not allow * removal of any packages. At the same time lock packages there cannot simply be marked fixed, as error reporting * would then report them as platform packages, so this still marks them as locked packages at the same time. - * - * @return void */ public function fixLockedPackage(BasePackage $package): void { @@ -122,9 +112,6 @@ class Request $this->fixedLockedPackages[spl_object_hash($package)] = $package; } - /** - * @return void - */ public function unlockPackage(BasePackage $package): void { unset($this->lockedPackages[spl_object_hash($package)]); @@ -133,7 +120,6 @@ class Request /** * @param string[] $updateAllowList * @param false|self::UPDATE_* $updateAllowTransitiveDependencies - * @return void */ public function setUpdateAllowList(array $updateAllowList, $updateAllowTransitiveDependencies): void { @@ -149,17 +135,11 @@ class Request return $this->updateAllowList; } - /** - * @return bool - */ public function getUpdateAllowTransitiveDependencies(): bool { return $this->updateAllowTransitiveDependencies !== self::UPDATE_ONLY_LISTED; } - /** - * @return bool - */ public function getUpdateAllowTransitiveRootDependencies(): bool { return $this->updateAllowTransitiveDependencies === self::UPDATE_LISTED_WITH_TRANSITIVE_DEPS; @@ -181,9 +161,6 @@ class Request return $this->fixedPackages; } - /** - * @return bool - */ public function isFixedPackage(BasePackage $package): bool { return isset($this->fixedPackages[spl_object_hash($package)]); @@ -197,9 +174,6 @@ class Request return $this->lockedPackages; } - /** - * @return bool - */ public function isLockedPackage(PackageInterface $package): bool { return isset($this->lockedPackages[spl_object_hash($package)]) || isset($this->fixedLockedPackages[spl_object_hash($package)]); @@ -214,7 +188,6 @@ class Request } /** - * @param bool $packageIds * @return array * * @TODO look into removing the packageIds option, the only place true is used @@ -224,7 +197,7 @@ class Request */ public function getPresentMap(bool $packageIds = false): array { - $presentMap = array(); + $presentMap = []; if ($this->lockedRepository) { foreach ($this->lockedRepository->getPackages() as $package) { @@ -244,7 +217,7 @@ class Request */ public function getFixedPackagesMap(): array { - $fixedPackagesMap = array(); + $fixedPackagesMap = []; foreach ($this->fixedPackages as $package) { $fixedPackagesMap[$package->getId()] = $package; diff --git a/src/Composer/DependencyResolver/Rule.php b/src/Composer/DependencyResolver/Rule.php index cb5a7f1c6..dba29ed1b 100644 --- a/src/Composer/DependencyResolver/Rule.php +++ b/src/Composer/DependencyResolver/Rule.php @@ -80,14 +80,10 @@ abstract class Rule abstract public function __toString(): string; - /** - * @param Rule $rule - * @return bool - */ abstract public function equals(Rule $rule): bool; /** - * @return int + * @return self::RULE_* */ public function getReason(): int { @@ -102,9 +98,6 @@ abstract class Rule return $this->reasonData; } - /** - * @return string|null - */ public function getRequiredPackage(): ?string { $reason = $this->getReason(); @@ -126,61 +119,39 @@ abstract class Rule /** * @param RuleSet::TYPE_* $type - * @return void */ public function setType($type): void { $this->bitfield = ($this->bitfield & ~(255 << self::BITFIELD_TYPE)) | ((255 & $type) << self::BITFIELD_TYPE); } - /** - * @return int - */ public function getType(): int { return ($this->bitfield & (255 << self::BITFIELD_TYPE)) >> self::BITFIELD_TYPE; } - /** - * @return void - */ public function disable(): void { $this->bitfield = ($this->bitfield & ~(255 << self::BITFIELD_DISABLED)) | (1 << self::BITFIELD_DISABLED); } - /** - * @return void - */ public function enable(): void { $this->bitfield &= ~(255 << self::BITFIELD_DISABLED); } - /** - * @return bool - */ public function isDisabled(): bool { return (bool) (($this->bitfield & (255 << self::BITFIELD_DISABLED)) >> self::BITFIELD_DISABLED); } - /** - * @return bool - */ public function isEnabled(): bool { return !(($this->bitfield & (255 << self::BITFIELD_DISABLED)) >> self::BITFIELD_DISABLED); } - /** - * @return bool - */ abstract public function isAssertion(): bool; - /** - * @return bool - */ public function isCausedByLock(RepositorySet $repositorySet, Request $request, Pool $pool): bool { if ($this->getReason() === self::RULE_PACKAGE_REQUIRES) { @@ -230,7 +201,6 @@ abstract class Rule /** * @internal - * @return BasePackage */ public function getSourcePackage(Pool $pool): BasePackage { @@ -244,7 +214,7 @@ abstract class Rule if ($reasonData = $this->getReasonData()) { // swap literals if they are not in the right order with package2 being the conflicter if ($reasonData->getSource() === $package1->getName()) { - list($package2, $package1) = array($package1, $package2); + [$package2, $package1] = [$package1, $package2]; } } @@ -262,12 +232,10 @@ abstract class Rule } /** - * @param bool $isVerbose * @param BasePackage[] $installedMap * @param array $learnedPool - * @return string */ - public function getPrettyString(RepositorySet $repositorySet, Request $request, Pool $pool, bool $isVerbose, array $installedMap = array(), array $learnedPool = array()): string + public function getPrettyString(RepositorySet $repositorySet, Request $request, Pool $pool, bool $isVerbose, array $installedMap = [], array $learnedPool = []): string { $literals = $this->getLiterals(); @@ -312,7 +280,7 @@ abstract class Rule // swap literals if they are not in the right order with package2 being the conflicter if ($reasonData->getSource() === $package1->getName()) { - list($package2, $package1) = array($package1, $package2); + [$package2, $package1] = [$package1, $package2]; $conflictTarget = $package1->getPrettyName().' '.$reasonData->getPrettyConstraint(); } @@ -349,7 +317,7 @@ abstract class Rule /** @var Link */ $reasonData = $this->reasonData; - $requires = array(); + $requires = []; foreach ($literals as $literal) { $requires[] = $pool->literalToPackage($literal); } @@ -368,7 +336,7 @@ abstract class Rule return $text; case self::RULE_PACKAGE_SAME_NAME: - $packageNames = array(); + $packageNames = []; foreach ($literals as $literal) { $package = $pool->literalToPackage($literal); $packageNames[$package->getName()] = true; @@ -394,8 +362,8 @@ abstract class Rule $reason .= $replacedName.' and thus cannot coexist with it.'; } - $installedPackages = array(); - $removablePackages = array(); + $installedPackages = []; + $removablePackages = []; foreach ($literals as $literal) { if (isset($installedMap[abs($literal)])) { $installedPackages[] = $pool->literalToPackage($literal); @@ -425,7 +393,7 @@ abstract class Rule if (count($literals) === 1) { $ruleText = $pool->literalToPrettyString($literals[0], $installedMap); } else { - $groups = array(); + $groups = []; foreach ($literals as $literal) { $package = $pool->literalToPackage($literal); if (isset($installedMap[$package->id])) { @@ -436,7 +404,7 @@ abstract class Rule $groups[$group][] = $this->deduplicateDefaultBranchAlias($package); } - $ruleTexts = array(); + $ruleTexts = []; foreach ($groups as $group => $packages) { $ruleTexts[] = $group . (count($packages) > 1 ? ' one of' : '').' ' . $this->formatPackagesUnique($pool, $packages, $isVerbose); } @@ -481,11 +449,8 @@ abstract class Rule /** * @param array $packages An array containing packages or literals - * @param bool $isVerbose - * @param bool $useRemovedVersionGroup - * @return string */ - protected function formatPackagesUnique(Pool $pool, array $packages, bool $isVerbose, ConstraintInterface $constraint = null, bool $useRemovedVersionGroup = false): string + protected function formatPackagesUnique(Pool $pool, array $packages, bool $isVerbose, ?ConstraintInterface $constraint = null, bool $useRemovedVersionGroup = false): string { foreach ($packages as $index => $package) { if (!\is_object($package)) { @@ -496,9 +461,6 @@ abstract class Rule return Problem::getPackageList($packages, $isVerbose, $pool, $constraint, $useRemovedVersionGroup); } - /** - * @return BasePackage - */ private function deduplicateDefaultBranchAlias(BasePackage $package): BasePackage { if ($package instanceof AliasPackage && $package->getPrettyVersion() === VersionParser::DEFAULT_BRANCH_ALIAS) { diff --git a/src/Composer/DependencyResolver/Rule2Literals.php b/src/Composer/DependencyResolver/Rule2Literals.php index 94a9a9791..17bfaf8ce 100644 --- a/src/Composer/DependencyResolver/Rule2Literals.php +++ b/src/Composer/DependencyResolver/Rule2Literals.php @@ -24,8 +24,6 @@ class Rule2Literals extends Rule protected $literal2; /** - * @param int $literal1 - * @param int $literal2 * @param Rule::RULE_* $reason A RULE_* constant * @param mixed $reasonData * @@ -49,7 +47,7 @@ class Rule2Literals extends Rule */ public function getLiterals(): array { - return array($this->literal1, $this->literal2); + return [$this->literal1, $this->literal2]; } /** @@ -107,8 +105,6 @@ class Rule2Literals extends Rule /** * Formats a rule as a string of the format (Literal1|Literal2|...) - * - * @return string */ public function __toString(): string { diff --git a/src/Composer/DependencyResolver/RuleSet.php b/src/Composer/DependencyResolver/RuleSet.php index 0eb714238..e59112383 100644 --- a/src/Composer/DependencyResolver/RuleSet.php +++ b/src/Composer/DependencyResolver/RuleSet.php @@ -30,14 +30,14 @@ class RuleSet implements \IteratorAggregate, \Countable * * @var array */ - public $ruleById = array(); + public $ruleById = []; /** @var array<0|1|4, string> */ - protected static $types = array( + protected static $types = [ self::TYPE_PACKAGE => 'PACKAGE', self::TYPE_REQUEST => 'REQUEST', self::TYPE_LEARNED => 'LEARNED', - ); + ]; /** @var array */ protected $rules; @@ -46,18 +46,17 @@ class RuleSet implements \IteratorAggregate, \Countable protected $nextRuleId = 0; /** @var array */ - protected $rulesByHash = array(); + protected $rulesByHash = []; public function __construct() { foreach ($this->getTypes() as $type) { - $this->rules[$type] = array(); + $this->rules[$type] = []; } } /** * @param self::TYPE_* $type - * @return void */ public function add(Rule $rule, $type): void { @@ -84,7 +83,7 @@ class RuleSet implements \IteratorAggregate, \Countable } if (!isset($this->rules[$type])) { - $this->rules[$type] = array(); + $this->rules[$type] = []; } $this->rules[$type][] = $rule; @@ -99,7 +98,7 @@ class RuleSet implements \IteratorAggregate, \Countable $this->rulesByHash[$hash][] = $rule; } else { $originalRule = $this->rulesByHash[$hash]; - $this->rulesByHash[$hash] = array($originalRule, $rule); + $this->rulesByHash[$hash] = [$originalRule, $rule]; } } @@ -108,10 +107,6 @@ class RuleSet implements \IteratorAggregate, \Countable return $this->nextRuleId; } - /** - * @param int $id - * @return Rule - */ public function ruleById(int $id): Rule { return $this->ruleById[$id]; @@ -130,18 +125,17 @@ class RuleSet implements \IteratorAggregate, \Countable /** * @param self::TYPE_*|array $types - * @return RuleSetIterator */ public function getIteratorFor($types): RuleSetIterator { if (!\is_array($types)) { - $types = array($types); + $types = [$types]; } $allRules = $this->getRules(); /** @var array $rules */ - $rules = array(); + $rules = []; foreach ($types as $type) { $rules[$type] = $allRules[$type]; @@ -152,12 +146,11 @@ class RuleSet implements \IteratorAggregate, \Countable /** * @param array|self::TYPE_* $types - * @return RuleSetIterator */ public function getIteratorWithout($types): RuleSetIterator { if (!\is_array($types)) { - $types = array($types); + $types = [$types]; } $rules = $this->getRules(); @@ -177,11 +170,7 @@ class RuleSet implements \IteratorAggregate, \Countable return array_keys($types); } - /** - * @param bool $isVerbose - * @return string - */ - public function getPrettyString(RepositorySet $repositorySet = null, Request $request = null, Pool $pool = null, bool $isVerbose = false): string + public function getPrettyString(?RepositorySet $repositorySet = null, ?Request $request = null, ?Pool $pool = null, bool $isVerbose = false): string { $string = "\n"; foreach ($this->rules as $type => $rules) { diff --git a/src/Composer/DependencyResolver/RuleSetGenerator.php b/src/Composer/DependencyResolver/RuleSetGenerator.php index 59eefdf60..afd735e7f 100644 --- a/src/Composer/DependencyResolver/RuleSetGenerator.php +++ b/src/Composer/DependencyResolver/RuleSetGenerator.php @@ -31,9 +31,9 @@ class RuleSetGenerator /** @var RuleSet */ protected $rules; /** @var array */ - protected $addedMap = array(); + protected $addedMap = []; /** @var array */ - protected $addedPackagesByNames = array(); + protected $addedPackagesByNames = []; public function __construct(PolicyInterface $policy, Pool $pool) { @@ -58,7 +58,7 @@ class RuleSetGenerator */ protected function createRequireRule(BasePackage $package, array $providers, $reason, $reasonData = null): ?Rule { - $literals = array(-$package->id); + $literals = [-$package->id]; foreach ($providers as $provider) { // self fulfilling rule? @@ -87,7 +87,7 @@ class RuleSetGenerator */ protected function createInstallOneOfRule(array $packages, $reason, $reasonData): Rule { - $literals = array(); + $literals = []; foreach ($packages as $package) { $literals[] = $package->id; } @@ -123,13 +123,12 @@ class RuleSetGenerator * @param BasePackage[] $packages * @param Rule::RULE_* $reason A RULE_* constant * @param mixed $reasonData - * @return Rule * * @phpstan-param ReasonData $reasonData */ protected function createMultiConflictRule(array $packages, $reason, $reasonData): Rule { - $literals = array(); + $literals = []; foreach ($packages as $package) { $literals[] = -$package->id; } @@ -149,10 +148,8 @@ class RuleSetGenerator * * @param RuleSet::TYPE_* $type A TYPE_* constant defining the rule type * @param Rule $newRule The rule about to be added - * - * @return void */ - private function addRule($type, Rule $newRule = null): void + private function addRule($type, ?Rule $newRule = null): void { if (!$newRule) { return; @@ -161,9 +158,6 @@ class RuleSetGenerator $this->rules->add($newRule, $type); } - /** - * @return void - */ protected function addRulesForPackage(BasePackage $package, PlatformRequirementFilterInterface $platformRequirementFilter): void { /** @var \SplQueue */ @@ -184,10 +178,10 @@ class RuleSetGenerator } } else { $workQueue->enqueue($package->getAliasOf()); - $this->addRule(RuleSet::TYPE_PACKAGE, $this->createRequireRule($package, array($package->getAliasOf()), Rule::RULE_PACKAGE_ALIAS, $package)); + $this->addRule(RuleSet::TYPE_PACKAGE, $this->createRequireRule($package, [$package->getAliasOf()], Rule::RULE_PACKAGE_ALIAS, $package)); // aliases must be installed with their main package, so create a rule the other way around as well - $this->addRule(RuleSet::TYPE_PACKAGE, $this->createRequireRule($package->getAliasOf(), array($package), Rule::RULE_PACKAGE_INVERSE_ALIAS, $package->getAliasOf())); + $this->addRule(RuleSet::TYPE_PACKAGE, $this->createRequireRule($package->getAliasOf(), [$package], Rule::RULE_PACKAGE_INVERSE_ALIAS, $package->getAliasOf())); // if alias package has no self.version requires, its requirements do not // need to be added as the aliased package processing will take care of it @@ -215,9 +209,6 @@ class RuleSetGenerator } } - /** - * @return void - */ protected function addConflictRules(PlatformRequirementFilterInterface $platformRequirementFilter): void { /** @var BasePackage $package */ @@ -256,9 +247,6 @@ class RuleSetGenerator } } - /** - * @return void - */ protected function addRulesForRequest(Request $request, PlatformRequirementFilterInterface $platformRequirementFilter): void { foreach ($request->getFixedPackages() as $package) { @@ -274,9 +262,9 @@ class RuleSetGenerator $this->addRulesForPackage($package, $platformRequirementFilter); - $rule = $this->createInstallOneOfRule(array($package), Rule::RULE_FIXED, array( + $rule = $this->createInstallOneOfRule([$package], Rule::RULE_FIXED, [ 'package' => $package, - )); + ]); $this->addRule(RuleSet::TYPE_REQUEST, $rule); } @@ -293,18 +281,15 @@ class RuleSetGenerator $this->addRulesForPackage($package, $platformRequirementFilter); } - $rule = $this->createInstallOneOfRule($packages, Rule::RULE_ROOT_REQUIRE, array( + $rule = $this->createInstallOneOfRule($packages, Rule::RULE_ROOT_REQUIRE, [ 'packageName' => $packageName, 'constraint' => $constraint, - )); + ]); $this->addRule(RuleSet::TYPE_REQUEST, $rule); } } } - /** - * @return void - */ protected function addRulesForRootAliases(PlatformRequirementFilterInterface $platformRequirementFilter): void { foreach ($this->pool->getPackages() as $package) { @@ -320,10 +305,7 @@ class RuleSetGenerator } } - /** - * @return RuleSet - */ - public function getRulesFor(Request $request, PlatformRequirementFilterInterface $platformRequirementFilter = null): RuleSet + public function getRulesFor(Request $request, ?PlatformRequirementFilterInterface $platformRequirementFilter = null): RuleSet { $platformRequirementFilter = $platformRequirementFilter ?: PlatformRequirementFilterFactory::ignoreNothing(); @@ -334,7 +316,7 @@ class RuleSetGenerator $this->addConflictRules($platformRequirementFilter); // Remove references to packages - $this->addedMap = $this->addedPackagesByNames = array(); + $this->addedMap = $this->addedPackagesByNames = []; $rules = $this->rules; diff --git a/src/Composer/DependencyResolver/RuleWatchChain.php b/src/Composer/DependencyResolver/RuleWatchChain.php index f9b90d4a9..ddd596033 100644 --- a/src/Composer/DependencyResolver/RuleWatchChain.php +++ b/src/Composer/DependencyResolver/RuleWatchChain.php @@ -27,7 +27,6 @@ class RuleWatchChain extends \SplDoublyLinkedList * Moves the internal iterator to the specified offset * * @param int $offset The offset to seek to. - * @return void */ public function seek(int $offset): void { @@ -42,8 +41,6 @@ class RuleWatchChain extends \SplDoublyLinkedList * incorrectly sets the internal iterator if you delete the current value * this method sets the internal iterator back to the following element * using the seek method. - * - * @return void */ public function remove(): void { diff --git a/src/Composer/DependencyResolver/RuleWatchGraph.php b/src/Composer/DependencyResolver/RuleWatchGraph.php index 375563863..6a13b40ce 100644 --- a/src/Composer/DependencyResolver/RuleWatchGraph.php +++ b/src/Composer/DependencyResolver/RuleWatchGraph.php @@ -25,7 +25,7 @@ namespace Composer\DependencyResolver; class RuleWatchGraph { /** @var array */ - protected $watchChains = array(); + protected $watchChains = []; /** * Inserts a rule node into the appropriate chains within the graph @@ -38,7 +38,6 @@ class RuleWatchGraph * watch changes in any literals. * * @param RuleWatchNode $node The rule node to be inserted into the graph - * @return void */ public function insert(RuleWatchNode $node): void { @@ -47,7 +46,7 @@ class RuleWatchGraph } if (!$node->getRule() instanceof MultiConflictRule) { - foreach (array($node->watch1, $node->watch2) as $literal) { + foreach ([$node->watch1, $node->watch2] as $literal) { if (!isset($this->watchChains[$literal])) { $this->watchChains[$literal] = new RuleWatchChain; } @@ -154,7 +153,6 @@ class RuleWatchGraph * @param int $fromLiteral A literal the node used to watch * @param int $toLiteral A literal the node should watch now * @param RuleWatchNode $node The rule node to be moved - * @return void */ protected function moveWatch(int $fromLiteral, int $toLiteral, RuleWatchNode $node): void { diff --git a/src/Composer/DependencyResolver/RuleWatchNode.php b/src/Composer/DependencyResolver/RuleWatchNode.php index f102086e6..79c1fcba7 100644 --- a/src/Composer/DependencyResolver/RuleWatchNode.php +++ b/src/Composer/DependencyResolver/RuleWatchNode.php @@ -52,7 +52,6 @@ class RuleWatchNode * likely to quickly lead to further decisions. * * @param Decisions $decisions The decisions made so far by the solver - * @return void */ public function watch2OnHighest(Decisions $decisions): void { @@ -77,8 +76,6 @@ class RuleWatchNode /** * Returns the rule this node wraps - * - * @return Rule */ public function getRule(): Rule { @@ -105,7 +102,6 @@ class RuleWatchNode * * @param int $from The previously watched literal * @param int $to The literal to be watched now - * @return void */ public function moveWatch(int $from, int $to): void { diff --git a/src/Composer/DependencyResolver/Solver.php b/src/Composer/DependencyResolver/Solver.php index 05d2a39df..2d9e6bad4 100644 --- a/src/Composer/DependencyResolver/Solver.php +++ b/src/Composer/DependencyResolver/Solver.php @@ -44,13 +44,13 @@ class Solver /** @var int */ protected $propagateIndex; /** @var mixed[] */ - protected $branches = array(); + protected $branches = []; /** @var Problem[] */ - protected $problems = array(); + protected $problems = []; /** @var array */ - protected $learnedPool = array(); + protected $learnedPool = []; /** @var array */ - protected $learnedWhy = array(); + protected $learnedWhy = []; /** @var bool */ public $testFlagLearnedPositiveLiteral = false; @@ -65,17 +65,11 @@ class Solver $this->pool = $pool; } - /** - * @return int - */ public function getRuleSetSize(): int { return \count($this->rules); } - /** - * @return Pool - */ public function getPool(): Pool { return $this->pool; @@ -83,9 +77,6 @@ class Solver // aka solver_makeruledecisions - /** - * @return void - */ private function makeAssertionRuleDecisions(): void { $decisionStart = \count($this->decisions) - 1; @@ -156,20 +147,14 @@ class Solver } } - /** - * @return void - */ protected function setupFixedMap(Request $request): void { - $this->fixedMap = array(); + $this->fixedMap = []; foreach ($request->getFixedPackages() as $package) { $this->fixedMap[$package->id] = $package; } } - /** - * @return void - */ protected function checkForRootRequireProblems(Request $request, PlatformRequirementFilterInterface $platformRequirementFilter): void { foreach ($request->getRequires() as $packageName => $constraint) { @@ -181,16 +166,13 @@ class Solver if (!$this->pool->whatProvides($packageName, $constraint)) { $problem = new Problem(); - $problem->addRule(new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, array('packageName' => $packageName, 'constraint' => $constraint))); + $problem->addRule(new GenericRule([], Rule::RULE_ROOT_REQUIRE, ['packageName' => $packageName, 'constraint' => $constraint])); $this->problems[] = $problem; } } } - /** - * @return LockTransaction - */ - public function solve(Request $request, PlatformRequirementFilterInterface $platformRequirementFilter = null): LockTransaction + public function solve(Request $request, ?PlatformRequirementFilterInterface $platformRequirementFilter = null): LockTransaction { $platformRequirementFilter = $platformRequirementFilter ?: PlatformRequirementFilterFactory::ignoreNothing(); @@ -230,7 +212,6 @@ class Solver * Evaluates each term affected by the decision (linked through watches) * If we find unit rules we make new decisions based on them * - * @param int $level * @return Rule|null A rule on conflict, otherwise null. */ protected function propagate(int $level): ?Rule @@ -256,10 +237,6 @@ class Solver /** * Reverts a decision at the given level. - * - * @param int $level - * - * @return void */ private function revert(int $level): void { @@ -298,9 +275,7 @@ class Solver * * returns the new solver level or 0 if unsolvable * - * @param int $level * @param string|int $literal - * @return int */ private function setPropagateLearn(int $level, $literal, Rule $rule): int { @@ -320,7 +295,7 @@ class Solver } // conflict - list($learnLiteral, $newLevel, $newRule, $why) = $this->analyze($level, $rule); + [$learnLiteral, $newLevel, $newRule, $why] = $this->analyze($level, $rule); if ($newLevel <= 0 || $newLevel >= $level) { throw new SolverBugException( @@ -347,9 +322,7 @@ class Solver } /** - * @param int $level * @param int[] $decisionQueue - * @return int */ private function selectAndInstall(int $level, array $decisionQueue, Rule $rule): int { @@ -360,14 +333,13 @@ class Solver // if there are multiple candidates, then branch if (\count($literals)) { - $this->branches[] = array($literals, $level); + $this->branches[] = [$literals, $level]; } return $this->setPropagateLearn($level, $selectedLiteral, $rule); } /** - * @param int $level * @return array{int, int, GenericRule, int} */ protected function analyze(int $level, Rule $rule): array @@ -376,12 +348,12 @@ class Solver $ruleLevel = 1; $num = 0; $l1num = 0; - $seen = array(); - $learnedLiterals = array(null); + $seen = []; + $learnedLiterals = [null]; $decisionId = \count($this->decisions); - $this->learnedPool[] = array(); + $this->learnedPool[] = []; while (true) { $this->learnedPool[\count($this->learnedPool) - 1][] = $rule; @@ -511,12 +483,11 @@ class Solver $newRule = new GenericRule($learnedLiterals, Rule::RULE_LEARNED, $why); - return array($learnedLiterals[0], $ruleLevel, $newRule, $why); + return [$learnedLiterals[0], $ruleLevel, $newRule, $why]; } /** * @param array $ruleSeen - * @return void */ private function analyzeUnsolvableRule(Problem $problem, Rule $conflictRule, array &$ruleSeen): void { @@ -545,21 +516,18 @@ class Solver $problem->addRule($conflictRule); } - /** - * @return int - */ private function analyzeUnsolvable(Rule $conflictRule): int { $problem = new Problem(); $problem->addRule($conflictRule); - $ruleSeen = array(); + $ruleSeen = []; $this->analyzeUnsolvableRule($problem, $conflictRule, $ruleSeen); $this->problems[] = $problem; - $seen = array(); + $seen = []; $literals = $conflictRule->getLiterals(); foreach ($literals as $literal) { @@ -603,8 +571,6 @@ class Solver * we have enabled or disabled some of our rules. We now re-enable all * of our learnt rules except the ones that were learnt from rules that * are now disabled. - * - * @return void */ private function enableDisableLearnedRules(): void { @@ -628,9 +594,6 @@ class Solver } } - /** - * @return void - */ private function runSat(): void { $this->propagateIndex = 0; @@ -665,7 +628,7 @@ class Solver $iterator = $this->rules->getIteratorFor(RuleSet::TYPE_REQUEST); foreach ($iterator as $rule) { if ($rule->isEnabled()) { - $decisionQueue = array(); + $decisionQueue = []; $noneSatisfied = true; foreach ($rule->getLiterals() as $literal) { @@ -680,7 +643,7 @@ class Solver if ($noneSatisfied && \count($decisionQueue)) { // if any of the options in the decision queue are fixed, only use those - $prunedQueue = array(); + $prunedQueue = []; foreach ($decisionQueue as $literal) { if (isset($this->fixedMap[abs($literal)])) { $prunedQueue[] = $literal; @@ -741,7 +704,7 @@ class Solver continue; } - $decisionQueue = array(); + $decisionQueue = []; // make sure that // * all negative literals are installed @@ -792,7 +755,7 @@ class Solver $lastBranchOffset = 0; for ($i = \count($this->branches) - 1; $i >= 0; $i--) { - list($literals, $l) = $this->branches[$i]; + [$literals, $l] = $this->branches[$i]; foreach ($literals as $offset => $literal) { if ($literal && $literal > 0 && $this->decisions->decisionLevel($literal) > $l + 1) { diff --git a/src/Composer/DependencyResolver/SolverBugException.php b/src/Composer/DependencyResolver/SolverBugException.php index 394958a8f..7ac72671d 100644 --- a/src/Composer/DependencyResolver/SolverBugException.php +++ b/src/Composer/DependencyResolver/SolverBugException.php @@ -17,9 +17,6 @@ namespace Composer\DependencyResolver; */ class SolverBugException extends \RuntimeException { - /** - * @param string $message - */ public function __construct(string $message) { parent::__construct( diff --git a/src/Composer/DependencyResolver/SolverProblemsException.php b/src/Composer/DependencyResolver/SolverProblemsException.php index d2cd5decf..5870c0cae 100644 --- a/src/Composer/DependencyResolver/SolverProblemsException.php +++ b/src/Composer/DependencyResolver/SolverProblemsException.php @@ -41,18 +41,13 @@ class SolverProblemsException extends \RuntimeException parent::__construct('Failed resolving dependencies with '.count($problems).' problems, call getPrettyString to get formatted details', self::ERROR_DEPENDENCY_RESOLUTION_FAILED); } - /** - * @param bool $isVerbose - * @param bool $isDevExtraction - * @return string - */ public function getPrettyString(RepositorySet $repositorySet, Request $request, Pool $pool, bool $isVerbose, bool $isDevExtraction = false): string { $installedMap = $request->getPresentMap(true); - $missingExtensions = array(); + $missingExtensions = []; $isCausedByLock = false; - $problems = array(); + $problems = []; foreach ($this->problems as $problem) { $problems[] = $problem->getPrettyString($repositorySet, $request, $pool, $isVerbose, $installedMap, $this->learnedPool)."\n"; @@ -67,7 +62,7 @@ class SolverProblemsException extends \RuntimeException $text .= " Problem ".($i++).$problem; } - $hints = array(); + $hints = []; if (!$isDevExtraction && (strpos($text, 'could not be found') || strpos($text, 'no matching package found'))) { $hints[] = "Potential causes:\n - A typo in the package name\n - The package is not available in a stable-enough version according to your minimum-stability setting\n see for more details.\n - It's a private package and you forgot to add a custom repository to find it\n\nRead for further common problems."; } @@ -107,7 +102,6 @@ class SolverProblemsException extends \RuntimeException /** * @param string[] $missingExtensions - * @return string */ private function createExtensionHint(array $missingExtensions): string { @@ -139,7 +133,7 @@ class SolverProblemsException extends \RuntimeException */ private function getExtensionProblems(array $reasonSets): array { - $missingExtensions = array(); + $missingExtensions = []; foreach ($reasonSets as $reasonSet) { foreach ($reasonSet as $rule) { $required = $rule->getRequiredPackage(); diff --git a/src/Composer/DependencyResolver/Transaction.php b/src/Composer/DependencyResolver/Transaction.php index 2c7d06fa6..ef6860c11 100644 --- a/src/Composer/DependencyResolver/Transaction.php +++ b/src/Composer/DependencyResolver/Transaction.php @@ -44,7 +44,7 @@ class Transaction /** * @var array */ - protected $resultPackagesByName = array(); + protected $resultPackagesByName = []; /** * @param PackageInterface[] $presentPackages @@ -67,7 +67,6 @@ class Transaction /** * @param PackageInterface[] $resultPackages - * @return void */ private function setResultPackageMaps(array $resultPackages): void { @@ -84,7 +83,7 @@ class Transaction return strcmp($b->getName(), $a->getName()); }; - $this->resultPackageMap = array(); + $this->resultPackageMap = []; foreach ($resultPackages as $package) { $this->resultPackageMap[spl_object_hash($package)] = $package; foreach ($package->getNames() as $name) { @@ -103,12 +102,12 @@ class Transaction */ protected function calculateOperations(): array { - $operations = array(); + $operations = []; - $presentPackageMap = array(); - $removeMap = array(); - $presentAliasMap = array(); - $removeAliasMap = array(); + $presentPackageMap = []; + $removeMap = []; + $presentAliasMap = []; + $removeAliasMap = []; foreach ($this->presentPackages as $package) { if ($package instanceof AliasPackage) { $presentAliasMap[$package->getName().'::'.$package->getVersion()] = $package; @@ -121,8 +120,8 @@ class Transaction $stack = $this->getRootPackages(); - $visited = array(); - $processed = array(); + $visited = []; + $processed = []; while (!empty($stack)) { $package = array_pop($stack); @@ -247,7 +246,7 @@ class Transaction protected function getProvidersInResult(Link $link): array { if (!isset($this->resultPackagesByName[$link->getTarget()])) { - return array(); + return []; } return $this->resultPackagesByName[$link->getTarget()]; @@ -268,12 +267,12 @@ class Transaction */ private function movePluginsToFront(array $operations): array { - $dlModifyingPluginsNoDeps = array(); - $dlModifyingPluginsWithDeps = array(); - $dlModifyingPluginRequires = array(); - $pluginsNoDeps = array(); - $pluginsWithDeps = array(); - $pluginRequires = array(); + $dlModifyingPluginsNoDeps = []; + $dlModifyingPluginsWithDeps = []; + $dlModifyingPluginRequires = []; + $pluginsNoDeps = []; + $pluginsWithDeps = []; + $pluginRequires = []; foreach (array_reverse($operations, true) as $idx => $op) { if ($op instanceof Operation\InstallOperation) { @@ -345,7 +344,7 @@ class Transaction */ private function moveUninstallsToFront(array $operations): array { - $uninstOps = array(); + $uninstOps = []; foreach ($operations as $idx => $op) { if ($op instanceof Operation\UninstallOperation || $op instanceof Operation\MarkAliasUninstalledOperation) { $uninstOps[] = $op; diff --git a/src/Composer/Downloader/ArchiveDownloader.php b/src/Composer/Downloader/ArchiveDownloader.php index 11390f319..c31ac31ea 100644 --- a/src/Composer/Downloader/ArchiveDownloader.php +++ b/src/Composer/Downloader/ArchiveDownloader.php @@ -30,22 +30,16 @@ abstract class ArchiveDownloader extends FileDownloader /** * @var array */ - protected $cleanupExecuted = array(); + protected $cleanupExecuted = []; - /** - * @return PromiseInterface - */ - public function prepare(string $type, PackageInterface $package, string $path, PackageInterface $prevPackage = null): PromiseInterface + public function prepare(string $type, PackageInterface $package, string $path, ?PackageInterface $prevPackage = null): PromiseInterface { unset($this->cleanupExecuted[$package->getName()]); return parent::prepare($type, $package, $path, $prevPackage); } - /** - * @return PromiseInterface - */ - public function cleanup(string $type, PackageInterface $package, string $path, PackageInterface $prevPackage = null): PromiseInterface + public function cleanup(string $type, PackageInterface $package, string $path, ?PackageInterface $prevPackage = null): PromiseInterface { $this->cleanupExecuted[$package->getName()] = true; @@ -55,9 +49,7 @@ abstract class ArchiveDownloader extends FileDownloader /** * @inheritDoc * - * @param bool $output * - * @return PromiseInterface * * @throws \RuntimeException * @throws \UnexpectedValueException diff --git a/src/Composer/Downloader/DownloadManager.php b/src/Composer/Downloader/DownloadManager.php index c4d6cb3e4..7f7ad2c3a 100644 --- a/src/Composer/Downloader/DownloadManager.php +++ b/src/Composer/Downloader/DownloadManager.php @@ -33,11 +33,11 @@ class DownloadManager /** @var bool */ private $preferSource; /** @var array */ - private $packagePreferences = array(); + private $packagePreferences = []; /** @var Filesystem */ private $filesystem; /** @var array */ - private $downloaders = array(); + private $downloaders = []; /** * Initializes download manager. @@ -46,7 +46,7 @@ class DownloadManager * @param bool $preferSource prefer downloading from source * @param Filesystem|null $filesystem custom Filesystem object */ - public function __construct(IOInterface $io, bool $preferSource = false, Filesystem $filesystem = null) + public function __construct(IOInterface $io, bool $preferSource = false, ?Filesystem $filesystem = null) { $this->io = $io; $this->preferSource = $preferSource; @@ -113,7 +113,6 @@ class DownloadManager * * @param string $type installation type * @throws \InvalidArgumentException if downloader for provided type is not registered - * @return DownloaderInterface */ public function getDownloader(string $type): DownloaderInterface { @@ -132,7 +131,6 @@ class DownloadManager * @throws \InvalidArgumentException if package has no installation source specified * @throws \LogicException if specific downloader used to load package with * wrong type - * @return DownloaderInterface|null */ public function getDownloaderForPackage(PackageInterface $package): ?DownloaderInterface { @@ -165,9 +163,6 @@ class DownloadManager return $downloader; } - /** - * @return string - */ public function getDownloaderType(DownloaderInterface $downloader): string { return array_search($downloader, $this->downloaders); @@ -182,9 +177,8 @@ class DownloadManager * * @throws \InvalidArgumentException if package have no urls to download from * @throws \RuntimeException - * @return PromiseInterface */ - public function download(PackageInterface $package, string $targetDir, PackageInterface $prevPackage = null): PromiseInterface + public function download(PackageInterface $package, string $targetDir, ?PackageInterface $prevPackage = null): PromiseInterface { $targetDir = $this->normalizeTargetDir($targetDir); $this->filesystem->ensureDirectoryExists(dirname($targetDir)); @@ -247,10 +241,8 @@ class DownloadManager * @param PackageInterface $package package instance * @param string $targetDir target dir * @param PackageInterface|null $prevPackage previous package instance in case of updates - * - * @return PromiseInterface */ - public function prepare(string $type, PackageInterface $package, string $targetDir, PackageInterface $prevPackage = null): PromiseInterface + public function prepare(string $type, PackageInterface $package, string $targetDir, ?PackageInterface $prevPackage = null): PromiseInterface { $targetDir = $this->normalizeTargetDir($targetDir); $downloader = $this->getDownloaderForPackage($package); @@ -269,7 +261,6 @@ class DownloadManager * * @throws \InvalidArgumentException if package have no urls to download from * @throws \RuntimeException - * @return PromiseInterface */ public function install(PackageInterface $package, string $targetDir): PromiseInterface { @@ -290,7 +281,6 @@ class DownloadManager * @param string $targetDir target dir * * @throws \InvalidArgumentException if initial package is not installed - * @return PromiseInterface */ public function update(PackageInterface $initial, PackageInterface $target, string $targetDir): PromiseInterface { @@ -338,8 +328,6 @@ class DownloadManager * * @param PackageInterface $package package instance * @param string $targetDir target dir - * - * @return PromiseInterface */ public function remove(PackageInterface $package, string $targetDir): PromiseInterface { @@ -359,10 +347,8 @@ class DownloadManager * @param PackageInterface $package package instance * @param string $targetDir target dir * @param PackageInterface|null $prevPackage previous package instance in case of updates - * - * @return PromiseInterface */ - public function cleanup(string $type, PackageInterface $package, string $targetDir, PackageInterface $prevPackage = null): PromiseInterface + public function cleanup(string $type, PackageInterface $package, string $targetDir, ?PackageInterface $prevPackage = null): PromiseInterface { $targetDir = $this->normalizeTargetDir($targetDir); $downloader = $this->getDownloaderForPackage($package); @@ -377,8 +363,6 @@ class DownloadManager * Determines the install preference of a package * * @param PackageInterface $package package instance - * - * @return string */ protected function resolvePackageInstallPreference(PackageInterface $package): string { @@ -400,13 +384,13 @@ class DownloadManager * @return string[] * @phpstan-return array<'dist'|'source'>&non-empty-array */ - private function getAvailableSources(PackageInterface $package, PackageInterface $prevPackage = null): array + private function getAvailableSources(PackageInterface $package, ?PackageInterface $prevPackage = null): array { $sourceType = $package->getSourceType(); $distType = $package->getDistType(); // add source before dist by default - $sources = array(); + $sources = []; if ($sourceType) { $sources[] = 'source'; } @@ -445,10 +429,6 @@ class DownloadManager * Downloaders expect a /path/to/dir without trailing slash * * If any Installer provides a path with a trailing slash, this can cause bugs so make sure we remove them - * - * @param string $dir - * - * @return string */ private function normalizeTargetDir(string $dir): string { diff --git a/src/Composer/Downloader/DownloaderInterface.php b/src/Composer/Downloader/DownloaderInterface.php index 5ed8cfc68..8e135d725 100644 --- a/src/Composer/Downloader/DownloaderInterface.php +++ b/src/Composer/Downloader/DownloaderInterface.php @@ -34,9 +34,8 @@ interface DownloaderInterface * This should do any network-related tasks to prepare for an upcoming install/update * * @param string $path download path - * @return PromiseInterface */ - public function download(PackageInterface $package, string $path, PackageInterface $prevPackage = null): PromiseInterface; + public function download(PackageInterface $package, string $path, ?PackageInterface $prevPackage = null): PromiseInterface; /** * Do anything that needs to be done between all downloads have been completed and the actual operation is executed @@ -50,16 +49,14 @@ interface DownloaderInterface * @param PackageInterface $package package instance * @param string $path download path * @param PackageInterface $prevPackage previous package instance in case of an update - * @return PromiseInterface */ - public function prepare(string $type, PackageInterface $package, string $path, PackageInterface $prevPackage = null): PromiseInterface; + public function prepare(string $type, PackageInterface $package, string $path, ?PackageInterface $prevPackage = null): PromiseInterface; /** * Installs specific package into specific folder. * * @param PackageInterface $package package instance * @param string $path download path - * @return PromiseInterface */ public function install(PackageInterface $package, string $path): PromiseInterface; @@ -69,7 +66,6 @@ interface DownloaderInterface * @param PackageInterface $initial initial package * @param PackageInterface $target updated package * @param string $path download path - * @return PromiseInterface */ public function update(PackageInterface $initial, PackageInterface $target, string $path): PromiseInterface; @@ -78,7 +74,6 @@ interface DownloaderInterface * * @param PackageInterface $package package instance * @param string $path download path - * @return PromiseInterface */ public function remove(PackageInterface $package, string $path): PromiseInterface; @@ -93,7 +88,6 @@ interface DownloaderInterface * @param PackageInterface $package package instance * @param string $path download path * @param PackageInterface $prevPackage previous package instance in case of an update - * @return PromiseInterface */ - public function cleanup(string $type, PackageInterface $package, string $path, PackageInterface $prevPackage = null): PromiseInterface; + public function cleanup(string $type, PackageInterface $package, string $path, ?PackageInterface $prevPackage = null): PromiseInterface; } diff --git a/src/Composer/Downloader/FileDownloader.php b/src/Composer/Downloader/FileDownloader.php index cd8e18935..04d672c63 100644 --- a/src/Composer/Downloader/FileDownloader.php +++ b/src/Composer/Downloader/FileDownloader.php @@ -63,14 +63,14 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface * @private * @internal */ - public static $downloadMetadata = array(); + public static $downloadMetadata = []; /** * @var array Map of package name to cache key */ - private $lastCacheWrites = array(); + private $lastCacheWrites = []; /** @var array Map of package name to list of paths */ - private $additionalCleanupPaths = array(); + private $additionalCleanupPaths = []; /** * Constructor. @@ -82,7 +82,7 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface * @param Cache $cache Cache instance * @param Filesystem $filesystem The filesystem */ - public function __construct(IOInterface $io, Config $config, HttpDownloader $httpDownloader, EventDispatcher $eventDispatcher = null, Cache $cache = null, Filesystem $filesystem = null, ProcessExecutor $process = null) + public function __construct(IOInterface $io, Config $config, HttpDownloader $httpDownloader, ?EventDispatcher $eventDispatcher = null, ?Cache $cache = null, ?Filesystem $filesystem = null, ?ProcessExecutor $process = null) { $this->io = $io; $this->config = $config; @@ -108,10 +108,8 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface /** * @inheritDoc - * - * @param bool $output */ - public function download(PackageInterface $package, string $path, PackageInterface $prevPackage = null, bool $output = true): PromiseInterface + public function download(PackageInterface $package, string $path, ?PackageInterface $prevPackage = null, bool $output = true): PromiseInterface { if (!$package->getDistUrl()) { throw new \InvalidArgumentException('The given package is missing url information'); @@ -126,10 +124,10 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface $retries = 3; $distUrls = $package->getDistUrls(); /** @var array $urls */ - $urls = array(); + $urls = []; foreach ($distUrls as $index => $url) { $processedUrl = $this->processUrl($package, $url); - $urls[$index] = array( + $urls[$index] = [ 'base' => $url, 'processed' => $processedUrl, // we use the complete download url here to avoid conflicting entries @@ -137,7 +135,7 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface // in a third party repo to pre-populate the cache for the same package in // packagist for example. 'cacheKey' => $cacheKeyGenerator($package, $processedUrl), - ); + ]; } $fileName = $this->getFileName($package, $path); @@ -252,7 +250,7 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface if ($e instanceof TransportException) { // if we got an http response with a proper code, then requesting again will probably not help, abort - if ((0 !== $e->getCode() && !in_array($e->getCode(), array(500, 502, 503, 504))) || !$retries) { + if ((0 !== $e->getCode() && !in_array($e->getCode(), [500, 502, 503, 504])) || !$retries) { $retries = 0; } } @@ -260,7 +258,7 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface // special error code returned when network is being artificially disabled if ($e instanceof TransportException && $e->getStatusCode() === 499) { $retries = 0; - $urls = array(); + $urls = []; } if ($retries) { @@ -294,7 +292,7 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface /** * @inheritDoc */ - public function prepare(string $type, PackageInterface $package, string $path, PackageInterface $prevPackage = null): PromiseInterface + public function prepare(string $type, PackageInterface $package, string $path, ?PackageInterface $prevPackage = null): PromiseInterface { return \React\Promise\resolve(null); } @@ -302,18 +300,18 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface /** * @inheritDoc */ - public function cleanup(string $type, PackageInterface $package, string $path, PackageInterface $prevPackage = null): PromiseInterface + public function cleanup(string $type, PackageInterface $package, string $path, ?PackageInterface $prevPackage = null): PromiseInterface { $fileName = $this->getFileName($package, $path); if (file_exists($fileName)) { $this->filesystem->unlink($fileName); } - $dirsToCleanUp = array( + $dirsToCleanUp = [ $this->config->get('vendor-dir').'/composer/', $this->config->get('vendor-dir'), $path, - ); + ]; if (isset($this->additionalCleanupPaths[$package->getName()])) { foreach ($this->additionalCleanupPaths[$package->getName()] as $path) { @@ -332,8 +330,6 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface /** * @inheritDoc - * - * @param bool $output */ public function install(PackageInterface $package, string $path, bool $output = true): PromiseInterface { @@ -358,9 +354,6 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface return \React\Promise\resolve(null); } - /** - * @return void - */ protected function clearLastCacheWrite(PackageInterface $package): void { if ($this->cache && isset($this->lastCacheWrites[$package->getName()])) { @@ -369,21 +362,11 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface } } - /** - * @param string $path - * - * @return void - */ protected function addCleanupPath(PackageInterface $package, string $path): void { $this->additionalCleanupPaths[$package->getName()][] = $path; } - /** - * @param string $path - * - * @return void - */ protected function removeCleanupPath(PackageInterface $package, string $path): void { if (isset($this->additionalCleanupPaths[$package->getName()])) { @@ -410,8 +393,6 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface /** * @inheritDoc - * - * @param bool $output */ public function remove(PackageInterface $package, string $path, bool $output = true): PromiseInterface { @@ -444,7 +425,6 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface * * @param PackageInterface $package package instance * @param string $path download path - * @return string */ protected function getInstallOperationAppendix(PackageInterface $package, string $path): string { diff --git a/src/Composer/Downloader/FilesystemException.php b/src/Composer/Downloader/FilesystemException.php index 5aff2f089..8dbc8313e 100644 --- a/src/Composer/Downloader/FilesystemException.php +++ b/src/Composer/Downloader/FilesystemException.php @@ -19,12 +19,7 @@ namespace Composer\Downloader; */ class FilesystemException extends \Exception { - /** - * @param string $message - * @param int $code - * @param \Exception|null $previous - */ - public function __construct(string $message = '', int $code = 0, \Exception $previous = null) + public function __construct(string $message = '', int $code = 0, ?\Exception $previous = null) { parent::__construct("Filesystem exception: \n".$message, $code, $previous); } diff --git a/src/Composer/Downloader/FossilDownloader.php b/src/Composer/Downloader/FossilDownloader.php index 8e8d19c1e..6634771dc 100644 --- a/src/Composer/Downloader/FossilDownloader.php +++ b/src/Composer/Downloader/FossilDownloader.php @@ -25,7 +25,7 @@ class FossilDownloader extends VcsDownloader /** * @inheritDoc */ - protected function doDownload(PackageInterface $package, string $path, string $url, PackageInterface $prevPackage = null): PromiseInterface + protected function doDownload(PackageInterface $package, string $path, string $url, ?PackageInterface $prevPackage = null): PromiseInterface { return \React\Promise\resolve(null); } diff --git a/src/Composer/Downloader/GitDownloader.php b/src/Composer/Downloader/GitDownloader.php index c5676df27..d11a37958 100644 --- a/src/Composer/Downloader/GitDownloader.php +++ b/src/Composer/Downloader/GitDownloader.php @@ -33,12 +33,12 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface * @var bool[] * @phpstan-var array */ - private $hasStashedChanges = array(); + private $hasStashedChanges = []; /** * @var bool[] * @phpstan-var array */ - private $hasDiscardedChanges = array(); + private $hasDiscardedChanges = []; /** * @var GitUtil */ @@ -47,9 +47,9 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface * @var array * @phpstan-var array> */ - private $cachedPackages = array(); + private $cachedPackages = []; - public function __construct(IOInterface $io, Config $config, ProcessExecutor $process = null, Filesystem $fs = null) + public function __construct(IOInterface $io, Config $config, ?ProcessExecutor $process = null, ?Filesystem $fs = null) { parent::__construct($io, $config, $process, $fs); $this->gitUtil = new GitUtil($this->io, $this->config, $this->process, $this->filesystem); @@ -58,7 +58,7 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface /** * @inheritDoc */ - protected function doDownload(PackageInterface $package, string $path, string $url, PackageInterface $prevPackage = null): PromiseInterface + protected function doDownload(PackageInterface $package, string $path, string $url, ?PackageInterface $prevPackage = null): PromiseInterface { GitUtil::cleanEnv(); @@ -116,13 +116,13 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface $commandCallable = static function (string $url) use ($path, $command, $cachePath): string { return str_replace( - array('%url%', '%path%', '%cachePath%', '%sanitizedUrl%'), - array( + ['%url%', '%path%', '%cachePath%', '%sanitizedUrl%'], + [ ProcessExecutor::escape($url), ProcessExecutor::escape($path), ProcessExecutor::escape($cachePath), ProcessExecutor::escape(Preg::replace('{://([^@]+?):(.+?)@}', '://', $url)), - ), + ], $command ); }; @@ -174,13 +174,13 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface $commandCallable = static function ($url) use ($ref, $command, $cachePath): string { return str_replace( - array('%url%', '%ref%', '%cachePath%', '%sanitizedUrl%'), - array( + ['%url%', '%ref%', '%cachePath%', '%sanitizedUrl%'], + [ ProcessExecutor::escape($url), ProcessExecutor::escape($ref.'^{commit}'), ProcessExecutor::escape($cachePath), ProcessExecutor::escape(Preg::replace('{://([^@]+?):(.+?)@}', '://', $url)), - ), + ], $command ); }; @@ -230,9 +230,6 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface return strlen($output) > 0 ? $output : null; } - /** - * @return null|string - */ public function getUnpushedChanges(PackageInterface $package, string $path): ?string { GitUtil::cleanEnv(); @@ -266,7 +263,7 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface // do two passes, as if we find anything we want to fetch and then re-try for ($i = 0; $i <= 1; $i++) { - $remoteBranches = array(); + $remoteBranches = []; // try to find matching branch names in remote repos foreach ($candidateBranches as $candidate) { @@ -397,12 +394,12 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface case '?': default: help : - $this->io->writeError(array( + $this->io->writeError([ ' y - discard changes and apply the '.($update ? 'update' : 'uninstall'), ' n - abort the '.($update ? 'update' : 'uninstall').' and let you manually clean things up', ' v - view modified files', ' d - view local modifications (diff)', - )); + ]); if ($update) { $this->io->writeError(' s - stash changes and try to reapply them after the update'); } @@ -434,9 +431,6 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface /** * Updates the given path to the given commit ref * - * @param string $path - * @param string $reference - * @param string $prettyVersion * @throws \RuntimeException * @return null|string if a string is returned, it is the commit reference that was checked out if the original could not be found */ @@ -501,24 +495,12 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface throw new \RuntimeException(Url::sanitize('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput() . $exceptionExtra)); } - /** - * @param string $path - * @param string $url - * - * @return void - */ protected function updateOriginUrl(string $path, string $url): void { $this->process->execute(sprintf('git remote set-url origin -- %s', ProcessExecutor::escape($url)), $output, $path); $this->setPushUrl($path, $url); } - /** - * @param string $path - * @param string $url - * - * @return void - */ protected function setPushUrl(string $path, string $url): void { // set push url for github projects @@ -549,10 +531,6 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface } /** - * @param string $path - * - * @return PromiseInterface - * * @throws \RuntimeException */ protected function discardChanges(string $path): PromiseInterface @@ -568,10 +546,6 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface } /** - * @param string $path - * - * @return PromiseInterface - * * @throws \RuntimeException */ protected function stashChanges(string $path): PromiseInterface @@ -587,10 +561,6 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface } /** - * @param string $path - * - * @return void - * * @throws \RuntimeException */ protected function viewDiff(string $path): void @@ -603,16 +573,11 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface $this->io->writeError($output); } - /** - * @param string $path - * - * @return string - */ protected function normalizePath(string $path): string { if (Platform::isWindows() && strlen($path) > 0) { $basePath = $path; - $removed = array(); + $removed = []; while (!is_dir($basePath) && $basePath !== '\\') { array_unshift($removed, basename($basePath)); @@ -639,10 +604,6 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface return is_dir($path.'/.git'); } - /** - * @param string $reference - * @return string - */ protected function getShortHash(string $reference): string { if (!$this->io->isVerbose() && Preg::isMatch('{^[0-9a-f]{40}$}', $reference)) { diff --git a/src/Composer/Downloader/GzipDownloader.php b/src/Composer/Downloader/GzipDownloader.php index 32fb8e42c..9037f5226 100644 --- a/src/Composer/Downloader/GzipDownloader.php +++ b/src/Composer/Downloader/GzipDownloader.php @@ -54,12 +54,6 @@ class GzipDownloader extends ArchiveDownloader return \React\Promise\resolve(null); } - /** - * @param string $file - * @param string $targetFilepath - * - * @return void - */ private function extractUsingExt(string $file, string $targetFilepath): void { $archiveFile = gzopen($file, 'rb'); diff --git a/src/Composer/Downloader/HgDownloader.php b/src/Composer/Downloader/HgDownloader.php index c1b71a299..b0cc9cd7d 100644 --- a/src/Composer/Downloader/HgDownloader.php +++ b/src/Composer/Downloader/HgDownloader.php @@ -25,7 +25,7 @@ class HgDownloader extends VcsDownloader /** * @inheritDoc */ - protected function doDownload(PackageInterface $package, string $path, string $url, PackageInterface $prevPackage = null): PromiseInterface + protected function doDownload(PackageInterface $package, string $path, string $url, ?PackageInterface $prevPackage = null): PromiseInterface { if (null === HgUtils::getVersion($this->process)) { throw new \RuntimeException('hg was not found in your PATH, skipping source download'); diff --git a/src/Composer/Downloader/PathDownloader.php b/src/Composer/Downloader/PathDownloader.php index a998f4774..791521bd6 100644 --- a/src/Composer/Downloader/PathDownloader.php +++ b/src/Composer/Downloader/PathDownloader.php @@ -39,7 +39,7 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter /** * @inheritDoc */ - public function download(PackageInterface $package, string $path, PackageInterface $prevPackage = null, bool $output = true): PromiseInterface + public function download(PackageInterface $package, string $path, ?PackageInterface $prevPackage = null, bool $output = true): PromiseInterface { $path = Filesystem::trimTrailingSlash($path); $url = $package->getDistUrl(); @@ -90,9 +90,9 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter } // Get the transport options with default values - $transportOptions = $package->getTransportOptions() + array('relative' => true); + $transportOptions = $package->getTransportOptions() + ['relative' => true]; - list($currentStrategy, $allowedStrategies) = $this->computeAllowedStrategies($transportOptions); + [$currentStrategy, $allowedStrategies] = $this->computeAllowedStrategies($transportOptions); $symfonyFilesystem = new SymfonyFilesystem(); $this->filesystem->removeDirectory($path); @@ -147,7 +147,7 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter if ($output) { $this->io->writeError(sprintf('%sMirroring from %s', $isFallback ? ' ' : '', $url), false); } - $iterator = new ArchivableFilesFinder($realUrl, array()); + $iterator = new ArchivableFilesFinder($realUrl, []); $symfonyFilesystem->mirror($realUrl, $path, $iterator); } @@ -232,7 +232,7 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter return ': Source already present'; } - list($currentStrategy) = $this->computeAllowedStrategies($package->getTransportOptions()); + [$currentStrategy] = $this->computeAllowedStrategies($package->getTransportOptions()); if ($currentStrategy === self::STRATEGY_SYMLINK) { if (Platform::isWindows()) { @@ -254,7 +254,7 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter { // When symlink transport option is null, both symlink and mirror are allowed $currentStrategy = self::STRATEGY_SYMLINK; - $allowedStrategies = array(self::STRATEGY_SYMLINK, self::STRATEGY_MIRROR); + $allowedStrategies = [self::STRATEGY_SYMLINK, self::STRATEGY_MIRROR]; $mirrorPathRepos = Platform::getEnv('COMPOSER_MIRROR_PATH_REPOS'); if ($mirrorPathRepos) { @@ -265,10 +265,10 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter if (true === $symlinkOption) { $currentStrategy = self::STRATEGY_SYMLINK; - $allowedStrategies = array(self::STRATEGY_SYMLINK); + $allowedStrategies = [self::STRATEGY_SYMLINK]; } elseif (false === $symlinkOption) { $currentStrategy = self::STRATEGY_MIRROR; - $allowedStrategies = array(self::STRATEGY_MIRROR); + $allowedStrategies = [self::STRATEGY_MIRROR]; } // Check we can use junctions safely if we are on Windows @@ -277,7 +277,7 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter throw new \RuntimeException('You are on an old Windows / old PHP combo which does not allow Composer to use junctions/symlinks and this path repository has symlink:true in its options so copying is not allowed'); } $currentStrategy = self::STRATEGY_MIRROR; - $allowedStrategies = array(self::STRATEGY_MIRROR); + $allowedStrategies = [self::STRATEGY_MIRROR]; } // Check we can use symlink() otherwise @@ -286,10 +286,10 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter throw new \RuntimeException('Your PHP has the symlink() function disabled which does not allow Composer to use symlinks and this path repository has symlink:true in its options so copying is not allowed'); } $currentStrategy = self::STRATEGY_MIRROR; - $allowedStrategies = array(self::STRATEGY_MIRROR); + $allowedStrategies = [self::STRATEGY_MIRROR]; } - return array($currentStrategy, $allowedStrategies); + return [$currentStrategy, $allowedStrategies]; } /** @@ -302,8 +302,6 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter * system rmdir which will preserve target content if given a junction. * * The PHP bug was fixed in 7.2.16 and 7.3.3 (requires at least Windows 7). - * - * @return bool */ private function safeJunctions(): bool { diff --git a/src/Composer/Downloader/PerforceDownloader.php b/src/Composer/Downloader/PerforceDownloader.php index e78abc513..faf159e3f 100644 --- a/src/Composer/Downloader/PerforceDownloader.php +++ b/src/Composer/Downloader/PerforceDownloader.php @@ -28,7 +28,7 @@ class PerforceDownloader extends VcsDownloader /** * @inheritDoc */ - protected function doDownload(PackageInterface $package, string $path, string $url, PackageInterface $prevPackage = null): PromiseInterface + protected function doDownload(PackageInterface $package, string $path, string $url, ?PackageInterface $prevPackage = null): PromiseInterface { return \React\Promise\resolve(null); } @@ -53,11 +53,6 @@ class PerforceDownloader extends VcsDownloader return \React\Promise\resolve(null); } - /** - * @param string $ref - * - * @return string|null - */ private function getLabelFromSourceReference(string $ref): ?string { $pos = strpos($ref, '@'); @@ -68,12 +63,6 @@ class PerforceDownloader extends VcsDownloader return null; } - /** - * @param string $path - * @param string $url - * - * @return void - */ public function initPerforce(PackageInterface $package, string $path, string $url): void { if (!empty($this->perforce)) { @@ -124,9 +113,6 @@ class PerforceDownloader extends VcsDownloader return $this->perforce->getCommitLogs($fromReference, $toReference); } - /** - * @return void - */ public function setPerforce(Perforce $perforce): void { $this->perforce = $perforce; diff --git a/src/Composer/Downloader/SvnDownloader.php b/src/Composer/Downloader/SvnDownloader.php index 66f86224b..637ce8193 100644 --- a/src/Composer/Downloader/SvnDownloader.php +++ b/src/Composer/Downloader/SvnDownloader.php @@ -31,7 +31,7 @@ class SvnDownloader extends VcsDownloader /** * @inheritDoc */ - protected function doDownload(PackageInterface $package, string $path, string $url, PackageInterface $prevPackage = null): PromiseInterface + protected function doDownload(PackageInterface $package, string $path, string $url, ?PackageInterface $prevPackage = null): PromiseInterface { SvnUtil::cleanEnv(); $util = new SvnUtil($url, $this->io, $this->config, $this->process); @@ -112,9 +112,8 @@ class SvnDownloader extends VcsDownloader * @param string $cwd Working directory * @param string $path Target for a checkout * @throws \RuntimeException - * @return string */ - protected function execute(PackageInterface $package, string $baseUrl, string $command, string $url, string $cwd = null, string $path = null): string + protected function execute(PackageInterface $package, string $baseUrl, string $command, string $url, ?string $cwd = null, ?string $path = null): string { $util = new SvnUtil($baseUrl, $this->io, $this->config, $this->process); $util->setCacheCredentials($this->cacheCredentials); @@ -175,12 +174,12 @@ class SvnDownloader extends VcsDownloader case '?': default: - $this->io->writeError(array( + $this->io->writeError([ ' y - discard changes and apply the '.($update ? 'update' : 'uninstall'), ' n - abort the '.($update ? 'update' : 'uninstall').' and let you manually clean things up', ' v - view modified files', ' ? - print help', - )); + ]); break; } } @@ -231,11 +230,6 @@ class SvnDownloader extends VcsDownloader return "Could not retrieve changes between $fromReference and $toReference due to missing revision information"; } - /** - * @param string $path - * - * @return PromiseInterface - */ protected function discardChanges(string $path): PromiseInterface { if (0 !== $this->process->execute('svn revert -R .', $output, $path)) { diff --git a/src/Composer/Downloader/TransportException.php b/src/Composer/Downloader/TransportException.php index 3a9209be4..c91897c1c 100644 --- a/src/Composer/Downloader/TransportException.php +++ b/src/Composer/Downloader/TransportException.php @@ -24,12 +24,10 @@ class TransportException extends \RuntimeException /** @var ?int */ protected $statusCode; /** @var array */ - protected $responseInfo = array(); + protected $responseInfo = []; /** * @param array $headers - * - * @return void */ public function setHeaders(array $headers): void { @@ -44,11 +42,6 @@ class TransportException extends \RuntimeException return $this->headers; } - /** - * @param null|string $response - * - * @return void - */ public function setResponse(?string $response): void { $this->response = $response; @@ -64,8 +57,6 @@ class TransportException extends \RuntimeException /** * @param ?int $statusCode - * - * @return void */ public function setStatusCode($statusCode): void { @@ -90,8 +81,6 @@ class TransportException extends \RuntimeException /** * @param array $responseInfo - * - * @return void */ public function setResponseInfo(array $responseInfo): void { diff --git a/src/Composer/Downloader/VcsDownloader.php b/src/Composer/Downloader/VcsDownloader.php index 6fab1172a..de67d16ee 100644 --- a/src/Composer/Downloader/VcsDownloader.php +++ b/src/Composer/Downloader/VcsDownloader.php @@ -39,9 +39,9 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa /** @var Filesystem */ protected $filesystem; /** @var array */ - protected $hasCleanedChanges = array(); + protected $hasCleanedChanges = []; - public function __construct(IOInterface $io, Config $config, ProcessExecutor $process = null, Filesystem $fs = null) + public function __construct(IOInterface $io, Config $config, ?ProcessExecutor $process = null, ?Filesystem $fs = null) { $this->io = $io; $this->config = $config; @@ -60,7 +60,7 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa /** * @inheritDoc */ - public function download(PackageInterface $package, string $path, PackageInterface $prevPackage = null): PromiseInterface + public function download(PackageInterface $package, string $path, ?PackageInterface $prevPackage = null): PromiseInterface { if (!$package->getSourceReference()) { throw new \InvalidArgumentException('Package '.$package->getPrettyName().' is missing reference information'); @@ -93,7 +93,7 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa /** * @inheritDoc */ - public function prepare(string $type, PackageInterface $package, string $path, PackageInterface $prevPackage = null): PromiseInterface + public function prepare(string $type, PackageInterface $package, string $path, ?PackageInterface $prevPackage = null): PromiseInterface { if ($type === 'update') { $this->cleanChanges($prevPackage, $path, true); @@ -110,7 +110,7 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa /** * @inheritDoc */ - public function cleanup(string $type, PackageInterface $package, string $path, PackageInterface $prevPackage = null): PromiseInterface + public function cleanup(string $type, PackageInterface $package, string $path, ?PackageInterface $prevPackage = null): PromiseInterface { if ($type === 'update' && isset($this->hasCleanedChanges[$prevPackage->getUniqueName()])) { $this->reapplyChanges($path); @@ -255,12 +255,9 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa /** * Prompt the user to check if changes should be stashed/removed or the operation aborted * - * @param PackageInterface $package - * @param string $path * @param bool $update if true (update) the changes can be stashed and reapplied after an update, * if false (remove) the changes should be assumed to be lost if the operation is not aborted * - * @return PromiseInterface * * @throws \RuntimeException in case the operation must be aborted */ @@ -277,9 +274,7 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa /** * Reapply previously stashes changes if applicable, only called after an update (regardless if successful or not) * - * @param string $path * - * @return void * * @throws \RuntimeException in case the operation must be aborted or the patch does not apply cleanly */ @@ -294,10 +289,8 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa * @param string $path download path * @param string $url package url * @param PackageInterface|null $prevPackage previous package (in case of an update) - * - * @return PromiseInterface */ - abstract protected function doDownload(PackageInterface $package, string $path, string $url, PackageInterface $prevPackage = null): PromiseInterface; + abstract protected function doDownload(PackageInterface $package, string $path, string $url, ?PackageInterface $prevPackage = null): PromiseInterface; /** * Downloads specific package into specific folder. @@ -305,8 +298,6 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa * @param PackageInterface $package package instance * @param string $path download path * @param string $url package url - * - * @return PromiseInterface */ abstract protected function doInstall(PackageInterface $package, string $path, string $url): PromiseInterface; @@ -317,8 +308,6 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa * @param PackageInterface $target updated package * @param string $path download path * @param string $url package url - * - * @return PromiseInterface */ abstract protected function doUpdate(PackageInterface $initial, PackageInterface $target, string $path, string $url): PromiseInterface; @@ -328,16 +317,12 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa * @param string $fromReference the source reference * @param string $toReference the target reference * @param string $path the package path - * @return string */ abstract protected function getCommitLogs(string $fromReference, string $toReference, string $path): string; /** * Checks if VCS metadata repository has been initialized * repository example: .git|.svn|.hg - * - * @param string $path - * @return bool */ abstract protected function hasMetadataRepository(string $path): bool; diff --git a/src/Composer/Downloader/ZipDownloader.php b/src/Composer/Downloader/ZipDownloader.php index 93ee29162..4a4095e5d 100644 --- a/src/Composer/Downloader/ZipDownloader.php +++ b/src/Composer/Downloader/ZipDownloader.php @@ -40,28 +40,28 @@ class ZipDownloader extends ArchiveDownloader /** * @inheritDoc */ - public function download(PackageInterface $package, string $path, PackageInterface $prevPackage = null, bool $output = true): PromiseInterface + public function download(PackageInterface $package, string $path, ?PackageInterface $prevPackage = null, bool $output = true): PromiseInterface { if (null === self::$unzipCommands) { - self::$unzipCommands = array(); + self::$unzipCommands = []; $finder = new ExecutableFinder; - if (Platform::isWindows() && ($cmd = $finder->find('7z', null, array('C:\Program Files\7-Zip')))) { - self::$unzipCommands[] = array('7z', ProcessExecutor::escape($cmd).' x -bb0 -y %s -o%s'); + if (Platform::isWindows() && ($cmd = $finder->find('7z', null, ['C:\Program Files\7-Zip']))) { + self::$unzipCommands[] = ['7z', ProcessExecutor::escape($cmd).' x -bb0 -y %s -o%s']; } if ($cmd = $finder->find('unzip')) { - self::$unzipCommands[] = array('unzip', ProcessExecutor::escape($cmd).' -qq %s -d %s'); + self::$unzipCommands[] = ['unzip', ProcessExecutor::escape($cmd).' -qq %s -d %s']; } if (!Platform::isWindows() && ($cmd = $finder->find('7z'))) { // 7z linux/macOS support is only used if unzip is not present - self::$unzipCommands[] = array('7z', ProcessExecutor::escape($cmd).' x -bb0 -y %s -o%s'); + self::$unzipCommands[] = ['7z', ProcessExecutor::escape($cmd).' x -bb0 -y %s -o%s']; } if (!Platform::isWindows() && ($cmd = $finder->find('7zz'))) { // 7zz linux/macOS support is only used if unzip is not present - self::$unzipCommands[] = array('7zz', ProcessExecutor::escape($cmd).' x -bb0 -y %s -o%s'); + self::$unzipCommands[] = ['7zz', ProcessExecutor::escape($cmd).' x -bb0 -y %s -o%s']; } } $procOpenMissing = false; if (!function_exists('proc_open')) { - self::$unzipCommands = array(); + self::$unzipCommands = []; $procOpenMissing = true; } @@ -105,7 +105,6 @@ class ZipDownloader extends ArchiveDownloader * * @param string $file File to extract * @param string $path Path where to extract file - * @return PromiseInterface */ private function extractWithSystemUnzip(PackageInterface $package, string $file, string $path): PromiseInterface { @@ -129,7 +128,7 @@ class ZipDownloader extends ArchiveDownloader } $executable = $commandSpec[0]; - if (!$warned7ZipLinux && !Platform::isWindows() && in_array($executable, array('7z', '7zz'), true)) { + if (!$warned7ZipLinux && !Platform::isWindows() && in_array($executable, ['7z', '7zz'], true)) { $warned7ZipLinux = true; if (0 === $this->process->execute($executable, $output)) { if (Preg::isMatch('{^\s*7-Zip(?: \[64\])? ([0-9.]+)}', $output, $match) && version_compare($match[1], '21.01', '<')) { @@ -182,7 +181,6 @@ class ZipDownloader extends ArchiveDownloader * * @param string $file File to extract * @param string $path Path where to extract file - * @return PromiseInterface */ private function extractWithZipArchive(PackageInterface $package, string $file, string $path): PromiseInterface { @@ -222,7 +220,6 @@ class ZipDownloader extends ArchiveDownloader * * @param string $file File to extract * @param string $path Path where to extract file - * @return PromiseInterface */ protected function extract(PackageInterface $package, string $file, string $path): PromiseInterface { @@ -231,10 +228,6 @@ class ZipDownloader extends ArchiveDownloader /** * Give a meaningful error message to the user. - * - * @param int $retval - * @param string $file - * @return string */ protected function getErrorMessage(int $retval, string $file): string { diff --git a/src/Composer/EventDispatcher/Event.php b/src/Composer/EventDispatcher/Event.php index 06bd00655..4230df676 100644 --- a/src/Composer/EventDispatcher/Event.php +++ b/src/Composer/EventDispatcher/Event.php @@ -46,7 +46,7 @@ class Event * @param string[] $args Arguments passed by the user * @param mixed[] $flags Optional flags to pass data not as argument */ - public function __construct(string $name, array $args = array(), array $flags = array()) + public function __construct(string $name, array $args = [], array $flags = []) { $this->name = $name; $this->args = $args; @@ -95,8 +95,6 @@ class Event /** * Prevents the event from being passed to further listeners - * - * @return void */ public function stopPropagation(): void { diff --git a/src/Composer/EventDispatcher/EventDispatcher.php b/src/Composer/EventDispatcher/EventDispatcher.php index 323922c6b..c6547e0d7 100644 --- a/src/Composer/EventDispatcher/EventDispatcher.php +++ b/src/Composer/EventDispatcher/EventDispatcher.php @@ -54,7 +54,7 @@ class EventDispatcher /** @var ProcessExecutor */ protected $process; /** @var array>> */ - protected $listeners = array(); + protected $listeners = []; /** @var bool */ protected $runScripts = true; /** @var list */ @@ -67,18 +67,17 @@ class EventDispatcher * @param IOInterface $io The IOInterface instance * @param ProcessExecutor $process */ - public function __construct(PartialComposer $composer, IOInterface $io, ProcessExecutor $process = null) + public function __construct(PartialComposer $composer, IOInterface $io, ?ProcessExecutor $process = null) { $this->composer = $composer; $this->io = $io; $this->process = $process ?? new ProcessExecutor($io); - $this->eventStack = array(); + $this->eventStack = []; } /** * Set whether script handlers are active or not * - * @param bool $runScripts * @return $this */ public function setRunScripts(bool $runScripts = true): self @@ -96,7 +95,7 @@ class EventDispatcher * @return int return code of the executed script if any, for php scripts a false return * value is changed to 1, anything else to 0 */ - public function dispatch(?string $eventName, Event $event = null): int + public function dispatch(?string $eventName, ?Event $event = null): int { if (null === $event) { if (null === $eventName) { @@ -112,13 +111,12 @@ class EventDispatcher * Dispatch a script event. * * @param string $eventName The constant in ScriptEvents - * @param bool $devMode * @param array $additionalArgs Arguments passed by the user * @param array $flags Optional flags to pass data not as argument * @return int return code of the executed script if any, for php scripts a false return * value is changed to 1, anything else to 0 */ - public function dispatchScript(string $eventName, bool $devMode = false, array $additionalArgs = array(), array $flags = array()): int + public function dispatchScript(string $eventName, bool $devMode = false, array $additionalArgs = [], array $flags = []): int { assert($this->composer instanceof Composer, new \LogicException('This should only be reached with a fully loaded Composer')); @@ -199,7 +197,7 @@ class EventDispatcher if (is_array($callable) && (is_string($callable[0]) || is_object($callable[0])) && is_string($callable[1])) { $this->io->writeError(sprintf('> %s: %s', $event->getName(), (is_object($callable[0]) ? get_class($callable[0]) : $callable[0]).'->'.$callable[1]), true, IOInterface::VERBOSE); } - $return = false === call_user_func($callable, $event) ? 1 : 0; + $return = false === $callable($event) ? 1 : 0; } elseif ($this->isComposerScript($callable)) { $this->io->writeError(sprintf('> %s: %s', $event->getName(), $callable), true, IOInterface::VERBOSE); @@ -252,7 +250,7 @@ class EventDispatcher throw $e; } } else { - $args = implode(' ', array_map(array('Composer\Util\ProcessExecutor', 'escape'), $event->getArguments())); + $args = implode(' ', array_map(['Composer\Util\ProcessExecutor', 'escape'], $event->getArguments())); // @putenv does not receive arguments if (strpos($callable, '@putenv ') === 0) { @@ -283,7 +281,7 @@ class EventDispatcher if (false === strpos($exec, '=')) { Platform::clearEnv(substr($exec, 8)); } else { - list($var, $value) = explode('=', substr($exec, 8), 2); + [$var, $value] = explode('=', substr($exec, 8), 2); Platform::putEnv($var, $value); } @@ -347,11 +345,6 @@ class EventDispatcher return $returnMax; } - /** - * @param string $exec - * - * @return int - */ protected function executeTty(string $exec): int { if ($this->io->isInteractive()) { @@ -361,9 +354,6 @@ class EventDispatcher return $this->process->execute($exec); } - /** - * @return string - */ protected function getPhpExecCommand(): string { $finder = new PhpExecutableFinder(); @@ -381,8 +371,6 @@ class EventDispatcher } /** - * @param string $className - * @param string $methodName * @param Event $event Event invoking the PHP callable * * @return mixed @@ -404,8 +392,6 @@ class EventDispatcher * @param string $eventName The event name - typically a constant * @param callable|string $listener A callable expecting an event argument, or a command string to be executed (same as a composer.json "scripts" entry) * @param int $priority A higher value represents a higher priority - * - * @return void */ public function addListener(string $eventName, $listener, int $priority = 0): void { @@ -414,8 +400,6 @@ class EventDispatcher /** * @param callable|object $listener A callable or an object instance for which all listeners should be removed - * - * @return void */ public function removeListener($listener): void { @@ -434,21 +418,17 @@ class EventDispatcher * Adds object methods as listeners for the events in getSubscribedEvents * * @see EventSubscriberInterface - * - * @param EventSubscriberInterface $subscriber - * - * @return void */ public function addSubscriber(EventSubscriberInterface $subscriber): void { foreach ($subscriber->getSubscribedEvents() as $eventName => $params) { if (is_string($params)) { - $this->addListener($eventName, array($subscriber, $params)); + $this->addListener($eventName, [$subscriber, $params]); } elseif (is_string($params[0])) { - $this->addListener($eventName, array($subscriber, $params[0]), $params[1] ?? 0); + $this->addListener($eventName, [$subscriber, $params[0]], $params[1] ?? 0); } else { foreach ($params as $listener) { - $this->addListener($eventName, array($subscriber, $listener[0]), $listener[1] ?? 0); + $this->addListener($eventName, [$subscriber, $listener[0]], $listener[1] ?? 0); } } } @@ -457,29 +437,25 @@ class EventDispatcher /** * Retrieves all listeners for a given event * - * @param Event $event * @return array All listeners: callables and scripts */ protected function getListeners(Event $event): array { - $scriptListeners = $this->runScripts ? $this->getScriptListeners($event) : array(); + $scriptListeners = $this->runScripts ? $this->getScriptListeners($event) : []; if (!isset($this->listeners[$event->getName()][0])) { - $this->listeners[$event->getName()][0] = array(); + $this->listeners[$event->getName()][0] = []; } krsort($this->listeners[$event->getName()]); $listeners = $this->listeners; $listeners[$event->getName()][0] = array_merge($listeners[$event->getName()][0], $scriptListeners); - return call_user_func_array('array_merge', $listeners[$event->getName()]); + return array_merge(...$listeners[$event->getName()]); } /** * Checks if an event has listeners registered - * - * @param Event $event - * @return bool */ public function hasEventListeners(Event $event): bool { @@ -500,7 +476,7 @@ class EventDispatcher $scripts = $package->getScripts(); if (empty($scripts[$event->getName()])) { - return array(); + return []; } assert($this->composer instanceof Composer, new \LogicException('This should only be reached with a fully loaded Composer')); @@ -525,9 +501,6 @@ class EventDispatcher /** * Checks if string given references a class path and method - * - * @param string $callable - * @return bool */ protected function isPhpScript(string $callable): bool { @@ -536,9 +509,6 @@ class EventDispatcher /** * Checks if string given references a composer run-script - * - * @param string $callable - * @return bool */ protected function isComposerScript(string $callable): bool { @@ -548,9 +518,7 @@ class EventDispatcher /** * Push an event to the stack of active event * - * @param Event $event * @throws \RuntimeException - * @return int */ protected function pushEvent(Event $event): int { @@ -564,17 +532,12 @@ class EventDispatcher /** * Pops the active event from the stack - * - * @return string|null */ protected function popEvent(): ?string { return array_pop($this->eventStack); } - /** - * @return void - */ private function ensureBinDirIsInPath(): void { $pathEnv = 'PATH'; diff --git a/src/Composer/Factory.php b/src/Composer/Factory.php index 1a1f5e75a..453f1e9e2 100644 --- a/src/Composer/Factory.php +++ b/src/Composer/Factory.php @@ -29,7 +29,6 @@ use Composer\Util\Silencer; use Composer\Plugin\PluginEvents; use Composer\EventDispatcher\Event; use Phar; -use Seld\JsonLint\DuplicateKeyException; use Symfony\Component\Console\Formatter\OutputFormatter; use Symfony\Component\Console\Formatter\OutputFormatterStyle; use Symfony\Component\Console\Output\ConsoleOutput; @@ -39,7 +38,6 @@ use Composer\Package\Version\VersionParser; use Composer\Downloader\TransportException; use Composer\Json\JsonValidationException; use Composer\Repository\InstalledRepositoryInterface; -use Seld\JsonLint\JsonParser; use UnexpectedValueException; use ZipArchive; @@ -72,7 +70,7 @@ class Factory } $userDir = self::getUserDir(); - $dirs = array(); + $dirs = []; if (self::useXdg()) { // XDG Base Directory Specifications @@ -163,7 +161,7 @@ class Factory return $home; } - public static function createConfig(IOInterface $io = null, ?string $cwd = null): Config + public static function createConfig(?IOInterface $io = null, ?string $cwd = null): Config { $cwd = $cwd ?? Platform::getCwd(true); @@ -171,13 +169,13 @@ class Factory // determine and add main dirs to the config $home = self::getHomeDir(); - $config->merge(array( - 'config' => array( + $config->merge([ + 'config' => [ 'home' => $home, 'cache-dir' => self::getCacheDir($home), 'data-dir' => self::getDataDir($home), - ) - ), Config::SOURCE_DEFAULT); + ], + ], Config::SOURCE_DEFAULT); // load global config $file = new JsonFile($config->get('home').'/config.json'); @@ -195,7 +193,7 @@ class Factory // Protect directory against web access. Since HOME could be // the www-data's user home and be web-accessible it is a // potential security risk - $dirs = array($config->get('home'), $config->get('cache-dir'), $config->get('data-dir')); + $dirs = [$config->get('home'), $config->get('cache-dir'), $config->get('data-dir')]; foreach ($dirs as $dir) { if (!file_exists($dir . '/.htaccess')) { if (!is_dir($dir)) { @@ -213,7 +211,7 @@ class Factory $io->writeError('Loading config file ' . $file->getPath(), true, IOInterface::DEBUG); } self::validateJsonSchema($io, $file, JsonFile::AUTH_SCHEMA); - $config->merge(array('config' => $file->read()), $file->getPath()); + $config->merge(['config' => $file->read()], $file->getPath()); } $config->setAuthConfigSource(new JsonConfigSource($file, true)); @@ -231,7 +229,7 @@ class Factory self::validateJsonSchema($io, $authData, JsonFile::AUTH_SCHEMA, 'COMPOSER_AUTH'); $authData = json_decode($composerAuthEnv, true); if (null !== $authData) { - $config->merge(array('config' => $authData), 'COMPOSER_AUTH'); + $config->merge(['config' => $authData], 'COMPOSER_AUTH'); } } } @@ -256,10 +254,10 @@ class Factory */ public static function createAdditionalStyles(): array { - return array( + return [ 'highlight' => new OutputFormatterStyle('red'), 'warning' => new OutputFormatterStyle('black', 'yellow'), - ); + ]; } public static function createOutput(): ConsoleOutput @@ -278,7 +276,6 @@ class Factory * read from the default filename * @param bool|'local'|'global' $disablePlugins Whether plugins should not be loaded, can be set to local or global to only disable local/global plugins * @param bool $disableScripts Whether scripts should not be run - * @param string|null $cwd * @param bool $fullLoad Whether to initialize everything or only main project stuff (used when loading the global composer) * @throws \InvalidArgumentException * @throws \UnexpectedValueException @@ -340,7 +337,7 @@ class Factory if ($localAuthFile->exists()) { $io->writeError('Loading config file ' . $localAuthFile->getPath(), true, IOInterface::DEBUG); self::validateJsonSchema($io, $localAuthFile, JsonFile::AUTH_SCHEMA); - $config->merge(array('config' => $localAuthFile->read()), $localAuthFile->getPath()); + $config->merge(['config' => $localAuthFile->read()], $localAuthFile->getPath()); $config->setAuthConfigSource(new JsonConfigSource($localAuthFile, true)); } } @@ -467,11 +464,8 @@ class Factory /** * @param Repository\RepositoryManager $rm - * @param string $vendorDir - * - * @return void */ - protected function addLocalRepository(IOInterface $io, RepositoryManager $rm, string $vendorDir, RootPackageInterface $rootPackage, ProcessExecutor $process = null): void + protected function addLocalRepository(IOInterface $io, RepositoryManager $rm, string $vendorDir, RootPackageInterface $rootPackage, ?ProcessExecutor $process = null): void { $fs = null; if ($process) { @@ -503,11 +497,9 @@ class Factory /** * @param IO\IOInterface $io - * @param Config $config * @param EventDispatcher $eventDispatcher - * @return Downloader\DownloadManager */ - public function createDownloadManager(IOInterface $io, Config $config, HttpDownloader $httpDownloader, ProcessExecutor $process, EventDispatcher $eventDispatcher = null): Downloader\DownloadManager + public function createDownloadManager(IOInterface $io, Config $config, HttpDownloader $httpDownloader, ProcessExecutor $process, ?EventDispatcher $eventDispatcher = null): Downloader\DownloadManager { $cache = null; if ($config->get('cache-files-ttl') > 0) { @@ -572,25 +564,18 @@ class Factory /** * @param bool|'local'|'global' $disablePlugins Whether plugins should not be loaded, can be set to local or global to only disable local/global plugins - * @return Plugin\PluginManager */ - protected function createPluginManager(IOInterface $io, Composer $composer, PartialComposer $globalComposer = null, $disablePlugins = false): Plugin\PluginManager + protected function createPluginManager(IOInterface $io, Composer $composer, ?PartialComposer $globalComposer = null, $disablePlugins = false): Plugin\PluginManager { return new Plugin\PluginManager($io, $composer, $globalComposer, $disablePlugins); } - /** - * @return Installer\InstallationManager - */ - public function createInstallationManager(Loop $loop, IOInterface $io, EventDispatcher $eventDispatcher = null): Installer\InstallationManager + public function createInstallationManager(Loop $loop, IOInterface $io, ?EventDispatcher $eventDispatcher = null): Installer\InstallationManager { return new Installer\InstallationManager($loop, $io, $eventDispatcher); } - /** - * @return void - */ - protected function createDefaultInstallers(Installer\InstallationManager $im, PartialComposer $composer, IOInterface $io, ProcessExecutor $process = null): void + protected function createDefaultInstallers(Installer\InstallationManager $im, PartialComposer $composer, IOInterface $io, ?ProcessExecutor $process = null): void { $fs = new Filesystem($process); $binaryInstaller = new Installer\BinaryInstaller($io, rtrim($composer->getConfig()->get('bin-dir'), '/'), $composer->getConfig()->get('bin-compat'), $fs, rtrim($composer->getConfig()->get('vendor-dir'), '/')); @@ -624,7 +609,6 @@ class Factory * the default filename * @param bool|'local'|'global' $disablePlugins Whether plugins should not be loaded, can be set to local or global to only disable local/global plugins * @param bool $disableScripts Whether scripts should not be run - * @return Composer */ public static function create(IOInterface $io, $config = null, $disablePlugins = false, bool $disableScripts = false): Composer { @@ -647,9 +631,8 @@ class Factory * @param IOInterface $io IO instance * @param Config $config Config instance * @param mixed[] $options Array of options passed directly to HttpDownloader constructor - * @return HttpDownloader */ - public static function createHttpDownloader(IOInterface $io, Config $config, array $options = array()): HttpDownloader + public static function createHttpDownloader(IOInterface $io, Config $config, array $options = []): HttpDownloader { static $warned = false; $disableTls = false; @@ -667,7 +650,7 @@ class Factory throw new Exception\NoSslException('The openssl extension is required for SSL/TLS protection but is not available. ' . 'If you can not enable the openssl extension, you can disable this error, at your own risk, by setting the \'disable-tls\' option to true.'); } - $httpDownloaderOptions = array(); + $httpDownloaderOptions = []; if ($disableTls === false) { if ('' !== $config->get('cafile')) { $httpDownloaderOptions['ssl']['cafile'] = $config->get('cafile'); diff --git a/src/Composer/Filter/PlatformRequirementFilter/IgnoreAllPlatformRequirementFilter.php b/src/Composer/Filter/PlatformRequirementFilter/IgnoreAllPlatformRequirementFilter.php index 6076c0b04..491ad01b9 100644 --- a/src/Composer/Filter/PlatformRequirementFilter/IgnoreAllPlatformRequirementFilter.php +++ b/src/Composer/Filter/PlatformRequirementFilter/IgnoreAllPlatformRequirementFilter.php @@ -16,10 +16,6 @@ use Composer\Repository\PlatformRepository; final class IgnoreAllPlatformRequirementFilter implements PlatformRequirementFilterInterface { - /** - * @param string $req - * @return bool - */ public function isIgnored(string $req): bool { return PlatformRepository::isPlatformPackage($req); diff --git a/src/Composer/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilter.php b/src/Composer/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilter.php index 7e2e7e926..700795832 100644 --- a/src/Composer/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilter.php +++ b/src/Composer/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilter.php @@ -39,7 +39,7 @@ final class IgnoreListPlatformRequirementFilter implements PlatformRequirementFi */ public function __construct(array $reqList) { - $ignoreAll = $ignoreUpperBound = array(); + $ignoreAll = $ignoreUpperBound = []; foreach ($reqList as $req) { if (substr($req, -1) === '+') { $ignoreUpperBound[] = substr($req, 0, -1); @@ -51,10 +51,6 @@ final class IgnoreListPlatformRequirementFilter implements PlatformRequirementFi $this->ignoreUpperBoundRegex = BasePackage::packageNamesToRegexp($ignoreUpperBound); } - /** - * @param string $req - * @return bool - */ public function isIgnored(string $req): bool { if (!PlatformRepository::isPlatformPackage($req)) { @@ -64,10 +60,6 @@ final class IgnoreListPlatformRequirementFilter implements PlatformRequirementFi return Preg::isMatch($this->ignoreRegex, $req); } - /** - * @param string $req - * @return ConstraintInterface - */ public function filterConstraint(string $req, ConstraintInterface $constraint): ConstraintInterface { if (!PlatformRepository::isPlatformPackage($req)) { @@ -85,7 +77,7 @@ final class IgnoreListPlatformRequirementFilter implements PlatformRequirementFi $intervals = Intervals::get($constraint); $last = end($intervals['numeric']); if ($last !== false && (string) $last->getEnd() !== (string) Interval::untilPositiveInfinity()) { - $constraint = new MultiConstraint(array($constraint, new Constraint('>=', $last->getEnd()->getVersion())), false); + $constraint = new MultiConstraint([$constraint, new Constraint('>=', $last->getEnd()->getVersion())], false); } return $constraint; diff --git a/src/Composer/Filter/PlatformRequirementFilter/IgnoreNothingPlatformRequirementFilter.php b/src/Composer/Filter/PlatformRequirementFilter/IgnoreNothingPlatformRequirementFilter.php index 0e2651214..265701824 100644 --- a/src/Composer/Filter/PlatformRequirementFilter/IgnoreNothingPlatformRequirementFilter.php +++ b/src/Composer/Filter/PlatformRequirementFilter/IgnoreNothingPlatformRequirementFilter.php @@ -15,7 +15,6 @@ namespace Composer\Filter\PlatformRequirementFilter; final class IgnoreNothingPlatformRequirementFilter implements PlatformRequirementFilterInterface { /** - * @param string $req * @return false */ public function isIgnored(string $req): bool diff --git a/src/Composer/Filter/PlatformRequirementFilter/PlatformRequirementFilterFactory.php b/src/Composer/Filter/PlatformRequirementFilter/PlatformRequirementFilterFactory.php index b735d13ae..670156231 100644 --- a/src/Composer/Filter/PlatformRequirementFilter/PlatformRequirementFilterFactory.php +++ b/src/Composer/Filter/PlatformRequirementFilter/PlatformRequirementFilterFactory.php @@ -16,8 +16,6 @@ final class PlatformRequirementFilterFactory { /** * @param mixed $boolOrList - * - * @return PlatformRequirementFilterInterface */ public static function fromBoolOrList($boolOrList): PlatformRequirementFilterInterface { @@ -37,17 +35,11 @@ final class PlatformRequirementFilterFactory ); } - /** - * @return PlatformRequirementFilterInterface - */ public static function ignoreAll(): PlatformRequirementFilterInterface { return new IgnoreAllPlatformRequirementFilter(); } - /** - * @return PlatformRequirementFilterInterface - */ public static function ignoreNothing(): PlatformRequirementFilterInterface { return new IgnoreNothingPlatformRequirementFilter(); diff --git a/src/Composer/Filter/PlatformRequirementFilter/PlatformRequirementFilterInterface.php b/src/Composer/Filter/PlatformRequirementFilter/PlatformRequirementFilterInterface.php index 9a80837a2..af1f651c8 100644 --- a/src/Composer/Filter/PlatformRequirementFilter/PlatformRequirementFilterInterface.php +++ b/src/Composer/Filter/PlatformRequirementFilter/PlatformRequirementFilterInterface.php @@ -14,9 +14,5 @@ namespace Composer\Filter\PlatformRequirementFilter; interface PlatformRequirementFilterInterface { - /** - * @param string $req - * @return bool - */ public function isIgnored(string $req): bool; } diff --git a/src/Composer/IO/BaseIO.php b/src/Composer/IO/BaseIO.php index 60eec1882..43d6f66f9 100644 --- a/src/Composer/IO/BaseIO.php +++ b/src/Composer/IO/BaseIO.php @@ -20,7 +20,7 @@ use Psr\Log\LogLevel; abstract class BaseIO implements IOInterface { /** @var array */ - protected $authentications = array(); + protected $authentications = []; /** * @inheritDoc @@ -35,7 +35,7 @@ abstract class BaseIO implements IOInterface */ public function resetAuthentications() { - $this->authentications = array(); + $this->authentications = []; } /** @@ -55,7 +55,7 @@ abstract class BaseIO implements IOInterface return $this->authentications[$repositoryName]; } - return array('username' => null, 'password' => null); + return ['username' => null, 'password' => null]; } /** @@ -63,7 +63,7 @@ abstract class BaseIO implements IOInterface */ public function setAuthentication($repositoryName, $username, $password = null) { - $this->authentications[$repositoryName] = array('username' => $username, 'password' => $password); + $this->authentications[$repositoryName] = ['username' => $username, 'password' => $password]; } /** @@ -91,7 +91,7 @@ abstract class BaseIO implements IOInterface * * @return void */ - protected function checkAndSetAuthentication(string $repositoryName, string $username, string $password = null) + protected function checkAndSetAuthentication(string $repositoryName, string $username, ?string $password = null) { if ($this->hasAuthentication($repositoryName)) { $auth = $this->getAuthentication($repositoryName); @@ -160,51 +160,51 @@ abstract class BaseIO implements IOInterface ProcessExecutor::setTimeout($config->get('process-timeout')); } - public function emergency($message, array $context = array()): void + public function emergency($message, array $context = []): void { $this->log(LogLevel::EMERGENCY, $message, $context); } - public function alert($message, array $context = array()): void + public function alert($message, array $context = []): void { $this->log(LogLevel::ALERT, $message, $context); } - public function critical($message, array $context = array()): void + public function critical($message, array $context = []): void { $this->log(LogLevel::CRITICAL, $message, $context); } - public function error($message, array $context = array()): void + public function error($message, array $context = []): void { $this->log(LogLevel::ERROR, $message, $context); } - public function warning($message, array $context = array()): void + public function warning($message, array $context = []): void { $this->log(LogLevel::WARNING, $message, $context); } - public function notice($message, array $context = array()): void + public function notice($message, array $context = []): void { $this->log(LogLevel::NOTICE, $message, $context); } - public function info($message, array $context = array()): void + public function info($message, array $context = []): void { $this->log(LogLevel::INFO, $message, $context); } - public function debug($message, array $context = array()): void + public function debug($message, array $context = []): void { $this->log(LogLevel::DEBUG, $message, $context); } - public function log($level, $message, array $context = array()): void + public function log($level, $message, array $context = []): void { $message = (string) $message; - if (in_array($level, array(LogLevel::EMERGENCY, LogLevel::ALERT, LogLevel::CRITICAL, LogLevel::ERROR))) { + if (in_array($level, [LogLevel::EMERGENCY, LogLevel::ALERT, LogLevel::CRITICAL, LogLevel::ERROR])) { $this->writeError(''.$message.''); } elseif ($level === LogLevel::WARNING) { $this->writeError(''.$message.''); diff --git a/src/Composer/IO/BufferIO.php b/src/Composer/IO/BufferIO.php index c25cc64db..f6f208d96 100644 --- a/src/Composer/IO/BufferIO.php +++ b/src/Composer/IO/BufferIO.php @@ -30,21 +30,16 @@ class BufferIO extends ConsoleIO /** @var StreamOutput */ protected $output; - /** - * @param string $input - * @param int $verbosity - * @param OutputFormatterInterface|null $formatter - */ - public function __construct(string $input = '', int $verbosity = StreamOutput::VERBOSITY_NORMAL, OutputFormatterInterface $formatter = null) + public function __construct(string $input = '', int $verbosity = StreamOutput::VERBOSITY_NORMAL, ?OutputFormatterInterface $formatter = null) { $input = new StringInput($input); $input->setInteractive(false); $output = new StreamOutput(fopen('php://memory', 'rw'), $verbosity, $formatter ? $formatter->isDecorated() : false, $formatter); - parent::__construct($input, $output, new HelperSet(array( + parent::__construct($input, $output, new HelperSet([ new QuestionHelper(), - ))); + ])); } /** @@ -74,8 +69,6 @@ class BufferIO extends ConsoleIO * @param string[] $inputs * * @see createStream - * - * @return void */ public function setUserInputs(array $inputs): void { diff --git a/src/Composer/IO/ConsoleIO.php b/src/Composer/IO/ConsoleIO.php index 717c47756..46ba7a4a1 100644 --- a/src/Composer/IO/ConsoleIO.php +++ b/src/Composer/IO/ConsoleIO.php @@ -58,18 +58,16 @@ class ConsoleIO extends BaseIO $this->input = $input; $this->output = $output; $this->helperSet = $helperSet; - $this->verbosityMap = array( + $this->verbosityMap = [ self::QUIET => OutputInterface::VERBOSITY_QUIET, self::NORMAL => OutputInterface::VERBOSITY_NORMAL, self::VERBOSE => OutputInterface::VERBOSITY_VERBOSE, self::VERY_VERBOSE => OutputInterface::VERBOSITY_VERY_VERBOSE, self::DEBUG => OutputInterface::VERBOSITY_DEBUG, - ); + ]; } /** - * @param float $startTime - * * @return void */ public function enableDebugging(float $startTime) @@ -151,12 +149,6 @@ class ConsoleIO extends BaseIO /** * @param string[]|string $messages - * @param bool $newline - * @param bool $stderr - * @param int $verbosity - * @param bool $raw - * - * @return void */ private function doWrite($messages, bool $newline, bool $stderr, int $verbosity, bool $raw = false): void { @@ -206,12 +198,6 @@ class ConsoleIO extends BaseIO /** * @param string[]|string $messages - * @param bool $newline - * @param int|null $size - * @param bool $stderr - * @param int $verbosity - * - * @return void */ private function doOverwrite($messages, bool $newline, ?int $size, bool $stderr, int $verbosity): void { @@ -252,7 +238,6 @@ class ConsoleIO extends BaseIO } /** - * @param int $max * @return ProgressBar */ public function getProgressBar(int $max = 0) @@ -329,7 +314,7 @@ class ConsoleIO extends BaseIO return (string) array_search($result, $choices, true); } - $results = array(); + $results = []; foreach ($choices as $index => $choice) { if (in_array($choice, $result, true)) { $results[] = (string) $index; @@ -339,17 +324,11 @@ class ConsoleIO extends BaseIO return $results; } - /** - * @return Table - */ public function getTable(): Table { return new Table($this->output); } - /** - * @return OutputInterface - */ private function getErrorOutput(): OutputInterface { if ($this->output instanceof ConsoleOutputInterface) { diff --git a/src/Composer/IO/IOInterface.php b/src/Composer/IO/IOInterface.php index a1048be8e..fb9906c08 100644 --- a/src/Composer/IO/IOInterface.php +++ b/src/Composer/IO/IOInterface.php @@ -234,7 +234,6 @@ interface IOInterface extends LoggerInterface /** * Loads authentications from a config instance * - * @param Config $config * * @return void */ diff --git a/src/Composer/Installer.php b/src/Composer/Installer.php index 59e4c502c..09beafaea 100644 --- a/src/Composer/Installer.php +++ b/src/Composer/Installer.php @@ -202,15 +202,7 @@ class Installer /** * Constructor * - * @param IOInterface $io - * @param Config $config * @param RootPackageInterface&BasePackage $package - * @param DownloadManager $downloadManager - * @param RepositoryManager $repositoryManager - * @param Locker $locker - * @param InstallationManager $installationManager - * @param EventDispatcher $eventDispatcher - * @param AutoloadGenerator $autoloadGenerator */ public function __construct(IOInterface $io, Config $config, RootPackageInterface $package, DownloadManager $downloadManager, RepositoryManager $repositoryManager, Locker $locker, InstallationManager $installationManager, EventDispatcher $eventDispatcher, AutoloadGenerator $autoloadGenerator) { @@ -305,11 +297,11 @@ class Installer } if ($this->update) { - $installedRepo = new InstalledRepository(array( + $installedRepo = new InstalledRepository([ $this->locker->getLockedRepository($this->devMode), $this->createPlatformRepo(false), new RootPackageRepository(clone $this->package), - )); + ]); if ($isFreshInstall) { $this->suggestedPackagesReporter->addSuggestionsFromPackage($this->package); } @@ -365,7 +357,7 @@ class Installer } } if ($fundingCount > 0) { - $this->io->writeError(array( + $this->io->writeError([ sprintf( "%d package%s you are using %s looking for funding.", $fundingCount, @@ -373,7 +365,7 @@ class Installer 1 === $fundingCount ? 'is' : 'are' ), 'Use the `composer fund` command to find out more!', - )); + ]); } if ($this->runScripts) { @@ -418,9 +410,6 @@ class Installer } /** - * @param bool $doInstall - * - * @return int * @phpstan-return self::ERROR_* */ protected function doUpdate(InstalledRepositoryInterface $localRepo, bool $doInstall): int @@ -519,9 +508,9 @@ class Installer $platformReqs = $this->extractPlatformRequirements($this->package->getRequires()); $platformDevReqs = $this->extractPlatformRequirements($this->package->getDevRequires()); - $installsUpdates = $uninstalls = array(); + $installsUpdates = $uninstalls = []; if ($lockTransaction->getOperations()) { - $installNames = $updateNames = $uninstallNames = array(); + $installNames = $updateNames = $uninstallNames = []; foreach ($lockTransaction->getOperations() as $operation) { if ($operation instanceof InstallOperation) { $installsUpdates[] = $operation; @@ -605,7 +594,7 @@ class Installer $this->package->getStabilityFlags(), $this->preferStable || $this->package->getPreferStable(), $this->preferLowest, - $this->config->get('platform') ?: array(), + $this->config->get('platform') ?: [], $this->writeLock && $this->executeOperations ); if ($updatedLock && $this->writeLock && $this->executeOperations) { @@ -636,18 +625,17 @@ class Installer * * @param array> $aliases * - * @return int * * @phpstan-param list $aliases * @phpstan-return self::ERROR_* */ - protected function extractDevPackages(LockTransaction $lockTransaction, PlatformRepository $platformRepo, array $aliases, PolicyInterface $policy, LockArrayRepository $lockedRepository = null): int + protected function extractDevPackages(LockTransaction $lockTransaction, PlatformRepository $platformRepo, array $aliases, PolicyInterface $policy, ?LockArrayRepository $lockedRepository = null): int { if (!$this->package->getDevRequires()) { return 0; } - $resultRepo = new ArrayRepository(array()); + $resultRepo = new ArrayRepository([]); $loader = new ArrayLoader(null, true); $dumper = new ArrayDumper(); foreach ($lockTransaction->getNewLockPackages(false) as $pkg) { @@ -687,7 +675,6 @@ class Installer } /** - * @param InstalledRepositoryInterface $localRepo * @param bool $alreadySolved Whether the function is called as part of an update command or independently * @return int exit code * @phpstan-return self::ERROR_* @@ -709,7 +696,7 @@ class Installer // creating repository set $policy = $this->createPolicy(false); // use aliases from lock file only, so empty root aliases here - $repositorySet = $this->createRepositorySet(false, $platformRepo, array(), $lockedRepository); + $repositorySet = $this->createRepositorySet(false, $platformRepo, [], $lockedRepository); $repositorySet->addRepository($lockedRepository); // creating requirements request @@ -764,7 +751,7 @@ class Installer } if ($localRepoTransaction->getOperations()) { - $installs = $updates = $uninstalls = array(); + $installs = $updates = $uninstalls = []; foreach ($localRepoTransaction->getOperations() as $operation) { if ($operation instanceof InstallOperation) { $installs[] = $operation->getPackage()->getPrettyName().':'.$operation->getPackage()->getFullPrettyVersion(); @@ -810,32 +797,24 @@ class Installer return 0; } - /** - * @param bool $forUpdate - * - * @return PlatformRepository - */ protected function createPlatformRepo(bool $forUpdate): PlatformRepository { if ($forUpdate) { - $platformOverrides = $this->config->get('platform') ?: array(); + $platformOverrides = $this->config->get('platform') ?: []; } else { $platformOverrides = $this->locker->getPlatformOverrides(); } - return new PlatformRepository(array(), $platformOverrides); + return new PlatformRepository([], $platformOverrides); } /** - * @param bool $forUpdate * @param array> $rootAliases - * @param RepositoryInterface|null $lockedRepository * - * @return RepositorySet * * @phpstan-param list $rootAliases */ - private function createRepositorySet(bool $forUpdate, PlatformRepository $platformRepo, array $rootAliases = array(), ?RepositoryInterface $lockedRepository = null): RepositorySet + private function createRepositorySet(bool $forUpdate, PlatformRepository $platformRepo, array $rootAliases = [], ?RepositoryInterface $lockedRepository = null): RepositorySet { if ($forUpdate) { $minimumStability = $this->package->getMinimumStability(); @@ -846,7 +825,7 @@ class Installer $minimumStability = $this->locker->getMinimumStability(); $stabilityFlags = $this->locker->getStabilityFlags(); - $requires = array(); + $requires = []; foreach ($lockedRepository->getPackages() as $package) { $constraint = new Constraint('=', $package->getVersion()); $constraint->setPrettyString($package->getPrettyVersion()); @@ -854,7 +833,7 @@ class Installer } } - $rootRequires = array(); + $rootRequires = []; foreach ($requires as $req => $constraint) { if ($constraint instanceof Link) { $constraint = $constraint->getConstraint(); @@ -869,8 +848,8 @@ class Installer } $this->fixedRootPackage = clone $this->package; - $this->fixedRootPackage->setRequires(array()); - $this->fixedRootPackage->setDevRequires(array()); + $this->fixedRootPackage->setRequires([]); + $this->fixedRootPackage->setDevRequires([]); $stabilityFlags[$this->package->getName()] = BasePackage::$stabilities[VersionParser::parseStability($this->package->getVersion())]; @@ -884,7 +863,7 @@ class Installer if ($additionalFixedRepositories instanceof CompositeRepository) { $additionalFixedRepositories = $additionalFixedRepositories->getRepositories(); } else { - $additionalFixedRepositories = array($additionalFixedRepositories); + $additionalFixedRepositories = [$additionalFixedRepositories]; } foreach ($additionalFixedRepositories as $additionalFixedRepository) { if ($additionalFixedRepository instanceof InstalledRepository || $additionalFixedRepository instanceof InstalledRepositoryInterface) { @@ -899,11 +878,6 @@ class Installer return $repositorySet; } - /** - * @param bool $forUpdate - * - * @return DefaultPolicy - */ private function createPolicy(bool $forUpdate): DefaultPolicy { $preferStable = null; @@ -926,9 +900,8 @@ class Installer /** * @param RootPackageInterface&BasePackage $rootPackage - * @return Request */ - private function createRequest(RootPackageInterface $rootPackage, PlatformRepository $platformRepo, LockArrayRepository $lockedRepository = null): Request + private function createRequest(RootPackageInterface $rootPackage, PlatformRepository $platformRepo, ?LockArrayRepository $lockedRepository = null): Request { $request = new Request($lockedRepository); @@ -959,17 +932,11 @@ class Installer return $request; } - /** - * @param LockArrayRepository|null $lockedRepository - * @param bool $includeDevRequires - * - * @return void - */ - private function requirePackagesForUpdate(Request $request, LockArrayRepository $lockedRepository = null, bool $includeDevRequires = true): void + private function requirePackagesForUpdate(Request $request, ?LockArrayRepository $lockedRepository = null, bool $includeDevRequires = true): void { // if we're updating mirrors we want to keep exactly the same versions installed which are in the lock file, but we want current remote metadata if ($this->updateMirrors) { - $excludedPackages = array(); + $excludedPackages = []; if (!$includeDevRequires) { $excludedPackages = array_flip($this->locker->getDevPackageNames()); } @@ -993,8 +960,6 @@ class Installer } /** - * @param bool $forUpdate - * * @return array> * * @phpstan-return list @@ -1017,7 +982,7 @@ class Installer */ private function extractPlatformRequirements(array $links): array { - $platformReqs = array(); + $platformReqs = []; foreach ($links as $link) { if (PlatformRepository::isPlatformPackage($link->getTarget())) { $platformReqs[$link->getTarget()] = $link->getPrettyConstraint(); @@ -1031,12 +996,10 @@ class Installer * Replace local repositories with InstalledArrayRepository instances * * This is to prevent any accidental modification of the existing repos on disk - * - * @return void */ private function mockLocalRepositories(RepositoryManager $rm): void { - $packages = array(); + $packages = []; foreach ($rm->getLocalRepository()->getPackages() as $package) { $packages[(string) $package] = clone $package; } @@ -1052,9 +1015,6 @@ class Installer ); } - /** - * @return PoolOptimizer|null - */ private function createPoolOptimizer(PolicyInterface $policy): ?PoolOptimizer { // Not the best architectural decision here, would need to be able @@ -1072,8 +1032,6 @@ class Installer /** * Create Installer * - * @param IOInterface $io - * @param Composer $composer * @return Installer */ public static function create(IOInterface $io, Composer $composer): self @@ -1092,7 +1050,6 @@ class Installer } /** - * @param RepositoryInterface $additionalFixedRepository * @return $this */ public function setAdditionalFixedRepository(RepositoryInterface $additionalFixedRepository): self @@ -1116,7 +1073,6 @@ class Installer /** * Whether to run in drymode or not * - * @param bool $dryRun * @return Installer */ public function setDryRun(bool $dryRun = true): self @@ -1128,8 +1084,6 @@ class Installer /** * Checks, if this is a dry run (simulation mode). - * - * @return bool */ public function isDryRun(): bool { @@ -1139,7 +1093,6 @@ class Installer /** * prefer source installation * - * @param bool $preferSource * @return Installer */ public function setPreferSource(bool $preferSource = true): self @@ -1152,7 +1105,6 @@ class Installer /** * prefer dist installation * - * @param bool $preferDist * @return Installer */ public function setPreferDist(bool $preferDist = true): self @@ -1165,7 +1117,6 @@ class Installer /** * Whether or not generated autoloader are optimized * - * @param bool $optimizeAutoloader * @return Installer */ public function setOptimizeAutoloader(bool $optimizeAutoloader): self @@ -1184,7 +1135,6 @@ class Installer * Whether or not generated autoloader considers the class map * authoritative. * - * @param bool $classMapAuthoritative * @return Installer */ public function setClassMapAuthoritative(bool $classMapAuthoritative): self @@ -1201,8 +1151,6 @@ class Installer /** * Whether or not generated autoloader considers APCu caching. * - * @param bool $apcuAutoloader - * @param string|null $apcuAutoloaderPrefix * @return Installer */ public function setApcuAutoloader(bool $apcuAutoloader, ?string $apcuAutoloaderPrefix = null): self @@ -1216,7 +1164,6 @@ class Installer /** * update packages * - * @param bool $update * @return Installer */ public function setUpdate(bool $update): self @@ -1229,7 +1176,6 @@ class Installer /** * Allows disabling the install step after an update * - * @param bool $install * @return Installer */ public function setInstall(bool $install): self @@ -1242,7 +1188,6 @@ class Installer /** * enables dev packages * - * @param bool $devMode * @return Installer */ public function setDevMode(bool $devMode = true): self @@ -1257,7 +1202,6 @@ class Installer * * This is disabled implicitly when enabling dryRun * - * @param bool $dumpAutoloader * @return Installer */ public function setDumpAutoloader(bool $dumpAutoloader = true): self @@ -1272,7 +1216,6 @@ class Installer * * This is disabled implicitly when enabling dryRun * - * @param bool $runScripts * @return Installer * @deprecated Use setRunScripts(false) on the EventDispatcher instance being injected instead */ @@ -1286,7 +1229,6 @@ class Installer /** * set the config instance * - * @param Config $config * @return Installer */ public function setConfig(Config $config): self @@ -1299,7 +1241,6 @@ class Installer /** * run in verbose mode * - * @param bool $verbose * @return Installer */ public function setVerbose(bool $verbose = true): self @@ -1311,8 +1252,6 @@ class Installer /** * Checks, if running in verbose mode. - * - * @return bool */ public function isVerbose(): bool { @@ -1340,7 +1279,6 @@ class Installer } /** - * @param PlatformRequirementFilterInterface $platformRequirementFilter * @return Installer */ public function setPlatformRequirementFilter(PlatformRequirementFilterInterface $platformRequirementFilter): self @@ -1353,7 +1291,6 @@ class Installer /** * Update the lock file to the exact same versions and references but use current remote metadata like URLs and mirror info * - * @param bool $updateMirrors * @return Installer */ public function setUpdateMirrors(bool $updateMirrors): self @@ -1389,7 +1326,7 @@ class Installer */ public function setUpdateAllowTransitiveDependencies(int $updateAllowTransitiveDependencies): self { - if (!in_array($updateAllowTransitiveDependencies, array(Request::UPDATE_ONLY_LISTED, Request::UPDATE_LISTED_WITH_TRANSITIVE_DEPS_NO_ROOT_REQUIRE, Request::UPDATE_LISTED_WITH_TRANSITIVE_DEPS), true)) { + if (!in_array($updateAllowTransitiveDependencies, [Request::UPDATE_ONLY_LISTED, Request::UPDATE_LISTED_WITH_TRANSITIVE_DEPS_NO_ROOT_REQUIRE, Request::UPDATE_LISTED_WITH_TRANSITIVE_DEPS], true)) { throw new \RuntimeException("Invalid value for updateAllowTransitiveDependencies supplied"); } @@ -1401,7 +1338,6 @@ class Installer /** * Should packages be preferred in a stable version when updating? * - * @param bool $preferStable * @return Installer */ public function setPreferStable(bool $preferStable = true): self @@ -1414,7 +1350,6 @@ class Installer /** * Should packages be preferred in a lowest version when updating? * - * @param bool $preferLowest * @return Installer */ public function setPreferLowest(bool $preferLowest = true): self @@ -1429,7 +1364,6 @@ class Installer * * This is disabled implicitly when enabling dryRun * - * @param bool $writeLock * @return Installer */ public function setWriteLock(bool $writeLock = true): self @@ -1444,7 +1378,6 @@ class Installer * * This is disabled implicitly when enabling dryRun * - * @param bool $executeOperations * @return Installer */ public function setExecuteOperations(bool $executeOperations = true): self @@ -1457,7 +1390,6 @@ class Installer /** * Should an audit be run after installation is complete? * - * @param boolean $audit * @return Installer */ public function setAudit(bool $audit): self @@ -1497,7 +1429,6 @@ class Installer } /** - * @param SuggestedPackagesReporter $suggestedPackagesReporter * @return Installer */ public function setSuggestedPackagesReporter(SuggestedPackagesReporter $suggestedPackagesReporter): self diff --git a/src/Composer/Installer/BinaryInstaller.php b/src/Composer/Installer/BinaryInstaller.php index 203b62494..042986cbb 100644 --- a/src/Composer/Installer/BinaryInstaller.php +++ b/src/Composer/Installer/BinaryInstaller.php @@ -41,13 +41,9 @@ class BinaryInstaller private $vendorDir; /** - * @param IOInterface $io - * @param string $binDir - * @param string $binCompat * @param Filesystem $filesystem - * @param string|null $vendorDir */ - public function __construct(IOInterface $io, string $binDir, string $binCompat, Filesystem $filesystem = null, ?string $vendorDir = null) + public function __construct(IOInterface $io, string $binDir, string $binCompat, ?Filesystem $filesystem = null, ?string $vendorDir = null) { $this->binDir = $binDir; $this->binCompat = $binCompat; @@ -56,12 +52,6 @@ class BinaryInstaller $this->vendorDir = $vendorDir; } - /** - * @param string $installPath - * @param bool $warnOnOverwrite - * - * @return void - */ public function installBinaries(PackageInterface $package, string $installPath, bool $warnOnOverwrite = true): void { $binaries = $this->getBinaries($package); @@ -117,9 +107,6 @@ class BinaryInstaller } } - /** - * @return void - */ public function removeBinaries(PackageInterface $package): void { $this->initializeBinDir(); @@ -144,11 +131,6 @@ class BinaryInstaller } } - /** - * @param string $bin - * - * @return string - */ public static function determineBinaryCaller(string $bin): string { if ('.bat' === substr($bin, -4) || '.exe' === substr($bin, -4)) { @@ -173,13 +155,6 @@ class BinaryInstaller return $package->getBinaries(); } - /** - * @param string $binPath - * @param string $link - * @param string $bin - * - * @return void - */ protected function installFullBinaries(string $binPath, string $link, string $bin, PackageInterface $package): void { // add unixy support for cygwin and similar environments @@ -196,33 +171,18 @@ class BinaryInstaller } } - /** - * @param string $binPath - * @param string $link - * - * @return void - */ protected function installUnixyProxyBinaries(string $binPath, string $link): void { file_put_contents($link, $this->generateUnixyProxyCode($binPath, $link)); Silencer::call('chmod', $link, 0777 & ~umask()); } - /** - * @return void - */ protected function initializeBinDir(): void { $this->filesystem->ensureDirectoryExists($this->binDir); $this->binDir = realpath($this->binDir); } - /** - * @param string $bin - * @param string $link - * - * @return string - */ protected function generateWindowsProxyCode(string $bin, string $link): string { $binPath = $this->filesystem->findShortestPath($link, $bin); @@ -246,12 +206,6 @@ class BinaryInstaller "{$caller} \"%BIN_TARGET%\" %*\r\n"; } - /** - * @param string $bin - * @param string $link - * - * @return string - */ protected function generateUnixyProxyCode(string $bin, string $link): string { $binPath = $this->filesystem->findShortestPath($link, $bin); diff --git a/src/Composer/Installer/InstallationManager.php b/src/Composer/Installer/InstallationManager.php index dce5329f4..ecec136a4 100644 --- a/src/Composer/Installer/InstallationManager.php +++ b/src/Composer/Installer/InstallationManager.php @@ -40,11 +40,11 @@ use Seld\Signal\SignalHandler; class InstallationManager { /** @var array */ - private $installers = array(); + private $installers = []; /** @var array */ - private $cache = array(); + private $cache = []; /** @var array> */ - private $notifiablePackages = array(); + private $notifiablePackages = []; /** @var Loop */ private $loop; /** @var IOInterface */ @@ -54,47 +54,40 @@ class InstallationManager /** @var bool */ private $outputProgress; - public function __construct(Loop $loop, IOInterface $io, EventDispatcher $eventDispatcher = null) + public function __construct(Loop $loop, IOInterface $io, ?EventDispatcher $eventDispatcher = null) { $this->loop = $loop; $this->io = $io; $this->eventDispatcher = $eventDispatcher; } - /** - * @return void - */ public function reset(): void { - $this->notifiablePackages = array(); - FileDownloader::$downloadMetadata = array(); + $this->notifiablePackages = []; + FileDownloader::$downloadMetadata = []; } /** * Adds installer * * @param InstallerInterface $installer installer instance - * - * @return void */ public function addInstaller(InstallerInterface $installer): void { array_unshift($this->installers, $installer); - $this->cache = array(); + $this->cache = []; } /** * Removes installer * * @param InstallerInterface $installer installer instance - * - * @return void */ public function removeInstaller(InstallerInterface $installer): void { if (false !== ($key = array_search($installer, $this->installers, true))) { array_splice($this->installers, $key, 1); - $this->cache = array(); + $this->cache = []; } } @@ -104,8 +97,6 @@ class InstallationManager * We prevent any plugins from being instantiated by simply * deactivating the installer for them. This ensure that no third-party * code is ever executed. - * - * @return void */ public function disablePlugins(): void { @@ -124,7 +115,6 @@ class InstallationManager * @param string $type package type * * @throws \InvalidArgumentException if installer for provided type is not registered - * @return InstallerInterface */ public function getInstaller(string $type): InstallerInterface { @@ -148,8 +138,6 @@ class InstallationManager * * @param InstalledRepositoryInterface $repo repository in which to check * @param PackageInterface $package package instance - * - * @return bool */ public function isPackageInstalled(InstalledRepositoryInterface $repo, PackageInterface $package): bool { @@ -165,8 +153,6 @@ class InstallationManager * If the installer associated to this package doesn't handle that function, it'll do nothing. * * @param PackageInterface $package Package instance - * - * @return void */ public function ensureBinariesPresence(PackageInterface $package): void { @@ -190,18 +176,16 @@ class InstallationManager * @param OperationInterface[] $operations operations to execute * @param bool $devMode whether the install is being run in dev mode * @param bool $runScripts whether to dispatch script events - * - * @return void */ public function execute(InstalledRepositoryInterface $repo, array $operations, bool $devMode = true, bool $runScripts = true): void { /** @var PromiseInterface[] */ - $cleanupPromises = array(); + $cleanupPromises = []; $loop = $this->loop; $io = $this->io; $runCleanup = static function () use (&$cleanupPromises, $loop): void { - $promises = array(); + $promises = []; $loop->abortJobs(); @@ -232,8 +216,8 @@ class InstallationManager try { // execute operations in batches to make sure download-modifying-plugins are installed // before the other packages get downloaded - $batches = array(); - $batch = array(); + $batches = []; + $batch = []; foreach ($operations as $index => $operation) { if ($operation instanceof UpdateOperation || $operation instanceof InstallOperation) { $package = $operation instanceof UpdateOperation ? $operation->getTargetPackage() : $operation->getPackage(); @@ -241,8 +225,8 @@ class InstallationManager if ($batch) { $batches[] = $batch; } - $batches[] = array($index => $operation); - $batch = array(); + $batches[] = [$index => $operation]; + $batch = []; continue; } @@ -274,21 +258,17 @@ class InstallationManager /** * @param OperationInterface[] $operations List of operations to execute in this batch * @param PromiseInterface[] $cleanupPromises - * @param bool $devMode - * @param bool $runScripts * @param OperationInterface[] $allOperations Complete list of operations to be executed in the install job, used for event listeners - * - * @return void */ private function downloadAndExecuteBatch(InstalledRepositoryInterface $repo, array $operations, array &$cleanupPromises, bool $devMode, bool $runScripts, array $allOperations): void { - $promises = array(); + $promises = []; foreach ($operations as $index => $operation) { $opType = $operation->getOperationType(); // ignoring alias ops as they don't need to execute anything at this stage - if (!in_array($opType, array('update', 'install', 'uninstall'))) { + if (!in_array($opType, ['update', 'install', 'uninstall'])) { continue; } @@ -328,8 +308,8 @@ class InstallationManager // execute operations in batches to make sure every plugin is installed in the // right order and activated before the packages depending on it are installed - $batches = array(); - $batch = array(); + $batches = []; + $batch = []; foreach ($operations as $index => $operation) { if ($operation instanceof InstallOperation || $operation instanceof UpdateOperation) { $package = $operation instanceof UpdateOperation ? $operation->getTargetPackage() : $operation->getPackage(); @@ -337,8 +317,8 @@ class InstallationManager if ($batch) { $batches[] = $batch; } - $batches[] = array($index => $operation); - $batch = array(); + $batches[] = [$index => $operation]; + $batch = []; continue; } @@ -358,27 +338,23 @@ class InstallationManager /** * @param OperationInterface[] $operations List of operations to execute in this batch * @param PromiseInterface[] $cleanupPromises - * @param bool $devMode - * @param bool $runScripts * @param OperationInterface[] $allOperations Complete list of operations to be executed in the install job, used for event listeners - * - * @return void */ private function executeBatch(InstalledRepositoryInterface $repo, array $operations, array $cleanupPromises, bool $devMode, bool $runScripts, array $allOperations): void { - $promises = array(); - $postExecCallbacks = array(); + $promises = []; + $postExecCallbacks = []; foreach ($operations as $index => $operation) { $opType = $operation->getOperationType(); // ignoring alias ops as they don't need to execute anything - if (!in_array($opType, array('update', 'install', 'uninstall'))) { + if (!in_array($opType, ['update', 'install', 'uninstall'])) { // output alias ops in debug verbosity as they have no output otherwise if ($this->io->isDebug()) { $this->io->writeError(' - ' . $operation->show(false)); } - $this->$opType($repo, $operation); + $this->{$opType}($repo, $operation); continue; } @@ -413,7 +389,7 @@ class InstallationManager } $promise = $promise->then(function () use ($opType, $repo, $operation) { - return $this->$opType($repo, $operation); + return $this->{$opType}($repo, $operation); })->then($cleanupPromises[$index]) ->then(function () use ($devMode, $repo): void { $repo->write($devMode, $this); @@ -452,8 +428,6 @@ class InstallationManager /** * @param PromiseInterface[] $promises - * - * @return void */ private function waitOnPromises(array $promises): void { @@ -482,8 +456,6 @@ class InstallationManager * * @param InstalledRepositoryInterface $repo repository in which to check * @param InstallOperation $operation operation instance - * - * @return PromiseInterface|null */ public function install(InstalledRepositoryInterface $repo, InstallOperation $operation): ?PromiseInterface { @@ -500,8 +472,6 @@ class InstallationManager * * @param InstalledRepositoryInterface $repo repository in which to check * @param UpdateOperation $operation operation instance - * - * @return PromiseInterface|null */ public function update(InstalledRepositoryInterface $repo, UpdateOperation $operation): ?PromiseInterface { @@ -540,8 +510,6 @@ class InstallationManager * * @param InstalledRepositoryInterface $repo repository in which to check * @param UninstallOperation $operation operation instance - * - * @return PromiseInterface|null */ public function uninstall(InstalledRepositoryInterface $repo, UninstallOperation $operation): ?PromiseInterface { @@ -556,8 +524,6 @@ class InstallationManager * * @param InstalledRepositoryInterface $repo repository in which to check * @param MarkAliasInstalledOperation $operation operation instance - * - * @return void */ public function markAliasInstalled(InstalledRepositoryInterface $repo, MarkAliasInstalledOperation $operation): void { @@ -573,8 +539,6 @@ class InstallationManager * * @param InstalledRepositoryInterface $repo repository in which to check * @param MarkAliasUninstalledOperation $operation operation instance - * - * @return void */ public function markAliasUninstalled(InstalledRepositoryInterface $repo, MarkAliasUninstalledOperation $operation): void { @@ -586,7 +550,6 @@ class InstallationManager /** * Returns the installation path of a package * - * @param PackageInterface $package * @return string path */ public function getInstallPath(PackageInterface $package): string @@ -596,22 +559,14 @@ class InstallationManager return $installer->getInstallPath($package); } - /** - * @param bool $outputProgress - * - * @return void - */ public function setOutputProgress(bool $outputProgress): void { $this->outputProgress = $outputProgress; } - /** - * @return void - */ public function notifyInstalls(IOInterface $io): void { - $promises = array(); + $promises = []; try { foreach ($this->notifiablePackages as $repoUrl => $packages) { @@ -620,19 +575,19 @@ class InstallationManager foreach ($packages as $package) { $url = str_replace('%package%', $package->getPrettyName(), $repoUrl); - $params = array( + $params = [ 'version' => $package->getPrettyVersion(), 'version_normalized' => $package->getVersion(), - ); - $opts = array( + ]; + $opts = [ 'retry-auth-failure' => false, - 'http' => array( + 'http' => [ 'method' => 'POST', - 'header' => array('Content-type: application/x-www-form-urlencoded'), + 'header' => ['Content-type: application/x-www-form-urlencoded'], 'content' => http_build_query($params, '', '&'), 'timeout' => 3, - ), - ); + ], + ]; $promises[] = $this->loop->getHttpDownloader()->add($url, $opts); } @@ -640,12 +595,12 @@ class InstallationManager continue; } - $postData = array('downloads' => array()); + $postData = ['downloads' => []]; foreach ($packages as $package) { - $packageNotification = array( + $packageNotification = [ 'name' => $package->getPrettyName(), 'version' => $package->getVersion(), - ); + ]; if (strpos($repoUrl, 'packagist.org/') !== false) { if (isset(FileDownloader::$downloadMetadata[$package->getName()])) { $packageNotification['downloaded'] = FileDownloader::$downloadMetadata[$package->getName()]; @@ -656,15 +611,15 @@ class InstallationManager $postData['downloads'][] = $packageNotification; } - $opts = array( + $opts = [ 'retry-auth-failure' => false, - 'http' => array( + 'http' => [ 'method' => 'POST', - 'header' => array('Content-Type: application/json'), + 'header' => ['Content-Type: application/json'], 'content' => json_encode($postData), 'timeout' => 6, - ), - ); + ], + ]; $promises[] = $this->loop->getHttpDownloader()->add($repoUrl, $opts); } @@ -676,9 +631,6 @@ class InstallationManager $this->reset(); } - /** - * @return void - */ private function markForNotification(PackageInterface $package): void { if ($package->getNotificationUrl()) { diff --git a/src/Composer/Installer/InstallerEvent.php b/src/Composer/Installer/InstallerEvent.php index a87ce66a0..8cb699e33 100644 --- a/src/Composer/Installer/InstallerEvent.php +++ b/src/Composer/Installer/InstallerEvent.php @@ -46,13 +46,6 @@ class InstallerEvent extends Event /** * Constructor. - * - * @param string $eventName - * @param Composer $composer - * @param IOInterface $io - * @param bool $devMode - * @param bool $executeOperations - * @param Transaction $transaction */ public function __construct(string $eventName, Composer $composer, IOInterface $io, bool $devMode, bool $executeOperations, Transaction $transaction) { @@ -65,41 +58,26 @@ class InstallerEvent extends Event $this->transaction = $transaction; } - /** - * @return Composer - */ public function getComposer(): Composer { return $this->composer; } - /** - * @return IOInterface - */ public function getIO(): IOInterface { return $this->io; } - /** - * @return bool - */ public function isDevMode(): bool { return $this->devMode; } - /** - * @return bool - */ public function isExecutingOperations(): bool { return $this->executeOperations; } - /** - * @return Transaction|null - */ public function getTransaction(): ?Transaction { return $this->transaction; diff --git a/src/Composer/Installer/InstallerInterface.php b/src/Composer/Installer/InstallerInterface.php index a236e07ce..bfa73e18d 100644 --- a/src/Composer/Installer/InstallerInterface.php +++ b/src/Composer/Installer/InstallerInterface.php @@ -28,7 +28,6 @@ interface InstallerInterface /** * Decides if the installer supports the given type * - * @param string $packageType * @return bool */ public function supports(string $packageType); @@ -50,7 +49,7 @@ interface InstallerInterface * @param PackageInterface $prevPackage previous package instance in case of an update * @return PromiseInterface|null */ - public function download(PackageInterface $package, PackageInterface $prevPackage = null); + public function download(PackageInterface $package, ?PackageInterface $prevPackage = null); /** * Do anything that needs to be done between all downloads have been completed and the actual operation is executed @@ -65,7 +64,7 @@ interface InstallerInterface * @param PackageInterface $prevPackage previous package instance in case of an update * @return PromiseInterface|null */ - public function prepare(string $type, PackageInterface $package, PackageInterface $prevPackage = null); + public function prepare(string $type, PackageInterface $package, ?PackageInterface $prevPackage = null); /** * Installs specific package. @@ -108,12 +107,11 @@ interface InstallerInterface * @param PackageInterface $prevPackage previous package instance in case of an update * @return PromiseInterface|null */ - public function cleanup(string $type, PackageInterface $package, PackageInterface $prevPackage = null); + public function cleanup(string $type, PackageInterface $package, ?PackageInterface $prevPackage = null); /** * Returns the absolute installation path of a package. * - * @param PackageInterface $package * @return string absolute path to install to, which MUST not end with a slash */ public function getInstallPath(PackageInterface $package); diff --git a/src/Composer/Installer/LibraryInstaller.php b/src/Composer/Installer/LibraryInstaller.php index 9aebddbd3..8fa39bf1e 100644 --- a/src/Composer/Installer/LibraryInstaller.php +++ b/src/Composer/Installer/LibraryInstaller.php @@ -50,13 +50,10 @@ class LibraryInstaller implements InstallerInterface, BinaryPresenceInterface /** * Initializes library installer. * - * @param IOInterface $io - * @param PartialComposer $composer - * @param string|null $type * @param Filesystem $filesystem * @param BinaryInstaller $binaryInstaller */ - public function __construct(IOInterface $io, PartialComposer $composer, ?string $type = 'library', Filesystem $filesystem = null, BinaryInstaller $binaryInstaller = null) + public function __construct(IOInterface $io, PartialComposer $composer, ?string $type = 'library', ?Filesystem $filesystem = null, ?BinaryInstaller $binaryInstaller = null) { $this->composer = $composer; $this->downloadManager = $composer instanceof Composer ? $composer->getDownloadManager() : null; @@ -109,7 +106,7 @@ class LibraryInstaller implements InstallerInterface, BinaryPresenceInterface /** * @inheritDoc */ - public function download(PackageInterface $package, PackageInterface $prevPackage = null) + public function download(PackageInterface $package, ?PackageInterface $prevPackage = null) { $this->initializeVendorDir(); $downloadPath = $this->getInstallPath($package); @@ -120,7 +117,7 @@ class LibraryInstaller implements InstallerInterface, BinaryPresenceInterface /** * @inheritDoc */ - public function prepare($type, PackageInterface $package, PackageInterface $prevPackage = null) + public function prepare($type, PackageInterface $package, ?PackageInterface $prevPackage = null) { $this->initializeVendorDir(); $downloadPath = $this->getInstallPath($package); @@ -131,7 +128,7 @@ class LibraryInstaller implements InstallerInterface, BinaryPresenceInterface /** * @inheritDoc */ - public function cleanup($type, PackageInterface $package, PackageInterface $prevPackage = null) + public function cleanup($type, PackageInterface $package, ?PackageInterface $prevPackage = null) { $this->initializeVendorDir(); $downloadPath = $this->getInstallPath($package); @@ -257,7 +254,6 @@ class LibraryInstaller implements InstallerInterface, BinaryPresenceInterface * It is used for BC as getInstallPath tends to be overridden by * installer plugins but not getPackageBasePath * - * @param PackageInterface $package * @return string */ protected function getPackageBasePath(PackageInterface $package) diff --git a/src/Composer/Installer/MetapackageInstaller.php b/src/Composer/Installer/MetapackageInstaller.php index ec437a89a..952993e58 100644 --- a/src/Composer/Installer/MetapackageInstaller.php +++ b/src/Composer/Installer/MetapackageInstaller.php @@ -53,7 +53,7 @@ class MetapackageInstaller implements InstallerInterface /** * @inheritDoc */ - public function download(PackageInterface $package, PackageInterface $prevPackage = null) + public function download(PackageInterface $package, ?PackageInterface $prevPackage = null) { // noop return \React\Promise\resolve(null); @@ -62,7 +62,7 @@ class MetapackageInstaller implements InstallerInterface /** * @inheritDoc */ - public function prepare($type, PackageInterface $package, PackageInterface $prevPackage = null) + public function prepare($type, PackageInterface $package, ?PackageInterface $prevPackage = null) { // noop return \React\Promise\resolve(null); @@ -71,7 +71,7 @@ class MetapackageInstaller implements InstallerInterface /** * @inheritDoc */ - public function cleanup($type, PackageInterface $package, PackageInterface $prevPackage = null) + public function cleanup($type, PackageInterface $package, ?PackageInterface $prevPackage = null) { // noop return \React\Promise\resolve(null); diff --git a/src/Composer/Installer/NoopInstaller.php b/src/Composer/Installer/NoopInstaller.php index 2af994985..22cf9f80e 100644 --- a/src/Composer/Installer/NoopInstaller.php +++ b/src/Composer/Installer/NoopInstaller.php @@ -43,7 +43,7 @@ class NoopInstaller implements InstallerInterface /** * @inheritDoc */ - public function download(PackageInterface $package, PackageInterface $prevPackage = null) + public function download(PackageInterface $package, ?PackageInterface $prevPackage = null) { return \React\Promise\resolve(null); } @@ -51,7 +51,7 @@ class NoopInstaller implements InstallerInterface /** * @inheritDoc */ - public function prepare($type, PackageInterface $package, PackageInterface $prevPackage = null) + public function prepare($type, PackageInterface $package, ?PackageInterface $prevPackage = null) { return \React\Promise\resolve(null); } @@ -59,7 +59,7 @@ class NoopInstaller implements InstallerInterface /** * @inheritDoc */ - public function cleanup($type, PackageInterface $package, PackageInterface $prevPackage = null) + public function cleanup($type, PackageInterface $package, ?PackageInterface $prevPackage = null) { return \React\Promise\resolve(null); } diff --git a/src/Composer/Installer/PackageEvent.php b/src/Composer/Installer/PackageEvent.php index e16ca694c..1630f437e 100644 --- a/src/Composer/Installer/PackageEvent.php +++ b/src/Composer/Installer/PackageEvent.php @@ -58,13 +58,7 @@ class PackageEvent extends Event /** * Constructor. * - * @param string $eventName - * @param Composer $composer - * @param IOInterface $io - * @param bool $devMode - * @param RepositoryInterface $localRepo * @param OperationInterface[] $operations - * @param OperationInterface $operation */ public function __construct(string $eventName, Composer $composer, IOInterface $io, bool $devMode, RepositoryInterface $localRepo, array $operations, OperationInterface $operation) { @@ -78,33 +72,21 @@ class PackageEvent extends Event $this->operation = $operation; } - /** - * @return Composer - */ public function getComposer(): Composer { return $this->composer; } - /** - * @return IOInterface - */ public function getIO(): IOInterface { return $this->io; } - /** - * @return bool - */ public function isDevMode(): bool { return $this->devMode; } - /** - * @return RepositoryInterface - */ public function getLocalRepo(): RepositoryInterface { return $this->localRepo; @@ -120,8 +102,6 @@ class PackageEvent extends Event /** * Returns the package instance. - * - * @return OperationInterface */ public function getOperation(): OperationInterface { diff --git a/src/Composer/Installer/PluginInstaller.php b/src/Composer/Installer/PluginInstaller.php index 0b34418db..68326462e 100644 --- a/src/Composer/Installer/PluginInstaller.php +++ b/src/Composer/Installer/PluginInstaller.php @@ -30,7 +30,7 @@ use React\Promise\PromiseInterface; */ class PluginInstaller extends LibraryInstaller { - public function __construct(IOInterface $io, PartialComposer $composer, Filesystem $fs = null, BinaryInstaller $binaryInstaller = null) + public function __construct(IOInterface $io, PartialComposer $composer, ?Filesystem $fs = null, ?BinaryInstaller $binaryInstaller = null) { parent::__construct($io, $composer, 'composer-plugin', $fs, $binaryInstaller); } @@ -46,7 +46,7 @@ class PluginInstaller extends LibraryInstaller /** * @inheritDoc */ - public function prepare($type, PackageInterface $package, PackageInterface $prevPackage = null) + public function prepare($type, PackageInterface $package, ?PackageInterface $prevPackage = null) { // fail install process early if it is going to fail due to a plugin not being allowed if (($type === 'install' || $type === 'update') && !$this->getPluginManager()->arePluginsDisabled('local')) { @@ -59,7 +59,7 @@ class PluginInstaller extends LibraryInstaller /** * @inheritDoc */ - public function download(PackageInterface $package, PackageInterface $prevPackage = null) + public function download(PackageInterface $package, ?PackageInterface $prevPackage = null) { $extra = $package->getExtra(); if (empty($extra['class'])) { diff --git a/src/Composer/Installer/ProjectInstaller.php b/src/Composer/Installer/ProjectInstaller.php index d981680ab..3ee3aceaf 100644 --- a/src/Composer/Installer/ProjectInstaller.php +++ b/src/Composer/Installer/ProjectInstaller.php @@ -33,9 +33,6 @@ class ProjectInstaller implements InstallerInterface /** @var Filesystem */ private $filesystem; - /** - * @param string $installPath - */ public function __construct(string $installPath, DownloadManager $dm, Filesystem $fs) { $this->installPath = rtrim(strtr($installPath, '\\', '/'), '/').'/'; @@ -45,9 +42,6 @@ class ProjectInstaller implements InstallerInterface /** * Decides if the installer supports the given type - * - * @param string $packageType - * @return bool */ public function supports(string $packageType): bool { @@ -65,7 +59,7 @@ class ProjectInstaller implements InstallerInterface /** * @inheritDoc */ - public function download(PackageInterface $package, PackageInterface $prevPackage = null): ?PromiseInterface + public function download(PackageInterface $package, ?PackageInterface $prevPackage = null): ?PromiseInterface { $installPath = $this->installPath; if (file_exists($installPath) && !$this->filesystem->isDirEmpty($installPath)) { @@ -81,7 +75,7 @@ class ProjectInstaller implements InstallerInterface /** * @inheritDoc */ - public function prepare($type, PackageInterface $package, PackageInterface $prevPackage = null): ?PromiseInterface + public function prepare($type, PackageInterface $package, ?PackageInterface $prevPackage = null): ?PromiseInterface { return $this->downloadManager->prepare($type, $package, $this->installPath, $prevPackage); } @@ -89,7 +83,7 @@ class ProjectInstaller implements InstallerInterface /** * @inheritDoc */ - public function cleanup($type, PackageInterface $package, PackageInterface $prevPackage = null): ?PromiseInterface + public function cleanup($type, PackageInterface $package, ?PackageInterface $prevPackage = null): ?PromiseInterface { return $this->downloadManager->cleanup($type, $package, $this->installPath, $prevPackage); } @@ -121,7 +115,6 @@ class ProjectInstaller implements InstallerInterface /** * Returns the installation path of a package * - * @param PackageInterface $package * @return string path */ public function getInstallPath(PackageInterface $package): string diff --git a/src/Composer/Installer/SuggestedPackagesReporter.php b/src/Composer/Installer/SuggestedPackagesReporter.php index 18faf55d2..caaf81376 100644 --- a/src/Composer/Installer/SuggestedPackagesReporter.php +++ b/src/Composer/Installer/SuggestedPackagesReporter.php @@ -32,7 +32,7 @@ class SuggestedPackagesReporter /** * @var array */ - protected $suggestedPackages = array(); + protected $suggestedPackages = []; /** * @var IOInterface @@ -61,24 +61,20 @@ class SuggestedPackagesReporter * @param string $source Source package which made the suggestion * @param string $target Target package to be suggested * @param string $reason Reason the target package to be suggested - * @return SuggestedPackagesReporter */ public function addPackage(string $source, string $target, string $reason): SuggestedPackagesReporter { - $this->suggestedPackages[] = array( + $this->suggestedPackages[] = [ 'source' => $source, 'target' => $target, 'reason' => $reason, - ); + ]; return $this; } /** * Add all suggestions from a package. - * - * @param PackageInterface $package - * @return SuggestedPackagesReporter */ public function addSuggestionsFromPackage(PackageInterface $package): SuggestedPackagesReporter { @@ -102,14 +98,13 @@ class SuggestedPackagesReporter * @param int $mode One of the MODE_* constants from this class * @param InstalledRepository|null $installedRepo If passed in, suggested packages which are installed already will be skipped * @param PackageInterface|null $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package, or from the package itself, will be shown - * @return void */ - public function output(int $mode, InstalledRepository $installedRepo = null, PackageInterface $onlyDependentsOf = null): void + public function output(int $mode, ?InstalledRepository $installedRepo = null, ?PackageInterface $onlyDependentsOf = null): void { $suggestedPackages = $this->getFilteredSuggestions($installedRepo, $onlyDependentsOf); - $suggesters = array(); - $suggested = array(); + $suggesters = []; + $suggested = []; foreach ($suggestedPackages as $suggestion) { $suggesters[$suggestion['source']][$suggestion['target']] = $suggestion['reason']; $suggested[$suggestion['target']][$suggestion['source']] = $suggestion['reason']; @@ -168,9 +163,8 @@ class SuggestedPackagesReporter * * @param InstalledRepository|null $installedRepo If passed in, suggested packages which are installed already will be skipped * @param PackageInterface|null $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package, or from the package itself, will be shown - * @return void */ - public function outputMinimalistic(InstalledRepository $installedRepo = null, PackageInterface $onlyDependentsOf = null): void + public function outputMinimalistic(?InstalledRepository $installedRepo = null, ?PackageInterface $onlyDependentsOf = null): void { $suggestedPackages = $this->getFilteredSuggestions($installedRepo, $onlyDependentsOf); if ($suggestedPackages) { @@ -183,10 +177,10 @@ class SuggestedPackagesReporter * @param PackageInterface|null $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package, or from the package itself, will be shown * @return mixed[] */ - private function getFilteredSuggestions(InstalledRepository $installedRepo = null, PackageInterface $onlyDependentsOf = null): array + private function getFilteredSuggestions(?InstalledRepository $installedRepo = null, ?PackageInterface $onlyDependentsOf = null): array { $suggestedPackages = $this->getPackages(); - $installedNames = array(); + $installedNames = []; if (null !== $installedRepo && !empty($suggestedPackages)) { foreach ($installedRepo->getPackages() as $package) { $installedNames = array_merge( @@ -196,7 +190,7 @@ class SuggestedPackagesReporter } } - $sourceFilter = array(); + $sourceFilter = []; if ($onlyDependentsOf) { $sourceFilter = array_map(static function ($link): string { return $link->getTarget(); @@ -204,7 +198,7 @@ class SuggestedPackagesReporter $sourceFilter[] = $onlyDependentsOf->getName(); } - $suggestions = array(); + $suggestions = []; foreach ($suggestedPackages as $suggestion) { if (in_array($suggestion['target'], $installedNames) || ($sourceFilter && !in_array($suggestion['source'], $sourceFilter))) { continue; @@ -216,10 +210,6 @@ class SuggestedPackagesReporter return $suggestions; } - /** - * @param string $string - * @return string - */ private function escapeOutput(string $string): string { return OutputFormatter::escape( @@ -227,10 +217,6 @@ class SuggestedPackagesReporter ); } - /** - * @param string $string - * @return string - */ private function removeControlCharacters(string $string): string { return Preg::replace( diff --git a/src/Composer/Json/JsonFile.php b/src/Composer/Json/JsonFile.php index 805ca57ee..e850f5ec8 100644 --- a/src/Composer/Json/JsonFile.php +++ b/src/Composer/Json/JsonFile.php @@ -56,7 +56,7 @@ class JsonFile * @param ?IOInterface $io * @throws \InvalidArgumentException */ - public function __construct(string $path, HttpDownloader $httpDownloader = null, IOInterface $io = null) + public function __construct(string $path, ?HttpDownloader $httpDownloader = null, ?IOInterface $io = null) { $this->path = $path; @@ -67,9 +67,6 @@ class JsonFile $this->io = $io; } - /** - * @return string - */ public function getPath(): string { return $this->path; @@ -77,8 +74,6 @@ class JsonFile /** * Checks whether json file exists. - * - * @return bool */ public function exists(): bool { @@ -170,8 +165,6 @@ class JsonFile /** * Modify file properties only if content modified * - * @param string $path - * @param string $content * @return int|false */ private function filePutContentsIfModified(string $path, string $content) @@ -231,23 +224,23 @@ class JsonFile $schemaFile = 'file://' . $schemaFile; } - $schemaData = (object) array('$ref' => $schemaFile); + $schemaData = (object) ['$ref' => $schemaFile]; if ($schema === self::LAX_SCHEMA) { $schemaData->additionalProperties = true; - $schemaData->required = array(); + $schemaData->required = []; } elseif ($schema === self::STRICT_SCHEMA && $isComposerSchemaFile) { $schemaData->additionalProperties = false; - $schemaData->required = array('name', 'description'); + $schemaData->required = ['name', 'description']; } elseif ($schema === self::AUTH_SCHEMA && $isComposerSchemaFile) { - $schemaData = (object) array('$ref' => $schemaFile.'#/properties/config', '$schema'=> "https://json-schema.org/draft-04/schema#"); + $schemaData = (object) ['$ref' => $schemaFile.'#/properties/config', '$schema' => "https://json-schema.org/draft-04/schema#"]; } $validator = new Validator(); $validator->check($data, $schemaData); if (!$validator->isValid()) { - $errors = array(); + $errors = []; foreach ((array) $validator->getErrors() as $error) { $errors[] = ($error['property'] ? $error['property'].' : ' : '').$error['message']; } @@ -279,7 +272,6 @@ class JsonFile * * @param int $code return code of json_last_error function * @throws \RuntimeException - * @return void */ private static function throwEncodeError(int $code): void { @@ -312,7 +304,7 @@ class JsonFile * @throws ParsingException * @return mixed */ - public static function parseJson(?string $json, string $file = null) + public static function parseJson(?string $json, ?string $file = null) { if (null === $json) { return null; @@ -328,13 +320,12 @@ class JsonFile /** * Validates the syntax of a JSON string * - * @param string $json * @param string $file * @throws \UnexpectedValueException * @throws ParsingException * @return bool true on success */ - protected static function validateSyntax(string $json, string $file = null): bool + protected static function validateSyntax(string $json, ?string $file = null): bool { $parser = new JsonParser(); $result = $parser->lint($json); diff --git a/src/Composer/Json/JsonFormatter.php b/src/Composer/Json/JsonFormatter.php index de1afad0d..773ac886e 100644 --- a/src/Composer/Json/JsonFormatter.php +++ b/src/Composer/Json/JsonFormatter.php @@ -33,10 +33,8 @@ class JsonFormatter * Originally licensed under MIT by Dave Perrett * * - * @param string $json * @param bool $unescapeUnicode Un escape unicode * @param bool $unescapeSlashes Un escape slashes - * @return string */ public static function format(string $json, bool $unescapeUnicode, bool $unescapeSlashes): string { diff --git a/src/Composer/Json/JsonManipulator.php b/src/Composer/Json/JsonManipulator.php index f046532df..e62fa6972 100644 --- a/src/Composer/Json/JsonManipulator.php +++ b/src/Composer/Json/JsonManipulator.php @@ -38,9 +38,6 @@ class JsonManipulator /** @var string */ private $indent; - /** - * @param string $contents - */ public function __construct(string $contents) { $contents = trim($contents); @@ -55,28 +52,18 @@ class JsonManipulator $this->detectIndenting(); } - /** - * @return string - */ public function getContents(): string { return $this->contents . $this->newline; } - /** - * @param string $type - * @param string $package - * @param string $constraint - * @param bool $sortPackages - * @return bool - */ public function addLink(string $type, string $package, string $constraint, bool $sortPackages = false): bool { $decoded = JsonFile::parseJson($this->contents); // no link of that type yet if (!isset($decoded[$type])) { - return $this->addMainKey($type, array($package => $constraint)); + return $this->addMainKey($type, [$package => $constraint]); } $regex = '{'.self::$DEFINES.'^(?P\s*\{\s*(?:(?&string)\s*:\s*(?&json)\s*,\s*)*?)'. @@ -131,27 +118,26 @@ class JsonManipulator * @link https://getcomposer.org/doc/02-libraries.md#platform-packages * * @param array $packages - * @return void */ - private function sortPackages(array &$packages = array()): void + private function sortPackages(array &$packages = []): void { $prefix = static function ($requirement): string { if (PlatformRepository::isPlatformPackage($requirement)) { return Preg::replace( - array( + [ '/^php/', '/^hhvm/', '/^ext/', '/^lib/', '/^\D/', - ), - array( + ], + [ '0-$0', '1-$0', '2-$0', '3-$0', '4-$0', - ), + ], $requirement ); } @@ -165,48 +151,33 @@ class JsonManipulator } /** - * @param string $name * @param array|false $config - * @param bool $append - * @return bool */ public function addRepository(string $name, $config, bool $append = true): bool { return $this->addSubNode('repositories', $name, $config, $append); } - /** - * @param string $name - * @return bool - */ public function removeRepository(string $name): bool { return $this->removeSubNode('repositories', $name); } /** - * @param string $name * @param mixed $value - * @return bool */ public function addConfigSetting(string $name, $value): bool { return $this->addSubNode('config', $name, $value); } - /** - * @param string $name - * @return bool - */ public function removeConfigSetting(string $name): bool { return $this->removeSubNode('config', $name); } /** - * @param string $name * @param mixed $value - * @return bool */ public function addProperty(string $name, $value): bool { @@ -225,10 +196,6 @@ class JsonManipulator return $this->addMainKey($name, $value); } - /** - * @param string $name - * @return bool - */ public function removeProperty(string $name): bool { if (strpos($name, 'suggest.') === 0) { @@ -247,27 +214,23 @@ class JsonManipulator } /** - * @param string $mainNode - * @param string $name * @param mixed $value - * @param bool $append - * @return bool */ public function addSubNode(string $mainNode, string $name, $value, bool $append = true): bool { $decoded = JsonFile::parseJson($this->contents); $subName = null; - if (in_array($mainNode, array('config', 'extra', 'scripts')) && false !== strpos($name, '.')) { - list($name, $subName) = explode('.', $name, 2); + if (in_array($mainNode, ['config', 'extra', 'scripts']) && false !== strpos($name, '.')) { + [$name, $subName] = explode('.', $name, 2); } // no main node yet if (!isset($decoded[$mainNode])) { if ($subName !== null) { - $this->addMainKey($mainNode, array($name => array($subName => $value))); + $this->addMainKey($mainNode, [$name => [$subName => $value]]); } else { - $this->addMainKey($mainNode, array($name => $value)); + $this->addMainKey($mainNode, [$name => $value]); } return true; @@ -301,7 +264,7 @@ class JsonManipulator if ($subName !== null) { $curVal = json_decode($matches['content'], true); if (!is_array($curVal)) { - $curVal = array(); + $curVal = []; } $curVal[$subName] = $value; $value = $curVal; @@ -319,7 +282,7 @@ class JsonManipulator if (!empty($match['content'])) { if ($subName !== null) { - $value = array($subName => $value); + $value = [$subName => $value]; } // child missing but non empty children @@ -343,7 +306,7 @@ class JsonManipulator } } else { if ($subName !== null) { - $value = array($subName => $value); + $value = [$subName => $value]; } // children present but empty @@ -358,11 +321,6 @@ class JsonManipulator return true; } - /** - * @param string $mainNode - * @param string $name - * @return bool - */ public function removeSubNode(string $mainNode, string $name): bool { $decoded = JsonFile::parseJson($this->contents); @@ -394,8 +352,8 @@ class JsonManipulator } $subName = null; - if (in_array($mainNode, array('config', 'extra', 'scripts')) && false !== strpos($name, '.')) { - list($name, $subName) = explode('.', $name, 2); + if (in_array($mainNode, ['config', 'extra', 'scripts']) && false !== strpos($name, '.')) { + [$name, $subName] = explode('.', $name, 2); } // no node to remove @@ -465,9 +423,7 @@ class JsonManipulator } /** - * @param string $key * @param mixed $content - * @return bool */ public function addMainKey(string $key, $content): bool { @@ -509,10 +465,6 @@ class JsonManipulator return true; } - /** - * @param string $key - * @return bool - */ public function removeMainKey(string $key): bool { $decoded = JsonFile::parseJson($this->contents); @@ -546,10 +498,6 @@ class JsonManipulator return false; } - /** - * @param string $key - * @return bool - */ public function removeMainKeyIfEmpty(string $key): bool { $decoded = JsonFile::parseJson($this->contents); @@ -567,8 +515,6 @@ class JsonManipulator /** * @param mixed $data - * @param int $depth - * @return string */ public function format($data, int $depth = 0): string { @@ -584,7 +530,7 @@ class JsonManipulator } $out = '{' . $this->newline; - $elems = array(); + $elems = []; foreach ($data as $key => $val) { $elems[] = str_repeat($this->indent, $depth + 2) . JsonFile::encode($key). ': '.$this->format($val, $depth + 1); } @@ -595,9 +541,6 @@ class JsonManipulator return JsonFile::encode($data); } - /** - * @return void - */ protected function detectIndenting(): void { if (Preg::isMatch('{^([ \t]+)"}m', $this->contents, $match)) { diff --git a/src/Composer/Json/JsonValidationException.php b/src/Composer/Json/JsonValidationException.php index 783d471d1..28c22fcf9 100644 --- a/src/Composer/Json/JsonValidationException.php +++ b/src/Composer/Json/JsonValidationException.php @@ -25,10 +25,9 @@ class JsonValidationException extends Exception protected $errors; /** - * @param string $message * @param string[] $errors */ - public function __construct(string $message, array $errors = array(), Exception $previous = null) + public function __construct(string $message, array $errors = [], ?Exception $previous = null) { $this->errors = $errors; parent::__construct((string) $message, 0, $previous); diff --git a/src/Composer/PHPStan/ConfigReturnTypeExtension.php b/src/Composer/PHPStan/ConfigReturnTypeExtension.php index 6a9139387..a1e6359bb 100644 --- a/src/Composer/PHPStan/ConfigReturnTypeExtension.php +++ b/src/Composer/PHPStan/ConfigReturnTypeExtension.php @@ -1,5 +1,15 @@ + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Composer\PHPStan; use Composer\Config; @@ -17,7 +27,6 @@ use PHPStan\Type\DynamicMethodReturnTypeExtension; use PHPStan\Type\IntegerRangeType; use PHPStan\Type\IntegerType; use PHPStan\Type\MixedType; -use PHPStan\Type\ObjectType; use PHPStan\Type\StringType; use PHPStan\Type\Type; use PHPStan\Type\TypeCombinator; diff --git a/src/Composer/Package/AliasPackage.php b/src/Composer/Package/AliasPackage.php index 2a7663d2a..75d3158cc 100644 --- a/src/Composer/Package/AliasPackage.php +++ b/src/Composer/Package/AliasPackage.php @@ -68,7 +68,7 @@ class AliasPackage extends BasePackage foreach (Link::$TYPES as $type) { $links = $aliasOf->{'get' . ucfirst($type)}(); - $this->$type = $this->replaceSelfVersionDependencies($links, $type); + $this->{$type} = $this->replaceSelfVersionDependencies($links, $type); } } @@ -167,7 +167,6 @@ class AliasPackage extends BasePackage /** * @see setRootPackageAlias - * @return bool */ public function isRootPackageAlias(): bool { @@ -188,8 +187,8 @@ class AliasPackage extends BasePackage $prettyVersion = $this->aliasOf->getPrettyVersion(); } - if (\in_array($linkType, array(Link::TYPE_CONFLICT, Link::TYPE_PROVIDE, Link::TYPE_REPLACE), true)) { - $newLinks = array(); + if (\in_array($linkType, [Link::TYPE_CONFLICT, Link::TYPE_PROVIDE, Link::TYPE_REPLACE], true)) { + $newLinks = []; foreach ($links as $link) { // link is self.version, but must be replacing also the replaced version if ('self.version' === $link->getPrettyConstraint()) { @@ -213,9 +212,6 @@ class AliasPackage extends BasePackage return $links; } - /** - * @return bool - */ public function hasSelfVersionRequires(): bool { return $this->hasSelfVersionRequires; diff --git a/src/Composer/Package/Archiver/ArchivableFilesFilter.php b/src/Composer/Package/Archiver/ArchivableFilesFilter.php index b454dca4d..fdf81748b 100644 --- a/src/Composer/Package/Archiver/ArchivableFilesFilter.php +++ b/src/Composer/Package/Archiver/ArchivableFilesFilter.php @@ -18,7 +18,7 @@ use PharData; class ArchivableFilesFilter extends FilterIterator { /** @var string[] */ - private $dirs = array(); + private $dirs = []; /** * @return bool true if the current element is acceptable, otherwise false. @@ -35,11 +35,6 @@ class ArchivableFilesFilter extends FilterIterator return true; } - /** - * @param string $sources - * - * @return void - */ public function addEmptyDir(PharData $phar, string $sources): void { foreach ($this->dirs as $filepath) { diff --git a/src/Composer/Package/Archiver/ArchivableFilesFinder.php b/src/Composer/Package/Archiver/ArchivableFilesFinder.php index b37e50f55..71f763d43 100644 --- a/src/Composer/Package/Archiver/ArchivableFilesFinder.php +++ b/src/Composer/Package/Archiver/ArchivableFilesFinder.php @@ -47,12 +47,12 @@ class ArchivableFilesFinder extends \FilterIterator $sources = $fs->normalizePath(realpath($sources)); if ($ignoreFilters) { - $filters = array(); + $filters = []; } else { - $filters = array( + $filters = [ new GitExcludeFilter($sources), new ComposerExcludeFilter($sources, $excludes), - ); + ]; } $this->finder = new Finder(); diff --git a/src/Composer/Package/Archiver/ArchiveManager.php b/src/Composer/Package/Archiver/ArchiveManager.php index 973fb9ead..b127a0d16 100644 --- a/src/Composer/Package/Archiver/ArchiveManager.php +++ b/src/Composer/Package/Archiver/ArchiveManager.php @@ -35,7 +35,7 @@ class ArchiveManager /** * @var ArchiverInterface[] */ - protected $archivers = array(); + protected $archivers = []; /** * @var bool @@ -51,11 +51,6 @@ class ArchiveManager $this->loop = $loop; } - /** - * @param ArchiverInterface $archiver - * - * @return void - */ public function addArchiver(ArchiverInterface $archiver): void { $this->archivers[] = $archiver; @@ -89,7 +84,7 @@ class ArchiveManager } else { $baseName = Preg::replace('#[^a-z0-9-_]#i', '-', $package->getName()); } - $nameParts = array($baseName); + $nameParts = [$baseName]; if (null !== $package->getDistReference() && Preg::isMatch('{^[a-f0-9]{40}$}', $package->getDistReference())) { array_push($nameParts, $package->getDistReference(), $package->getDistType()); diff --git a/src/Composer/Package/Archiver/ArchiverInterface.php b/src/Composer/Package/Archiver/ArchiverInterface.php index 8b3ef316b..7ebc792d1 100644 --- a/src/Composer/Package/Archiver/ArchiverInterface.php +++ b/src/Composer/Package/Archiver/ArchiverInterface.php @@ -30,7 +30,7 @@ interface ArchiverInterface * * @return string The path to the written archive file */ - public function archive(string $sources, string $target, string $format, array $excludes = array(), bool $ignoreFilters = false): string; + public function archive(string $sources, string $target, string $format, array $excludes = [], bool $ignoreFilters = false): string; /** * Format supported by the archiver. diff --git a/src/Composer/Package/Archiver/BaseExcludeFilter.php b/src/Composer/Package/Archiver/BaseExcludeFilter.php index a7e587fc3..e2af2b2d3 100644 --- a/src/Composer/Package/Archiver/BaseExcludeFilter.php +++ b/src/Composer/Package/Archiver/BaseExcludeFilter.php @@ -36,7 +36,7 @@ abstract class BaseExcludeFilter public function __construct(string $sourcePath) { $this->sourcePath = $sourcePath; - $this->excludePatterns = array(); + $this->excludePatterns = []; } /** @@ -52,7 +52,7 @@ abstract class BaseExcludeFilter public function filter(string $relativePath, bool $exclude): bool { foreach ($this->excludePatterns as $patternData) { - list($pattern, $negate, $stripLeadingSlash) = $patternData; + [$pattern, $negate, $stripLeadingSlash] = $patternData; if ($stripLeadingSlash) { $path = substr($relativePath, 1); @@ -91,7 +91,7 @@ abstract class BaseExcludeFilter return null; } - return call_user_func($lineParser, $line); + return $lineParser($line); }, $lines ), @@ -110,7 +110,7 @@ abstract class BaseExcludeFilter */ protected function generatePatterns(array $rules): array { - $patterns = array(); + $patterns = []; foreach ($rules as $rule) { $patterns[] = $this->generatePattern($rule); } @@ -147,6 +147,6 @@ abstract class BaseExcludeFilter // remove delimiters as well as caret (^) and dollar sign ($) from the regex $rule = substr(Finder\Glob::toRegex($rule), 2, -2); - return array('{'.$pattern.$rule.'(?=$|/)}', $negate, false); + return ['{'.$pattern.$rule.'(?=$|/)}', $negate, false]; } } diff --git a/src/Composer/Package/Archiver/GitExcludeFilter.php b/src/Composer/Package/Archiver/GitExcludeFilter.php index 12b4c5a65..917f9fced 100644 --- a/src/Composer/Package/Archiver/GitExcludeFilter.php +++ b/src/Composer/Package/Archiver/GitExcludeFilter.php @@ -25,8 +25,6 @@ class GitExcludeFilter extends BaseExcludeFilter { /** * Parses .gitattributes if it exists - * - * @param string $sourcePath */ public function __construct(string $sourcePath) { @@ -37,7 +35,7 @@ class GitExcludeFilter extends BaseExcludeFilter $this->excludePatterns, $this->parseLines( file($sourcePath.'/.gitattributes'), - array($this, 'parseGitAttributesLine') + [$this, 'parseGitAttributesLine'] ) ); } diff --git a/src/Composer/Package/Archiver/PharArchiver.php b/src/Composer/Package/Archiver/PharArchiver.php index a0131bb54..c3d025f8d 100644 --- a/src/Composer/Package/Archiver/PharArchiver.php +++ b/src/Composer/Package/Archiver/PharArchiver.php @@ -20,23 +20,23 @@ namespace Composer\Package\Archiver; class PharArchiver implements ArchiverInterface { /** @var array */ - protected static $formats = array( + protected static $formats = [ 'zip' => \Phar::ZIP, 'tar' => \Phar::TAR, 'tar.gz' => \Phar::TAR, 'tar.bz2' => \Phar::TAR, - ); + ]; /** @var array */ - protected static $compressFormats = array( + protected static $compressFormats = [ 'tar.gz' => \Phar::GZ, 'tar.bz2' => \Phar::BZ2, - ); + ]; /** * @inheritDoc */ - public function archive(string $sources, string $target, string $format, array $excludes = array(), bool $ignoreFilters = false): string + public function archive(string $sources, string $target, string $format, array $excludes = [], bool $ignoreFilters = false): string { $sources = realpath($sources); diff --git a/src/Composer/Package/Archiver/ZipArchiver.php b/src/Composer/Package/Archiver/ZipArchiver.php index fce4f14bc..71f512e5c 100644 --- a/src/Composer/Package/Archiver/ZipArchiver.php +++ b/src/Composer/Package/Archiver/ZipArchiver.php @@ -21,14 +21,14 @@ use Composer\Util\Filesystem; class ZipArchiver implements ArchiverInterface { /** @var array */ - protected static $formats = array( + protected static $formats = [ 'zip' => true, - ); + ]; /** * @inheritDoc */ - public function archive(string $sources, string $target, string $format, array $excludes = array(), bool $ignoreFilters = false): string + public function archive(string $sources, string $target, string $format, array $excludes = [], bool $ignoreFilters = false): string { $fs = new Filesystem(); $sources = $fs->normalizePath($sources); @@ -83,9 +83,6 @@ class ZipArchiver implements ArchiverInterface return isset(static::$formats[$format]) && $this->compressionAvailable(); } - /** - * @return bool - */ private function compressionAvailable(): bool { return class_exists('ZipArchive'); diff --git a/src/Composer/Package/BasePackage.php b/src/Composer/Package/BasePackage.php index 509a33e1a..d6d37d360 100644 --- a/src/Composer/Package/BasePackage.php +++ b/src/Composer/Package/BasePackage.php @@ -26,13 +26,13 @@ abstract class BasePackage implements PackageInterface * @phpstan-var array * @internal */ - public static $supportedLinkTypes = array( - 'require' => array('description' => 'requires', 'method' => Link::TYPE_REQUIRE), - 'conflict' => array('description' => 'conflicts', 'method' => Link::TYPE_CONFLICT), - 'provide' => array('description' => 'provides', 'method' => Link::TYPE_PROVIDE), - 'replace' => array('description' => 'replaces', 'method' => Link::TYPE_REPLACE), - 'require-dev' => array('description' => 'requires (for development)', 'method' => Link::TYPE_DEV_REQUIRE), - ); + public static $supportedLinkTypes = [ + 'require' => ['description' => 'requires', 'method' => Link::TYPE_REQUIRE], + 'conflict' => ['description' => 'conflicts', 'method' => Link::TYPE_CONFLICT], + 'provide' => ['description' => 'provides', 'method' => Link::TYPE_PROVIDE], + 'replace' => ['description' => 'replaces', 'method' => Link::TYPE_REPLACE], + 'require-dev' => ['description' => 'requires (for development)', 'method' => Link::TYPE_DEV_REQUIRE], + ]; public const STABILITY_STABLE = 0; public const STABILITY_RC = 5; @@ -41,13 +41,13 @@ abstract class BasePackage implements PackageInterface public const STABILITY_DEV = 20; /** @var array */ - public static $stabilities = array( + public static $stabilities = [ 'stable' => self::STABILITY_STABLE, 'RC' => self::STABILITY_RC, 'beta' => self::STABILITY_BETA, 'alpha' => self::STABILITY_ALPHA, 'dev' => self::STABILITY_DEV, - ); + ]; /** * READ-ONLY: The package id, public for fast access in dependency solver @@ -95,9 +95,9 @@ abstract class BasePackage implements PackageInterface */ public function getNames($provides = true): array { - $names = array( + $names = [ $this->getName() => true, - ); + ]; if ($provides) { foreach ($this->getProvides() as $link) { @@ -154,8 +154,6 @@ abstract class BasePackage implements PackageInterface /** * checks if this package is a platform package - * - * @return bool */ public function isPlatform(): bool { @@ -164,17 +162,12 @@ abstract class BasePackage implements PackageInterface /** * Returns package unique name, constructed from name, version and release type. - * - * @return string */ public function getUniqueName(): string { return $this->getName().'-'.$this->getVersion(); } - /** - * @return bool - */ public function equals(PackageInterface $package): bool { $self = $this; @@ -190,8 +183,6 @@ abstract class BasePackage implements PackageInterface /** * Converts the package into a readable and unique string - * - * @return string */ public function __toString(): string { @@ -209,7 +200,7 @@ abstract class BasePackage implements PackageInterface public function getFullPrettyVersion(bool $truncate = true, int $displayMode = PackageInterface::DISPLAY_SOURCE_REF_IF_DEV): string { if ($displayMode === PackageInterface::DISPLAY_SOURCE_REF_IF_DEV && - (!$this->isDev() || !\in_array($this->getSourceType(), array('hg', 'git'))) + (!$this->isDev() || !\in_array($this->getSourceType(), ['hg', 'git'])) ) { return $this->getPrettyVersion(); } @@ -239,8 +230,6 @@ abstract class BasePackage implements PackageInterface } /** - * @return int - * * @phpstan-return self::STABILITY_* */ public function getStabilityPriority(): int @@ -257,7 +246,6 @@ abstract class BasePackage implements PackageInterface /** * Build a regexp from a package name, expanding * globs as required * - * @param string $allowPattern * @param non-empty-string $wrap Wrap the cleaned string by the given string * @return non-empty-string */ diff --git a/src/Composer/Package/Comparer/Comparer.php b/src/Composer/Package/Comparer/Comparer.php index a52e1c1af..1fd79b8bb 100644 --- a/src/Composer/Package/Comparer/Comparer.php +++ b/src/Composer/Package/Comparer/Comparer.php @@ -28,29 +28,17 @@ class Comparer /** @var array{changed?: string[], removed?: string[], added?: string[]} */ private $changed; - /** - * @param string $source - * - * @return void - */ public function setSource(string $source): void { $this->source = $source; } - /** - * @param string $update - * - * @return void - */ public function setUpdate(string $update): void { $this->update = $update; } /** - * @param bool $explicated - * * @return array{changed?: string[], removed?: string[], added?: string[]}|false false if no change */ public function getChanged(bool $explicated = false) @@ -71,8 +59,6 @@ class Comparer } /** - * @param bool $explicated - * * @return string empty string if no changes */ public function getChangedAsString(bool $toString = false, bool $explicated = false): string @@ -82,7 +68,7 @@ class Comparer return ''; } - $strings = array(); + $strings = []; foreach ($changed as $sectionKey => $itemSection) { foreach ($itemSection as $itemKey => $item) { $strings[] = $item."\r\n"; @@ -92,14 +78,11 @@ class Comparer return trim(implode("\r\n", $strings)); } - /** - * @return void - */ public function doCompare(): void { - $source = array(); - $destination = array(); - $this->changed = array(); + $source = []; + $destination = []; + $this->changed = []; $currentDirectory = Platform::getCwd(); chdir($this->source); $source = $this->doTree('.', $source); @@ -134,7 +117,6 @@ class Comparer } /** - * @param string $dir * @param mixed[] $array * * @return array>|false diff --git a/src/Composer/Package/CompletePackage.php b/src/Composer/Package/CompletePackage.php index fc706cfe9..66a5a127c 100644 --- a/src/Composer/Package/CompletePackage.php +++ b/src/Composer/Package/CompletePackage.php @@ -20,29 +20,29 @@ namespace Composer\Package; class CompletePackage extends Package implements CompletePackageInterface { /** @var mixed[] */ - protected $repositories = array(); + protected $repositories = []; /** @var string[] */ - protected $license = array(); + protected $license = []; /** @var string[] */ - protected $keywords = array(); + protected $keywords = []; /** @var array */ - protected $authors = array(); + protected $authors = []; /** @var ?string */ protected $description = null; /** @var ?string */ protected $homepage = null; /** @var array Map of script name to array of handlers */ - protected $scripts = array(); + protected $scripts = []; /** @var array{issues?: string, forum?: string, wiki?: string, source?: string, email?: string, irc?: string, docs?: string, rss?: string, chat?: string} */ - protected $support = array(); + protected $support = []; /** @var array */ - protected $funding = array(); + protected $funding = []; /** @var bool|string */ protected $abandoned = false; /** @var ?string */ protected $archiveName = null; /** @var string[] */ - protected $archiveExcludes = array(); + protected $archiveExcludes = []; /** * @inheritDoc diff --git a/src/Composer/Package/CompletePackageInterface.php b/src/Composer/Package/CompletePackageInterface.php index c6198dfe6..b24a0f9fc 100644 --- a/src/Composer/Package/CompletePackageInterface.php +++ b/src/Composer/Package/CompletePackageInterface.php @@ -30,7 +30,6 @@ interface CompletePackageInterface extends PackageInterface /** * @param array $scripts - * @return void */ public function setScripts(array $scripts): void; @@ -45,7 +44,6 @@ interface CompletePackageInterface extends PackageInterface * Set the repositories * * @param mixed[] $repositories - * @return void */ public function setRepositories(array $repositories): void; @@ -60,7 +58,6 @@ interface CompletePackageInterface extends PackageInterface * Set the license * * @param string[] $license - * @return void */ public function setLicense(array $license): void; @@ -75,7 +72,6 @@ interface CompletePackageInterface extends PackageInterface * Set the keywords * * @param string[] $keywords - * @return void */ public function setKeywords(array $keywords): void; @@ -88,9 +84,6 @@ interface CompletePackageInterface extends PackageInterface /** * Set the description - * - * @param string $description - * @return void */ public function setDescription(string $description): void; @@ -103,9 +96,6 @@ interface CompletePackageInterface extends PackageInterface /** * Set the homepage - * - * @param string $homepage - * @return void */ public function setHomepage(string $homepage): void; @@ -122,7 +112,6 @@ interface CompletePackageInterface extends PackageInterface * Set the authors * * @param array $authors - * @return void */ public function setAuthors(array $authors): void; @@ -137,7 +126,6 @@ interface CompletePackageInterface extends PackageInterface * Set the support information * * @param array{issues?: string, forum?: string, wiki?: string, source?: string, email?: string, irc?: string, docs?: string, rss?: string, chat?: string} $support - * @return void */ public function setSupport(array $support): void; @@ -154,27 +142,21 @@ interface CompletePackageInterface extends PackageInterface * Set the funding * * @param array $funding - * @return void */ public function setFunding(array $funding): void; /** * Returns if the package is abandoned or not - * - * @return bool */ public function isAbandoned(): bool; /** * If the package is abandoned and has a suggested replacement, this method returns it - * - * @return string|null */ public function getReplacementPackage(): ?string; /** * @param bool|string $abandoned - * @return void */ public function setAbandoned($abandoned): void; @@ -187,9 +169,6 @@ interface CompletePackageInterface extends PackageInterface /** * Sets default base filename for archive - * - * @param string $name - * @return void */ public function setArchiveName(string $name): void; @@ -204,7 +183,6 @@ interface CompletePackageInterface extends PackageInterface * Sets a list of patterns to be excluded from archives * * @param string[] $excludes - * @return void */ public function setArchiveExcludes(array $excludes): void; } diff --git a/src/Composer/Package/Dumper/ArrayDumper.php b/src/Composer/Package/Dumper/ArrayDumper.php index d150504e6..f713fbe33 100644 --- a/src/Composer/Package/Dumper/ArrayDumper.php +++ b/src/Composer/Package/Dumper/ArrayDumper.php @@ -28,7 +28,7 @@ class ArrayDumper */ public function dump(PackageInterface $package): array { - $keys = array( + $keys = [ 'binaries' => 'bin', 'type', 'extra', @@ -37,9 +37,9 @@ class ArrayDumper 'devAutoload' => 'autoload-dev', 'notificationUrl' => 'notification-url', 'includePaths' => 'include-path', - ); + ]; - $data = array(); + $data = []; $data['name'] = $package->getPrettyName(); $data['version'] = $package->getPrettyVersion(); $data['version_normalized'] = $package->getVersion(); @@ -105,7 +105,7 @@ class ArrayDumper $data['archive']['exclude'] = $package->getArchiveExcludes(); } - $keys = array( + $keys = [ 'scripts', 'license', 'authors', @@ -115,7 +115,7 @@ class ArrayDumper 'repositories', 'support', 'funding', - ); + ]; $data = $this->dumpValues($package, $keys, $data); @@ -156,7 +156,7 @@ class ArrayDumper } $getter = 'get'.ucfirst($method); - $value = $package->$getter(); + $value = $package->{$getter}(); if (null !== $value && !(\is_array($value) && 0 === \count($value))) { $data[$key] = $value; diff --git a/src/Composer/Package/Link.php b/src/Composer/Package/Link.php index 59bfb993f..7b19f83a7 100644 --- a/src/Composer/Package/Link.php +++ b/src/Composer/Package/Link.php @@ -42,13 +42,13 @@ class Link * @var string[] * @phpstan-var array */ - public static $TYPES = array( + public static $TYPES = [ self::TYPE_REQUIRE, self::TYPE_DEV_REQUIRE, self::TYPE_PROVIDE, self::TYPE_CONFLICT, self::TYPE_REPLACE, - ); + ]; /** * @var string @@ -79,11 +79,8 @@ class Link /** * Creates a new package link. * - * @param string $source - * @param string $target * @param ConstraintInterface $constraint Constraint applying to the target of this link * @param self::TYPE_* $description Used to create a descriptive string representation - * @param string|null $prettyConstraint */ public function __construct( string $source, @@ -99,33 +96,21 @@ class Link $this->prettyConstraint = $prettyConstraint; } - /** - * @return string - */ public function getDescription(): string { return $this->description; } - /** - * @return string - */ public function getSource(): string { return $this->source; } - /** - * @return string - */ public function getTarget(): string { return $this->target; } - /** - * @return ConstraintInterface - */ public function getConstraint(): ConstraintInterface { return $this->constraint; @@ -133,7 +118,6 @@ class Link /** * @throws \UnexpectedValueException If no pretty constraint was provided - * @return string */ public function getPrettyConstraint(): string { @@ -144,18 +128,11 @@ class Link return $this->prettyConstraint; } - /** - * @return string - */ public function __toString(): string { return $this->source.' '.$this->description.' '.$this->target.' ('.$this->constraint.')'; } - /** - * @param PackageInterface $sourcePackage - * @return string - */ public function getPrettyString(PackageInterface $sourcePackage): string { return $sourcePackage->getPrettyString().' '.$this->description.' '.$this->target.' '.$this->constraint->getPrettyString(); diff --git a/src/Composer/Package/Loader/ArrayLoader.php b/src/Composer/Package/Loader/ArrayLoader.php index 618c397ee..ef7ae0fb6 100644 --- a/src/Composer/Package/Loader/ArrayLoader.php +++ b/src/Composer/Package/Loader/ArrayLoader.php @@ -34,10 +34,7 @@ class ArrayLoader implements LoaderInterface /** @var bool */ protected $loadOptions; - /** - * @param bool $loadOptions - */ - public function __construct(VersionParser $parser = null, bool $loadOptions = false) + public function __construct(?VersionParser $parser = null, bool $loadOptions = false) { if (!$parser) { $parser = new VersionParser; @@ -83,8 +80,8 @@ class ArrayLoader implements LoaderInterface */ public function loadPackages(array $versions): array { - $packages = array(); - $linkCache = array(); + $packages = []; + $linkCache = []; foreach ($versions as $version) { $package = $this->createObject($version, 'Composer\Package\CompletePackage'); @@ -159,7 +156,7 @@ class ArrayLoader implements LoaderInterface if (isset($config['bin'])) { if (!\is_array($config['bin'])) { - $config['bin'] = array($config['bin']); + $config['bin'] = [$config['bin']]; } foreach ($config['bin'] as $key => $bin) { $config['bin'][$key] = ltrim($bin, '/'); @@ -256,7 +253,7 @@ class ArrayLoader implements LoaderInterface foreach ($config['scripts'] as $event => $listeners) { $config['scripts'][$event] = (array) $listeners; } - foreach (array('composer', 'php', 'putenv') as $reserved) { + foreach (['composer', 'php', 'putenv'] as $reserved) { if (isset($config['scripts'][$reserved])) { trigger_error('The `'.$reserved.'` script name is reserved for internal use, please avoid defining it', E_USER_DEPRECATED); } @@ -277,7 +274,7 @@ class ArrayLoader implements LoaderInterface } if (!empty($config['license'])) { - $package->setLicense(\is_array($config['license']) ? $config['license'] : array($config['license'])); + $package->setLicense(\is_array($config['license']) ? $config['license'] : [$config['license']]); } if (!empty($config['authors']) && \is_array($config['authors'])) { @@ -316,10 +313,7 @@ class ArrayLoader implements LoaderInterface /** * @param array>>> $linkCache - * @param PackageInterface $package * @param mixed[] $config - * - * @return void */ private function configureCachedLinks(array &$linkCache, PackageInterface $package, array $config): void { @@ -330,7 +324,7 @@ class ArrayLoader implements LoaderInterface if (isset($config[$type])) { $method = 'set'.ucfirst($opts['method']); - $links = array(); + $links = []; foreach ($config[$type] as $prettyTarget => $constraint) { $target = strtolower($prettyTarget); @@ -343,10 +337,10 @@ class ArrayLoader implements LoaderInterface $links[$target] = $this->createLink($name, $prettyVersion, $opts['method'], $target, $constraint); } else { if (!isset($linkCache[$name][$type][$target][$constraint])) { - $linkCache[$name][$type][$target][$constraint] = array($target, $this->createLink($name, $prettyVersion, $opts['method'], $target, $constraint)); + $linkCache[$name][$type][$target][$constraint] = [$target, $this->createLink($name, $prettyVersion, $opts['method'], $target, $constraint)]; } - list($target, $link) = $linkCache[$name][$type][$target][$constraint]; + [$target, $link] = $linkCache[$name][$type][$target][$constraint]; $links[$target] = $link; } } @@ -368,7 +362,7 @@ class ArrayLoader implements LoaderInterface */ public function parseLinks(string $source, string $sourceVersion, string $description, array $links): array { - $res = array(); + $res = []; foreach ($links as $target => $constraint) { $target = strtolower((string) $target); $res[$target] = $this->createLink($source, $sourceVersion, $description, $target, $constraint); @@ -383,7 +377,6 @@ class ArrayLoader implements LoaderInterface * @param Link::TYPE_* $description link description (e.g. requires, replaces, ..) * @param string $target target package name * @param string $prettyConstraint constraint string - * @return Link */ private function createLink(string $source, string $sourceVersion, string $description, string $target, string $prettyConstraint): Link { diff --git a/src/Composer/Package/Loader/RootPackageLoader.php b/src/Composer/Package/Loader/RootPackageLoader.php index 211a23c87..588a72787 100644 --- a/src/Composer/Package/Loader/RootPackageLoader.php +++ b/src/Composer/Package/Loader/RootPackageLoader.php @@ -49,7 +49,7 @@ class RootPackageLoader extends ArrayLoader */ private $versionGuesser; - public function __construct(RepositoryManager $manager, Config $config, VersionParser $parser = null, VersionGuesser $versionGuesser = null, IOInterface $io = null) + public function __construct(RepositoryManager $manager, Config $config, ?VersionParser $parser = null, ?VersionGuesser $versionGuesser = null, ?IOInterface $io = null) { parent::__construct($parser); @@ -61,7 +61,6 @@ class RootPackageLoader extends ArrayLoader /** * @inheritDoc * - * @param string|null $cwd * * @return RootPackage|RootAliasPackage * @@ -100,16 +99,16 @@ class RootPackageLoader extends ArrayLoader } if ($commit) { - $config['source'] = array( + $config['source'] = [ 'type' => '', 'url' => '', 'reference' => $commit, - ); - $config['dist'] = array( + ]; + $config['dist'] = [ 'type' => '', 'url' => '', 'reference' => $commit, - ); + ]; } } @@ -133,15 +132,15 @@ class RootPackageLoader extends ArrayLoader $realPackage->setMinimumStability(VersionParser::normalizeStability($config['minimum-stability'])); } - $aliases = array(); - $stabilityFlags = array(); - $references = array(); - foreach (array('require', 'require-dev') as $linkType) { + $aliases = []; + $stabilityFlags = []; + $references = []; + foreach (['require', 'require-dev'] as $linkType) { if (isset($config[$linkType])) { $linkInfo = BasePackage::$supportedLinkTypes[$linkType]; $method = 'get'.ucfirst($linkInfo['method']); - $links = array(); - foreach ($realPackage->$method() as $link) { + $links = []; + foreach ($realPackage->{$method}() as $link) { $links[$link->getTarget()] = $link->getConstraint()->getPrettyString(); } $aliases = $this->extractAliases($links, $aliases); @@ -196,12 +195,12 @@ class RootPackageLoader extends ArrayLoader { foreach ($requires as $reqName => $reqVersion) { if (Preg::isMatch('{^([^,\s#]+)(?:#[^ ]+)? +as +([^,\s]+)$}', $reqVersion, $match)) { - $aliases[] = array( + $aliases[] = [ 'package' => strtolower($reqName), 'version' => $this->versionParser->normalize($match[1], $reqVersion), 'alias' => $match[2], 'alias_normalized' => $this->versionParser->normalize($match[2], $reqVersion), - ); + ]; } elseif (strpos($reqVersion, ' as ') !== false) { throw new \UnexpectedValueException('Invalid alias definition in "'.$reqName.'": "'.$reqVersion.'". Aliases should be in the form "exact-version as other-exact-version".'); } @@ -214,7 +213,6 @@ class RootPackageLoader extends ArrayLoader * @internal * * @param array $requires - * @param string $minimumStability * @param array $stabilityFlags * * @return array @@ -228,7 +226,7 @@ class RootPackageLoader extends ArrayLoader /** @var int $minimumStability */ $minimumStability = $stabilities[$minimumStability]; foreach ($requires as $reqName => $reqVersion) { - $constraints = array(); + $constraints = []; // extract all sub-constraints in case it is an OR/AND multi-constraint $orSplit = Preg::split('{\s*\|\|?\s*}', trim($reqVersion)); diff --git a/src/Composer/Package/Loader/ValidatingArrayLoader.php b/src/Composer/Package/Loader/ValidatingArrayLoader.php index 7e4318b85..020cd5b1b 100644 --- a/src/Composer/Package/Loader/ValidatingArrayLoader.php +++ b/src/Composer/Package/Loader/ValidatingArrayLoader.php @@ -43,9 +43,8 @@ class ValidatingArrayLoader implements LoaderInterface /** * @param true $strictName - * @param int $flags */ - public function __construct(LoaderInterface $loader, bool $strictName = true, VersionParser $parser = null, int $flags = 0) + public function __construct(LoaderInterface $loader, bool $strictName = true, ?VersionParser $parser = null, int $flags = 0) { $this->loader = $loader; $this->versionParser = $parser ?: new VersionParser(); @@ -61,8 +60,8 @@ class ValidatingArrayLoader implements LoaderInterface */ public function load(array $config, string $class = 'Composer\Package\CompletePackage'): BasePackage { - $this->errors = array(); - $this->warnings = array(); + $this->errors = []; + $this->warnings = []; $this->config = $config; $this->validateString('name', true); @@ -168,7 +167,7 @@ class ValidatingArrayLoader implements LoaderInterface unset($this->config['authors'][$key]); continue; } - foreach (array('homepage', 'email', 'name', 'role') as $authorData) { + foreach (['homepage', 'email', 'name', 'role'] as $authorData) { if (isset($author[$authorData]) && !is_string($author[$authorData])) { $this->errors[] = 'authors.'.$key.'.'.$authorData.' : invalid value, must be a string'; unset($this->config['authors'][$key][$authorData]); @@ -192,7 +191,7 @@ class ValidatingArrayLoader implements LoaderInterface } if ($this->validateArray('support') && !empty($this->config['support'])) { - foreach (array('issues', 'forum', 'wiki', 'source', 'email', 'irc', 'docs', 'rss', 'chat') as $key) { + foreach (['issues', 'forum', 'wiki', 'source', 'email', 'irc', 'docs', 'rss', 'chat'] as $key) { if (isset($this->config['support'][$key]) && !is_string($this->config['support'][$key])) { $this->errors[] = 'support.'.$key.' : invalid value, must be a string'; unset($this->config['support'][$key]); @@ -204,12 +203,12 @@ class ValidatingArrayLoader implements LoaderInterface unset($this->config['support']['email']); } - if (isset($this->config['support']['irc']) && !$this->filterUrl($this->config['support']['irc'], array('irc', 'ircs'))) { + if (isset($this->config['support']['irc']) && !$this->filterUrl($this->config['support']['irc'], ['irc', 'ircs'])) { $this->warnings[] = 'support.irc : invalid value ('.$this->config['support']['irc'].'), must be a irc:/// or ircs:// URL'; unset($this->config['support']['irc']); } - foreach (array('issues', 'forum', 'wiki', 'source', 'docs', 'chat') as $key) { + foreach (['issues', 'forum', 'wiki', 'source', 'docs', 'chat'] as $key) { if (isset($this->config['support'][$key]) && !$this->filterUrl($this->config['support'][$key])) { $this->warnings[] = 'support.'.$key.' : invalid value ('.$this->config['support'][$key].'), must be an http/https URL'; unset($this->config['support'][$key]); @@ -227,7 +226,7 @@ class ValidatingArrayLoader implements LoaderInterface unset($this->config['funding'][$key]); continue; } - foreach (array('type', 'url') as $fundingData) { + foreach (['type', 'url'] as $fundingData) { if (isset($fundingOption[$fundingData]) && !is_string($fundingOption[$fundingData])) { $this->errors[] = 'funding.'.$key.'.'.$fundingData.' : invalid value, must be a string'; unset($this->config['funding'][$key][$fundingData]); @@ -319,7 +318,7 @@ class ValidatingArrayLoader implements LoaderInterface } if ($this->validateArray('autoload') && !empty($this->config['autoload'])) { - $types = array('psr-0', 'psr-4', 'classmap', 'files', 'exclude-from-classmap'); + $types = ['psr-0', 'psr-4', 'classmap', 'files', 'exclude-from-classmap']; foreach ($this->config['autoload'] as $type => $typeConfig) { if (!in_array($type, $types)) { $this->errors[] = 'autoload : invalid value ('.$type.'), must be one of '.implode(', ', $types); @@ -342,7 +341,7 @@ class ValidatingArrayLoader implements LoaderInterface unset($this->config['autoload']['psr-4']); } - foreach (array('source', 'dist') as $srcType) { + foreach (['source', 'dist'] as $srcType) { if ($this->validateArray($srcType) && !empty($this->config[$srcType])) { if (!isset($this->config[$srcType]['type'])) { $this->errors[] = $srcType . '.type : must be present'; @@ -424,7 +423,7 @@ class ValidatingArrayLoader implements LoaderInterface } $package = $this->loader->load($this->config, $class); - $this->config = array(); + $this->config = []; return $package; } @@ -445,12 +444,6 @@ class ValidatingArrayLoader implements LoaderInterface return $this->errors; } - /** - * @param string $name - * @param bool $isLink - * - * @return string|null - */ public static function hasPackageNamingError(string $name, bool $isLink = false): ?string { if (PlatformRepository::isPlatformPackage($name)) { @@ -461,7 +454,7 @@ class ValidatingArrayLoader implements LoaderInterface return $name.' is invalid, it should have a vendor name, a forward slash, and a package name. The vendor and package name can be words separated by -, . or _. The complete name should match "^[a-z0-9]([_.-]?[a-z0-9]+)*/[a-z0-9](([_.]?|-{0,2})[a-z0-9]+)*$".'; } - $reservedNames = array('nul', 'con', 'prn', 'aux', 'com1', 'com2', 'com3', 'com4', 'com5', 'com6', 'com7', 'com8', 'com9', 'lpt1', 'lpt2', 'lpt3', 'lpt4', 'lpt5', 'lpt6', 'lpt7', 'lpt8', 'lpt9'); + $reservedNames = ['nul', 'con', 'prn', 'aux', 'com1', 'com2', 'com3', 'com4', 'com5', 'com6', 'com7', 'com8', 'com9', 'lpt1', 'lpt2', 'lpt3', 'lpt4', 'lpt5', 'lpt6', 'lpt7', 'lpt8', 'lpt9']; $bits = explode('/', strtolower($name)); if (in_array($bits[0], $reservedNames, true) || in_array($bits[1], $reservedNames, true)) { return $name.' is reserved, package and vendor names can not match any of: '.implode(', ', $reservedNames).'.'; @@ -486,12 +479,6 @@ class ValidatingArrayLoader implements LoaderInterface } /** - * @param string $property - * @param string $regex - * @param bool $mandatory - * - * @return bool - * * @phpstan-param non-empty-string $property * @phpstan-param non-empty-string $regex */ @@ -517,11 +504,6 @@ class ValidatingArrayLoader implements LoaderInterface } /** - * @param string $property - * @param bool $mandatory - * - * @return bool - * * @phpstan-param non-empty-string $property */ private function validateString(string $property, bool $mandatory = false): bool @@ -546,11 +528,6 @@ class ValidatingArrayLoader implements LoaderInterface } /** - * @param string $property - * @param bool $mandatory - * - * @return bool - * * @phpstan-param non-empty-string $property */ private function validateArray(string $property, bool $mandatory = false): bool @@ -575,12 +552,6 @@ class ValidatingArrayLoader implements LoaderInterface } /** - * @param string $property - * @param string|null $regex - * @param bool $mandatory - * - * @return bool - * * @phpstan-param non-empty-string $property * @phpstan-param non-empty-string|null $regex */ @@ -611,11 +582,6 @@ class ValidatingArrayLoader implements LoaderInterface } /** - * @param string $property - * @param bool $mandatory - * - * @return bool - * * @phpstan-param non-empty-string $property */ private function validateUrl(string $property, bool $mandatory = false): bool @@ -637,10 +603,8 @@ class ValidatingArrayLoader implements LoaderInterface /** * @param mixed $value * @param string[] $schemes - * - * @return bool */ - private function filterUrl($value, array $schemes = array('http', 'https')): bool + private function filterUrl($value, array $schemes = ['http', 'https']): bool { if ($value === '') { return true; diff --git a/src/Composer/Package/Locker.php b/src/Composer/Package/Locker.php index b303a0e45..e5c97cce0 100644 --- a/src/Composer/Package/Locker.php +++ b/src/Composer/Package/Locker.php @@ -55,12 +55,11 @@ class Locker /** * Initializes packages locker. * - * @param IOInterface $io * @param JsonFile $lockFile lockfile loader * @param InstallationManager $installationManager installation manager instance * @param string $composerFileContents The contents of the composer file */ - public function __construct(IOInterface $io, JsonFile $lockFile, InstallationManager $installationManager, string $composerFileContents, ProcessExecutor $process = null) + public function __construct(IOInterface $io, JsonFile $lockFile, InstallationManager $installationManager, string $composerFileContents, ?ProcessExecutor $process = null) { $this->lockFile = $lockFile; $this->installationManager = $installationManager; @@ -75,14 +74,12 @@ class Locker * Returns the md5 hash of the sorted content of the composer file. * * @param string $composerFileContents The contents of the composer file. - * - * @return string */ public static function getContentHash(string $composerFileContents): string { $content = JsonFile::parseJson($composerFileContents, 'composer.json'); - $relevantKeys = array( + $relevantKeys = [ 'name', 'version', 'require', @@ -94,9 +91,9 @@ class Locker 'prefer-stable', 'repositories', 'extra', - ); + ]; - $relevantContent = array(); + $relevantContent = []; foreach (array_intersect($relevantKeys, array_keys($content)) as $key) { $relevantContent[$key] = $content[$key]; @@ -112,8 +109,6 @@ class Locker /** * Checks whether locker has been locked (lockfile found). - * - * @return bool */ public function isLocked(): bool { @@ -128,8 +123,6 @@ class Locker /** * Checks whether the lock file is still up to date with the current hash - * - * @return bool */ public function isFresh(): bool { @@ -154,7 +147,6 @@ class Locker * * @param bool $withDevReqs true to retrieve the locked dev packages * @throws \RuntimeException - * @return \Composer\Repository\LockArrayRepository */ public function getLockedRepository(bool $withDevReqs = false): LockArrayRepository { @@ -175,7 +167,7 @@ class Locker } if (isset($lockedPackages[0]['name'])) { - $packageByName = array(); + $packageByName = []; foreach ($lockedPackages as $info) { $package = $this->loader->load($info); $packages->addPackage($package); @@ -207,7 +199,7 @@ class Locker */ public function getDevPackageNames(): array { - $names = array(); + $names = []; $lockData = $this->getLockData(); if (isset($lockData['packages-dev'])) { foreach ($lockData['packages-dev'] as $package) { @@ -227,14 +219,14 @@ class Locker public function getPlatformRequirements(bool $withDevReqs = false): array { $lockData = $this->getLockData(); - $requirements = array(); + $requirements = []; if (!empty($lockData['platform'])) { $requirements = $this->loader->parseLinks( '__root__', '1.0.0', Link::TYPE_REQUIRE, - $lockData['platform'] ?? array() + $lockData['platform'] ?? [] ); } @@ -243,7 +235,7 @@ class Locker '__root__', '1.0.0', Link::TYPE_REQUIRE, - $lockData['platform-dev'] ?? array() + $lockData['platform-dev'] ?? [] ); $requirements = array_merge($requirements, $devRequirements); @@ -252,9 +244,6 @@ class Locker return $requirements; } - /** - * @return string - */ public function getMinimumStability(): string { $lockData = $this->getLockData(); @@ -269,12 +258,9 @@ class Locker { $lockData = $this->getLockData(); - return $lockData['stability-flags'] ?? array(); + return $lockData['stability-flags'] ?? []; } - /** - * @return bool|null - */ public function getPreferStable(): ?bool { $lockData = $this->getLockData(); @@ -284,9 +270,6 @@ class Locker return $lockData['prefer-stable'] ?? null; } - /** - * @return bool|null - */ public function getPreferLowest(): ?bool { $lockData = $this->getLockData(); @@ -303,7 +286,7 @@ class Locker { $lockData = $this->getLockData(); - return $lockData['platform-overrides'] ?? array(); + return $lockData['platform-overrides'] ?? []; } /** @@ -315,7 +298,7 @@ class Locker { $lockData = $this->getLockData(); - return $lockData['aliases'] ?? array(); + return $lockData['aliases'] ?? []; } /** @@ -325,7 +308,7 @@ class Locker { $lockData = $this->getLockData(); - return isset($lockData['plugin-api-version']) ? $lockData['plugin-api-version'] : '1.1.0'; + return $lockData['plugin-api-version'] ?? '1.1.0'; } /** @@ -352,14 +335,10 @@ class Locker * @param array $platformReqs array of package name => constraint for required platform packages * @param array $platformDevReqs array of package name => constraint for dev-required platform packages * @param string[][] $aliases array of aliases - * @param string $minimumStability * @param array $stabilityFlags - * @param bool $preferStable - * @param bool $preferLowest * @param array $platformOverrides * @param bool $write Whether to actually write data to disk, useful in tests and for --dry-run * - * @return bool * * @phpstan-param list $aliases */ @@ -368,17 +347,17 @@ class Locker // keep old default branch names normalized to DEFAULT_BRANCH_ALIAS for BC as that is how Composer 1 outputs the lock file // when loading the lock file the version is anyway ignored in Composer 2, so it has no adverse effect $aliases = array_map(static function ($alias): array { - if (in_array($alias['version'], array('dev-master', 'dev-trunk', 'dev-default'), true)) { + if (in_array($alias['version'], ['dev-master', 'dev-trunk', 'dev-default'], true)) { $alias['version'] = VersionParser::DEFAULT_BRANCH_ALIAS; } return $alias; }, $aliases); - $lock = array( - '_readme' => array('This file locks the dependencies of your project to a known state', + $lock = [ + '_readme' => ['This file locks the dependencies of your project to a known state', 'Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies', - 'This file is @gener'.'ated automatically', ), + 'This file is @gener'.'ated automatically', ], 'content-hash' => $this->contentHash, 'packages' => null, 'packages-dev' => null, @@ -387,7 +366,7 @@ class Locker 'stability-flags' => $stabilityFlags, 'prefer-stable' => $preferStable, 'prefer-lowest' => $preferLowest, - ); + ]; $lock['packages'] = $this->lockPackages($packages); if (null !== $devPackages) { @@ -431,7 +410,7 @@ class Locker */ private function lockPackages(array $packages): array { - $locked = array(); + $locked = []; foreach ($packages as $package) { if ($package instanceof AliasPackage) { @@ -497,7 +476,7 @@ class Locker $sourceType = $package->getSourceType(); $datetime = null; - if ($path && in_array($sourceType, array('git', 'hg'))) { + if ($path && in_array($sourceType, ['git', 'hg'])) { $sourceRef = $package->getSourceReference() ?: $package->getDistReference(); switch ($sourceType) { case 'git': diff --git a/src/Composer/Package/Package.php b/src/Composer/Package/Package.php index e004ca677..dd6bf4986 100644 --- a/src/Composer/Package/Package.php +++ b/src/Composer/Package/Package.php @@ -57,9 +57,9 @@ class Package extends BasePackage /** @var ?\DateTimeInterface */ protected $releaseDate; /** @var mixed[] */ - protected $extra = array(); + protected $extra = []; /** @var string[] */ - protected $binaries = array(); + protected $binaries = []; /** @var bool */ protected $dev; /** @@ -71,33 +71,33 @@ class Package extends BasePackage protected $notificationUrl; /** @var array */ - protected $requires = array(); + protected $requires = []; /** @var array */ - protected $conflicts = array(); + protected $conflicts = []; /** @var array */ - protected $provides = array(); + protected $provides = []; /** @var array */ - protected $replaces = array(); + protected $replaces = []; /** @var array */ - protected $devRequires = array(); + protected $devRequires = []; /** @var array */ - protected $suggests = array(); + protected $suggests = []; /** * @var array * @phpstan-var AutoloadRules */ - protected $autoload = array(); + protected $autoload = []; /** * @var array * @phpstan-var DevAutoloadRules */ - protected $devAutoload = array(); + protected $devAutoload = []; /** @var string[] */ - protected $includePaths = array(); + protected $includePaths = []; /** @var bool */ protected $isDefaultBranch = false; /** @var mixed[] */ - protected $transportOptions = array(); + protected $transportOptions = []; /** * Creates a new in memory package. @@ -125,11 +125,6 @@ class Package extends BasePackage return $this->dev; } - /** - * @param string $type - * - * @return void - */ public function setType(string $type): void { $this->type = $type; @@ -151,9 +146,6 @@ class Package extends BasePackage return $this->stability; } - /** - * @return void - */ public function setTargetDir(?string $targetDir): void { $this->targetDir = $targetDir; @@ -173,8 +165,6 @@ class Package extends BasePackage /** * @param mixed[] $extra - * - * @return void */ public function setExtra(array $extra): void { @@ -191,8 +181,6 @@ class Package extends BasePackage /** * @param string[] $binaries - * - * @return void */ public function setBinaries(array $binaries): void { @@ -209,8 +197,6 @@ class Package extends BasePackage /** * @inheritDoc - * - * @return void */ public function setInstallationSource(?string $type): void { @@ -225,9 +211,6 @@ class Package extends BasePackage return $this->installationSource; } - /** - * @return void - */ public function setSourceType(?string $type): void { $this->sourceType = $type; @@ -241,9 +224,6 @@ class Package extends BasePackage return $this->sourceType; } - /** - * @return void - */ public function setSourceUrl(?string $url): void { $this->sourceUrl = $url; @@ -257,9 +237,6 @@ class Package extends BasePackage return $this->sourceUrl; } - /** - * @return void - */ public function setSourceReference(?string $reference): void { $this->sourceReference = $reference; @@ -273,9 +250,6 @@ class Package extends BasePackage return $this->sourceReference; } - /** - * @return void - */ public function setSourceMirrors(?array $mirrors): void { $this->sourceMirrors = $mirrors; @@ -299,8 +273,6 @@ class Package extends BasePackage /** * @param string $type - * - * @return void */ public function setDistType(?string $type): void { @@ -317,8 +289,6 @@ class Package extends BasePackage /** * @param string $url - * - * @return void */ public function setDistUrl(?string $url): void { @@ -335,8 +305,6 @@ class Package extends BasePackage /** * @param string $reference - * - * @return void */ public function setDistReference(?string $reference): void { @@ -353,8 +321,6 @@ class Package extends BasePackage /** * @param string $sha1checksum - * - * @return void */ public function setDistSha1Checksum(?string $sha1checksum): void { @@ -369,9 +335,6 @@ class Package extends BasePackage return $this->distSha1Checksum; } - /** - * @return void - */ public function setDistMirrors(?array $mirrors): void { $this->distMirrors = $mirrors; @@ -425,9 +388,6 @@ class Package extends BasePackage return $this->prettyVersion; } - /** - * @return void - */ public function setReleaseDate(?\DateTimeInterface $releaseDate): void { $this->releaseDate = $releaseDate; @@ -445,8 +405,6 @@ class Package extends BasePackage * Set the required packages * * @param array $requires A set of package links - * - * @return void */ public function setRequires(array $requires): void { @@ -469,8 +427,6 @@ class Package extends BasePackage * Set the conflicting packages * * @param array $conflicts A set of package links - * - * @return void */ public function setConflicts(array $conflicts): void { @@ -494,8 +450,6 @@ class Package extends BasePackage * Set the provided virtual packages * * @param array $provides A set of package links - * - * @return void */ public function setProvides(array $provides): void { @@ -519,8 +473,6 @@ class Package extends BasePackage * Set the packages this one replaces * * @param array $replaces A set of package links - * - * @return void */ public function setReplaces(array $replaces): void { @@ -544,8 +496,6 @@ class Package extends BasePackage * Set the recommended packages * * @param array $devRequires A set of package links - * - * @return void */ public function setDevRequires(array $devRequires): void { @@ -568,8 +518,6 @@ class Package extends BasePackage * Set the suggested packages * * @param array $suggests A set of package names/comments - * - * @return void */ public function setSuggests(array $suggests): void { @@ -589,7 +537,6 @@ class Package extends BasePackage * * @param array $autoload Mapping of autoloading rules * - * @return void * * @phpstan-param AutoloadRules $autoload */ @@ -611,7 +558,6 @@ class Package extends BasePackage * * @param array $devAutoload Mapping of dev autoloading rules * - * @return void * * @phpstan-param DevAutoloadRules $devAutoload */ @@ -632,8 +578,6 @@ class Package extends BasePackage * Sets the list of paths added to PHP's include path. * * @param string[] $includePaths List of directories. - * - * @return void */ public function setIncludePaths(array $includePaths): void { @@ -650,10 +594,6 @@ class Package extends BasePackage /** * Sets the notification URL - * - * @param string $notificationUrl - * - * @return void */ public function setNotificationUrl(string $notificationUrl): void { @@ -668,11 +608,6 @@ class Package extends BasePackage return $this->notificationUrl; } - /** - * @param bool $defaultBranch - * - * @return void - */ public function setIsDefaultBranch(bool $defaultBranch): void { $this->isDefaultBranch = $defaultBranch; @@ -712,8 +647,6 @@ class Package extends BasePackage * * @param string $version The package's normalized version * @param string $prettyVersion The package's non-normalized version - * - * @return void */ public function replaceVersion(string $version, string $prettyVersion): void { @@ -725,11 +658,7 @@ class Package extends BasePackage } /** - * @param string|null $url * @param mixed[]|null $mirrors - * @param string|null $ref - * @param string|null $type - * @param string $urlType * * @return string[] * @@ -738,14 +667,14 @@ class Package extends BasePackage protected function getUrls(?string $url, ?array $mirrors, ?string $ref, ?string $type, string $urlType): array { if (!$url) { - return array(); + return []; } if ($urlType === 'dist' && false !== strpos($url, '%')) { $url = ComposerMirror::processUrl($url, $this->name, $this->version, $ref, $type, $this->prettyVersion); } - $urls = array($url); + $urls = [$url]; if ($mirrors) { foreach ($mirrors as $mirror) { if ($urlType === 'dist') { @@ -769,13 +698,12 @@ class Package extends BasePackage /** * @param array $links - * @param string $source * @return array */ private function convertLinksToMap(array $links, string $source): array { trigger_error('Package::'.$source.' must be called with a map of lowercased package name => Link object, got a indexed array, this is deprecated and you should fix your usage.'); - $newLinks = array(); + $newLinks = []; foreach ($links as $link) { $newLinks[$link->getTarget()] = $link; } diff --git a/src/Composer/Package/PackageInterface.php b/src/Composer/Package/PackageInterface.php index e31abef29..c6196dafe 100644 --- a/src/Composer/Package/PackageInterface.php +++ b/src/Composer/Package/PackageInterface.php @@ -58,10 +58,6 @@ interface PackageInterface /** * Allows the solver to set an id for this package to refer to it. - * - * @param int $id - * - * @return void */ public function setId(int $id): void; @@ -74,8 +70,6 @@ interface PackageInterface /** * Returns whether the package is a development virtual package or a concrete one - * - * @return bool */ public function isDev(): bool; @@ -105,8 +99,6 @@ interface PackageInterface * * @param ?string $type source/dist * @phpstan-param 'source'|'dist'|null $type - * - * @return void */ public function setInstallationSource(?string $type): void; @@ -155,7 +147,6 @@ interface PackageInterface /** * @param null|array $mirrors - * @return void */ public function setSourceMirrors(?array $mirrors): void; @@ -203,7 +194,6 @@ interface PackageInterface /** * @param null|array $mirrors - * @return void */ public function setDistMirrors(?array $mirrors): void; @@ -244,7 +234,6 @@ interface PackageInterface /** * Returns the stability of this package: one of (dev, alpha, beta, RC, stable) * - * @return string * * @phpstan-return 'stable'|'RC'|'beta'|'alpha'|'dev' */ @@ -335,10 +324,6 @@ interface PackageInterface /** * Stores a reference to the repository that owns the package - * - * @param RepositoryInterface $repository - * - * @return void */ public function setRepository(RepositoryInterface $repository): void; @@ -358,8 +343,6 @@ interface PackageInterface /** * Returns package unique name, constructed from name and version. - * - * @return string */ public function getUniqueName(): string; @@ -372,21 +355,14 @@ interface PackageInterface /** * Converts the package into a readable and unique string - * - * @return string */ public function __toString(): string; /** * Converts the package into a pretty readable string - * - * @return string */ public function getPrettyString(): string; - /** - * @return bool - */ public function isDefaultBranch(): bool; /** @@ -400,35 +376,19 @@ interface PackageInterface * Configures the list of options to download package dist files * * @param mixed[] $options - * - * @return void */ public function setTransportOptions(array $options): void; - /** - * @return void - */ public function setSourceReference(?string $reference): void; - /** - * @return void - */ public function setDistUrl(?string $url): void; - /** - * @return void - */ public function setDistType(?string $type): void; - /** - * @return void - */ public function setDistReference(?string $reference): void; /** * Set dist and source references and update dist URL for ones that contain a reference - * - * @return void */ public function setSourceDistReferences(string $reference): void; } diff --git a/src/Composer/Package/RootAliasPackage.php b/src/Composer/Package/RootAliasPackage.php index 07b1f38e0..57768d574 100644 --- a/src/Composer/Package/RootAliasPackage.php +++ b/src/Composer/Package/RootAliasPackage.php @@ -162,7 +162,7 @@ class RootAliasPackage extends CompleteAliasPackage implements RootPackageInterf /** * @inheritDoc */ - public function setMinimumStability($minimumStability): void + public function setMinimumStability(string $minimumStability): void { $this->aliasOf->setMinimumStability($minimumStability); } @@ -170,7 +170,7 @@ class RootAliasPackage extends CompleteAliasPackage implements RootPackageInterf /** * @inheritDoc */ - public function setPreferStable($preferStable): void + public function setPreferStable(bool $preferStable): void { $this->aliasOf->setPreferStable($preferStable); } diff --git a/src/Composer/Package/RootPackage.php b/src/Composer/Package/RootPackage.php index bf227eb44..7f2d65676 100644 --- a/src/Composer/Package/RootPackage.php +++ b/src/Composer/Package/RootPackage.php @@ -26,13 +26,13 @@ class RootPackage extends CompletePackage implements RootPackageInterface /** @var bool */ protected $preferStable = false; /** @var array Map of package name to stability constant */ - protected $stabilityFlags = array(); + protected $stabilityFlags = []; /** @var mixed[] */ - protected $config = array(); + protected $config = []; /** @var array Map of package name to reference/commit hash */ - protected $references = array(); + protected $references = []; /** @var array */ - protected $aliases = array(); + protected $aliases = []; /** * @inheritDoc diff --git a/src/Composer/Package/RootPackageInterface.php b/src/Composer/Package/RootPackageInterface.php index ef1ab7549..579a95dc2 100644 --- a/src/Composer/Package/RootPackageInterface.php +++ b/src/Composer/Package/RootPackageInterface.php @@ -33,8 +33,6 @@ interface RootPackageInterface extends CompletePackageInterface /** * Returns the minimum stability of the package - * - * @return string */ public function getMinimumStability(): string; @@ -58,8 +56,6 @@ interface RootPackageInterface extends CompletePackageInterface /** * Returns true if the root package prefers picking stable packages over unstable ones - * - * @return bool */ public function getPreferStable(): bool; @@ -74,8 +70,6 @@ interface RootPackageInterface extends CompletePackageInterface * Set the required packages * * @param Link[] $requires A set of package links - * - * @return void */ public function setRequires(array $requires): void; @@ -83,8 +77,6 @@ interface RootPackageInterface extends CompletePackageInterface * Set the recommended packages * * @param Link[] $devRequires A set of package links - * - * @return void */ public function setDevRequires(array $devRequires): void; @@ -92,8 +84,6 @@ interface RootPackageInterface extends CompletePackageInterface * Set the conflicting packages * * @param Link[] $conflicts A set of package links - * - * @return void */ public function setConflicts(array $conflicts): void; @@ -101,8 +91,6 @@ interface RootPackageInterface extends CompletePackageInterface * Set the provided virtual packages * * @param Link[] $provides A set of package links - * - * @return void */ public function setProvides(array $provides): void; @@ -110,8 +98,6 @@ interface RootPackageInterface extends CompletePackageInterface * Set the packages this one replaces * * @param Link[] $replaces A set of package links - * - * @return void */ public function setReplaces(array $replaces): void; @@ -120,8 +106,6 @@ interface RootPackageInterface extends CompletePackageInterface * * @param array $autoload Mapping of autoloading rules * @phpstan-param AutoloadRules $autoload - * - * @return void */ public function setAutoload(array $autoload): void; @@ -130,8 +114,6 @@ interface RootPackageInterface extends CompletePackageInterface * * @param array $devAutoload Mapping of dev autoloading rules * @phpstan-param DevAutoloadRules $devAutoload - * - * @return void */ public function setDevAutoload(array $devAutoload): void; @@ -139,26 +121,16 @@ interface RootPackageInterface extends CompletePackageInterface * Set the stabilityFlags * * @param array $stabilityFlags - * - * @return void */ public function setStabilityFlags(array $stabilityFlags): void; /** * Set the minimumStability - * - * @param string $minimumStability - * - * @return void */ public function setMinimumStability(string $minimumStability): void; /** * Set the preferStable - * - * @param bool $preferStable - * - * @return void */ public function setPreferStable(bool $preferStable): void; @@ -166,8 +138,6 @@ interface RootPackageInterface extends CompletePackageInterface * Set the config * * @param mixed[] $config - * - * @return void */ public function setConfig(array $config): void; @@ -175,8 +145,6 @@ interface RootPackageInterface extends CompletePackageInterface * Set the references * * @param array $references - * - * @return void */ public function setReferences(array $references): void; @@ -184,8 +152,6 @@ interface RootPackageInterface extends CompletePackageInterface * Set the aliases * * @param array $aliases - * - * @return void */ public function setAliases(array $aliases): void; @@ -193,15 +159,11 @@ interface RootPackageInterface extends CompletePackageInterface * Set the suggested packages * * @param array $suggests A set of package names/comments - * - * @return void */ public function setSuggests(array $suggests): void; /** * @param mixed[] $extra - * - * @return void */ public function setExtra(array $extra): void; } diff --git a/src/Composer/Package/Version/VersionBumper.php b/src/Composer/Package/Version/VersionBumper.php index c272d4da0..76c92d4f5 100644 --- a/src/Composer/Package/Version/VersionBumper.php +++ b/src/Composer/Package/Version/VersionBumper.php @@ -12,18 +12,10 @@ namespace Composer\Package\Version; -use Composer\Filter\PlatformRequirementFilter\IgnoreAllPlatformRequirementFilter; -use Composer\Filter\PlatformRequirementFilter\PlatformRequirementFilterFactory; -use Composer\Filter\PlatformRequirementFilter\PlatformRequirementFilterInterface; -use Composer\Package\BasePackage; -use Composer\Package\AliasPackage; use Composer\Package\PackageInterface; -use Composer\Composer; use Composer\Package\Loader\ArrayLoader; use Composer\Package\Dumper\ArrayDumper; use Composer\Pcre\Preg; -use Composer\Repository\RepositorySet; -use Composer\Repository\PlatformRepository; use Composer\Semver\Constraint\Constraint; use Composer\Semver\Constraint\ConstraintInterface; use Composer\Semver\Intervals; diff --git a/src/Composer/Package/Version/VersionGuesser.php b/src/Composer/Package/Version/VersionGuesser.php index 6532f14a5..1ccc32b29 100644 --- a/src/Composer/Package/Version/VersionGuesser.php +++ b/src/Composer/Package/Version/VersionGuesser.php @@ -50,11 +50,6 @@ class VersionGuesser */ private $versionParser; - /** - * @param Config $config - * @param ProcessExecutor $process - * @param SemverVersionParser $versionParser - */ public function __construct(Config $config, ProcessExecutor $process, SemverVersionParser $versionParser) { $this->config = $config; @@ -66,7 +61,6 @@ class VersionGuesser * @param array $packageConfig * @param string $path Path to guess into * - * @return array|null * @phpstan-return Version|null */ public function guessVersion(array $packageConfig, string $path): ?array @@ -105,11 +99,8 @@ class VersionGuesser } /** - * @param array $versionData - * * @phpstan-param Version $versionData * - * @return array * @phpstan-return Version */ private function postprocess(array $versionData): array @@ -131,7 +122,6 @@ class VersionGuesser /** * @param array $packageConfig - * @param string $path * * @return array{version: string|null, commit: string|null, pretty_version: string|null, feature_version?: string|null, feature_pretty_version?: string|null} */ @@ -147,7 +137,7 @@ class VersionGuesser // try to fetch current version from git branch if (0 === $this->process->execute(['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], $output, $path)) { - $branches = array(); + $branches = []; $isFeatureBranch = false; // find current branch and collect all branch names @@ -209,15 +199,13 @@ class VersionGuesser } if ($featureVersion) { - return array('version' => $version, 'commit' => $commit, 'pretty_version' => $prettyVersion, 'feature_version' => $featureVersion, 'feature_pretty_version' => $featurePrettyVersion); + return ['version' => $version, 'commit' => $commit, 'pretty_version' => $prettyVersion, 'feature_version' => $featureVersion, 'feature_pretty_version' => $featurePrettyVersion]; } - return array('version' => $version, 'commit' => $commit, 'pretty_version' => $prettyVersion); + return ['version' => $version, 'commit' => $commit, 'pretty_version' => $prettyVersion]; } /** - * @param string $path - * * @return array{version: string, pretty_version: string}|null */ private function versionFromGitTags(string $path): ?array @@ -227,7 +215,7 @@ class VersionGuesser try { $version = $this->versionParser->normalize(trim($output)); - return array('version' => $version, 'pretty_version' => trim($output)); + return ['version' => $version, 'pretty_version' => trim($output)]; } catch (\Exception $e) { } } @@ -237,7 +225,6 @@ class VersionGuesser /** * @param array $packageConfig - * @param string $path * * @return array{version: string|null, commit: ''|null, pretty_version: string|null, feature_version?: string|null, feature_pretty_version?: string|null}|null */ @@ -250,16 +237,16 @@ class VersionGuesser $isFeatureBranch = 0 === strpos($version, 'dev-'); if (VersionParser::DEFAULT_BRANCH_ALIAS === $version) { - return array('version' => $version, 'commit' => null, 'pretty_version' => 'dev-'.$branch); + return ['version' => $version, 'commit' => null, 'pretty_version' => 'dev-'.$branch]; } if (!$isFeatureBranch) { - return array('version' => $version, 'commit' => null, 'pretty_version' => $version); + return ['version' => $version, 'commit' => null, 'pretty_version' => $version]; } // re-use the HgDriver to fetch branches (this properly includes bookmarks) $io = new NullIO(); - $driver = new HgDriver(array('url' => $path), $io, $this->config, new HttpDownloader($io, $this->config), $this->process); + $driver = new HgDriver(['url' => $path], $io, $this->config, new HttpDownloader($io, $this->config), $this->process); $branches = array_map('strval', array_keys($driver->getBranches())); // try to find the best (nearest) version branch to assume this feature's version @@ -276,10 +263,7 @@ class VersionGuesser /** * @param array $packageConfig - * @param string|null $version * @param string[] $branches - * @param string $scmCmdline - * @param string $path * * @phpstan-param non-empty-string $scmCmdline * @@ -299,7 +283,7 @@ class VersionGuesser // return directly, if branch is configured to be non-feature branch if (!$this->isFeatureBranch($packageConfig, $branch)) { - return array('version' => $version, 'pretty_version' => $prettyVersion); + return ['version' => $version, 'pretty_version' => $prettyVersion]; } // sort local branches first then remote ones @@ -327,7 +311,7 @@ class VersionGuesser continue; } - $cmdLine = str_replace(array('%candidate%', '%branch%'), array($candidate, $branch), $scmCmdline); + $cmdLine = str_replace(['%candidate%', '%branch%'], [$candidate, $branch], $scmCmdline); $promises[] = $this->process->executeAsync($cmdLine, $path)->then(function (Process $process) use (&$length, &$version, &$prettyVersion, $candidateVersion, &$promises): void { if (!$process->isSuccessful()) { return; @@ -355,14 +339,11 @@ class VersionGuesser } } - return array('version' => $version, 'pretty_version' => $prettyVersion); + return ['version' => $version, 'pretty_version' => $prettyVersion]; } /** * @param array $packageConfig - * @param string|null $branchName - * - * @return bool */ private function isFeatureBranch(array $packageConfig, ?string $branchName): bool { @@ -375,8 +356,6 @@ class VersionGuesser } /** - * @param string $path - * * @return array{version: string|null, commit: '', pretty_version: string|null} */ private function guessFossilVersion(string $path): array @@ -400,12 +379,11 @@ class VersionGuesser } } - return array('version' => $version, 'commit' => '', 'pretty_version' => $prettyVersion); + return ['version' => $version, 'commit' => '', 'pretty_version' => $prettyVersion]; } /** * @param array $packageConfig - * @param string $path * * @return array{version: string, commit: '', pretty_version: string}|null */ @@ -427,7 +405,7 @@ class VersionGuesser $version = $this->versionParser->normalizeBranch($matches[3]); $prettyVersion = 'dev-' . $matches[3]; - return array('version' => $version, 'commit' => '', 'pretty_version' => $prettyVersion); + return ['version' => $version, 'commit' => '', 'pretty_version' => $prettyVersion]; } $prettyVersion = trim($matches[1]); @@ -437,7 +415,7 @@ class VersionGuesser $version = $this->versionParser->normalize($prettyVersion); } - return array('version' => $version, 'commit' => '', 'pretty_version' => $prettyVersion); + return ['version' => $version, 'commit' => '', 'pretty_version' => $prettyVersion]; } } diff --git a/src/Composer/Package/Version/VersionParser.php b/src/Composer/Package/Version/VersionParser.php index ca0a11773..b2859c134 100644 --- a/src/Composer/Package/Version/VersionParser.php +++ b/src/Composer/Package/Version/VersionParser.php @@ -23,7 +23,7 @@ class VersionParser extends SemverVersionParser public const DEFAULT_BRANCH_ALIAS = '9999999-dev'; /** @var array Constraint parsing cache */ - private static $constraints = array(); + private static $constraints = []; /** * @inheritDoc @@ -50,7 +50,7 @@ class VersionParser extends SemverVersionParser public function parseNameVersionPairs(array $pairs): array { $pairs = array_values($pairs); - $result = array(); + $result = []; for ($i = 0, $count = count($pairs); $i < $count; $i++) { $pair = Preg::replace('{^([^=: ]+)[=: ](.*)$}', '$1 $2', trim($pairs[$i])); @@ -60,32 +60,26 @@ class VersionParser extends SemverVersionParser } if (strpos($pair, ' ')) { - list($name, $version) = explode(' ', $pair, 2); - $result[] = array('name' => $name, 'version' => $version); + [$name, $version] = explode(' ', $pair, 2); + $result[] = ['name' => $name, 'version' => $version]; } else { - $result[] = array('name' => $pair); + $result[] = ['name' => $pair]; } } return $result; } - /** - * @param string $normalizedFrom - * @param string $normalizedTo - * - * @return bool - */ public static function isUpgrade(string $normalizedFrom, string $normalizedTo): bool { if ($normalizedFrom === $normalizedTo) { return true; } - if (in_array($normalizedFrom, array('dev-master', 'dev-trunk', 'dev-default'), true)) { + if (in_array($normalizedFrom, ['dev-master', 'dev-trunk', 'dev-default'], true)) { $normalizedFrom = VersionParser::DEFAULT_BRANCH_ALIAS; } - if (in_array($normalizedTo, array('dev-master', 'dev-trunk', 'dev-default'), true)) { + if (in_array($normalizedTo, ['dev-master', 'dev-trunk', 'dev-default'], true)) { $normalizedTo = VersionParser::DEFAULT_BRANCH_ALIAS; } @@ -93,7 +87,7 @@ class VersionParser extends SemverVersionParser return true; } - $sorted = Semver::sort(array($normalizedTo, $normalizedFrom)); + $sorted = Semver::sort([$normalizedTo, $normalizedFrom]); return $sorted[0] === $normalizedFrom; } diff --git a/src/Composer/Package/Version/VersionSelector.php b/src/Composer/Package/Version/VersionSelector.php index 6832695c7..9cf4816f3 100644 --- a/src/Composer/Package/Version/VersionSelector.php +++ b/src/Composer/Package/Version/VersionSelector.php @@ -40,7 +40,7 @@ class VersionSelector private $repositorySet; /** @var array */ - private $platformConstraints = array(); + private $platformConstraints = []; /** @var VersionParser */ private $parser; @@ -48,7 +48,7 @@ class VersionSelector /** * @param PlatformRepository $platformRepo If passed in, the versions found will be filtered against their requirements to eliminate any not matching the current platform packages */ - public function __construct(RepositorySet $repositorySet, PlatformRepository $platformRepo = null) + public function __construct(RepositorySet $repositorySet, ?PlatformRepository $platformRepo = null) { $this->repositorySet = $repositorySet; if ($platformRepo) { @@ -62,15 +62,12 @@ class VersionSelector * Given a package name and optional version, returns the latest PackageInterface * that matches. * - * @param string $packageName * @param string $targetPackageVersion - * @param string $preferredStability * @param PlatformRequirementFilterInterface|bool|string[] $platformRequirementFilter - * @param int $repoSetFlags * @param IOInterface|null $io If passed, warnings will be output there in case versions cannot be selected due to platform requirements * @return PackageInterface|false */ - public function findBestCandidate(string $packageName, string $targetPackageVersion = null, string $preferredStability = 'stable', $platformRequirementFilter = null, int $repoSetFlags = 0, ?IOInterface $io = null) + public function findBestCandidate(string $packageName, ?string $targetPackageVersion = null, string $preferredStability = 'stable', $platformRequirementFilter = null, int $repoSetFlags = 0, ?IOInterface $io = null) { if (!isset(BasePackage::$stabilities[$preferredStability])) { // If you get this, maybe you are still relying on the Composer 1.x signature where the 3rd arg was the php version @@ -88,7 +85,7 @@ class VersionSelector $candidates = $this->repositorySet->findPackages(strtolower($packageName), $constraint, $repoSetFlags); $minPriority = BasePackage::$stabilities[$preferredStability]; - usort($candidates, function (PackageInterface $a, PackageInterface $b) use ($minPriority) { + usort($candidates, static function (PackageInterface $a, PackageInterface $b) use ($minPriority) { $aPriority = $a->getStabilityPriority(); $bPriority = $b->getStabilityPriority(); @@ -185,9 +182,6 @@ class VersionSelector * * 2.0-beta.1 -> ^2.0@beta * * dev-master -> ^2.1@dev (dev version with alias) * * dev-master -> dev-master (dev versions are untouched) - * - * @param PackageInterface $package - * @return string */ public function findRecommendedRequireVersion(PackageInterface $package): string { @@ -221,13 +215,6 @@ class VersionSelector return $package->getPrettyVersion(); } - /** - * @param string $version - * @param string $prettyVersion - * @param string $stability - * - * @return string - */ private function transformVersion(string $version, string $prettyVersion, string $stability): string { // attempt to transform 2.1.1 to 2.1 @@ -256,9 +243,6 @@ class VersionSelector return '^' . $version; } - /** - * @return VersionParser - */ private function getParser(): VersionParser { if ($this->parser === null) { diff --git a/src/Composer/PartialComposer.php b/src/Composer/PartialComposer.php index b5c859ae9..c6f9c7523 100644 --- a/src/Composer/PartialComposer.php +++ b/src/Composer/PartialComposer.php @@ -53,97 +53,61 @@ class PartialComposer */ private $eventDispatcher; - /** - * @return void - */ public function setPackage(RootPackageInterface $package): void { $this->package = $package; } - /** - * @return RootPackageInterface - */ public function getPackage(): RootPackageInterface { return $this->package; } - /** - * @return void - */ public function setConfig(Config $config): void { $this->config = $config; } - /** - * @return Config - */ public function getConfig(): Config { return $this->config; } - /** - * @return void - */ public function setLoop(Loop $loop): void { $this->loop = $loop; } - /** - * @return Loop - */ public function getLoop(): Loop { return $this->loop; } - /** - * @return void - */ public function setRepositoryManager(RepositoryManager $manager): void { $this->repositoryManager = $manager; } - /** - * @return RepositoryManager - */ public function getRepositoryManager(): RepositoryManager { return $this->repositoryManager; } - /** - * @return void - */ public function setInstallationManager(InstallationManager $manager): void { $this->installationManager = $manager; } - /** - * @return InstallationManager - */ public function getInstallationManager(): InstallationManager { return $this->installationManager; } - /** - * @return void - */ public function setEventDispatcher(EventDispatcher $eventDispatcher): void { $this->eventDispatcher = $eventDispatcher; } - /** - * @return EventDispatcher - */ public function getEventDispatcher(): EventDispatcher { return $this->eventDispatcher; diff --git a/src/Composer/Platform/HhvmDetector.php b/src/Composer/Platform/HhvmDetector.php index 29e9dac2f..46886c353 100644 --- a/src/Composer/Platform/HhvmDetector.php +++ b/src/Composer/Platform/HhvmDetector.php @@ -25,23 +25,17 @@ class HhvmDetector /** @var ?ProcessExecutor */ private $processExecutor; - public function __construct(ExecutableFinder $executableFinder = null, ProcessExecutor $processExecutor = null) + public function __construct(?ExecutableFinder $executableFinder = null, ?ProcessExecutor $processExecutor = null) { $this->executableFinder = $executableFinder; $this->processExecutor = $processExecutor; } - /** - * @return void - */ public function reset(): void { self::$hhvmVersion = null; } - /** - * @return string|null - */ public function getVersion(): ?string { if (null !== self::$hhvmVersion) { diff --git a/src/Composer/Platform/Runtime.php b/src/Composer/Platform/Runtime.php index c59e9d060..b05af085c 100644 --- a/src/Composer/Platform/Runtime.php +++ b/src/Composer/Platform/Runtime.php @@ -15,10 +15,7 @@ namespace Composer\Platform; class Runtime { /** - * @param string $constant * @param class-string $class - * - * @return bool */ public function hasConstant(string $constant, ?string $class = null): bool { @@ -26,7 +23,6 @@ class Runtime } /** - * @param string $constant * @param class-string $class * * @return mixed @@ -36,31 +32,23 @@ class Runtime return constant(ltrim($class.'::'.$constant, ':')); } - /** - * @param string $fn - * - * @return bool - */ public function hasFunction(string $fn): bool { return function_exists($fn); } /** - * @param callable $callable * @param mixed[] $arguments * * @return mixed */ - public function invoke(callable $callable, array $arguments = array()) + public function invoke(callable $callable, array $arguments = []) { - return call_user_func_array($callable, $arguments); + return $callable(...$arguments); } /** * @param class-string $class - * - * @return bool */ public function hasClass(string $class): bool { @@ -71,10 +59,9 @@ class Runtime * @param class-string $class * @param mixed[] $arguments * - * @return object * @throws \ReflectionException */ - public function construct(string $class, array $arguments = array()): object + public function construct(string $class, array $arguments = []): object { if (empty($arguments)) { return new $class; @@ -91,11 +78,6 @@ class Runtime return get_loaded_extensions(); } - /** - * @param string $extension - * - * @return string - */ public function getExtensionVersion(string $extension): string { $version = phpversion($extension); @@ -107,9 +89,6 @@ class Runtime } /** - * @param string $extension - * - * @return string * @throws \ReflectionException */ public function getExtensionInfo(string $extension): string diff --git a/src/Composer/Platform/Version.php b/src/Composer/Platform/Version.php index 053ca716b..1429ffc69 100644 --- a/src/Composer/Platform/Version.php +++ b/src/Composer/Platform/Version.php @@ -20,9 +20,7 @@ use Composer\Pcre\Preg; class Version { /** - * @param string $opensslVersion * @param bool $isFips Set by the method - * @return string|null */ public static function parseOpenssl(string $opensslVersion, ?bool &$isFips): ?string { @@ -39,15 +37,11 @@ class Version } $isFips = strpos($matches['suffix'], 'fips') !== false; - $suffix = strtr('-'.ltrim($matches['suffix'], '-'), array('-fips' => '', '-pre' => '-alpha')); + $suffix = strtr('-'.ltrim($matches['suffix'], '-'), ['-fips' => '', '-pre' => '-alpha']); return rtrim($matches['version'].$patch.$suffix, '-'); } - /** - * @param string $libjpegVersion - * @return string|null - */ public static function parseLibjpeg(string $libjpegVersion): ?string { if (!Preg::isMatch('/^(?\d+)(?[a-z]*)$/', $libjpegVersion, $matches)) { @@ -57,10 +51,6 @@ class Version return $matches['major'].'.'.self::convertAlphaVersionToIntVersion($matches['minor']); } - /** - * @param string $zoneinfoVersion - * @return string|null - */ public static function parseZoneinfoVersion(string $zoneinfoVersion): ?string { if (!Preg::isMatch('/^(?\d{4})(?[a-z]*)$/', $zoneinfoVersion, $matches)) { @@ -72,39 +62,22 @@ class Version /** * "" => 0, "a" => 1, "zg" => 33 - * - * @param string $alpha - * @return int */ private static function convertAlphaVersionToIntVersion(string $alpha): int { return strlen($alpha) * (-ord('a') + 1) + array_sum(array_map('ord', str_split($alpha))); } - /** - * @param int $versionId - * @return string - */ public static function convertLibxpmVersionId(int $versionId): string { return self::convertVersionId($versionId, 100); } - /** - * @param int $versionId - * @return string - */ public static function convertOpenldapVersionId(int $versionId): string { return self::convertVersionId($versionId, 100); } - /** - * @param int $versionId - * @param int $base - * - * @return string - */ private static function convertVersionId(int $versionId, int $base): string { return sprintf( diff --git a/src/Composer/Plugin/CommandEvent.php b/src/Composer/Plugin/CommandEvent.php index d861671c0..ece2cf5e3 100644 --- a/src/Composer/Plugin/CommandEvent.php +++ b/src/Composer/Plugin/CommandEvent.php @@ -43,12 +43,10 @@ class CommandEvent extends Event * * @param string $name The event name * @param string $commandName The command name - * @param InputInterface $input - * @param OutputInterface $output * @param mixed[] $args Arguments passed by the user * @param mixed[] $flags Optional flags to pass data not as argument */ - public function __construct(string $name, string $commandName, InputInterface $input, OutputInterface $output, array $args = array(), array $flags = array()) + public function __construct(string $name, string $commandName, InputInterface $input, OutputInterface $output, array $args = [], array $flags = []) { parent::__construct($name, $args, $flags); $this->commandName = $commandName; @@ -58,8 +56,6 @@ class CommandEvent extends Event /** * Returns the command input interface - * - * @return InputInterface */ public function getInput(): InputInterface { @@ -68,8 +64,6 @@ class CommandEvent extends Event /** * Retrieves the command output interface - * - * @return OutputInterface */ public function getOutput(): OutputInterface { @@ -78,8 +72,6 @@ class CommandEvent extends Event /** * Retrieves the name of the command being run - * - * @return string */ public function getCommandName(): string { diff --git a/src/Composer/Plugin/PluginBlockedException.php b/src/Composer/Plugin/PluginBlockedException.php index 04a8db005..a23815eaa 100644 --- a/src/Composer/Plugin/PluginBlockedException.php +++ b/src/Composer/Plugin/PluginBlockedException.php @@ -1,4 +1,4 @@ - */ - protected $plugins = array(); + protected $plugins = []; /** @var array */ - protected $registeredPlugins = array(); + protected $registeredPlugins = []; /** * @var array|null @@ -75,7 +75,7 @@ class PluginManager /** * @param bool|'local'|'global' $disablePlugins Whether plugins should not be loaded, can be set to local or global to only disable local/global plugins */ - public function __construct(IOInterface $io, Composer $composer, PartialComposer $globalComposer = null, $disablePlugins = false) + public function __construct(IOInterface $io, Composer $composer, ?PartialComposer $globalComposer = null, $disablePlugins = false) { $this->io = $io; $this->composer = $composer; @@ -93,8 +93,6 @@ class PluginManager /** * Loads all plugins from currently installed plugin packages - * - * @return void */ public function loadInstalledPlugins(): void { @@ -110,8 +108,6 @@ class PluginManager /** * Deactivate all plugins from currently installed plugin packages - * - * @return void */ public function deactivateInstalledPlugins(): void { @@ -149,11 +145,9 @@ class PluginManager * If it's of type composer-installer it is registered as an installer * instead for BC * - * @param PackageInterface $package * @param bool $failOnMissingClasses By default this silently skips plugins that can not be found, but if set to true it fails with an exception * @param bool $isGlobalPlugin Set to true to denote plugins which are installed in the global Composer directory * - * @return void * * @throws \UnexpectedValueException */ @@ -210,7 +204,7 @@ class PluginManager if (empty($extra['class'])) { throw new \UnexpectedValueException('Error while installing '.$package->getPrettyName().', composer-plugin packages should have a class defined in their extra key to be usable.'); } - $classes = is_array($extra['class']) ? $extra['class'] : array($extra['class']); + $classes = is_array($extra['class']) ? $extra['class'] : [$extra['class']]; $localRepo = $this->composer->getRepositoryManager()->getLocalRepository(); $globalRepo = $this->globalComposer !== null ? $this->globalComposer->getRepositoryManager()->getLocalRepository() : null; @@ -220,31 +214,31 @@ class PluginManager // clear files autoload rules from the root package as the root dependencies are not // necessarily all present yet when booting this runtime autoloader $rootPackageAutoloads = $rootPackage->getAutoload(); - $rootPackageAutoloads['files'] = array(); + $rootPackageAutoloads['files'] = []; $rootPackage->setAutoload($rootPackageAutoloads); $rootPackageAutoloads = $rootPackage->getDevAutoload(); - $rootPackageAutoloads['files'] = array(); + $rootPackageAutoloads['files'] = []; $rootPackage->setDevAutoload($rootPackageAutoloads); unset($rootPackageAutoloads); $rootPackageRepo = new RootPackageRepository($rootPackage); - $installedRepo = new InstalledRepository(array($localRepo, $rootPackageRepo)); + $installedRepo = new InstalledRepository([$localRepo, $rootPackageRepo]); if ($globalRepo) { $installedRepo->addRepository($globalRepo); } - $autoloadPackages = array($package->getName() => $package); + $autoloadPackages = [$package->getName() => $package]; $autoloadPackages = $this->collectDependencies($installedRepo, $autoloadPackages, $package); $generator = $this->composer->getAutoloadGenerator(); - $autoloads = array(array($rootPackage, '')); + $autoloads = [[$rootPackage, '']]; foreach ($autoloadPackages as $autoloadPackage) { if ($autoloadPackage === $rootPackage) { continue; } $downloadPath = $this->getInstallPath($autoloadPackage, $globalRepo && $globalRepo->hasPackage($autoloadPackage)); - $autoloads[] = array($autoloadPackage, $downloadPath); + $autoloads[] = [$autoloadPackage, $downloadPath]; } $map = $generator->parseAutoloads($autoloads, $rootPackage); @@ -272,11 +266,11 @@ class PluginManager $className = substr($class, $separatorPos + 1); } $code = Preg::replace('{^((?:final\s+)?(?:\s*))class\s+('.preg_quote($className).')}mi', '$1class $2_composer_tmp'.self::$classCounter, $code, 1); - $code = strtr($code, array( + $code = strtr($code, [ '__FILE__' => var_export($path, true), '__DIR__' => var_export(dirname($path), true), '__CLASS__' => var_export($class, true), - )); + ]); $code = Preg::replace('/^\s*<\?(php)?/i', '', $code, 1); eval($code); $class .= '_composer_tmp'.self::$classCounter; @@ -310,9 +304,7 @@ class PluginManager * If it's of type composer-installer it is unregistered from the installers * instead for BC * - * @param PackageInterface $package * - * @return void * * @throws \UnexpectedValueException */ @@ -337,9 +329,7 @@ class PluginManager * If it's of type composer-installer it is unregistered from the installers * instead for BC * - * @param PackageInterface $package * - * @return void * * @throws \UnexpectedValueException */ @@ -361,8 +351,6 @@ class PluginManager /** * Returns the version of the internal composer-plugin-api package. - * - * @return string */ protected function getPluginApiVersion(): string { @@ -377,12 +365,9 @@ class PluginManager * to do it. * * @param PluginInterface $plugin plugin instance - * @param bool $isGlobalPlugin * @param ?PackageInterface $sourcePackage Package from which the plugin comes from - * - * @return void */ - public function addPlugin(PluginInterface $plugin, bool $isGlobalPlugin = false, PackageInterface $sourcePackage = null): void + public function addPlugin(PluginInterface $plugin, bool $isGlobalPlugin = false, ?PackageInterface $sourcePackage = null): void { if ($this->arePluginsDisabled($isGlobalPlugin ? 'global' : 'local')) { return; @@ -396,7 +381,7 @@ class PluginManager return; } - $details = array(); + $details = []; if ($sourcePackage) { $details[] = 'from '.$sourcePackage->getName(); } @@ -420,8 +405,6 @@ class PluginManager * to do it. * * @param PluginInterface $plugin plugin instance - * - * @return void */ public function removePlugin(PluginInterface $plugin): void { @@ -445,8 +428,6 @@ class PluginManager * to do it. * * @param PluginInterface $plugin plugin instance - * - * @return void */ public function uninstallPlugin(PluginInterface $plugin): void { @@ -464,9 +445,7 @@ class PluginManager * call this method as early as possible. * * @param RepositoryInterface $repo Repository to scan for plugins to install - * @param bool $isGlobalRepo * - * @return void * * @throws \RuntimeException */ @@ -474,7 +453,7 @@ class PluginManager { $packages = $repo->getPackages(); - $weights = array(); + $weights = []; foreach ($packages as $package) { if ($package->getType() === 'composer-plugin') { $extra = $package->getExtra(); @@ -504,9 +483,6 @@ class PluginManager * If a plugin requires another plugin, the required one will be deactivated last * * @param RepositoryInterface $repo Repository to scan for plugins to install - * @param bool $isGlobalRepo - * - * @return void */ private function deactivateRepository(RepositoryInterface $repo, bool $isGlobalRepo): void { @@ -552,7 +528,6 @@ class PluginManager /** * Retrieves the path a package is installed to. * - * @param PackageInterface $package * @param bool $global Whether this is a global package * * @return string Install path @@ -569,8 +544,6 @@ class PluginManager } /** - * @param PluginInterface $plugin - * @param string $capability * @throws \RuntimeException On empty or non-string implementation class name value * @return null|string The fully qualified class of the implementation or null if Plugin is not of Capable type or does not provide it */ @@ -598,16 +571,14 @@ class PluginManager /** * @template CapabilityClass of Capability - * @param PluginInterface $plugin * @param class-string $capabilityClassName The fully qualified name of the API interface which the plugin may provide * an implementation of. * @param array $ctorArgs Arguments passed to Capability's constructor. * Keeping it an array will allow future values to be passed w\o changing the signature. - * @return null|Capability * @phpstan-param class-string $capabilityClassName * @phpstan-return null|CapabilityClass */ - public function getPluginCapability(PluginInterface $plugin, $capabilityClassName, array $ctorArgs = array()): ?Capability + public function getPluginCapability(PluginInterface $plugin, $capabilityClassName, array $ctorArgs = []): ?Capability { if ($capabilityClass = $this->getCapabilityImplementationClassName($plugin, $capabilityClassName)) { if (!class_exists($capabilityClass)) { @@ -638,9 +609,9 @@ class PluginManager * Keeping it an array will allow future values to be passed w\o changing the signature. * @return CapabilityClass[] */ - public function getPluginCapabilities($capabilityClassName, array $ctorArgs = array()): array + public function getPluginCapabilities($capabilityClassName, array $ctorArgs = []): array { - $capabilities = array(); + $capabilities = []; foreach ($this->getPlugins() as $plugin) { $capability = $this->getPluginCapability($plugin, $capabilityClassName, $ctorArgs); if (null !== $capability) { @@ -657,19 +628,19 @@ class PluginManager */ private function parseAllowedPlugins($allowPluginsConfig, ?Locker $locker = null): ?array { - if (array() === $allowPluginsConfig && $locker !== null && $locker->isLocked() && version_compare($locker->getPluginApi(), '2.2.0', '<')) { + if ([] === $allowPluginsConfig && $locker !== null && $locker->isLocked() && version_compare($locker->getPluginApi(), '2.2.0', '<')) { return null; } if (true === $allowPluginsConfig) { - return array('{}' => true); + return ['{}' => true]; } if (false === $allowPluginsConfig) { - return array('{}' => false); + return ['{}' => false]; } - $rules = array(); + $rules = []; foreach ($allowPluginsConfig as $pattern => $allow) { $rules[BasePackage::packageNameToRegexp($pattern)] = $allow; } @@ -690,10 +661,6 @@ class PluginManager /** * @internal - * - * @param string $package - * @param bool $isGlobalPlugin - * @return bool */ public function isPluginAllowed(string $package, bool $isGlobalPlugin): bool { @@ -710,14 +677,14 @@ class PluginManager $this->io->writeError('For additional security you should declare the allow-plugins config with a list of packages names that are allowed to run code. See https://getcomposer.org/allow-plugins'); $this->io->writeError('This warning will become an exception once you run composer update!'); - $rules = array('{}' => true); + $rules = ['{}' => true]; // if no config is defined we allow all plugins for BC return true; } // keep going and prompt the user - $rules = array(); + $rules = []; } foreach ($rules as $pattern => $allow) { @@ -763,12 +730,12 @@ class PluginManager case '?': default: $attempts++; - $this->io->writeError(array( + $this->io->writeError([ 'y - add package to allow-plugins in composer.json and let it run immediately', 'n - add package (as disallowed) to allow-plugins in composer.json to suppress further prompts', 'd - discard this, do not change composer.json and do not allow the plugin to run', '? - print help', - )); + ]); break; } } diff --git a/src/Composer/Plugin/PostFileDownloadEvent.php b/src/Composer/Plugin/PostFileDownloadEvent.php index a19a9e38e..e78991646 100644 --- a/src/Composer/Plugin/PostFileDownloadEvent.php +++ b/src/Composer/Plugin/PostFileDownloadEvent.php @@ -78,8 +78,6 @@ class PostFileDownloadEvent extends Event * Retrieves the target file name location. * * If this download is of type metadata, null is returned. - * - * @return string|null */ public function getFileName(): ?string { @@ -88,8 +86,6 @@ class PostFileDownloadEvent extends Event /** * Gets the checksum. - * - * @return string|null */ public function getChecksum(): ?string { @@ -98,8 +94,6 @@ class PostFileDownloadEvent extends Event /** * Gets the processed URL. - * - * @return string */ public function getUrl(): string { @@ -137,8 +131,6 @@ class PostFileDownloadEvent extends Event /** * Returns the type of this download (package, metadata). - * - * @return string */ public function getType(): string { diff --git a/src/Composer/Plugin/PreCommandRunEvent.php b/src/Composer/Plugin/PreCommandRunEvent.php index 4afd03a33..7bd7a4626 100644 --- a/src/Composer/Plugin/PreCommandRunEvent.php +++ b/src/Composer/Plugin/PreCommandRunEvent.php @@ -36,7 +36,6 @@ class PreCommandRunEvent extends Event * Constructor. * * @param string $name The event name - * @param InputInterface $input * @param string $command The command about to be executed */ public function __construct(string $name, InputInterface $input, string $command) @@ -48,8 +47,6 @@ class PreCommandRunEvent extends Event /** * Returns the console input - * - * @return InputInterface */ public function getInput(): InputInterface { @@ -58,8 +55,6 @@ class PreCommandRunEvent extends Event /** * Returns the command about to be executed - * - * @return string */ public function getCommand(): string { diff --git a/src/Composer/Plugin/PreFileDownloadEvent.php b/src/Composer/Plugin/PreFileDownloadEvent.php index 53fd54f4a..bacf041dd 100644 --- a/src/Composer/Plugin/PreFileDownloadEvent.php +++ b/src/Composer/Plugin/PreFileDownloadEvent.php @@ -50,15 +50,12 @@ class PreFileDownloadEvent extends Event /** * @var mixed[] */ - private $transportOptions = array(); + private $transportOptions = []; /** * Constructor. * * @param string $name The event name - * @param HttpDownloader $httpDownloader - * @param string $processedUrl - * @param string $type * @param mixed $context */ public function __construct(string $name, HttpDownloader $httpDownloader, string $processedUrl, string $type, $context = null) @@ -70,9 +67,6 @@ class PreFileDownloadEvent extends Event $this->context = $context; } - /** - * @return HttpDownloader - */ public function getHttpDownloader(): HttpDownloader { return $this->httpDownloader; @@ -80,8 +74,6 @@ class PreFileDownloadEvent extends Event /** * Retrieves the processed URL that will be downloaded. - * - * @return string */ public function getProcessedUrl(): string { @@ -92,8 +84,6 @@ class PreFileDownloadEvent extends Event * Sets the processed URL that will be downloaded. * * @param string $processedUrl New processed URL - * - * @return void */ public function setProcessedUrl(string $processedUrl): void { @@ -102,8 +92,6 @@ class PreFileDownloadEvent extends Event /** * Retrieves a custom package cache key for this download. - * - * @return string|null */ public function getCustomCacheKey(): ?string { @@ -114,8 +102,6 @@ class PreFileDownloadEvent extends Event * Sets a custom package cache key for this download. * * @param string|null $customCacheKey New cache key - * - * @return void */ public function setCustomCacheKey(?string $customCacheKey): void { @@ -124,8 +110,6 @@ class PreFileDownloadEvent extends Event /** * Returns the type of this download (package, metadata). - * - * @return string */ public function getType(): string { @@ -163,8 +147,6 @@ class PreFileDownloadEvent extends Event * Only available for events with type metadata, for packages set the transport options on the package itself. * * @param mixed[] $options - * - * @return void */ public function setTransportOptions(array $options): void { diff --git a/src/Composer/Plugin/PrePoolCreateEvent.php b/src/Composer/Plugin/PrePoolCreateEvent.php index dee00e4d5..e7ea7a06c 100644 --- a/src/Composer/Plugin/PrePoolCreateEvent.php +++ b/src/Composer/Plugin/PrePoolCreateEvent.php @@ -98,9 +98,6 @@ class PrePoolCreateEvent extends Event return $this->repositories; } - /** - * @return Request - */ public function getRequest(): Request { return $this->request; @@ -160,8 +157,6 @@ class PrePoolCreateEvent extends Event /** * @param BasePackage[] $packages - * - * @return void */ public function setPackages(array $packages): void { @@ -170,8 +165,6 @@ class PrePoolCreateEvent extends Event /** * @param BasePackage[] $packages - * - * @return void */ public function setUnacceptableFixedPackages(array $packages): void { diff --git a/src/Composer/Question/StrictConfirmationQuestion.php b/src/Composer/Question/StrictConfirmationQuestion.php index 112e97733..c27753b32 100644 --- a/src/Composer/Question/StrictConfirmationQuestion.php +++ b/src/Composer/Question/StrictConfirmationQuestion.php @@ -50,8 +50,6 @@ class StrictConfirmationQuestion extends Question /** * Returns the default answer normalizer. - * - * @return callable */ private function getDefaultNormalizer(): callable { @@ -81,8 +79,6 @@ class StrictConfirmationQuestion extends Question /** * Returns the default answer validator. - * - * @return callable */ private function getDefaultValidator(): callable { diff --git a/src/Composer/Repository/ArrayRepository.php b/src/Composer/Repository/ArrayRepository.php index b0a0e3b6c..71a26ecc3 100644 --- a/src/Composer/Repository/ArrayRepository.php +++ b/src/Composer/Repository/ArrayRepository.php @@ -42,7 +42,7 @@ class ArrayRepository implements RepositoryInterface /** * @param array $packages */ - public function __construct(array $packages = array()) + public function __construct(array $packages = []) { foreach ($packages as $package) { $this->addPackage($package); @@ -57,12 +57,12 @@ class ArrayRepository implements RepositoryInterface /** * @inheritDoc */ - public function loadPackages(array $packageNameMap, array $acceptableStabilities, array $stabilityFlags, array $alreadyLoaded = array()) + public function loadPackages(array $packageNameMap, array $acceptableStabilities, array $stabilityFlags, array $alreadyLoaded = []) { $packages = $this->getPackages(); - $result = array(); - $namesFound = array(); + $result = []; + $namesFound = []; foreach ($packages as $package) { if (array_key_exists($package->getName(), $packageNameMap)) { if ( @@ -91,7 +91,7 @@ class ArrayRepository implements RepositoryInterface } } - return array('namesFound' => array_keys($namesFound), 'packages' => $result); + return ['namesFound' => array_keys($namesFound), 'packages' => $result]; } /** @@ -125,7 +125,7 @@ class ArrayRepository implements RepositoryInterface { // normalize name $name = strtolower($name); - $packages = array(); + $packages = []; if (null !== $constraint && !$constraint instanceof ConstraintInterface) { $versionParser = new VersionParser(); @@ -155,11 +155,11 @@ class ArrayRepository implements RepositoryInterface $regex = '{(?:'.implode('|', Preg::split('{\s+}', $query)).')}i'; } - $matches = array(); + $matches = []; foreach ($this->getPackages() as $package) { $name = $package->getName(); if ($mode === self::SEARCH_VENDOR) { - list($name) = explode('/', $name); + [$name] = explode('/', $name); } if (isset($matches[$name])) { continue; @@ -172,15 +172,15 @@ class ArrayRepository implements RepositoryInterface || ($mode === self::SEARCH_FULLTEXT && $package instanceof CompletePackageInterface && Preg::isMatch($regex, implode(' ', (array) $package->getKeywords()) . ' ' . $package->getDescription())) ) { if ($mode === self::SEARCH_VENDOR) { - $matches[$name] = array( + $matches[$name] = [ 'name' => $name, 'description' => null, - ); + ]; } else { - $matches[$name] = array( + $matches[$name] = [ 'name' => $package->getPrettyName(), 'description' => $package instanceof CompletePackageInterface ? $package->getDescription() : null, - ); + ]; if ($package instanceof CompletePackageInterface && $package->isAbandoned()) { $matches[$name]['abandoned'] = $package->getReplacementPackage() ?: true; @@ -198,7 +198,7 @@ class ArrayRepository implements RepositoryInterface public function hasPackage(PackageInterface $package) { if ($this->packageMap === null) { - $this->packageMap = array(); + $this->packageMap = []; foreach ($this->getPackages() as $repoPackage) { $this->packageMap[$repoPackage->getUniqueName()] = $repoPackage; } @@ -239,7 +239,7 @@ class ArrayRepository implements RepositoryInterface */ public function getProviders(string $packageName) { - $result = array(); + $result = []; foreach ($this->getPackages() as $candidate) { if (isset($result[$candidate->getName()])) { @@ -247,11 +247,11 @@ class ArrayRepository implements RepositoryInterface } foreach ($candidate->getProvides() as $link) { if ($packageName === $link->getTarget()) { - $result[$candidate->getName()] = array( + $result[$candidate->getName()] = [ 'name' => $candidate->getName(), 'description' => $candidate instanceof CompletePackageInterface ? $candidate->getDescription() : null, 'type' => $candidate->getType(), - ); + ]; continue 2; } } @@ -261,9 +261,6 @@ class ArrayRepository implements RepositoryInterface } /** - * @param string $alias - * @param string $prettyAlias - * * @return AliasPackage|CompleteAliasPackage */ protected function createAliasPackage(BasePackage $package, string $alias, string $prettyAlias) @@ -339,6 +336,6 @@ class ArrayRepository implements RepositoryInterface */ protected function initialize() { - $this->packages = array(); + $this->packages = []; } } diff --git a/src/Composer/Repository/ArtifactRepository.php b/src/Composer/Repository/ArtifactRepository.php index e796739d0..0e7c4cecf 100644 --- a/src/Composer/Repository/ArtifactRepository.php +++ b/src/Composer/Repository/ArtifactRepository.php @@ -68,11 +68,6 @@ class ArtifactRepository extends ArrayRepository implements ConfigurableReposito $this->scanDirectory($this->lookup); } - /** - * @param string $path - * - * @return void - */ private function scanDirectory(string $path): void { $io = $this->io; @@ -107,7 +102,7 @@ class ArtifactRepository extends ArrayRepository implements ConfigurableReposito $json = null; $fileType = null; $fileExtension = pathinfo($file->getPathname(), PATHINFO_EXTENSION); - if (in_array($fileExtension, array('gz', 'tar', 'tgz'), true)) { + if (in_array($fileExtension, ['gz', 'tar', 'tgz'], true)) { $fileType = 'tar'; } elseif ($fileExtension === 'zip') { $fileType = 'zip'; @@ -130,11 +125,11 @@ class ArtifactRepository extends ArrayRepository implements ConfigurableReposito } $package = JsonFile::parseJson($json, $file->getPathname().'#composer.json'); - $package['dist'] = array( + $package['dist'] = [ 'type' => $fileType, 'url' => strtr($file->getPathname(), '\\', '/'), 'shasum' => sha1_file($file->getRealPath()), - ); + ]; try { $package = $this->loader->load($package); diff --git a/src/Composer/Repository/CanonicalPackagesTrait.php b/src/Composer/Repository/CanonicalPackagesTrait.php index fc4e1ef86..1784dadc1 100644 --- a/src/Composer/Repository/CanonicalPackagesTrait.php +++ b/src/Composer/Repository/CanonicalPackagesTrait.php @@ -32,14 +32,14 @@ trait CanonicalPackagesTrait $packages = $this->getPackages(); // get at most one package of each name, preferring non-aliased ones - $packagesByName = array(); + $packagesByName = []; foreach ($packages as $package) { if (!isset($packagesByName[$package->getName()]) || $packagesByName[$package->getName()] instanceof AliasPackage) { $packagesByName[$package->getName()] = $package; } } - $canonicalPackages = array(); + $canonicalPackages = []; // unfold aliased packages foreach ($packagesByName as $package) { diff --git a/src/Composer/Repository/ComposerRepository.php b/src/Composer/Repository/ComposerRepository.php index 01c28d45c..057e923fd 100644 --- a/src/Composer/Repository/ComposerRepository.php +++ b/src/Composer/Repository/ComposerRepository.php @@ -42,7 +42,6 @@ use Composer\Util\Http\Response; use Composer\MetadataMinifier\MetadataMinifier; use Composer\Util\Url; use React\Promise\PromiseInterface; -use function React\Promise\resolve; /** * @author Jordi Boggiano @@ -118,14 +117,14 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito * useful for v2 metadata repositories with lazy providers * @phpstan-var array */ - private $freshMetadataUrls = array(); + private $freshMetadataUrls = []; /** * @var array list of package names which returned a 404 and should not be re-fetched in case loadPackage is called several times * useful for v2 metadata repositories with lazy providers * @phpstan-var array */ - private $packagesNotFoundCache = array(); + private $packagesNotFoundCache = []; /** * @var VersionParser @@ -136,7 +135,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito * @param array $repoConfig * @phpstan-param array{url: string, options?: mixed[], type?: 'composer', allow_ssl_downgrade?: bool} $repoConfig */ - public function __construct(array $repoConfig, IOInterface $io, Config $config, HttpDownloader $httpDownloader, EventDispatcher $eventDispatcher = null) + public function __construct(array $repoConfig, IOInterface $io, Config $config, HttpDownloader $httpDownloader, ?EventDispatcher $eventDispatcher = null) { parent::__construct(); if (!Preg::isMatch('{^[\w.]+\??://}', $repoConfig['url'])) { @@ -155,7 +154,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } if (!isset($repoConfig['options'])) { - $repoConfig['options'] = array(); + $repoConfig['options'] = []; } if (isset($repoConfig['allow_ssl_downgrade']) && true === $repoConfig['allow_ssl_downgrade']) { $this->allowSslDowngrade = true; @@ -213,7 +212,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito return null; } - $packages = $this->loadAsyncPackages(array($name => $constraint)); + $packages = $this->loadAsyncPackages([$name => $constraint]); if (count($packages['packages']) > 0) { return reset($packages['packages']); @@ -254,10 +253,10 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } if ($this->hasAvailablePackageList && !$this->lazyProvidersRepoContains($name)) { - return array(); + return []; } - $result = $this->loadAsyncPackages(array($name => $constraint)); + $result = $this->loadAsyncPackages([$name => $constraint]); return $result['packages']; } @@ -269,7 +268,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } } - return array(); + return []; } return parent::findPackages($name, $constraint); @@ -277,8 +276,6 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito /** * @param array $packages - * @param ConstraintInterface|null $constraint - * @param bool $returnFirstMatch * * @return BasePackage|array|null */ @@ -292,7 +289,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito return $packages; } - $filteredPackages = array(); + $filteredPackages = []; foreach ($packages as $package) { $pkgConstraint = new Constraint('==', $package->getVersion()); @@ -319,7 +316,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito if ($this->lazyProvidersUrl) { if (is_array($this->availablePackages) && !$this->availablePackagePatterns) { - $packageMap = array(); + $packageMap = []; foreach ($this->availablePackages as $name) { $packageMap[$name] = new MatchAllConstraint(); } @@ -393,14 +390,14 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito return $filterResults(array_keys($this->partialPackagesByName)); } - return array(); + return []; } if ($hasProviders) { return $filterResults($this->getProviderNames()); } - $names = array(); + $names = []; foreach ($this->getPackages() as $package) { $names[] = $package->getPrettyName(); } @@ -423,7 +420,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito $names = $this->getPackageNames(); - $uniques = array(); + $uniques = []; foreach ($names as $name) { // @phpstan-ignore-next-line $uniques[substr($name, 0, strpos($name, '/'))] = true; @@ -439,7 +436,6 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } /** - * @param string|null $packageFilter * @return list */ private function loadPackageList(?string $packageFilter = null): array @@ -472,7 +468,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito return $result['packageNames']; } - public function loadPackages(array $packageNameMap, array $acceptableStabilities, array $stabilityFlags, array $alreadyLoaded = array()) + public function loadPackages(array $packageNameMap, array $acceptableStabilities, array $stabilityFlags, array $alreadyLoaded = []) { // this call initializes loadRootServerFile which is needed for the rest below to work $hasProviders = $this->hasProviders(); @@ -481,12 +477,12 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito return parent::loadPackages($packageNameMap, $acceptableStabilities, $stabilityFlags, $alreadyLoaded); } - $packages = array(); - $namesFound = array(); + $packages = []; + $namesFound = []; if ($hasProviders || $this->hasPartialPackages()) { foreach ($packageNameMap as $name => $constraint) { - $matches = array(); + $matches = []; // if a repo has no providers but only partial packages and the partial packages are missing // then we don't want to call whatProvides as it would try to load from the providers and fail @@ -537,7 +533,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito $namesFound = array_merge($namesFound, $result['namesFound']); } - return array('namesFound' => array_keys($namesFound), 'packages' => $packages); + return ['namesFound' => array_keys($namesFound), 'packages' => $packages]; } /** @@ -548,15 +544,15 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito $this->loadRootServerFile(600); if ($this->searchUrl && $mode === self::SEARCH_FULLTEXT) { - $url = str_replace(array('%query%', '%type%'), array(urlencode($query), $type), $this->searchUrl); + $url = str_replace(['%query%', '%type%'], [urlencode($query), $type], $this->searchUrl); $search = $this->httpDownloader->get($url, $this->options)->decodeJson(); if (empty($search['results'])) { - return array(); + return []; } - $results = array(); + $results = []; foreach ($search['results'] as $result) { // do not show virtual packages in results as they are not directly useful from a composer perspective if (!empty($result['virtual'])) { @@ -570,12 +566,12 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } if ($mode === self::SEARCH_VENDOR) { - $results = array(); + $results = []; $regex = '{(?:'.implode('|', Preg::split('{\s+}', $query)).')}i'; $vendorNames = $this->getVendorNames(); foreach (Preg::grep($regex, $vendorNames) as $name) { - $results[] = array('name' => $name, 'description' => ''); + $results[] = ['name' => $name, 'description' => '']; } return $results; @@ -587,20 +583,20 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito $url = $this->listUrl . '?vendor='.urlencode($match['vendor']).'&filter='.urlencode($match['query'].'*'); $result = $this->httpDownloader->get($url, $this->options)->decodeJson(); - $results = array(); + $results = []; foreach ($result['packageNames'] as $name) { - $results[] = array('name' => $name, 'description' => ''); + $results[] = ['name' => $name, 'description' => '']; } return $results; } - $results = array(); + $results = []; $regex = '{(?:'.implode('|', Preg::split('{\s+}', $query)).')}i'; $packageNames = $this->getPackageNames(); foreach (Preg::grep($regex, $packageNames) as $name) { - $results[] = array('name' => $name, 'description' => ''); + $results[] = ['name' => $name, 'description' => '']; } return $results; @@ -612,6 +608,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito public function hasSecurityAdvisories(): bool { $this->loadRootServerFile(600); + return $this->securityAdvisoryConfig !== null && ($this->securityAdvisoryConfig['metadata'] || $this->securityAdvisoryConfig['api-url'] !== null); } @@ -637,15 +634,15 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito * @return ($allowPartialAdvisories is false ? SecurityAdvisory|null : PartialSecurityAdvisory|SecurityAdvisory|null) */ $create = function (array $data, string $name) use ($parser, $allowPartialAdvisories, &$packageConstraintMap): ?PartialSecurityAdvisory { - $advisory = PartialSecurityAdvisory::create($name, $data, $parser); - if (!$allowPartialAdvisories && !$advisory instanceof SecurityAdvisory) { - throw new \RuntimeException('Advisory for '.$name.' could not be loaded as a full advisory from '.$this->getRepoName() . PHP_EOL . var_export($data, true)); - } - if (!$advisory->affectedVersions->matches($packageConstraintMap[$name])) { - return null; - } + $advisory = PartialSecurityAdvisory::create($name, $data, $parser); + if (!$allowPartialAdvisories && !$advisory instanceof SecurityAdvisory) { + throw new \RuntimeException('Advisory for '.$name.' could not be loaded as a full advisory from '.$this->getRepoName() . PHP_EOL . var_export($data, true)); + } + if (!$advisory->affectedVersions->matches($packageConstraintMap[$name])) { + return null; + } - return $advisory; + return $advisory; }; if ($this->securityAdvisoryConfig['metadata'] && ($allowPartialAdvisories || $apiUrl === null)) { @@ -659,8 +656,8 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } $promises[] = $this->startCachedAsyncDownload($name, $name) - ->then(function (array $spec) use (&$advisories, &$namesFound, &$packageConstraintMap, $name, $create): void { - list($response, ) = $spec; + ->then(static function (array $spec) use (&$advisories, &$namesFound, &$packageConstraintMap, $name, $create): void { + [$response, ] = $spec; if (!isset($response['security-advisories']) || !is_array($response['security-advisories'])) { return; @@ -669,7 +666,9 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito $namesFound[$name] = true; if (count($response['security-advisories']) > 0) { $advisories[$name] = array_filter(array_map( - function ($data) use ($name, $create) { return $create($data, $name); }, + static function ($data) use ($name, $create) { + return $create($data, $name); + }, $response['security-advisories'] )); } @@ -694,7 +693,9 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito foreach ($response->decodeJson()['advisories'] as $name => $list) { if (count($list) > 0) { $advisories[$name] = array_filter(array_map( - function ($data) use ($name, $create) { return $create($data, $name); }, + static function ($data) use ($name, $create) { + return $create($data, $name); + }, $list )); } @@ -708,7 +709,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito public function getProviders(string $packageName) { $this->loadRootServerFile(); - $result = array(); + $result = []; if ($this->providersApiUrl) { try { @@ -736,11 +737,11 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito if (isset($result[$candidate['name']]) || !isset($candidate['provide'][$packageName])) { continue; } - $result[$candidate['name']] = array( + $result[$candidate['name']] = [ 'name' => $candidate['name'], 'description' => $candidate['description'] ?? '', 'type' => $candidate['type'] ?? '', - ); + ]; } } } @@ -768,14 +769,14 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito if ($this->lazyProvidersUrl) { // Can not determine list of provided packages for lazy repositories - return array(); + return []; } if (null !== $this->providersUrl && null !== $this->providerListing) { return array_keys($this->providerListing); } - return array(); + return []; } protected function configurePackageTransportOptions(PackageInterface $package): void @@ -789,9 +790,6 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } } - /** - * @return bool - */ private function hasProviders(): bool { $this->loadRootServerFile(); @@ -809,13 +807,13 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito * * @return array */ - private function whatProvides(string $name, array $acceptableStabilities = null, array $stabilityFlags = null, array $alreadyLoaded = array()): array + private function whatProvides(string $name, ?array $acceptableStabilities = null, ?array $stabilityFlags = null, array $alreadyLoaded = []): array { $packagesSource = null; if (!$this->hasPartialPackages() || !isset($this->partialPackagesByName[$name])) { // skip platform packages, root package and composer-plugin-api if (PlatformRepository::isPlatformPackage($name) || '__root__' === $name) { - return array(); + return []; } if (null === $this->providerListing) { @@ -834,14 +832,14 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } elseif ($this->providersUrl) { // package does not exist in this repo if (!isset($this->providerListing[$name])) { - return array(); + return []; } $hash = $this->providerListing[$name]['sha256']; - $url = str_replace(array('%package%', '%hash%'), array($name, $hash), $this->providersUrl); + $url = str_replace(['%package%', '%hash%'], [$name, $hash], $this->providersUrl); $cacheKey = 'provider-'.strtr($name, '/', '$').'.json'; } else { - return array(); + return []; } $packages = null; @@ -869,8 +867,8 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito $packagesSource = 'downloaded file ('.Url::sanitize($url).')'; } catch (TransportException $e) { // 404s are acceptable for lazy provider repos - if ($this->lazyProvidersUrl && in_array($e->getStatusCode(), array(404, 499), true)) { - $packages = array('packages' => array()); + if ($this->lazyProvidersUrl && in_array($e->getStatusCode(), [404, 499], true)) { + $packages = ['packages' => []]; $packagesSource = 'not-found file ('.Url::sanitize($url).')'; if ($e->getStatusCode() === 499) { $this->io->error('' . $e->getMessage() . ''); @@ -883,13 +881,13 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito $loadingPartialPackage = false; } else { - $packages = array('packages' => array('versions' => $this->partialPackagesByName[$name])); + $packages = ['packages' => ['versions' => $this->partialPackagesByName[$name]]]; $packagesSource = 'root file ('.Url::sanitize($this->getPackagesJsonUrl()).')'; $loadingPartialPackage = true; } - $result = array(); - $versionsToLoad = array(); + $result = []; + $versionsToLoad = []; foreach ($packages['packages'] as $versions) { foreach ($versions as $version) { $normalizedName = strtolower($version['name']); @@ -961,8 +959,6 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito /** * Adds a new package to the repository - * - * @param PackageInterface $package */ public function addPackage(PackageInterface $package) { @@ -981,13 +977,13 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito * * @return array{namesFound: array, packages: array} */ - private function loadAsyncPackages(array $packageNames, array $acceptableStabilities = null, array $stabilityFlags = null, array $alreadyLoaded = array()): array + private function loadAsyncPackages(array $packageNames, ?array $acceptableStabilities = null, ?array $stabilityFlags = null, array $alreadyLoaded = []): array { $this->loadRootServerFile(); - $packages = array(); - $namesFound = array(); - $promises = array(); + $packages = []; + $namesFound = []; + $promises = []; if (null === $this->lazyProvidersUrl) { throw new \LogicException('loadAsyncPackages only supports v2 protocol composer repos with a metadata-url'); @@ -995,7 +991,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito // load ~dev versions of the packages as well if needed foreach ($packageNames as $name => $constraint) { - if ($acceptableStabilities === null || $stabilityFlags === null || StabilityFilter::isPackageAcceptable($acceptableStabilities, $stabilityFlags, array($name), 'dev')) { + if ($acceptableStabilities === null || $stabilityFlags === null || StabilityFilter::isPackageAcceptable($acceptableStabilities, $stabilityFlags, [$name], 'dev')) { $packageNames[$name.'~dev'] = $constraint; } // if only dev stability is requested, we skip loading the non dev file @@ -1015,7 +1011,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito $promises[] = $this->startCachedAsyncDownload($name, $realName) ->then(function (array $spec) use (&$packages, &$namesFound, $realName, $constraint, $acceptableStabilities, $stabilityFlags, $alreadyLoaded): void { - list($response, $packagesSource) = $spec; + [$response, $packagesSource] = $spec; if (null === $response) { return; } @@ -1027,7 +1023,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } $namesFound[$realName] = true; - $versionsToLoad = array(); + $versionsToLoad = []; foreach ($versions as $version) { if (!isset($version['version_normalized'])) { $version['version_normalized'] = $this->versionParser->normalize($version['version']); @@ -1061,10 +1057,10 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito $this->loop->wait($promises); - return array('namesFound' => $namesFound, 'packages' => $packages); + return ['namesFound' => $namesFound, 'packages' => $packages]; } - private function startCachedAsyncDownload(string $fileName, string $packageName = null): PromiseInterface + private function startCachedAsyncDownload(string $fileName, ?string $packageName = null): PromiseInterface { if (null === $this->lazyProvidersUrl) { throw new \LogicException('startCachedAsyncDownload only supports v2 protocol composer repos with a metadata-url'); @@ -1083,7 +1079,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } return $this->asyncFetchFile($url, $cacheKey, $lastModified) - ->then(function ($response) use ($url, $cacheKey, $contents, $packageName): array { + ->then(static function ($response) use ($url, $cacheKey, $contents, $packageName): array { $packagesSource = 'downloaded file ('.Url::sanitize($url).')'; if (true === $response) { @@ -1100,26 +1096,23 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } /** - * @param ConstraintInterface|null $constraint * @param string $name package name (must be lowercased already) * @param array $versionData * @param array|null $acceptableStabilities * @phpstan-param array|null $acceptableStabilities * @param array|null $stabilityFlags an array of package name => BasePackage::STABILITY_* value * @phpstan-param array|null $stabilityFlags - * - * @return bool */ - private function isVersionAcceptable(?ConstraintInterface $constraint, string $name, array $versionData, array $acceptableStabilities = null, array $stabilityFlags = null): bool + private function isVersionAcceptable(?ConstraintInterface $constraint, string $name, array $versionData, ?array $acceptableStabilities = null, ?array $stabilityFlags = null): bool { - $versions = array($versionData['version_normalized']); + $versions = [$versionData['version_normalized']]; if ($alias = $this->loader->getBranchAlias($versionData)) { $versions[] = $alias; } foreach ($versions as $version) { - if (null !== $acceptableStabilities && null !== $stabilityFlags && !StabilityFilter::isPackageAcceptable($acceptableStabilities, $stabilityFlags, array($name), VersionParser::parseStability($version))) { + if (null !== $acceptableStabilities && null !== $stabilityFlags && !StabilityFilter::isPackageAcceptable($acceptableStabilities, $stabilityFlags, [$name], VersionParser::parseStability($version))) { continue; } @@ -1133,9 +1126,6 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito return false; } - /** - * @return string - */ private function getPackagesJsonUrl(): string { $jsonUrlParts = parse_url(strtr($this->url, '\\', '/')); @@ -1148,7 +1138,6 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } /** - * @param int|null $rootMaxAge * @return array<'providers'|'provider-includes'|'packages'|'providers-url'|'notify-batch'|'search'|'mirrors'|'providers-lazy-url'|'metadata-url'|'available-packages'|'available-package-patterns', mixed>|true */ protected function loadRootServerFile(?int $rootMaxAge = null) @@ -1188,16 +1177,16 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito if (!empty($data['mirrors'])) { foreach ($data['mirrors'] as $mirror) { if (!empty($mirror['git-url'])) { - $this->sourceMirrors['git'][] = array('url' => $mirror['git-url'], 'preferred' => !empty($mirror['preferred'])); + $this->sourceMirrors['git'][] = ['url' => $mirror['git-url'], 'preferred' => !empty($mirror['preferred'])]; } if (!empty($mirror['hg-url'])) { - $this->sourceMirrors['hg'][] = array('url' => $mirror['hg-url'], 'preferred' => !empty($mirror['preferred'])); + $this->sourceMirrors['hg'][] = ['url' => $mirror['hg-url'], 'preferred' => !empty($mirror['preferred'])]; } if (!empty($mirror['dist-url'])) { - $this->distMirrors[] = array( + $this->distMirrors[] = [ 'url' => $this->canonicalizeUrl($mirror['dist-url']), 'preferred' => !empty($mirror['preferred']), - ); + ]; } } } @@ -1276,11 +1265,6 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito return $this->rootData = $data; } - /** - * @param string $url - * - * @return string - */ private function canonicalizeUrl(string $url): string { if ('/' === $url[0]) { @@ -1307,9 +1291,6 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito return $this->loadIncludes($data); } - /** - * @return bool - */ private function hasPartialPackages(): bool { if ($this->hasPartialPackages && null === $this->partialPackagesByName) { @@ -1321,14 +1302,12 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito /** * @param array{providers?: mixed[], provider-includes?: mixed[]} $data - * - * @return void */ private function loadProviderListings($data): void { if (isset($data['providers'])) { if (!is_array($this->providerListing)) { - $this->providerListing = array(); + $this->providerListing = []; } $this->providerListing = array_merge($this->providerListing, $data['providers']); } @@ -1337,7 +1316,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito $includes = $data['provider-includes']; foreach ($includes as $include => $metadata) { $url = $this->baseUrl . '/' . str_replace('%hash%', $metadata['sha256'], $include); - $cacheKey = str_replace(array('%hash%','$'), '', $include); + $cacheKey = str_replace(['%hash%','$'], '', $include); if ($this->cache->sha256($cacheKey) === $metadata['sha256']) { $includedData = json_decode($this->cache->read($cacheKey), true); } else { @@ -1356,7 +1335,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito */ private function loadIncludes(array $data): array { - $packages = array(); + $packages = []; // legacy repo handling if (!isset($data['packages']) && !isset($data['includes'])) { @@ -1400,14 +1379,13 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito /** * @param mixed[] $packages - * @param string|null $source * * @return list */ private function createPackages(array $packages, ?string $source = null): array { if (!$packages) { - return array(); + return []; } try { @@ -1434,11 +1412,6 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } /** - * @param string $filename - * @param string|null $cacheKey - * @param string|null $sha256 - * @param bool $storeLastModifiedTime - * * @return array */ protected function fetchFile(string $filename, ?string $cacheKey = null, ?string $sha256 = null, bool $storeLastModifiedTime = false) @@ -1458,7 +1431,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito try { $options = $this->options; if ($this->eventDispatcher) { - $preFileDownloadEvent = new PreFileDownloadEvent(PluginEvents::PRE_FILE_DOWNLOAD, $this->httpDownloader, $filename, 'metadata', array('repository' => $this)); + $preFileDownloadEvent = new PreFileDownloadEvent(PluginEvents::PRE_FILE_DOWNLOAD, $this->httpDownloader, $filename, 'metadata', ['repository' => $this]); $preFileDownloadEvent->setTransportOptions($this->options); $this->eventDispatcher->dispatch($preFileDownloadEvent->getName(), $preFileDownloadEvent); $filename = $preFileDownloadEvent->getProcessedUrl(); @@ -1486,7 +1459,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } if ($this->eventDispatcher) { - $postFileDownloadEvent = new PostFileDownloadEvent(PluginEvents::POST_FILE_DOWNLOAD, null, $sha256, $filename, 'metadata', array('response' => $response, 'repository' => $this)); + $postFileDownloadEvent = new PostFileDownloadEvent(PluginEvents::POST_FILE_DOWNLOAD, null, $sha256, $filename, 'metadata', ['response' => $response, 'repository' => $this]); $this->eventDispatcher->dispatch($postFileDownloadEvent->getName(), $postFileDownloadEvent); } @@ -1542,10 +1515,6 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } /** - * @param string $filename - * @param string $cacheKey - * @param string $lastModifiedTime - * * @return array|true */ private function fetchFileIfLastModified(string $filename, string $cacheKey, string $lastModifiedTime) @@ -1553,7 +1522,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito try { $options = $this->options; if ($this->eventDispatcher) { - $preFileDownloadEvent = new PreFileDownloadEvent(PluginEvents::PRE_FILE_DOWNLOAD, $this->httpDownloader, $filename, 'metadata', array('repository' => $this)); + $preFileDownloadEvent = new PreFileDownloadEvent(PluginEvents::PRE_FILE_DOWNLOAD, $this->httpDownloader, $filename, 'metadata', ['repository' => $this]); $preFileDownloadEvent->setTransportOptions($this->options); $this->eventDispatcher->dispatch($preFileDownloadEvent->getName(), $preFileDownloadEvent); $filename = $preFileDownloadEvent->getProcessedUrl(); @@ -1571,7 +1540,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } if ($this->eventDispatcher) { - $postFileDownloadEvent = new PostFileDownloadEvent(PluginEvents::POST_FILE_DOWNLOAD, null, null, $filename, 'metadata', array('response' => $response, 'repository' => $this)); + $postFileDownloadEvent = new PostFileDownloadEvent(PluginEvents::POST_FILE_DOWNLOAD, null, null, $filename, 'metadata', ['response' => $response, 'repository' => $this]); $this->eventDispatcher->dispatch($postFileDownloadEvent->getName(), $postFileDownloadEvent); } @@ -1607,15 +1576,10 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } } - /** - * @param string $filename - * @param string $cacheKey - * @param string|null $lastModifiedTime - */ private function asyncFetchFile(string $filename, string $cacheKey, ?string $lastModifiedTime = null): PromiseInterface { if (isset($this->packagesNotFoundCache[$filename])) { - return \React\Promise\resolve(array('packages' => array())); + return \React\Promise\resolve(['packages' => []]); } if (isset($this->freshMetadataUrls[$filename]) && $lastModifiedTime) { @@ -1626,7 +1590,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito $httpDownloader = $this->httpDownloader; $options = $this->options; if ($this->eventDispatcher) { - $preFileDownloadEvent = new PreFileDownloadEvent(PluginEvents::PRE_FILE_DOWNLOAD, $this->httpDownloader, $filename, 'metadata', array('repository' => $this)); + $preFileDownloadEvent = new PreFileDownloadEvent(PluginEvents::PRE_FILE_DOWNLOAD, $this->httpDownloader, $filename, 'metadata', ['repository' => $this]); $preFileDownloadEvent->setTransportOptions($this->options); $this->eventDispatcher->dispatch($preFileDownloadEvent->getName(), $preFileDownloadEvent); $filename = $preFileDownloadEvent->getProcessedUrl(); @@ -1654,7 +1618,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito if ($response->getStatusCode() === 404) { $this->packagesNotFoundCache[$filename] = true; - return array('packages' => array()); + return ['packages' => []]; } $json = (string) $response->getBody(); @@ -1665,7 +1629,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito } if ($eventDispatcher) { - $postFileDownloadEvent = new PostFileDownloadEvent(PluginEvents::POST_FILE_DOWNLOAD, null, null, $filename, 'metadata', array('response' => $response, 'repository' => $this)); + $postFileDownloadEvent = new PostFileDownloadEvent(PluginEvents::POST_FILE_DOWNLOAD, null, null, $filename, 'metadata', ['response' => $response, 'repository' => $this]); $eventDispatcher->dispatch($postFileDownloadEvent->getName(), $postFileDownloadEvent); } @@ -1700,12 +1664,12 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito // if the file is in the cache, we fake a 304 Not Modified to allow the process to continue if ($lastModifiedTime) { - return $accept(new Response(array('url' => $url), 304, array(), '')); + return $accept(new Response(['url' => $url], 304, [], '')); } // special error code returned when network is being artificially disabled if ($e instanceof TransportException && $e->getStatusCode() === 499) { - return $accept(new Response(array('url' => $url), 404, array(), '')); + return $accept(new Response(['url' => $url], 404, [], '')); } throw $e; @@ -1718,8 +1682,6 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito * This initializes the packages key of a partial packages.json that contain some packages inlined + a providers-lazy-url * * This should only be called once - * - * @return void */ private function initializePartialPackages(): void { @@ -1728,7 +1690,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito return; } - $this->partialPackagesByName = array(); + $this->partialPackagesByName = []; foreach ($rootData['packages'] as $package => $versions) { foreach ($versions as $version) { $versionPackageName = strtolower((string) ($version['name'] ?? '')); @@ -1747,7 +1709,6 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito /** * Checks if the package name is present in this lazy providers repo * - * @param string $name * @return bool true if the package name is present in availablePackages or matched by availablePackagePatterns */ protected function lazyProvidersRepoContains(string $name) diff --git a/src/Composer/Repository/CompositeRepository.php b/src/Composer/Repository/CompositeRepository.php index 3ae0aafbb..08af5ea60 100644 --- a/src/Composer/Repository/CompositeRepository.php +++ b/src/Composer/Repository/CompositeRepository.php @@ -34,7 +34,7 @@ class CompositeRepository implements RepositoryInterface */ public function __construct(array $repositories) { - $this->repositories = array(); + $this->repositories = []; foreach ($repositories as $repo) { $this->addRepository($repo); } @@ -93,22 +93,22 @@ class CompositeRepository implements RepositoryInterface */ public function findPackages($name, $constraint = null): array { - $packages = array(); + $packages = []; foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $packages[] = $repository->findPackages($name, $constraint); } - return $packages ? call_user_func_array('array_merge', $packages) : array(); + return $packages ? array_merge(...$packages) : []; } /** * @inheritDoc */ - public function loadPackages(array $packageNameMap, array $acceptableStabilities, array $stabilityFlags, array $alreadyLoaded = array()): array + public function loadPackages(array $packageNameMap, array $acceptableStabilities, array $stabilityFlags, array $alreadyLoaded = []): array { - $packages = array(); - $namesFound = array(); + $packages = []; + $namesFound = []; foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $result = $repository->loadPackages($packageNameMap, $acceptableStabilities, $stabilityFlags, $alreadyLoaded); @@ -116,10 +116,10 @@ class CompositeRepository implements RepositoryInterface $namesFound[] = $result['namesFound']; } - return array( - 'packages' => $packages ? call_user_func_array('array_merge', $packages) : array(), - 'namesFound' => $namesFound ? array_unique(call_user_func_array('array_merge', $namesFound)) : array(), - ); + return [ + 'packages' => $packages ? array_merge(...$packages) : [], + 'namesFound' => $namesFound ? array_unique(array_merge(...$namesFound)) : [], + ]; } /** @@ -127,13 +127,13 @@ class CompositeRepository implements RepositoryInterface */ public function search(string $query, int $mode = 0, ?string $type = null): array { - $matches = array(); + $matches = []; foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $matches[] = $repository->search($query, $mode, $type); } - return $matches ? call_user_func_array('array_merge', $matches) : array(); + return $matches ? array_merge(...$matches) : []; } /** @@ -141,13 +141,13 @@ class CompositeRepository implements RepositoryInterface */ public function getPackages(): array { - $packages = array(); + $packages = []; foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $packages[] = $repository->getPackages(); } - return $packages ? call_user_func_array('array_merge', $packages) : array(); + return $packages ? array_merge(...$packages) : []; } /** @@ -155,18 +155,15 @@ class CompositeRepository implements RepositoryInterface */ public function getProviders($packageName): array { - $results = array(); + $results = []; foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $results[] = $repository->getProviders($packageName); } - return $results ? call_user_func_array('array_merge', $results) : array(); + return $results ? array_merge(...$results) : []; } - /** - * @return void - */ public function removePackage(PackageInterface $package): void { foreach ($this->repositories as $repository) { @@ -192,9 +189,6 @@ class CompositeRepository implements RepositoryInterface /** * Add a repository. - * @param RepositoryInterface $repository - * - * @return void */ public function addRepository(RepositoryInterface $repository): void { diff --git a/src/Composer/Repository/FilesystemRepository.php b/src/Composer/Repository/FilesystemRepository.php index 8a87970bb..901a5ef16 100644 --- a/src/Composer/Repository/FilesystemRepository.php +++ b/src/Composer/Repository/FilesystemRepository.php @@ -46,10 +46,9 @@ class FilesystemRepository extends WritableArrayRepository * Initializes filesystem repository. * * @param JsonFile $repositoryFile repository json file - * @param bool $dumpVersions * @param ?RootPackageInterface $rootPackage Must be provided if $dumpVersions is true */ - public function __construct(JsonFile $repositoryFile, bool $dumpVersions = false, RootPackageInterface $rootPackage = null, Filesystem $filesystem = null) + public function __construct(JsonFile $repositoryFile, bool $dumpVersions = false, ?RootPackageInterface $rootPackage = null, ?Filesystem $filesystem = null) { parent::__construct(); $this->file = $repositoryFile; @@ -120,7 +119,7 @@ class FilesystemRepository extends WritableArrayRepository */ public function write(bool $devMode, InstallationManager $installationManager) { - $data = array('packages' => array(), 'dev' => $devMode, 'dev-package-names' => array()); + $data = ['packages' => [], 'dev' => $devMode, 'dev-package-names' => []]; $dumper = new ArrayDumper(); // make sure the directory is created so we can realpath it @@ -130,7 +129,7 @@ class FilesystemRepository extends WritableArrayRepository $this->filesystem->ensureDirectoryExists($repoDir); $repoDir = $this->filesystem->normalizePath(realpath($repoDir)); - $installPaths = array(); + $installPaths = []; foreach ($this->getCanonicalPackages() as $package) { $pkgArray = $dumper->dump($package); @@ -172,11 +171,8 @@ class FilesystemRepository extends WritableArrayRepository /** * @param array $array - * @param int $level - * - * @return string */ - private function dumpToPhpCode(array $array = array(), int $level = 0): string + private function dumpToPhpCode(array $array = [], int $level = 0): string { $lines = "array(\n"; $level++; @@ -325,7 +321,7 @@ class FilesystemRepository extends WritableArrayRepository 'reference' => $reference, 'type' => $package->getType(), 'install_path' => $installPath, - 'aliases' => array(), + 'aliases' => [], 'dev_requirement' => isset($devPackages[$package->getName()]), ]; diff --git a/src/Composer/Repository/FilterRepository.php b/src/Composer/Repository/FilterRepository.php index 54d63075c..7419cd1a8 100644 --- a/src/Composer/Repository/FilterRepository.php +++ b/src/Composer/Repository/FilterRepository.php @@ -69,8 +69,6 @@ class FilterRepository implements RepositoryInterface /** * Returns the wrapped repositories - * - * @return RepositoryInterface */ public function getRepository(): RepositoryInterface { @@ -103,7 +101,7 @@ class FilterRepository implements RepositoryInterface public function findPackages($name, $constraint = null): array { if (!$this->isAllowed($name)) { - return array(); + return []; } return $this->repo->findPackages($name, $constraint); @@ -112,7 +110,7 @@ class FilterRepository implements RepositoryInterface /** * @inheritDoc */ - public function loadPackages(array $packageNameMap, array $acceptableStabilities, array $stabilityFlags, array $alreadyLoaded = array()): array + public function loadPackages(array $packageNameMap, array $acceptableStabilities, array $stabilityFlags, array $alreadyLoaded = []): array { foreach ($packageNameMap as $name => $constraint) { if (!$this->isAllowed($name)) { @@ -121,12 +119,12 @@ class FilterRepository implements RepositoryInterface } if (!$packageNameMap) { - return array('namesFound' => array(), 'packages' => array()); + return ['namesFound' => [], 'packages' => []]; } $result = $this->repo->loadPackages($packageNameMap, $acceptableStabilities, $stabilityFlags, $alreadyLoaded); if (!$this->canonical) { - $result['namesFound'] = array(); + $result['namesFound'] = []; } return $result; @@ -137,7 +135,7 @@ class FilterRepository implements RepositoryInterface */ public function search(string $query, int $mode = 0, ?string $type = null): array { - $result = array(); + $result = []; foreach ($this->repo->search($query, $mode, $type) as $package) { if ($this->isAllowed($package['name'])) { @@ -153,7 +151,7 @@ class FilterRepository implements RepositoryInterface */ public function getPackages(): array { - $result = array(); + $result = []; foreach ($this->repo->getPackages() as $package) { if ($this->isAllowed($package->getName())) { $result[] = $package; @@ -168,7 +166,7 @@ class FilterRepository implements RepositoryInterface */ public function getProviders($packageName): array { - $result = array(); + $result = []; foreach ($this->repo->getProviders($packageName) as $name => $provider) { if ($this->isAllowed($provider['name'])) { $result[$name] = $provider; @@ -190,11 +188,6 @@ class FilterRepository implements RepositoryInterface return 0; } - /** - * @param string $name - * - * @return bool - */ private function isAllowed(string $name): bool { if (!$this->only && !$this->exclude) { diff --git a/src/Composer/Repository/InstalledRepository.php b/src/Composer/Repository/InstalledRepository.php index b418664a7..e3b52079e 100644 --- a/src/Composer/Repository/InstalledRepository.php +++ b/src/Composer/Repository/InstalledRepository.php @@ -33,7 +33,6 @@ use Composer\Package\Link; class InstalledRepository extends CompositeRepository { /** - * @param string $name * @param ConstraintInterface|string|null $constraint * * @return BasePackage[] @@ -47,7 +46,7 @@ class InstalledRepository extends CompositeRepository $constraint = $versionParser->parseConstraints($constraint); } - $matches = array(); + $matches = []; foreach ($this->getRepositories() as $repo) { foreach ($repo->getPackages() as $candidate) { if ($name === $candidate->getName()) { @@ -87,10 +86,10 @@ class InstalledRepository extends CompositeRepository * @return array[] An associative array of arrays as described above. * @phpstan-return array */ - public function getDependents($needle, ?ConstraintInterface $constraint = null, bool $invert = false, bool $recurse = true, array $packagesFound = null): array + public function getDependents($needle, ?ConstraintInterface $constraint = null, bool $invert = false, bool $recurse = true, ?array $packagesFound = null): array { $needles = array_map('strtolower', (array) $needle); - $results = array(); + $results = []; // initialize the array with the needles before any recursion occurs if (null === $packagesFound) { @@ -127,12 +126,12 @@ class InstalledRepository extends CompositeRepository if ($constraint === null || ($link->getConstraint()->matches($constraint) === true)) { // already displayed this node's dependencies, cutting short if (in_array($link->getTarget(), $packagesInTree)) { - $results[] = array($package, $link, false); + $results[] = [$package, $link, false]; continue; } $packagesInTree[] = $link->getTarget(); - $dependents = $recurse ? $this->getDependents($link->getTarget(), null, false, true, $packagesInTree) : array(); - $results[] = array($package, $link, $dependents); + $dependents = $recurse ? $this->getDependents($link->getTarget(), null, false, true, $packagesInTree) : []; + $results[] = [$package, $link, $dependents]; $needles[] = $link->getTarget(); } } @@ -152,12 +151,12 @@ class InstalledRepository extends CompositeRepository if ($constraint === null || ($link->getConstraint()->matches($constraint) === !$invert)) { // already displayed this node's dependencies, cutting short if (in_array($link->getSource(), $packagesInTree)) { - $results[] = array($package, $link, false); + $results[] = [$package, $link, false]; continue; } $packagesInTree[] = $link->getSource(); - $dependents = $recurse ? $this->getDependents($link->getSource(), null, false, true, $packagesInTree) : array(); - $results[] = array($package, $link, $dependents); + $dependents = $recurse ? $this->getDependents($link->getSource(), null, false, true, $packagesInTree) : []; + $results[] = [$package, $link, $dependents]; } } } @@ -169,7 +168,7 @@ class InstalledRepository extends CompositeRepository foreach ($this->findPackages($link->getTarget()) as $pkg) { $version = new Constraint('=', $pkg->getVersion()); if ($link->getConstraint()->matches($version) === $invert) { - $results[] = array($package, $link, false); + $results[] = [$package, $link, false]; } } } @@ -181,7 +180,7 @@ class InstalledRepository extends CompositeRepository foreach ($this->findPackages($link->getTarget()) as $pkg) { $version = new Constraint('=', $pkg->getVersion()); if ($link->getConstraint()->matches($version) === $invert) { - $results[] = array($package, $link, false); + $results[] = [$package, $link, false]; } } } @@ -197,7 +196,7 @@ class InstalledRepository extends CompositeRepository $platformPkg = $this->findPackage($link->getTarget(), '*'); $description = $platformPkg ? 'but '.$platformPkg->getPrettyVersion().' is installed' : 'but it is missing'; - $results[] = array($package, new Link($package->getName(), $link->getTarget(), new MatchAllConstraint, Link::TYPE_REQUIRE, $link->getPrettyConstraint().' '.$description), false); + $results[] = [$package, new Link($package->getName(), $link->getTarget(), new MatchAllConstraint, Link::TYPE_REQUIRE, $link->getPrettyConstraint().' '.$description), false]; continue; } @@ -224,17 +223,17 @@ class InstalledRepository extends CompositeRepository if ($rootPackage) { foreach (array_merge($rootPackage->getRequires(), $rootPackage->getDevRequires()) as $rootReq) { if (in_array($rootReq->getTarget(), $pkg->getNames()) && !$rootReq->getConstraint()->matches($link->getConstraint())) { - $results[] = array($package, $link, false); - $results[] = array($rootPackage, $rootReq, false); + $results[] = [$package, $link, false]; + $results[] = [$rootPackage, $rootReq, false]; continue 3; } } - $results[] = array($package, $link, false); - $results[] = array($rootPackage, new Link($rootPackage->getName(), $link->getTarget(), new MatchAllConstraint, Link::TYPE_DOES_NOT_REQUIRE, 'but ' . $pkg->getPrettyVersion() . ' is installed'), false); + $results[] = [$package, $link, false]; + $results[] = [$rootPackage, new Link($rootPackage->getName(), $link->getTarget(), new MatchAllConstraint, Link::TYPE_DOES_NOT_REQUIRE, 'but ' . $pkg->getPrettyVersion() . ' is installed'), false]; } else { // no root so let's just print whatever we found - $results[] = array($package, $link, false); + $results[] = [$package, $link, false]; } } diff --git a/src/Composer/Repository/PackageRepository.php b/src/Composer/Repository/PackageRepository.php index 4fbadccef..67aadc42a 100644 --- a/src/Composer/Repository/PackageRepository.php +++ b/src/Composer/Repository/PackageRepository.php @@ -38,7 +38,7 @@ class PackageRepository extends ArrayRepository // make sure we have an array of package definitions if (!is_numeric(key($this->config))) { - $this->config = array($this->config); + $this->config = [$this->config]; } } diff --git a/src/Composer/Repository/PathRepository.php b/src/Composer/Repository/PathRepository.php index 777cb2f10..06676e73e 100644 --- a/src/Composer/Repository/PathRepository.php +++ b/src/Composer/Repository/PathRepository.php @@ -16,8 +16,6 @@ use Composer\Config; use Composer\EventDispatcher\EventDispatcher; use Composer\IO\IOInterface; use Composer\Json\JsonFile; -use Composer\Package\CompleteAliasPackage; -use Composer\Package\CompletePackage; use Composer\Package\Loader\ArrayLoader; use Composer\Package\Version\VersionGuesser; use Composer\Package\Version\VersionParser; @@ -108,10 +106,8 @@ class PathRepository extends ArrayRepository implements ConfigurableRepositoryIn * Initializes path repository. * * @param array{url?: string, options?: array{symlink?: bool, reference?: string, relative?: bool, versions?: array}} $repoConfig - * @param IOInterface $io - * @param Config $config */ - public function __construct(array $repoConfig, IOInterface $io, Config $config, HttpDownloader $httpDownloader = null, EventDispatcher $dispatcher = null, ProcessExecutor $process = null) + public function __construct(array $repoConfig, IOInterface $io, Config $config, ?HttpDownloader $httpDownloader = null, ?EventDispatcher $dispatcher = null, ?ProcessExecutor $process = null) { if (!isset($repoConfig['url'])) { throw new \RuntimeException('You must specify the `url` configuration for the path repository'); @@ -122,7 +118,7 @@ class PathRepository extends ArrayRepository implements ConfigurableRepositoryIn $this->process = $process ?? new ProcessExecutor($io); $this->versionGuesser = new VersionGuesser($config, $this->process, new VersionParser()); $this->repoConfig = $repoConfig; - $this->options = $repoConfig['options'] ?? array(); + $this->options = $repoConfig['options'] ?? []; if (!isset($this->options['relative'])) { $filesystem = new Filesystem(); $this->options['relative'] = !$filesystem->isAbsolutePath($this->url); @@ -177,10 +173,10 @@ class PathRepository extends ArrayRepository implements ConfigurableRepositoryIn $json = file_get_contents($composerFilePath); $package = JsonFile::parseJson($json, $composerFilePath); - $package['dist'] = array( + $package['dist'] = [ 'type' => 'path', 'url' => $url, - ); + ]; $reference = $this->options['reference'] ?? 'auto'; if ('none' === $reference) { $package['dist']['reference'] = null; @@ -189,7 +185,7 @@ class PathRepository extends ArrayRepository implements ConfigurableRepositoryIn } // copy symlink/relative options to transport options - $package['transport-options'] = array_intersect_key($this->options, array('symlink' => true, 'relative' => true)); + $package['transport-options'] = array_intersect_key($this->options, ['symlink' => true, 'relative' => true]); // use the version provided as option if available if (isset($package['name'], $this->options['versions'][$package['name']])) { $package['version'] = $this->options['versions'][$package['name']]; diff --git a/src/Composer/Repository/PlatformRepository.php b/src/Composer/Repository/PlatformRepository.php index 22feb91d6..4c9d76bee 100644 --- a/src/Composer/Repository/PlatformRepository.php +++ b/src/Composer/Repository/PlatformRepository.php @@ -55,14 +55,14 @@ class PlatformRepository extends ArrayRepository * * @var array */ - private $overrides = array(); + private $overrides = []; /** * Stores which packages have been disabled and their actual version * * @var array */ - private $disabledPackages = array(); + private $disabledPackages = []; /** @var Runtime */ private $runtime; @@ -72,7 +72,7 @@ class PlatformRepository extends ArrayRepository /** * @param array $overrides */ - public function __construct(array $packages = array(), array $overrides = array(), Runtime $runtime = null, HhvmDetector $hhvmDetector = null) + public function __construct(array $packages = [], array $overrides = [], ?Runtime $runtime = null, ?HhvmDetector $hhvmDetector = null) { $this->runtime = $runtime ?: new Runtime(); $this->hhvmDetector = $hhvmDetector ?: new HhvmDetector(); @@ -83,7 +83,7 @@ class PlatformRepository extends ArrayRepository if ($name === 'php' && $version === false) { throw new \UnexpectedValueException('config.platform.'.$name.' cannot be set to false as you cannot disable php entirely.'); } - $this->overrides[strtolower($name)] = array('name' => $name, 'version' => $version); + $this->overrides[strtolower($name)] = ['name' => $name, 'version' => $version]; } parent::__construct($packages); } @@ -93,10 +93,6 @@ class PlatformRepository extends ArrayRepository return 'platform repo'; } - /** - * @param string $name - * @return bool - */ public function isPlatformPackageDisabled(string $name): bool { return isset($this->disabledPackages[$name]); @@ -179,7 +175,7 @@ class PlatformRepository extends ArrayRepository // The AF_INET6 constant is only defined if ext-sockets is available but // IPv6 support might still be available. - if ($this->runtime->hasConstant('AF_INET6') || Silencer::call(array($this->runtime, 'invoke'), 'inet_pton', array('::')) !== false) { + if ($this->runtime->hasConstant('AF_INET6') || Silencer::call([$this->runtime, 'invoke'], 'inet_pton', ['::']) !== false) { $phpIpv6 = new CompletePackage('php-ipv6', $version, $prettyVersion); $phpIpv6->setDescription('The PHP interpreter, with IPv6 support'); $this->addPackage($phpIpv6); @@ -189,7 +185,7 @@ class PlatformRepository extends ArrayRepository // Extensions scanning foreach ($loadedExtensions as $name) { - if (in_array($name, array('standard', 'Core'))) { + if (in_array($name, ['standard', 'Core'])) { continue; } @@ -240,9 +236,9 @@ class PlatformRepository extends ArrayRepository $library = strtolower($sslMatches['library']); if ($library === 'openssl') { $parsedVersion = Version::parseOpenssl($sslMatches['version'], $isFips); - $this->addLibrary($name.'-openssl'.($isFips ? '-fips' : ''), $parsedVersion, 'curl OpenSSL version ('.$parsedVersion.')', array(), $isFips ? array('curl-openssl') : array()); + $this->addLibrary($name.'-openssl'.($isFips ? '-fips' : ''), $parsedVersion, 'curl OpenSSL version ('.$parsedVersion.')', [], $isFips ? ['curl-openssl'] : []); } else { - $this->addLibrary($name.'-'.$library, $sslMatches['version'], 'curl '.$library.' version ('.$sslMatches['version'].')', array('curl-openssl')); + $this->addLibrary($name.'-'.$library, $sslMatches['version'], 'curl '.$library.' version ('.$sslMatches['version'].')', ['curl-openssl']); } } @@ -271,7 +267,7 @@ class PlatformRepository extends ArrayRepository if (Preg::isMatch('/^"Olson" Timezone Database Version => (?.+?)(\.system)?$/im', $info, $zoneinfoMatches)) { // If the timezonedb is provided by ext/timezonedb, register that version as a replacement if ($external && in_array('timezonedb', $loadedExtensions, true)) { - $this->addLibrary('timezonedb-zoneinfo', $zoneinfoMatches['version'], 'zoneinfo ("Olson") database for date (replaced by timezonedb)', array($name.'-zoneinfo')); + $this->addLibrary('timezonedb-zoneinfo', $zoneinfoMatches['version'], 'zoneinfo ("Olson") database for date (replaced by timezonedb)', [$name.'-zoneinfo']); } else { $this->addLibrary($name.'-zoneinfo', $zoneinfoMatches['version'], 'zoneinfo ("Olson") database for date'); } @@ -337,12 +333,12 @@ class PlatformRepository extends ArrayRepository // Add a separate version for the CLDR library version if ($this->runtime->hasClass('ResourceBundle')) { - $cldrVersion = $this->runtime->invoke(array('ResourceBundle', 'create'), array('root', 'ICUDATA', false))->get('Version'); + $cldrVersion = $this->runtime->invoke(['ResourceBundle', 'create'], ['root', 'ICUDATA', false])->get('Version'); $this->addLibrary('icu-cldr', $cldrVersion, 'ICU CLDR project version'); } if ($this->runtime->hasClass('IntlChar')) { - $this->addLibrary('icu-unicode', implode('.', array_slice($this->runtime->invoke(array('IntlChar', 'getUnicodeVersion')), 0, 3)), 'ICU unicode version'); + $this->addLibrary('icu-unicode', implode('.', array_slice($this->runtime->invoke(['IntlChar', 'getUnicodeVersion']), 0, 3)), 'ICU unicode version'); } break; @@ -356,7 +352,7 @@ class PlatformRepository extends ArrayRepository $version .= '.'.$matches['patch']; } - $this->addLibrary($name.'-imagemagick', $version, null, array('imagick')); + $this->addLibrary($name.'-imagemagick', $version, null, ['imagick']); break; case 'ldap': @@ -371,8 +367,8 @@ class PlatformRepository extends ArrayRepository // ext/dom, ext/simplexml, ext/xmlreader and ext/xmlwriter use the same libxml as the ext/libxml $libxmlProvides = array_map(static function ($extension): string { return $extension . '-libxml'; - }, array_intersect($loadedExtensions, array('dom', 'simplexml', 'xml', 'xmlreader', 'xmlwriter'))); - $this->addLibrary($name, $this->runtime->getConstant('LIBXML_DOTTED_VERSION'), 'libxml library version', array(), $libxmlProvides); + }, array_intersect($loadedExtensions, ['dom', 'simplexml', 'xml', 'xmlreader', 'xmlwriter'])); + $this->addLibrary($name, $this->runtime->getConstant('LIBXML_DOTTED_VERSION'), 'libxml library version', [], $libxmlProvides); break; @@ -408,7 +404,7 @@ class PlatformRepository extends ArrayRepository // OpenSSL 1.1.1g 21 Apr 2020 if (Preg::isMatch('{^(?:OpenSSL|LibreSSL)?\s*(?\S+)}i', $this->runtime->getConstant('OPENSSL_VERSION_TEXT'), $matches)) { $parsedVersion = Version::parseOpenssl($matches['version'], $isFips); - $this->addLibrary($name.($isFips ? '-fips' : ''), $parsedVersion, $this->runtime->getConstant('OPENSSL_VERSION_TEXT'), array(), $isFips ? array($name) : array()); + $this->addLibrary($name.($isFips ? '-fips' : ''), $parsedVersion, $this->runtime->getConstant('OPENSSL_VERSION_TEXT'), [], $isFips ? [$name] : []); } break; @@ -479,7 +475,7 @@ class PlatformRepository extends ArrayRepository break; case 'xsl': - $this->addLibrary('libxslt', $this->runtime->getConstant('LIBXSLT_DOTTED_VERSION'), null, array('xsl')); + $this->addLibrary('libxslt', $this->runtime->getConstant('LIBXSLT_DOTTED_VERSION'), null, ['xsl']); $info = $this->runtime->getExtensionInfo('xsl'); if (Preg::isMatch('/^libxslt compiled against libxml Version => (?.+)$/im', $info, $matches)) { @@ -497,7 +493,7 @@ class PlatformRepository extends ArrayRepository case 'zip': if ($this->runtime->hasConstant('LIBZIP_VERSION', 'ZipArchive')) { - $this->addLibrary($name.'-libzip', $this->runtime->getConstant('LIBZIP_VERSION', 'ZipArchive'), null, array('zip')); + $this->addLibrary($name.'-libzip', $this->runtime->getConstant('LIBZIP_VERSION', 'ZipArchive'), null, ['zip']); } break; @@ -580,16 +576,13 @@ class PlatformRepository extends ArrayRepository /** * @param array{version: string, name: string} $override - * @param string|null $name - * - * @return CompletePackage */ private function addOverriddenPackage(array $override, ?string $name = null): CompletePackage { $version = $this->versionParser->normalize($override['version']); $package = new CompletePackage($name ?: $override['name'], $version, $override['version']); $package->setDescription('Package overridden via config.platform'); - $package->setExtra(array('config.platform' => true)); + $package->setExtra(['config.platform' => true]); parent::addPackage($package); if ($package->getName() === 'php') { @@ -599,13 +592,10 @@ class PlatformRepository extends ArrayRepository return $package; } - /** - * @return void - */ private function addDisabledPackage(CompletePackage $package): void { $package->setDescription($package->getDescription().'. Package disabled via config.platform'); - $package->setExtra(array('config.platform' => true)); + $package->setExtra(['config.platform' => true]); $this->disabledPackages[$package->getName()] = $package; } @@ -634,33 +624,24 @@ class PlatformRepository extends ArrayRepository $ext->setDescription('The '.$name.' PHP extension'.$extraDescription); if ($name === 'uuid') { - $ext->setReplaces(array( + $ext->setReplaces([ 'lib-uuid' => new Link('ext-uuid', 'lib-uuid', new Constraint('=', $version), Link::TYPE_REPLACE, $ext->getPrettyVersion()), - )); + ]); } $this->addPackage($ext); } - /** - * @param string $name - * @return string - */ private function buildPackageName(string $name): string { return 'ext-' . str_replace(' ', '-', strtolower($name)); } /** - * @param string $name - * @param string|null $prettyVersion - * @param string|null $description * @param string[] $replaces * @param string[] $provides - * - * @return void */ - private function addLibrary(string $name, ?string $prettyVersion, ?string $description = null, array $replaces = array(), array $provides = array()): void + private function addLibrary(string $name, ?string $prettyVersion, ?string $description = null, array $replaces = [], array $provides = []): void { if (null === $prettyVersion) { return; @@ -678,12 +659,12 @@ class PlatformRepository extends ArrayRepository $lib = new CompletePackage('lib-'.$name, $version, $prettyVersion); $lib->setDescription($description); - $replaceLinks = array(); + $replaceLinks = []; foreach ($replaces as $replace) { $replace = strtolower($replace); $replaceLinks[$replace] = new Link('lib-'.$name, 'lib-'.$replace, new Constraint('=', $version), Link::TYPE_REPLACE, $lib->getPrettyVersion()); } - $provideLinks = array(); + $provideLinks = []; foreach ($provides as $provide) { $provide = strtolower($provide); $provideLinks[$provide] = new Link('lib-'.$name, 'lib-'.$provide, new Constraint('=', $version), Link::TYPE_PROVIDE, $lib->getPrettyVersion()); @@ -696,13 +677,10 @@ class PlatformRepository extends ArrayRepository /** * Check if a package name is a platform package. - * - * @param string $name - * @return bool */ public static function isPlatformPackage(string $name): bool { - static $cache = array(); + static $cache = []; if (isset($cache[$name])) { return $cache[$name]; @@ -719,7 +697,6 @@ class PlatformRepository extends ArrayRepository * be correct. * * @internal - * @return string|null */ public static function getPlatformPhpVersion(): ?string { @@ -730,7 +707,7 @@ class PlatformRepository extends ArrayRepository { // suppress vendor search as there are no vendors to match in platform packages if ($mode === self::SEARCH_VENDOR) { - return array(); + return []; } return parent::search($query, $mode, $type); diff --git a/src/Composer/Repository/RepositoryFactory.php b/src/Composer/Repository/RepositoryFactory.php index e24fa1596..62e918324 100644 --- a/src/Composer/Repository/RepositoryFactory.php +++ b/src/Composer/Repository/RepositoryFactory.php @@ -27,23 +27,19 @@ use Composer\Json\JsonFile; class RepositoryFactory { /** - * @param IOInterface $io - * @param Config $config - * @param string $repository - * @param bool $allowFilesystem * @return array|mixed */ public static function configFromString(IOInterface $io, Config $config, string $repository, bool $allowFilesystem = false) { if (0 === strpos($repository, 'http')) { - $repoConfig = array('type' => 'composer', 'url' => $repository); + $repoConfig = ['type' => 'composer', 'url' => $repository]; } elseif ("json" === pathinfo($repository, PATHINFO_EXTENSION)) { $json = new JsonFile($repository, Factory::createHttpDownloader($io, $config)); $data = $json->read(); if (!empty($data['packages']) || !empty($data['includes']) || !empty($data['provider-includes'])) { - $repoConfig = array('type' => 'composer', 'url' => 'file://' . strtr(realpath($repository), '\\', '/')); + $repoConfig = ['type' => 'composer', 'url' => 'file://' . strtr(realpath($repository), '\\', '/')]; } elseif ($allowFilesystem) { - $repoConfig = array('type' => 'filesystem', 'json' => $json); + $repoConfig = ['type' => 'filesystem', 'json' => $json]; } else { throw new \InvalidArgumentException("Invalid repository URL ($repository) given. This file does not contain a valid composer repository."); } @@ -57,14 +53,7 @@ class RepositoryFactory return $repoConfig; } - /** - * @param IOInterface $io - * @param Config $config - * @param string $repository - * @param bool $allowFilesystem - * @return RepositoryInterface - */ - public static function fromString(IOInterface $io, Config $config, string $repository, bool $allowFilesystem = false, RepositoryManager $rm = null): RepositoryInterface + public static function fromString(IOInterface $io, Config $config, string $repository, bool $allowFilesystem = false, ?RepositoryManager $rm = null): RepositoryInterface { $repoConfig = static::configFromString($io, $config, $repository, $allowFilesystem); @@ -72,29 +61,23 @@ class RepositoryFactory } /** - * @param IOInterface $io - * @param Config $config * @param array $repoConfig - * @return RepositoryInterface */ - public static function createRepo(IOInterface $io, Config $config, array $repoConfig, RepositoryManager $rm = null): RepositoryInterface + public static function createRepo(IOInterface $io, Config $config, array $repoConfig, ?RepositoryManager $rm = null): RepositoryInterface { if (!$rm) { @trigger_error('Not passing a repository manager when calling createRepo is deprecated since Composer 2.3.6', E_USER_DEPRECATED); $rm = static::manager($io, $config); } - $repos = self::createRepos($rm, array($repoConfig)); + $repos = self::createRepos($rm, [$repoConfig]); return reset($repos); } /** - * @param IOInterface|null $io - * @param Config|null $config - * @param RepositoryManager|null $rm * @return RepositoryInterface[] */ - public static function defaultRepos(IOInterface $io = null, Config $config = null, RepositoryManager $rm = null): array + public static function defaultRepos(?IOInterface $io = null, ?Config $config = null, ?RepositoryManager $rm = null): array { if (null === $rm) { @trigger_error('Not passing a repository manager when calling defaultRepos is deprecated since Composer 2.3.6, use defaultReposWithDefaultManager() instead if you cannot get a manager.', E_USER_DEPRECATED); @@ -117,13 +100,10 @@ class RepositoryFactory } /** - * @param IOInterface $io - * @param Config $config * @param EventDispatcher $eventDispatcher * @param HttpDownloader $httpDownloader - * @return RepositoryManager */ - public static function manager(IOInterface $io, Config $config, HttpDownloader $httpDownloader = null, EventDispatcher $eventDispatcher = null, ProcessExecutor $process = null): RepositoryManager + public static function manager(IOInterface $io, Config $config, ?HttpDownloader $httpDownloader = null, ?EventDispatcher $eventDispatcher = null, ?ProcessExecutor $process = null): RepositoryManager { if ($httpDownloader === null) { $httpDownloader = Factory::createHttpDownloader($io, $config); @@ -164,7 +144,6 @@ class RepositoryFactory return RepositoryFactory::defaultRepos($io, $config, $manager); } - /** * @param array $repoConfigs * @@ -172,7 +151,7 @@ class RepositoryFactory */ private static function createRepos(RepositoryManager $rm, array $repoConfigs): array { - $repos = array(); + $repos = []; foreach ($repoConfigs as $index => $repo) { if (is_string($repo)) { @@ -200,8 +179,6 @@ class RepositoryFactory * @param int|string $index * @param array{url?: string} $repo * @param array $existingRepos - * - * @return string */ public static function generateRepositoryName($index, array $repo, array $existingRepos): string { diff --git a/src/Composer/Repository/RepositoryInterface.php b/src/Composer/Repository/RepositoryInterface.php index 9b612f610..c26248801 100644 --- a/src/Composer/Repository/RepositoryInterface.php +++ b/src/Composer/Repository/RepositoryInterface.php @@ -81,7 +81,7 @@ interface RepositoryInterface extends \Countable * @phpstan-param array $packageNameMap * @phpstan-return array{namesFound: array, packages: array} */ - public function loadPackages(array $packageNameMap, array $acceptableStabilities, array $stabilityFlags, array $alreadyLoaded = array()); + public function loadPackages(array $packageNameMap, array $acceptableStabilities, array $stabilityFlags, array $alreadyLoaded = []); /** * Searches the repository for packages containing the query diff --git a/src/Composer/Repository/RepositoryManager.php b/src/Composer/Repository/RepositoryManager.php index d1b516cb4..65dad875e 100644 --- a/src/Composer/Repository/RepositoryManager.php +++ b/src/Composer/Repository/RepositoryManager.php @@ -31,9 +31,9 @@ class RepositoryManager /** @var InstalledRepositoryInterface */ private $localRepository; /** @var list */ - private $repositories = array(); + private $repositories = []; /** @var array> */ - private $repositoryClasses = array(); + private $repositoryClasses = []; /** @var IOInterface */ private $io; /** @var Config */ @@ -45,7 +45,7 @@ class RepositoryManager /** @var ProcessExecutor */ private $process; - public function __construct(IOInterface $io, Config $config, HttpDownloader $httpDownloader, EventDispatcher $eventDispatcher = null, ProcessExecutor $process = null) + public function __construct(IOInterface $io, Config $config, HttpDownloader $httpDownloader, ?EventDispatcher $eventDispatcher = null, ?ProcessExecutor $process = null) { $this->io = $io; $this->config = $config; @@ -59,8 +59,6 @@ class RepositoryManager * * @param string $name package name * @param string|\Composer\Semver\Constraint\ConstraintInterface $constraint package version or version constraint to match against - * - * @return PackageInterface|null */ public function findPackage(string $name, $constraint): ?PackageInterface { @@ -84,7 +82,7 @@ class RepositoryManager */ public function findPackages(string $name, $constraint): array { - $packages = array(); + $packages = []; foreach ($this->getRepositories() as $repository) { $packages = array_merge($packages, $repository->findPackages($name, $constraint)); @@ -97,8 +95,6 @@ class RepositoryManager * Adds repository * * @param RepositoryInterface $repository repository instance - * - * @return void */ public function addRepository(RepositoryInterface $repository): void { @@ -111,8 +107,6 @@ class RepositoryManager * This is useful when injecting additional repositories that should trump Packagist, e.g. from a plugin. * * @param RepositoryInterface $repository repository instance - * - * @return void */ public function prependRepository(RepositoryInterface $repository): void { @@ -126,9 +120,8 @@ class RepositoryManager * @param array $config repository configuration * @param string $name repository name * @throws \InvalidArgumentException if repository for provided type is not registered - * @return RepositoryInterface */ - public function createRepository(string $type, array $config, string $name = null): RepositoryInterface + public function createRepository(string $type, array $config, ?string $name = null): RepositoryInterface { if (!isset($this->repositoryClasses[$type])) { throw new \InvalidArgumentException('Repository type is not registered: '.$type); @@ -159,8 +152,6 @@ class RepositoryManager * * @param string $type installation type * @param class-string $class class name of the repo implementation - * - * @return void */ public function setRepositoryClass(string $type, $class): void { @@ -181,8 +172,6 @@ class RepositoryManager * Sets local repository for the project. * * @param InstalledRepositoryInterface $repository repository instance - * - * @return void */ public function setLocalRepository(InstalledRepositoryInterface $repository): void { @@ -191,8 +180,6 @@ class RepositoryManager /** * Returns local repository for the project. - * - * @return InstalledRepositoryInterface */ public function getLocalRepository(): InstalledRepositoryInterface { diff --git a/src/Composer/Repository/RepositorySet.php b/src/Composer/Repository/RepositorySet.php index 3f408ad0d..34164e453 100644 --- a/src/Composer/Repository/RepositorySet.php +++ b/src/Composer/Repository/RepositorySet.php @@ -60,7 +60,7 @@ class RepositorySet private $rootReferences; /** @var RepositoryInterface[] */ - private $repositories = array(); + private $repositories = []; /** * @var int[] array of stability => BasePackage::STABILITY_* value @@ -95,7 +95,6 @@ class RepositorySet * passing minimumStability is all you need to worry about. The rest is for advanced pool creation including * aliases, pinned references and other special cases. * - * @param string $minimumStability * @param int[] $stabilityFlags an array of package name => BasePackage::STABILITY_* value * @phpstan-param array $stabilityFlags * @param array[] $rootAliases @@ -106,12 +105,12 @@ class RepositorySet * @phpstan-param array $rootRequires * @param array $temporaryConstraints Runtime temporary constraints that will be used to filter packages */ - public function __construct(string $minimumStability = 'stable', array $stabilityFlags = array(), array $rootAliases = array(), array $rootReferences = array(), array $rootRequires = array(), array $temporaryConstraints = []) + public function __construct(string $minimumStability = 'stable', array $stabilityFlags = [], array $rootAliases = [], array $rootReferences = [], array $rootRequires = [], array $temporaryConstraints = []) { $this->rootAliases = self::getRootAliasesPerPackage($rootAliases); $this->rootReferences = $rootReferences; - $this->acceptableStabilities = array(); + $this->acceptableStabilities = []; foreach (BasePackage::$stabilities as $stability => $value) { if ($value <= BasePackage::$stabilities[$minimumStability]) { $this->acceptableStabilities[$stability] = $value; @@ -128,11 +127,6 @@ class RepositorySet $this->temporaryConstraints = $temporaryConstraints; } - /** - * @param bool $allow - * - * @return void - */ public function allowInstalledRepositories(bool $allow = true): void { $this->allowInstalledRepositories = $allow; @@ -162,8 +156,6 @@ class RepositorySet * repository the search for that package ends, and following repos will not be consulted. * * @param RepositoryInterface $repo A package repository - * - * @return void */ public function addRepository(RepositoryInterface $repo): void { @@ -174,7 +166,7 @@ class RepositorySet if ($repo instanceof CompositeRepository) { $repos = $repo->getRepositories(); } else { - $repos = array($repo); + $repos = [$repo]; } foreach ($repos as $repo) { @@ -187,24 +179,22 @@ class RepositorySet * * Returned in the order of repositories, matching priority * - * @param string $name - * @param ConstraintInterface|null $constraint * @param int $flags any of the ALLOW_* constants from this class to tweak what is returned * @return BasePackage[] */ - public function findPackages(string $name, ConstraintInterface $constraint = null, int $flags = 0): array + public function findPackages(string $name, ?ConstraintInterface $constraint = null, int $flags = 0): array { $ignoreStability = ($flags & self::ALLOW_UNACCEPTABLE_STABILITIES) !== 0; $loadFromAllRepos = ($flags & self::ALLOW_SHADOWED_REPOSITORIES) !== 0; - $packages = array(); + $packages = []; if ($loadFromAllRepos) { foreach ($this->repositories as $repository) { - $packages[] = $repository->findPackages($name, $constraint) ?: array(); + $packages[] = $repository->findPackages($name, $constraint) ?: []; } } else { foreach ($this->repositories as $repository) { - $result = $repository->loadPackages(array($name => $constraint), $ignoreStability ? BasePackage::$stabilities : $this->acceptableStabilities, $ignoreStability ? array() : $this->stabilityFlags); + $result = $repository->loadPackages([$name => $constraint], $ignoreStability ? BasePackage::$stabilities : $this->acceptableStabilities, $ignoreStability ? [] : $this->stabilityFlags); $packages[] = $result['packages']; foreach ($result['namesFound'] as $nameFound) { @@ -216,14 +206,14 @@ class RepositorySet } } - $candidates = $packages ? call_user_func_array('array_merge', $packages) : array(); + $candidates = $packages ? array_merge(...$packages) : []; // when using loadPackages above (!$loadFromAllRepos) the repos already filter for stability so no need to do it again if ($ignoreStability || !$loadFromAllRepos) { return $candidates; } - $result = array(); + $result = []; foreach ($candidates as $candidate) { if ($this->isPackageAcceptable($candidate->getNames(), $candidate->getStability())) { $result[] = $candidate; @@ -285,14 +275,12 @@ class RepositorySet } /** - * @param string $packageName - * * @return array[] an array with the provider name as key and value of array('name' => '...', 'description' => '...', 'type' => '...') * @phpstan-return array */ public function getProviders(string $packageName): array { - $providers = array(); + $providers = []; foreach ($this->repositories as $repository) { if ($repoProviders = $repository->getProviders($packageName)) { $providers = array_merge($providers, $repoProviders); @@ -307,7 +295,6 @@ class RepositorySet * * @param string[] $names * @param string $stability one of 'stable', 'RC', 'beta', 'alpha' or 'dev' - * @return bool */ public function isPackageAcceptable(array $names, string $stability): bool { @@ -316,10 +303,8 @@ class RepositorySet /** * Create a pool for dependency resolution from the packages in this repository set. - * - * @return Pool */ - public function createPool(Request $request, IOInterface $io, EventDispatcher $eventDispatcher = null, PoolOptimizer $poolOptimizer = null): Pool + public function createPool(Request $request, IOInterface $io, ?EventDispatcher $eventDispatcher = null, ?PoolOptimizer $poolOptimizer = null): Pool { $poolBuilder = new PoolBuilder($this->acceptableStabilities, $this->stabilityFlags, $this->rootAliases, $this->rootReferences, $io, $eventDispatcher, $poolOptimizer, $this->temporaryConstraints); @@ -336,8 +321,6 @@ class RepositorySet /** * Create a pool for dependency resolution from the packages in this repository set. - * - * @return Pool */ public function createPoolWithAllPackages(): Pool { @@ -349,7 +332,7 @@ class RepositorySet $this->locked = true; - $packages = array(); + $packages = []; foreach ($this->repositories as $repository) { foreach ($repository->getPackages() as $package) { $packages[] = $package; @@ -373,23 +356,16 @@ class RepositorySet return new Pool($packages); } - /** - * @param string $packageName - * - * @return Pool - */ - public function createPoolForPackage(string $packageName, LockArrayRepository $lockedRepo = null): Pool + public function createPoolForPackage(string $packageName, ?LockArrayRepository $lockedRepo = null): Pool { // TODO unify this with above in some simpler version without "request"? - return $this->createPoolForPackages(array($packageName), $lockedRepo); + return $this->createPoolForPackages([$packageName], $lockedRepo); } /** * @param string[] $packageNames - * - * @return Pool */ - public function createPoolForPackages(array $packageNames, LockArrayRepository $lockedRepo = null): Pool + public function createPoolForPackages(array $packageNames, ?LockArrayRepository $lockedRepo = null): Pool { $request = new Request($lockedRepo); @@ -412,13 +388,13 @@ class RepositorySet */ private static function getRootAliasesPerPackage(array $aliases): array { - $normalizedAliases = array(); + $normalizedAliases = []; foreach ($aliases as $alias) { - $normalizedAliases[$alias['package']][$alias['version']] = array( + $normalizedAliases[$alias['package']][$alias['version']] = [ 'alias' => $alias['alias'], 'alias_normalized' => $alias['alias_normalized'], - ); + ]; } return $normalizedAliases; diff --git a/src/Composer/Repository/RepositoryUtils.php b/src/Composer/Repository/RepositoryUtils.php index f963b34b5..13de4e2ce 100644 --- a/src/Composer/Repository/RepositoryUtils.php +++ b/src/Composer/Repository/RepositoryUtils.php @@ -31,7 +31,7 @@ class RepositoryUtils * @param array $bucket Do not pass this in, only used to avoid recursion with circular deps * @return list */ - public static function filterRequiredPackages(array $packages, PackageInterface $requirer, array $bucket = array()): array + public static function filterRequiredPackages(array $packages, PackageInterface $requirer, array $bucket = []): array { $requires = $requirer->getRequires(); diff --git a/src/Composer/Repository/RootPackageRepository.php b/src/Composer/Repository/RootPackageRepository.php index 0cce7ec53..2e60e3a69 100644 --- a/src/Composer/Repository/RootPackageRepository.php +++ b/src/Composer/Repository/RootPackageRepository.php @@ -25,7 +25,7 @@ class RootPackageRepository extends ArrayRepository { public function __construct(RootPackageInterface $package) { - parent::__construct(array($package)); + parent::__construct([$package]); } public function getRepoName(): string diff --git a/src/Composer/Repository/Vcs/FossilDriver.php b/src/Composer/Repository/Vcs/FossilDriver.php index 32d54bf67..e55b0d3ac 100644 --- a/src/Composer/Repository/Vcs/FossilDriver.php +++ b/src/Composer/Repository/Vcs/FossilDriver.php @@ -68,8 +68,6 @@ class FossilDriver extends VcsDriver /** * Check that fossil can be invoked via command line. - * - * @return void */ protected function checkFossil(): void { @@ -80,8 +78,6 @@ class FossilDriver extends VcsDriver /** * Clone or update existing local fossil repository. - * - * @return void */ protected function updateLocalRepo(): void { @@ -143,7 +139,7 @@ class FossilDriver extends VcsDriver */ public function getSource(string $identifier): array { - return array('type' => 'fossil', 'url' => $this->getUrl(), 'reference' => $identifier); + return ['type' => 'fossil', 'url' => $this->getUrl(), 'reference' => $identifier]; } /** @@ -175,7 +171,7 @@ class FossilDriver extends VcsDriver public function getChangeDate(string $identifier): ?\DateTimeImmutable { $this->process->execute('fossil finfo -b -n 1 composer.json', $output, $this->checkoutDir); - list(, $date) = explode(' ', trim($output), 3); + [, $date] = explode(' ', trim($output), 3); return new \DateTimeImmutable($date, new \DateTimeZone('UTC')); } @@ -186,7 +182,7 @@ class FossilDriver extends VcsDriver public function getTags(): array { if (null === $this->tags) { - $tags = array(); + $tags = []; $this->process->execute('fossil tag list', $output, $this->checkoutDir); foreach ($this->process->splitLines($output) as $tag) { @@ -205,7 +201,7 @@ class FossilDriver extends VcsDriver public function getBranches(): array { if (null === $this->branches) { - $branches = array(); + $branches = []; $this->process->execute('fossil branch list', $output, $this->checkoutDir); foreach ($this->process->splitLines($output) as $branch) { diff --git a/src/Composer/Repository/Vcs/GitBitbucketDriver.php b/src/Composer/Repository/Vcs/GitBitbucketDriver.php index 985ed21fd..558f2d8e0 100644 --- a/src/Composer/Repository/Vcs/GitBitbucketDriver.php +++ b/src/Composer/Repository/Vcs/GitBitbucketDriver.php @@ -72,12 +72,12 @@ class GitBitbucketDriver extends VcsDriver $this->originUrl = 'bitbucket.org'; $this->cache = new Cache( $this->io, - implode('/', array( + implode('/', [ $this->config->get('cache-repo-dir'), $this->originUrl, $this->owner, $this->repository, - )) + ]) ); $this->cache->setReadOnly($this->config->get('cache-read-only')); } @@ -98,7 +98,6 @@ class GitBitbucketDriver extends VcsDriver * Attempts to fetch the repository data via the BitBucket API and * sets some parameters which are used in other methods * - * @return bool * @phpstan-impure */ protected function getRepoData(): bool @@ -108,7 +107,7 @@ class GitBitbucketDriver extends VcsDriver $this->owner, $this->repository, http_build_query( - array('fields' => '-project,-owner'), + ['fields' => '-project,-owner'], '', '&' ) @@ -269,7 +268,7 @@ class GitBitbucketDriver extends VcsDriver return $this->fallbackDriver->getSource($identifier); } - return array('type' => $this->vcsType, 'url' => $this->getUrl(), 'reference' => $identifier); + return ['type' => $this->vcsType, 'url' => $this->getUrl(), 'reference' => $identifier]; } /** @@ -288,7 +287,7 @@ class GitBitbucketDriver extends VcsDriver $identifier ); - return array('type' => 'zip', 'url' => $url, 'reference' => $identifier, 'shasum' => ''); + return ['type' => 'zip', 'url' => $url, 'reference' => $identifier, 'shasum' => '']; } /** @@ -301,16 +300,16 @@ class GitBitbucketDriver extends VcsDriver } if (null === $this->tags) { - $tags = array(); + $tags = []; $resource = sprintf( '%s?%s', $this->tagsUrl, http_build_query( - array( + [ 'pagelen' => 100, 'fields' => 'values.name,values.target.hash,next', 'sort' => '-target.date', - ), + ], '', '&' ) @@ -344,16 +343,16 @@ class GitBitbucketDriver extends VcsDriver } if (null === $this->branches) { - $branches = array(); + $branches = []; $resource = sprintf( '%s?%s', $this->branchesUrl, http_build_query( - array( + [ 'pagelen' => 100, 'fields' => 'values.name,values.target.hash,values.heads,next', 'sort' => '-target.date', - ), + ], '', '&' ) @@ -381,7 +380,6 @@ class GitBitbucketDriver extends VcsDriver * Get the remote content. * * @param string $url The URL of content - * @param bool $fetchingRepoData * * @return Response The result * @@ -394,7 +392,7 @@ class GitBitbucketDriver extends VcsDriver } catch (TransportException $e) { $bitbucketUtil = new Bitbucket($this->io, $this->config, $this->process, $this->httpDownloader); - if (in_array($e->getCode(), array(403, 404), true) || (401 === $e->getCode() && strpos($e->getMessage(), 'Could not authenticate against') === 0)) { + if (in_array($e->getCode(), [403, 404], true) || (401 === $e->getCode() && strpos($e->getMessage(), 'Could not authenticate against') === 0)) { if (!$this->io->hasAuthentication($this->originUrl) && $bitbucketUtil->authorizeOAuth($this->originUrl) ) { @@ -404,7 +402,7 @@ class GitBitbucketDriver extends VcsDriver if (!$this->io->isInteractive() && $fetchingRepoData) { $this->attemptCloneFallback(); - return new Response(array('url' => 'dummy'), 200, array(), 'null'); + return new Response(['url' => 'dummy'], 200, [], 'null'); } } @@ -414,8 +412,6 @@ class GitBitbucketDriver extends VcsDriver /** * Generate an SSH URL - * - * @return string */ protected function generateSshUrl(): string { @@ -445,14 +441,10 @@ class GitBitbucketDriver extends VcsDriver } } - /** - * @param string $url - * @return void - */ protected function setupFallbackDriver(string $url): void { $this->fallbackDriver = new GitDriver( - array('url' => $url), + ['url' => $url], $this->io, $this->config, $this->httpDownloader, @@ -463,7 +455,6 @@ class GitBitbucketDriver extends VcsDriver /** * @param array $cloneLinks - * @return void */ protected function parseCloneUrls(array $cloneLinks): void { diff --git a/src/Composer/Repository/Vcs/GitDriver.php b/src/Composer/Repository/Vcs/GitDriver.php index 731c5bde0..95b30f54f 100644 --- a/src/Composer/Repository/Vcs/GitDriver.php +++ b/src/Composer/Repository/Vcs/GitDriver.php @@ -13,7 +13,6 @@ namespace Composer\Repository\Vcs; use Composer\Pcre\Preg; -use Composer\Util\Platform; use Composer\Util\ProcessExecutor; use Composer\Util\Filesystem; use Composer\Util\Url; @@ -131,7 +130,7 @@ class GitDriver extends VcsDriver */ public function getSource(string $identifier): array { - return array('type' => 'git', 'url' => $this->getUrl(), 'reference' => $identifier); + return ['type' => 'git', 'url' => $this->getUrl(), 'reference' => $identifier]; } /** @@ -180,7 +179,7 @@ class GitDriver extends VcsDriver public function getTags(): array { if (null === $this->tags) { - $this->tags = array(); + $this->tags = []; $this->process->execute('git show-ref --tags --dereference', $output, $this->repoDir); foreach ($output = $this->process->splitLines($output) as $tag) { @@ -199,7 +198,7 @@ class GitDriver extends VcsDriver public function getBranches(): array { if (null === $this->branches) { - $branches = array(); + $branches = []; $this->process->execute('git branch --no-color --no-abbrev -v', $output, $this->repoDir); foreach ($this->process->splitLines($output) as $branch) { diff --git a/src/Composer/Repository/Vcs/GitHubDriver.php b/src/Composer/Repository/Vcs/GitHubDriver.php index 0e59f5239..7ca7bde06 100644 --- a/src/Composer/Repository/Vcs/GitHubDriver.php +++ b/src/Composer/Repository/Vcs/GitHubDriver.php @@ -81,9 +81,6 @@ class GitHubDriver extends VcsDriver $this->fetchRootIdentifier(); } - /** - * @return string - */ public function getRepositoryUrl(): string { return 'https://'.$this->originUrl.'/'.$this->owner.'/'.$this->repository; @@ -113,9 +110,6 @@ class GitHubDriver extends VcsDriver return 'https://' . $this->originUrl . '/'.$this->owner.'/'.$this->repository.'.git'; } - /** - * @return string - */ protected function getApiUrl(): string { if ('github.com' === $this->originUrl) { @@ -143,7 +137,7 @@ class GitHubDriver extends VcsDriver $url = $this->getUrl(); } - return array('type' => 'git', 'url' => $url, 'reference' => $identifier); + return ['type' => 'git', 'url' => $url, 'reference' => $identifier]; } /** @@ -153,7 +147,7 @@ class GitHubDriver extends VcsDriver { $url = $this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/zipball/'.$identifier; - return array('type' => 'zip', 'url' => $url, 'reference' => $identifier, 'shasum' => ''); + return ['type' => 'zip', 'url' => $url, 'reference' => $identifier, 'shasum' => '']; } /** @@ -212,11 +206,11 @@ class GitHubDriver extends VcsDriver return $this->fundingInfo = false; } - foreach (array($this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/contents/.github/FUNDING.yml', $this->getApiUrl() . '/repos/'.$this->owner.'/.github/contents/FUNDING.yml') as $file) { + foreach ([$this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/contents/.github/FUNDING.yml', $this->getApiUrl() . '/repos/'.$this->owner.'/.github/contents/FUNDING.yml'] as $file) { try { - $response = $this->httpDownloader->get($file, array( + $response = $this->httpDownloader->get($file, [ 'retry-auth-failure' => false, - ))->decodeJson(); + ])->decodeJson(); } catch (TransportException $e) { continue; } @@ -229,7 +223,7 @@ class GitHubDriver extends VcsDriver return $this->fundingInfo = false; } - $result = array(); + $result = []; $key = null; foreach (Preg::split('{\r?\n}', $funding) as $line) { $line = trim($line); @@ -240,10 +234,10 @@ class GitHubDriver extends VcsDriver } if (Preg::isMatch('{^\[(.*)\](?:\s*#.*)?$}', $match[2], $match2)) { foreach (array_map('trim', Preg::split('{[\'"]?\s*,\s*[\'"]?}', $match2[1])) as $item) { - $result[] = array('type' => $match[1], 'url' => trim($item, '"\' ')); + $result[] = ['type' => $match[1], 'url' => trim($item, '"\' ')]; } } elseif (Preg::isMatch('{^([^#].*?)(\s+#.*)?$}', $match[2], $match2)) { - $result[] = array('type' => $match[1], 'url' => trim($match2[1], '"\' ')); + $result[] = ['type' => $match[1], 'url' => trim($match2[1], '"\' ')]; } $key = null; } elseif (Preg::isMatch('{^(\w+)\s*:\s*#\s*$}', $line, $match)) { @@ -252,7 +246,7 @@ class GitHubDriver extends VcsDriver Preg::isMatch('{^-\s*(.+)(\s+#.*)?$}', $line, $match) || Preg::isMatch('{^(.+),(\s*#.*)?$}', $line, $match) )) { - $result[] = array('type' => $key, 'url' => trim($match[1], '"\' ')); + $result[] = ['type' => $key, 'url' => trim($match[1], '"\' ')]; } elseif ($key && $line === ']') { $key = null; } @@ -342,7 +336,7 @@ class GitHubDriver extends VcsDriver return $this->gitDriver->getTags(); } if (null === $this->tags) { - $tags = array(); + $tags = []; $resource = $this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/tags?per_page=100'; do { @@ -370,7 +364,7 @@ class GitHubDriver extends VcsDriver return $this->gitDriver->getBranches(); } if (null === $this->branches) { - $branches = array(); + $branches = []; $resource = $this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/git/refs/heads?per_page=100'; do { @@ -429,8 +423,6 @@ class GitHubDriver extends VcsDriver /** * Generate an SSH URL - * - * @return string */ protected function generateSshUrl(): string { @@ -443,8 +435,6 @@ class GitHubDriver extends VcsDriver /** * @inheritDoc - * - * @param bool $fetchingRepoData */ protected function getContents(string $url, bool $fetchingRepoData = false): Response { @@ -468,11 +458,11 @@ class GitHubDriver extends VcsDriver if (!$this->io->isInteractive()) { $this->attemptCloneFallback(); - return new Response(array('url' => 'dummy'), 200, array(), 'null'); + return new Response(['url' => 'dummy'], 200, [], 'null'); } - $scopesIssued = array(); - $scopesNeeded = array(); + $scopesIssued = []; + $scopesNeeded = []; if ($headers = $e->getHeaders()) { if ($scopes = Response::findHeaderValue($headers, 'X-OAuth-Scopes')) { $scopesIssued = explode(' ', $scopes); @@ -498,7 +488,7 @@ class GitHubDriver extends VcsDriver if (!$this->io->isInteractive() && $fetchingRepoData) { $this->attemptCloneFallback(); - return new Response(array('url' => 'dummy'), 200, array(), 'null'); + return new Response(['url' => 'dummy'], 200, [], 'null'); } $rateLimited = $gitHubUtil->isRateLimited((array) $e->getHeaders()); @@ -534,7 +524,6 @@ class GitHubDriver extends VcsDriver /** * Fetch root identifier from GitHub * - * @return void * @throws TransportException */ protected function fetchRootIdentifier(): void @@ -599,15 +588,10 @@ class GitHubDriver extends VcsDriver } } - /** - * @param string $url - * - * @return void - */ protected function setupGitDriver(string $url): void { $this->gitDriver = new GitDriver( - array('url' => $url), + ['url' => $url], $this->io, $this->config, $this->httpDownloader, @@ -616,9 +600,6 @@ class GitHubDriver extends VcsDriver $this->gitDriver->initialize(); } - /** - * @return string|null - */ protected function getNextPage(Response $response): ?string { $header = $response->getHeader('link'); diff --git a/src/Composer/Repository/Vcs/GitLabDriver.php b/src/Composer/Repository/Vcs/GitLabDriver.php index bbcd2a005..8bdea65a9 100644 --- a/src/Composer/Repository/Vcs/GitLabDriver.php +++ b/src/Composer/Repository/Vcs/GitLabDriver.php @@ -48,7 +48,7 @@ class GitLabDriver extends VcsDriver /** * @var array Keeps commits returned by GitLab API as commit id => info */ - private $commits = array(); + private $commits = []; /** @var array Map of tag name to identifier */ private $tags; @@ -113,7 +113,7 @@ class GitLabDriver extends VcsDriver if (is_string($protocol = $this->config->get('gitlab-protocol'))) { // https treated as a synonym for http. - if (!in_array($protocol, array('git', 'http', 'https'))) { + if (!in_array($protocol, ['git', 'http', 'https'])) { throw new \RuntimeException('gitlab-protocol must be one of git, http.'); } $this->protocol = $protocol === 'git' ? 'ssh' : 'http'; @@ -137,8 +137,6 @@ class GitLabDriver extends VcsDriver * Mainly useful for tests. * * @internal - * - * @return void */ public function setHttpDownloader(HttpDownloader $httpDownloader): void { @@ -233,9 +231,6 @@ class GitLabDriver extends VcsDriver return null; } - /** - * @return string - */ public function getRepositoryUrl(): string { if ($this->protocol) { @@ -264,7 +259,7 @@ class GitLabDriver extends VcsDriver { $url = $this->getApiUrl().'/repository/archive.zip?sha='.$identifier; - return array('type' => 'zip', 'url' => $url, 'reference' => $identifier, 'shasum' => ''); + return ['type' => 'zip', 'url' => $url, 'reference' => $identifier, 'shasum' => '']; } /** @@ -276,7 +271,7 @@ class GitLabDriver extends VcsDriver return $this->gitDriver->getSource($identifier); } - return array('type' => 'git', 'url' => $this->getRepositoryUrl(), 'reference' => $identifier); + return ['type' => 'git', 'url' => $this->getRepositoryUrl(), 'reference' => $identifier]; } /** @@ -333,16 +328,13 @@ class GitLabDriver extends VcsDriver /** * Urlencode all non alphanumeric characters. rawurlencode() can not be used as it does not encode `.` - * - * @param string $string - * @return string */ private function urlEncodeAll(string $string): string { $encoded = ''; for ($i = 0; isset($string[$i]); $i++) { $character = $string[$i]; - if (!ctype_alnum($character) && !in_array($character, array('-', '_'), true)) { + if (!ctype_alnum($character) && !in_array($character, ['-', '_'], true)) { $character = '%' . sprintf('%02X', ord($character)); } $encoded .= $character; @@ -352,8 +344,6 @@ class GitLabDriver extends VcsDriver } /** - * @param string $type - * * @return string[] where keys are named references like tags or branches and the value a sha */ protected function getReferences(string $type): array @@ -361,7 +351,7 @@ class GitLabDriver extends VcsDriver $perPage = 100; $resource = $this->getApiUrl().'/repository/'.$type.'?per_page='.$perPage; - $references = array(); + $references = []; do { $response = $this->getContents($resource); $data = $response->decodeJson(); @@ -384,9 +374,6 @@ class GitLabDriver extends VcsDriver return $references; } - /** - * @return void - */ protected function fetchProject(): void { // we need to fetch the default branch from the api @@ -431,8 +418,6 @@ class GitLabDriver extends VcsDriver /** * Generate an SSH URL - * - * @return string */ protected function generateSshUrl(): string { @@ -443,23 +428,15 @@ class GitLabDriver extends VcsDriver return 'git@' . $this->originUrl . ':'.$this->namespace.'/'.$this->repository.'.git'; } - /** - * @return string - */ protected function generatePublicUrl(): string { return $this->scheme . '://' . $this->originUrl . '/'.$this->namespace.'/'.$this->repository.'.git'; } - /** - * @param string $url - * - * @return void - */ protected function setupGitDriver(string $url): void { $this->gitDriver = new GitDriver( - array('url' => $url), + ['url' => $url], $this->io, $this->config, $this->httpDownloader, @@ -470,8 +447,6 @@ class GitLabDriver extends VcsDriver /** * @inheritDoc - * - * @param bool $fetchingRepoData */ protected function getContents(string $url, bool $fetchingRepoData = false): Response { @@ -502,7 +477,7 @@ class GitLabDriver extends VcsDriver $this->attemptCloneFallback(); - return new Response(array('url' => 'dummy'), 200, array(), 'null'); + return new Response(['url' => 'dummy'], 200, [], 'null'); } } @@ -544,7 +519,7 @@ class GitLabDriver extends VcsDriver if (!$this->io->isInteractive()) { $this->attemptCloneFallback(); - return new Response(array('url' => 'dummy'), 200, array(), 'null'); + return new Response(['url' => 'dummy'], 200, [], 'null'); } $this->io->writeError('Failed to download ' . $this->namespace . '/' . $this->repository . ':' . $e->getMessage() . ''); $gitLabUtil->authorizeOAuthInteractively($this->scheme, $this->originUrl, 'Your credentials are required to fetch private repository metadata ('.$this->url.')'); @@ -559,7 +534,7 @@ class GitLabDriver extends VcsDriver if (!$this->io->isInteractive() && $fetchingRepoData) { $this->attemptCloneFallback(); - return new Response(array('url' => 'dummy'), 200, array(), 'null'); + return new Response(['url' => 'dummy'], 200, [], 'null'); } throw $e; @@ -599,9 +574,6 @@ class GitLabDriver extends VcsDriver return true; } - /** - * @return string|null - */ protected function getNextPage(Response $response): ?string { $header = $response->getHeader('link'); @@ -618,7 +590,6 @@ class GitLabDriver extends VcsDriver /** * @param array $configuredDomains - * @param string $guessedDomain * @param array $urlParts * @param string $portNumber * diff --git a/src/Composer/Repository/Vcs/HgDriver.php b/src/Composer/Repository/Vcs/HgDriver.php index 73ad1a2e3..477dea59c 100644 --- a/src/Composer/Repository/Vcs/HgDriver.php +++ b/src/Composer/Repository/Vcs/HgDriver.php @@ -110,7 +110,7 @@ class HgDriver extends VcsDriver */ public function getSource(string $identifier): array { - return array('type' => 'hg', 'url' => $this->getUrl(), 'reference' => $identifier); + return ['type' => 'hg', 'url' => $this->getUrl(), 'reference' => $identifier]; } /** @@ -163,7 +163,7 @@ class HgDriver extends VcsDriver public function getTags(): array { if (null === $this->tags) { - $tags = array(); + $tags = []; $this->process->execute('hg tags', $output, $this->repoDir); foreach ($this->process->splitLines($output) as $tag) { @@ -185,8 +185,8 @@ class HgDriver extends VcsDriver public function getBranches(): array { if (null === $this->branches) { - $branches = array(); - $bookmarks = array(); + $branches = []; + $bookmarks = []; $this->process->execute('hg branches', $output, $this->repoDir); foreach ($this->process->splitLines($output) as $branch) { diff --git a/src/Composer/Repository/Vcs/PerforceDriver.php b/src/Composer/Repository/Vcs/PerforceDriver.php index 396c94894..a77c8c94c 100644 --- a/src/Composer/Repository/Vcs/PerforceDriver.php +++ b/src/Composer/Repository/Vcs/PerforceDriver.php @@ -53,8 +53,6 @@ class PerforceDriver extends VcsDriver /** * @param array $repoConfig - * - * @return void */ private function initPerforce(array $repoConfig): void { @@ -123,12 +121,12 @@ class PerforceDriver extends VcsDriver */ public function getSource(string $identifier): array { - return array( + return [ 'type' => 'perforce', 'url' => $this->repoConfig['url'], 'reference' => $identifier, 'p4user' => $this->perforce->getUser(), - ); + ]; } /** @@ -178,17 +176,11 @@ class PerforceDriver extends VcsDriver $this->perforce = null; } - /** - * @return string - */ public function getDepot(): string { return $this->depot; } - /** - * @return string - */ public function getBranch(): string { return $this->branch; diff --git a/src/Composer/Repository/Vcs/SvnDriver.php b/src/Composer/Repository/Vcs/SvnDriver.php index 579a46bea..d1d67a14c 100644 --- a/src/Composer/Repository/Vcs/SvnDriver.php +++ b/src/Composer/Repository/Vcs/SvnDriver.php @@ -111,7 +111,7 @@ class SvnDriver extends VcsDriver */ public function getSource(string $identifier): array { - return array('type' => 'svn', 'url' => $this->baseUrl, 'reference' => $identifier); + return ['type' => 'svn', 'url' => $this->baseUrl, 'reference' => $identifier]; } /** @@ -173,10 +173,6 @@ class SvnDriver extends VcsDriver return $this->infoCache[$identifier]; } - /** - * @param string $file - * @param string $identifier - */ public function getFileContent(string $file, string $identifier): ?string { $identifier = '/' . trim($identifier, '/') . '/'; @@ -235,7 +231,7 @@ class SvnDriver extends VcsDriver public function getTags(): array { if (null === $this->tags) { - $tags = array(); + $tags = []; if ($this->tagsPath !== false) { $output = $this->execute('svn ls --verbose', $this->baseUrl . '/' . $this->tagsPath); @@ -266,7 +262,7 @@ class SvnDriver extends VcsDriver public function getBranches(): array { if (null === $this->branches) { - $branches = array(); + $branches = []; if (false === $this->trunkPath) { $trunkParent = $this->baseUrl . '/'; @@ -360,10 +356,6 @@ class SvnDriver extends VcsDriver /** * An absolute path (leading '/') is converted to a file:// url. - * - * @param string $url - * - * @return string */ protected static function normalizeUrl(string $url): string { @@ -382,7 +374,6 @@ class SvnDriver extends VcsDriver * @param string $command The svn command to run. * @param string $url The SVN URL. * @throws \RuntimeException - * @return string */ protected function execute(string $command, string $url): string { @@ -409,8 +400,6 @@ class SvnDriver extends VcsDriver * * @param string $baseDir The path to trunk/branch/tag * @param string $revision The revision mark to add to identifier - * - * @return string */ protected function buildIdentifier(string $baseDir, string $revision): string { diff --git a/src/Composer/Repository/Vcs/VcsDriver.php b/src/Composer/Repository/Vcs/VcsDriver.php index 74fcfd76c..b780304f3 100644 --- a/src/Composer/Repository/Vcs/VcsDriver.php +++ b/src/Composer/Repository/Vcs/VcsDriver.php @@ -45,7 +45,7 @@ abstract class VcsDriver implements VcsDriverInterface /** @var HttpDownloader */ protected $httpDownloader; /** @var array */ - protected $infoCache = array(); + protected $infoCache = []; /** @var ?Cache */ protected $cache; @@ -75,9 +75,6 @@ abstract class VcsDriver implements VcsDriverInterface /** * Returns whether or not the given $identifier should be cached or not. - * - * @param string $identifier - * @return bool */ protected function shouldCache(string $identifier): bool { @@ -107,8 +104,6 @@ abstract class VcsDriver implements VcsDriverInterface } /** - * @param string $identifier - * * @return array|null */ protected function getBaseComposerInformation(string $identifier): ?array @@ -166,12 +161,11 @@ abstract class VcsDriver implements VcsDriverInterface * * @param string $url The URL of content * - * @return Response * @throws TransportException */ protected function getContents(string $url): Response { - $options = $this->repoConfig['options'] ?? array(); + $options = $this->repoConfig['options'] ?? []; return $this->httpDownloader->get($url, $options); } @@ -181,6 +175,5 @@ abstract class VcsDriver implements VcsDriverInterface */ public function cleanup(): void { - } } diff --git a/src/Composer/Repository/Vcs/VcsDriverInterface.php b/src/Composer/Repository/Vcs/VcsDriverInterface.php index fd5684851..96a4b8ad3 100644 --- a/src/Composer/Repository/Vcs/VcsDriverInterface.php +++ b/src/Composer/Repository/Vcs/VcsDriverInterface.php @@ -23,8 +23,6 @@ interface VcsDriverInterface { /** * Initializes the driver (git clone, svn checkout, fetch info etc) - * - * @return void */ public function initialize(): void; @@ -38,17 +36,11 @@ interface VcsDriverInterface /** * Return the content of $file or null if the file does not exist. - * - * @param string $file - * @param string $identifier - * @return string|null */ public function getFileContent(string $file, string $identifier): ?string; /** * Get the changedate for $identifier. - * - * @param string $identifier */ public function getChangeDate(string $identifier): ?\DateTimeImmutable; @@ -89,8 +81,6 @@ interface VcsDriverInterface /** * Return the URL of the repository - * - * @return string */ public function getUrl(): string; @@ -105,8 +95,6 @@ interface VcsDriverInterface /** * Performs any cleanup necessary as the driver is not longer needed - * - * @return void */ public function cleanup(): void; @@ -117,7 +105,6 @@ interface VcsDriverInterface * @param Config $config current $config * @param string $url URL to validate/check * @param bool $deep unless true, only shallow checks (url matching typically) should be done - * @return bool */ public static function supports(IOInterface $io, Config $config, string $url, bool $deep = false): bool; } diff --git a/src/Composer/Repository/VcsRepository.php b/src/Composer/Repository/VcsRepository.php index 95828c1e2..75b138b79 100644 --- a/src/Composer/Repository/VcsRepository.php +++ b/src/Composer/Repository/VcsRepository.php @@ -66,18 +66,18 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt /** @var ?VersionCacheInterface */ private $versionCache; /** @var string[] */ - private $emptyReferences = array(); + private $emptyReferences = []; /** @var array<'tags'|'branches', array> */ - private $versionTransportExceptions = array(); + private $versionTransportExceptions = []; /** * @param array{url: string, type?: string}&array $repoConfig * @param array>|null $drivers */ - public function __construct(array $repoConfig, IOInterface $io, Config $config, HttpDownloader $httpDownloader, EventDispatcher $dispatcher = null, ProcessExecutor $process = null, array $drivers = null, VersionCacheInterface $versionCache = null) + public function __construct(array $repoConfig, IOInterface $io, Config $config, HttpDownloader $httpDownloader, ?EventDispatcher $dispatcher = null, ?ProcessExecutor $process = null, ?array $drivers = null, ?VersionCacheInterface $versionCache = null) { parent::__construct(); - $this->drivers = $drivers ?: array( + $this->drivers = $drivers ?: [ 'github' => 'Composer\Repository\Vcs\GitHubDriver', 'gitlab' => 'Composer\Repository\Vcs\GitLabDriver', 'bitbucket' => 'Composer\Repository\Vcs\GitBitbucketDriver', @@ -88,7 +88,7 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt 'fossil' => 'Composer\Repository\Vcs\FossilDriver', // svn must be last because identifying a subversion server for sure is practically impossible 'svn' => 'Composer\Repository\Vcs\SvnDriver', - ); + ]; $this->url = $repoConfig['url']; $this->io = $io; @@ -118,17 +118,11 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt return $this->repoConfig; } - /** - * @return void - */ public function setLoader(LoaderInterface $loader): void { $this->loader = $loader; } - /** - * @return VcsDriverInterface|null - */ public function getDriver(): ?VcsDriverInterface { if ($this->driver) { @@ -164,9 +158,6 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt return null; } - /** - * @return bool - */ public function hadInvalidBranches(): bool { return $this->branchErrorOccurred; @@ -328,7 +319,7 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt $branches = $driver->getBranches(); // make sure the root identifier branch gets loaded first if ($hasRootIdentifierComposerJson && isset($branches[$driver->getRootIdentifier()])) { - $branches = array($driver->getRootIdentifier() => $branches[$driver->getRootIdentifier()]) + $branches; + $branches = [$driver->getRootIdentifier() => $branches[$driver->getRootIdentifier()]] + $branches; } foreach ($branches as $branch => $identifier) { @@ -430,9 +421,7 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt } /** - * @param VcsDriverInterface $driver * @param array{name?: string, dist?: array{type: string, url: string, reference: string, shasum: string}, source?: array{type: string, url: string, reference: string}} $data - * @param string $identifier * * @return array{name: string|null, dist: array{type: string, url: string, reference: string, shasum: string}|null, source: array{type: string, url: string, reference: string}} */ @@ -455,8 +444,6 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt } /** - * @param string $branch - * * @return string|false */ private function validateBranch(string $branch) @@ -475,8 +462,6 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt } /** - * @param string $version - * * @return string|false */ private function validateTag(string $version) @@ -490,12 +475,6 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt } /** - * @param string $version - * @param string $identifier - * @param bool $isVerbose - * @param bool $isVeryVerbose - * @param bool $isDefaultBranch - * * @return \Composer\Package\CompletePackage|\Composer\Package\CompleteAliasPackage|null|false null if no cache present, false if the absence of a version was cached */ private function getCachedPackageVersion(string $version, string $identifier, bool $isVerbose, bool $isVeryVerbose, bool $isDefaultBranch = false) @@ -541,11 +520,8 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt return null; } - /** - * @return bool - */ private function shouldRethrowTransportException(TransportException $e): bool { - return in_array($e->getCode(), array(401, 403, 429), true) || $e->getCode() >= 500; + return in_array($e->getCode(), [401, 403, 429], true) || $e->getCode() >= 500; } } diff --git a/src/Composer/Repository/VersionCacheInterface.php b/src/Composer/Repository/VersionCacheInterface.php index 520007a98..ac0c41764 100644 --- a/src/Composer/Repository/VersionCacheInterface.php +++ b/src/Composer/Repository/VersionCacheInterface.php @@ -15,8 +15,6 @@ namespace Composer\Repository; interface VersionCacheInterface { /** - * @param string $version - * @param string $identifier * @return mixed[]|null|false Package version data if found, false to indicate the identifier is known but has no package, null for an unknown identifier */ public function getVersionPackage(string $version, string $identifier); diff --git a/src/Composer/Repository/WritableArrayRepository.php b/src/Composer/Repository/WritableArrayRepository.php index 8fb92a7a4..349c32472 100644 --- a/src/Composer/Repository/WritableArrayRepository.php +++ b/src/Composer/Repository/WritableArrayRepository.php @@ -12,7 +12,6 @@ namespace Composer\Repository; -use Composer\Package\AliasPackage; use Composer\Installer\InstallationManager; /** @@ -27,7 +26,7 @@ class WritableArrayRepository extends ArrayRepository implements WritableReposit /** * @var string[] */ - protected $devPackageNames = array(); + protected $devPackageNames = []; /** @var bool|null */ private $devMode = null; diff --git a/src/Composer/Script/Event.php b/src/Composer/Script/Event.php index 4b8ba2468..fc3386f67 100644 --- a/src/Composer/Script/Event.php +++ b/src/Composer/Script/Event.php @@ -54,7 +54,7 @@ class Event extends BaseEvent * @param array $args Arguments passed by the user * @param mixed[] $flags Optional flags to pass data not as argument */ - public function __construct(string $name, Composer $composer, IOInterface $io, bool $devMode = false, array $args = array(), array $flags = array()) + public function __construct(string $name, Composer $composer, IOInterface $io, bool $devMode = false, array $args = [], array $flags = []) { parent::__construct($name, $args, $flags); $this->composer = $composer; @@ -64,8 +64,6 @@ class Event extends BaseEvent /** * Returns the composer instance. - * - * @return Composer */ public function getComposer(): Composer { @@ -74,8 +72,6 @@ class Event extends BaseEvent /** * Returns the IO instance. - * - * @return IOInterface */ public function getIO(): IOInterface { @@ -84,8 +80,6 @@ class Event extends BaseEvent /** * Return the dev mode flag - * - * @return bool */ public function isDevMode(): bool { @@ -105,7 +99,6 @@ class Event extends BaseEvent /** * Set the originating event. * - * @param BaseEvent $event * @return $this */ public function setOriginatingEvent(BaseEvent $event): self @@ -117,9 +110,6 @@ class Event extends BaseEvent /** * Returns the upper-most event in chain. - * - * @param BaseEvent $event - * @return BaseEvent */ private function calculateOriginatingEvent(BaseEvent $event): BaseEvent { diff --git a/src/Composer/SelfUpdate/Keys.php b/src/Composer/SelfUpdate/Keys.php index 72df28fd7..595ffa737 100644 --- a/src/Composer/SelfUpdate/Keys.php +++ b/src/Composer/SelfUpdate/Keys.php @@ -19,16 +19,11 @@ use Composer\Pcre\Preg; */ class Keys { - /** - * @param string $path - * - * @return string - */ public static function fingerprint(string $path): string { $hash = strtoupper(hash('sha256', Preg::replace('{\s}', '', file_get_contents($path)))); - return implode(' ', array( + return implode(' ', [ substr($hash, 0, 8), substr($hash, 8, 8), substr($hash, 16, 8), @@ -38,6 +33,6 @@ class Keys substr($hash, 40, 8), substr($hash, 48, 8), substr($hash, 56, 8), - )); + ]); } } diff --git a/src/Composer/SelfUpdate/Versions.php b/src/Composer/SelfUpdate/Versions.php index af5b552de..b6145fc48 100644 --- a/src/Composer/SelfUpdate/Versions.php +++ b/src/Composer/SelfUpdate/Versions.php @@ -45,9 +45,6 @@ class Versions $this->config = $config; } - /** - * @return string - */ public function getChannel(): string { if ($this->channel) { @@ -57,7 +54,7 @@ class Versions $channelFile = $this->config->get('home').'/update-channel'; if (file_exists($channelFile)) { $channel = trim(file_get_contents($channelFile)); - if (in_array($channel, array('stable', 'preview', 'snapshot', '2.2'), true)) { + if (in_array($channel, ['stable', 'preview', 'snapshot', '2.2'], true)) { return $this->channel = $channel; } } @@ -65,12 +62,7 @@ class Versions return $this->channel = 'stable'; } - /** - * @param string $channel - * - * @return void - */ - public function setChannel(string $channel, IOInterface $io = null): void + public function setChannel(string $channel, ?IOInterface $io = null): void { if (!in_array($channel, self::$channels, true)) { throw new \InvalidArgumentException('Invalid channel '.$channel.', must be one of: ' . implode(', ', self::$channels)); @@ -90,8 +82,6 @@ class Versions } /** - * @param string|null $channel - * * @return array{path: string, version: string, min-php: int, eol?: true} */ public function getLatest(?string $channel = null): array diff --git a/src/Composer/Util/AuthHelper.php b/src/Composer/Util/AuthHelper.php index 5e0fa4874..ec3476670 100644 --- a/src/Composer/Util/AuthHelper.php +++ b/src/Composer/Util/AuthHelper.php @@ -27,7 +27,7 @@ class AuthHelper /** @var Config */ protected $config; /** @var array Map of origins to message displayed */ - private $displayedOriginAuthentications = array(); + private $displayedOriginAuthentications = []; public function __construct(IOInterface $io, Config $config) { @@ -36,10 +36,7 @@ class AuthHelper } /** - * @param string $origin * @param 'prompt'|bool $storeAuth - * - * @return void */ public function storeAuth(string $origin, $storeAuth): void { @@ -52,7 +49,7 @@ class AuthHelper 'Do you want to store credentials for '.$origin.' in '.$configSource->getName().' ? [Yn] ', static function ($value): string { $input = strtolower(substr(trim($value), 0, 1)); - if (in_array($input, array('y','n'))) { + if (in_array($input, ['y','n'])) { return $input; } throw new \RuntimeException('Please answer (y)es or (n)o'); @@ -74,8 +71,6 @@ class AuthHelper } /** - * @param string $url - * @param string $origin * @param int $statusCode HTTP status code that triggered this call * @param string|null $reason a message/description explaining why this was called * @param string[] $headers @@ -84,7 +79,7 @@ class AuthHelper * retried, if storeAuth is true then on a successful retry the authentication should be persisted to auth.json * @phpstan-return array{retry: bool, storeAuth: 'prompt'|bool} */ - public function promptAuthIfNeeded(string $url, string $origin, int $statusCode, ?string $reason = null, array $headers = array(), int $retryCount = 0): array + public function promptAuthIfNeeded(string $url, string $origin, int $statusCode, ?string $reason = null, array $headers = [], int $retryCount = 0): array { $storeAuth = false; @@ -104,7 +99,7 @@ class AuthHelper } $this->io->ask('After authorizing your token, confirm that you would like to retry the request'); - return array('retry' => true, 'storeAuth' => $storeAuth); + return ['retry' => true, 'storeAuth' => $storeAuth]; } if ($rateLimited) { @@ -141,7 +136,7 @@ class AuthHelper $auth = null; if ($this->io->hasAuthentication($origin)) { $auth = $this->io->getAuthentication($origin); - if (in_array($auth['password'], array('gitlab-ci-token', 'private-token', 'oauth2'), true)) { + if (in_array($auth['password'], ['gitlab-ci-token', 'private-token', 'oauth2'], true)) { throw new TransportException("Invalid credentials for '" . $url . "', aborting.", $statusCode); } } @@ -207,7 +202,7 @@ class AuthHelper // if two or more requests are started together for the same host, and the first // received authentication already, we let the others retry before failing them if ($retryCount === 0) { - return array('retry' => true, 'storeAuth' => false); + return ['retry' => true, 'storeAuth' => false]; } throw new TransportException("Invalid credentials (HTTP $statusCode) for '$url', aborting.", $statusCode); @@ -220,13 +215,11 @@ class AuthHelper $storeAuth = $this->config->get('store-auths'); } - return array('retry' => true, 'storeAuth' => $storeAuth); + return ['retry' => true, 'storeAuth' => $storeAuth]; } /** * @param string[] $headers - * @param string $origin - * @param string $url * * @return string[] updated headers array */ @@ -245,7 +238,7 @@ class AuthHelper } } elseif ( in_array($origin, $this->config->get('gitlab-domains'), true) - && in_array($auth['password'], array('oauth2', 'private-token', 'gitlab-ci-token'), true) + && in_array($auth['password'], ['oauth2', 'private-token', 'gitlab-ci-token'], true) ) { if ($auth['password'] === 'oauth2') { $headers[] = 'Authorization: Bearer '.$auth['username']; @@ -273,7 +266,7 @@ class AuthHelper $this->io->writeError($authenticationDisplayMessage, true, IOInterface::DEBUG); $this->displayedOriginAuthentications[$origin] = $authenticationDisplayMessage; } - } elseif (in_array($origin, array('api.bitbucket.org', 'api.github.com'), true)) { + } elseif (in_array($origin, ['api.bitbucket.org', 'api.github.com'], true)) { return $this->addAuthenticationHeader($headers, str_replace('api.', '', $origin), $url); } diff --git a/src/Composer/Util/Bitbucket.php b/src/Composer/Util/Bitbucket.php index c74870b67..e77598df2 100644 --- a/src/Composer/Util/Bitbucket.php +++ b/src/Composer/Util/Bitbucket.php @@ -46,7 +46,7 @@ class Bitbucket * @param HttpDownloader $httpDownloader Remote Filesystem, injectable for mocking * @param int $time Timestamp, injectable for mocking */ - public function __construct(IOInterface $io, Config $config, ProcessExecutor $process = null, HttpDownloader $httpDownloader = null, int $time = null) + public function __construct(IOInterface $io, Config $config, ?ProcessExecutor $process = null, ?HttpDownloader $httpDownloader = null, ?int $time = null) { $this->io = $io; $this->config = $config; @@ -55,9 +55,6 @@ class Bitbucket $this->time = $time; } - /** - * @return string - */ public function getToken(): string { if (!isset($this->token['access_token'])) { @@ -89,19 +86,16 @@ class Bitbucket return false; } - /** - * @return bool - */ private function requestAccessToken(): bool { try { - $response = $this->httpDownloader->get(self::OAUTH2_ACCESS_TOKEN_URL, array( + $response = $this->httpDownloader->get(self::OAUTH2_ACCESS_TOKEN_URL, [ 'retry-auth-failure' => false, - 'http' => array( + 'http' => [ 'method' => 'POST', 'content' => 'grant_type=client_credentials', - ), - )); + ], + ]); $token = $response->decodeJson(); if (!isset($token['expires_in']) || !isset($token['access_token'])) { @@ -119,7 +113,7 @@ class Bitbucket return false; } - if (in_array($e->getCode(), array(403, 401))) { + if (in_array($e->getCode(), [403, 401])) { $this->io->writeError('Invalid OAuth consumer provided.'); $this->io->writeError('You can also add it manually later by using "composer config --global --auth bitbucket-oauth.bitbucket.org "'); @@ -141,7 +135,7 @@ class Bitbucket * @throws TransportException|\Exception * @return bool true on success */ - public function authorizeOAuthInteractively(string $originUrl, string $message = null): bool + public function authorizeOAuthInteractively(string $originUrl, ?string $message = null): bool { if ($message) { $this->io->writeError($message); @@ -189,11 +183,6 @@ class Bitbucket /** * Retrieves an access token from Bitbucket. - * - * @param string $originUrl - * @param string $consumerKey - * @param string $consumerSecret - * @return string */ public function requestToken(string $originUrl, string $consumerKey, string $consumerSecret): string { @@ -217,12 +206,6 @@ class Bitbucket /** * Store the new/updated credentials to the configuration - * - * @param string $originUrl - * @param string $consumerKey - * @param string $consumerSecret - * - * @return void */ private function storeInAuthConfig(string $originUrl, string $consumerKey, string $consumerSecret): void { @@ -233,20 +216,16 @@ class Bitbucket } $time = null === $this->time ? time() : $this->time; - $consumer = array( + $consumer = [ "consumer-key" => $consumerKey, "consumer-secret" => $consumerSecret, "access-token" => $this->token['access_token'], "access-token-expiration" => $time + $this->token['expires_in'], - ); + ]; $this->config->getAuthConfigSource()->addConfigSetting('bitbucket-oauth.'.$originUrl, $consumer); } - /** - * @param string $originUrl - * @return bool - */ private function getTokenFromConfig(string $originUrl): bool { $authConfig = $this->config->get('bitbucket-oauth'); @@ -258,9 +237,9 @@ class Bitbucket return false; } - $this->token = array( + $this->token = [ 'access_token' => $authConfig[$originUrl]['access-token'], - ); + ]; return true; } diff --git a/src/Composer/Util/ComposerMirror.php b/src/Composer/Util/ComposerMirror.php index 9fb9f158c..6f23c22c3 100644 --- a/src/Composer/Util/ComposerMirror.php +++ b/src/Composer/Util/ComposerMirror.php @@ -21,16 +21,6 @@ use Composer\Pcre\Preg; */ class ComposerMirror { - /** - * @param string $mirrorUrl - * @param string $packageName - * @param string $version - * @param string|null $reference - * @param string|null $type - * @param string|null $prettyVersion - * - * @return string - */ public static function processUrl(string $mirrorUrl, string $packageName, string $version, ?string $reference, ?string $type, ?string $prettyVersion = null): string { if ($reference) { @@ -38,8 +28,8 @@ class ComposerMirror } $version = strpos($version, '/') === false ? $version : md5($version); - $from = array('%package%', '%version%', '%reference%', '%type%'); - $to = array($packageName, $version, $reference, $type); + $from = ['%package%', '%version%', '%reference%', '%type%']; + $to = [$packageName, $version, $reference, $type]; if (null !== $prettyVersion) { $from[] = '%prettyVersion%'; $to[] = $prettyVersion; @@ -48,14 +38,6 @@ class ComposerMirror return str_replace($from, $to, $mirrorUrl); } - /** - * @param string $mirrorUrl - * @param string $packageName - * @param string $url - * @param string|null $type - * - * @return string - */ public static function processGitUrl(string $mirrorUrl, string $packageName, string $url, ?string $type): string { if (Preg::isMatch('#^(?:(?:https?|git)://github\.com/|git@github\.com:)([^/]+)/(.+?)(?:\.git)?$#', $url, $match)) { @@ -67,20 +49,12 @@ class ComposerMirror } return str_replace( - array('%package%', '%normalizedUrl%', '%type%'), - array($packageName, $url, $type), + ['%package%', '%normalizedUrl%', '%type%'], + [$packageName, $url, $type], $mirrorUrl ); } - /** - * @param string $mirrorUrl - * @param string $packageName - * @param string $url - * @param string $type - * - * @return string - */ public static function processHgUrl(string $mirrorUrl, string $packageName, string $url, string $type): string { return self::processGitUrl($mirrorUrl, $packageName, $url, $type); diff --git a/src/Composer/Util/ConfigValidator.php b/src/Composer/Util/ConfigValidator.php index 82cd39171..44c2c3a2c 100644 --- a/src/Composer/Util/ConfigValidator.php +++ b/src/Composer/Util/ConfigValidator.php @@ -52,9 +52,9 @@ class ConfigValidator */ public function validate(string $file, int $arrayLoaderValidationFlags = ValidatingArrayLoader::CHECK_ALL, int $flags = self::CHECK_VERSION): array { - $errors = array(); - $publishErrors = array(); - $warnings = array(); + $errors = []; + $publishErrors = []; + $warnings = []; // validate json schema $laxValid = false; @@ -77,7 +77,7 @@ class ConfigValidator } catch (\Exception $e) { $errors[] = $e->getMessage(); - return array($errors, $publishErrors, $warnings); + return [$errors, $publishErrors, $warnings]; } if (is_array($manifest)) { @@ -157,9 +157,9 @@ class ConfigValidator } // check for meaningless provide/replace satisfying requirements - foreach (array('provide', 'replace') as $linkType) { + foreach (['provide', 'replace'] as $linkType) { if (isset($manifest[$linkType])) { - foreach (array('require', 'require-dev') as $requireType) { + foreach (['require', 'require-dev'] as $requireType) { if (isset($manifest[$requireType])) { foreach ($manifest[$linkType] as $provide => $constraint) { if (isset($manifest[$requireType][$provide])) { @@ -172,8 +172,8 @@ class ConfigValidator } // check for commit references - $require = $manifest['require'] ?? array(); - $requireDev = $manifest['require-dev'] ?? array(); + $require = $manifest['require'] ?? []; + $requireDev = $manifest['require-dev'] ?? []; $packages = array_merge($require, $requireDev); foreach ($packages as $package => $version) { if (Preg::isMatch('/#/', $version)) { @@ -185,8 +185,8 @@ class ConfigValidator } // report scripts-descriptions for non-existent scripts - $scriptsDescriptions = $manifest['scripts-descriptions'] ?? array(); - $scripts = $manifest['scripts'] ?? array(); + $scriptsDescriptions = $manifest['scripts-descriptions'] ?? []; + $scripts = $manifest['scripts'] ?? []; foreach ($scriptsDescriptions as $scriptName => $scriptDescription) { if (!array_key_exists($scriptName, $scripts)) { $warnings[] = sprintf( @@ -219,6 +219,6 @@ class ConfigValidator $warnings = array_merge($warnings, $loader->getWarnings()); - return array($errors, $publishErrors, $warnings); + return [$errors, $publishErrors, $warnings]; } } diff --git a/src/Composer/Util/ErrorHandler.php b/src/Composer/Util/ErrorHandler.php index d918504fc..4ed0cfefb 100644 --- a/src/Composer/Util/ErrorHandler.php +++ b/src/Composer/Util/ErrorHandler.php @@ -34,7 +34,6 @@ class ErrorHandler * * @static * @throws \ErrorException - * @return bool */ public static function handle(int $level, string $message, string $file, int $line): bool { @@ -73,14 +72,10 @@ class ErrorHandler /** * Register error handler. - * - * @param IOInterface|null $io - * - * @return void */ - public static function register(IOInterface $io = null): void + public static function register(?IOInterface $io = null): void { - set_error_handler(array(__CLASS__, 'handle')); + set_error_handler([__CLASS__, 'handle']); error_reporting(E_ALL | E_STRICT); self::$io = $io; } diff --git a/src/Composer/Util/Filesystem.php b/src/Composer/Util/Filesystem.php index a04513cd6..92cc0af11 100644 --- a/src/Composer/Util/Filesystem.php +++ b/src/Composer/Util/Filesystem.php @@ -28,14 +28,12 @@ class Filesystem /** @var ?ProcessExecutor */ private $processExecutor; - public function __construct(ProcessExecutor $executor = null) + public function __construct(?ProcessExecutor $executor = null) { $this->processExecutor = $executor; } /** - * @param string $file - * * @return bool */ public function remove(string $file) @@ -54,7 +52,6 @@ class Filesystem /** * Checks if a directory is empty * - * @param string $dir * @return bool */ public function isDirEmpty(string $dir) @@ -69,9 +66,6 @@ class Filesystem } /** - * @param string $dir - * @param bool $ensureDirectoryExists - * * @return void */ public function emptyDirectory(string $dir, bool $ensureDirectoryExists = true) @@ -103,7 +97,6 @@ class Filesystem * Uses the process component if proc_open is enabled on the PHP * installation. * - * @param string $directory * @throws \RuntimeException * @return bool */ @@ -138,7 +131,6 @@ class Filesystem * Uses the process component if proc_open is enabled on the PHP * installation. * - * @param string $directory * @throws \RuntimeException * @return PromiseInterface */ @@ -172,9 +164,6 @@ class Filesystem } /** - * @param string $directory - * @param bool $fallbackToPhp - * * @return bool|null Returns null, when no edge case was hit. Otherwise a bool whether removal was successful */ private function removeEdgeCases(string $directory, bool $fallbackToPhp = true): ?bool @@ -213,7 +202,6 @@ class Filesystem * before directories, creating a single non-recursive loop * to delete files/directories in the correct order. * - * @param string $directory * @return bool */ public function removeDirectoryPhp(string $directory) @@ -252,8 +240,6 @@ class Filesystem } /** - * @param string $directory - * * @return void */ public function ensureDirectoryExists(string $directory) @@ -275,7 +261,6 @@ class Filesystem /** * Attempts to unlink a file and in case of failure retries after 350ms on windows * - * @param string $path * @throws \RuntimeException * @return bool */ @@ -306,7 +291,6 @@ class Filesystem /** * Attempts to rmdir a file and in case of failure retries after 350ms on windows * - * @param string $path * @throws \RuntimeException * @return bool */ @@ -340,8 +324,6 @@ class Filesystem * Some systems can't rename and also don't have proc_open, * which requires this solution. * - * @param string $source - * @param string $target * * @return void */ @@ -360,8 +342,6 @@ class Filesystem /** * Copies a file or directory from $source to $target. * - * @param string $source - * @param string $target * @return bool */ public function copy(string $source, string $target) @@ -388,9 +368,6 @@ class Filesystem } /** - * @param string $source - * @param string $target - * * @return void */ public function rename(string $source, string $target) @@ -438,8 +415,6 @@ class Filesystem /** * Returns the shortest path from $from to $to * - * @param string $from - * @param string $to * @param bool $directories if true, the source/target are considered to be directories * @throws \InvalidArgumentException * @return string @@ -485,10 +460,7 @@ class Filesystem /** * Returns PHP code that, when executed in $from, will return the path to $to * - * @param string $from - * @param string $to * @param bool $directories if true, the source/target are considered to be directories - * @param bool $staticCode * @throws \InvalidArgumentException * @return string */ @@ -532,7 +504,6 @@ class Filesystem /** * Checks if the given path is absolute * - * @param string $path * @return bool */ public function isAbsolutePath(string $path) @@ -569,7 +540,7 @@ class Filesystem */ public function normalizePath(string $path) { - $parts = array(); + $parts = []; $path = strtr($path, '\\', '/'); $prefix = ''; $absolute = ''; @@ -603,7 +574,9 @@ class Filesystem } // ensure c: is normalized to C: - $prefix = Preg::replaceCallback('{(^|://)[a-z]:$}i', static function (array $m) { return strtoupper($m[0]); }, $prefix); + $prefix = Preg::replaceCallback('{(^|://)[a-z]:$}i', static function (array $m) { + return strtoupper($m[0]); + }, $prefix); return $prefix.$absolute.implode('/', $parts); } @@ -613,7 +586,6 @@ class Filesystem * * And other possible unforeseen disasters, see https://github.com/composer/composer/pull/9422 * - * @param string $path * @return string */ public static function trimTrailingSlash(string $path) @@ -628,7 +600,6 @@ class Filesystem /** * Return if the given path is local * - * @param string $path * @return bool */ public static function isLocalPath(string $path) @@ -637,8 +608,6 @@ class Filesystem } /** - * @param string $path - * * @return string */ public static function getPlatformPath(string $path) @@ -656,7 +625,6 @@ class Filesystem * This will also check for readability by reading the file as is_readable can not be trusted on network-mounts * and \\wsl$ paths. See https://github.com/composer/composer/issues/8231 and https://bugs.php.net/bug.php?id=68926 * - * @param string $path * @return bool */ public static function isReadable(string $path) @@ -678,8 +646,6 @@ class Filesystem } /** - * @param string $directory - * * @return int */ protected function directorySize(string $directory) @@ -713,10 +679,6 @@ class Filesystem * delete symbolic link implementation (commonly known as "unlink()") * * symbolic links on windows which link to directories need rmdir instead of unlink - * - * @param string $path - * - * @return bool */ private function unlinkImplementation(string $path): bool { @@ -754,7 +716,6 @@ class Filesystem /** * return true if that directory is a symlink. * - * @param string $directory * * @return bool */ @@ -769,11 +730,6 @@ class Filesystem return is_link($resolved); } - /** - * @param string $directory - * - * @return bool - */ private function unlinkSymlinkedDirectory(string $directory): bool { $resolved = $this->resolveSymlinkedDirectorySymlink($directory); @@ -806,8 +762,6 @@ class Filesystem /** * Creates an NTFS junction. * - * @param string $target - * @param string $junction * * @return void */ @@ -872,7 +826,6 @@ class Filesystem /** * Removes a Windows NTFS junction. * - * @param string $junction * @return bool */ public function removeJunction(string $junction) @@ -889,9 +842,6 @@ class Filesystem } /** - * @param string $path - * @param string $content - * * @return int|false */ public function filePutContentsIfModified(string $path, string $content) @@ -907,8 +857,6 @@ class Filesystem /** * Copy file using stream_copy_to_stream to work around https://bugs.php.net/bug.php?id=6463 * - * @param string $source - * @param string $target * * @return void */ diff --git a/src/Composer/Util/Git.php b/src/Composer/Util/Git.php index e3e34dd7a..f43ba052b 100644 --- a/src/Composer/Util/Git.php +++ b/src/Composer/Util/Git.php @@ -42,14 +42,8 @@ class Git } /** - * @param callable $commandCallable - * @param string $url - * @param string|null $cwd - * @param bool $initialClone * @param mixed $commandOutput the output will be written into this var if passed by ref * if a callable is passed it will be used as output handler - * - * @return void */ public function runCommand(callable $commandCallable, string $url, ?string $cwd, bool $initialClone = false, &$commandOutput = null): void { @@ -76,7 +70,7 @@ class Git $protocols = $this->config->get('github-protocols'); // public github, autoswitch protocols if (Preg::isMatch('{^(?:https?|git)://' . self::getGitHubDomainsRegex($this->config) . '/(.*)}', $url, $match)) { - $messages = array(); + $messages = []; foreach ($protocols as $protocol) { if ('ssh' === $protocol) { $protoUrl = "git@" . $match[1] . ":" . $match[2]; @@ -84,7 +78,7 @@ class Git $protoUrl = $protocol . "://" . $match[1] . "/" . $match[2]; } - if (0 === $this->process->execute(call_user_func($commandCallable, $protoUrl), $commandOutput, $cwd)) { + if (0 === $this->process->execute($commandCallable($protoUrl), $commandOutput, $cwd)) { return; } $messages[] = '- ' . $protoUrl . "\n" . Preg::replace('#^#m', ' ', $this->process->getErrorOutput()); @@ -103,10 +97,10 @@ class Git // if we have a private github url and the ssh protocol is disabled then we skip it and directly fallback to https $bypassSshForGitHub = Preg::isMatch('{^git@' . self::getGitHubDomainsRegex($this->config) . ':(.+?)\.git$}i', $url) && !in_array('ssh', $protocols, true); - $command = call_user_func($commandCallable, $url); + $command = $commandCallable($url); $auth = null; - $credentials = array(); + $credentials = []; if ($bypassSshForGitHub || 0 !== $this->process->execute($command, $commandOutput, $cwd)) { $errorMsg = $this->process->getErrorOutput(); // private github repository without ssh key access, try https with auth @@ -125,12 +119,12 @@ class Git if ($this->io->hasAuthentication($match[1])) { $auth = $this->io->getAuthentication($match[1]); $authUrl = 'https://' . rawurlencode($auth['username']) . ':' . rawurlencode($auth['password']) . '@' . $match[1] . '/' . $match[2] . '.git'; - $command = call_user_func($commandCallable, $authUrl); + $command = $commandCallable($authUrl); if (0 === $this->process->execute($command, $commandOutput, $cwd)) { return; } - $credentials = array(rawurlencode($auth['username']), rawurlencode($auth['password'])); + $credentials = [rawurlencode($auth['username']), rawurlencode($auth['password'])]; $errorMsg = $this->process->getErrorOutput(); } } elseif (Preg::isMatch('{^https://(bitbucket\.org)/(.*?)(?:\.git)?$}i', $url, $match)) { //bitbucket oauth @@ -160,17 +154,17 @@ class Git $auth = $this->io->getAuthentication($match[1]); $authUrl = 'https://' . rawurlencode($auth['username']) . ':' . rawurlencode($auth['password']) . '@' . $match[1] . '/' . $match[2] . '.git'; - $command = call_user_func($commandCallable, $authUrl); + $command = $commandCallable($authUrl); if (0 === $this->process->execute($command, $commandOutput, $cwd)) { return; } - $credentials = array(rawurlencode($auth['username']), rawurlencode($auth['password'])); + $credentials = [rawurlencode($auth['username']), rawurlencode($auth['password'])]; $errorMsg = $this->process->getErrorOutput(); } else { // Falling back to ssh $sshUrl = 'git@bitbucket.org:' . $match[2] . '.git'; $this->io->writeError(' No bitbucket authentication configured. Falling back to ssh.'); - $command = call_user_func($commandCallable, $sshUrl); + $command = $commandCallable($sshUrl); if (0 === $this->process->execute($command, $commandOutput, $cwd)) { return; } @@ -202,17 +196,17 @@ class Git $authUrl = $match[1] . '://' . rawurlencode($auth['username']) . ':' . rawurlencode($auth['password']) . '@' . $match[2] . '/' . $match[3]; } - $command = call_user_func($commandCallable, $authUrl); + $command = $commandCallable($authUrl); if (0 === $this->process->execute($command, $commandOutput, $cwd)) { return; } - $credentials = array(rawurlencode($auth['username']), rawurlencode($auth['password'])); + $credentials = [rawurlencode($auth['username']), rawurlencode($auth['password'])]; $errorMsg = $this->process->getErrorOutput(); } } elseif ($this->isAuthenticationFailure($url, $match)) { // private non-github/gitlab/bitbucket repo that failed to authenticate if (strpos($match[2], '@')) { - list($authParts, $match[2]) = explode('@', $match[2], 2); + [$authParts, $match[2]] = explode('@', $match[2], 2); } $storeAuth = false; @@ -222,24 +216,24 @@ class Git $defaultUsername = null; if (isset($authParts) && $authParts) { if (false !== strpos($authParts, ':')) { - list($defaultUsername, ) = explode(':', $authParts, 2); + [$defaultUsername, ] = explode(':', $authParts, 2); } else { $defaultUsername = $authParts; } } $this->io->writeError(' Authentication required (' . $match[2] . '):'); - $auth = array( + $auth = [ 'username' => $this->io->ask(' Username: ', $defaultUsername), 'password' => $this->io->askAndHideAnswer(' Password: '), - ); + ]; $storeAuth = $this->config->get('store-auths'); } if (null !== $auth) { $authUrl = $match[1] . rawurlencode($auth['username']) . ':' . rawurlencode($auth['password']) . '@' . $match[2] . $match[3]; - $command = call_user_func($commandCallable, $authUrl); + $command = $commandCallable($authUrl); if (0 === $this->process->execute($command, $commandOutput, $cwd)) { $this->io->setAuthentication($match[2], $auth['username'], $auth['password']); $authHelper = new AuthHelper($this->io, $this->config); @@ -248,7 +242,7 @@ class Git return; } - $credentials = array(rawurlencode($auth['username']), rawurlencode($auth['password'])); + $credentials = [rawurlencode($auth['username']), rawurlencode($auth['password'])]; $errorMsg = $this->process->getErrorOutput(); } } @@ -265,12 +259,6 @@ class Git } } - /** - * @param string $url - * @param string $dir - * - * @return bool - */ public function syncMirror(string $url, string $dir): bool { if (Platform::getEnv('COMPOSER_DISABLE_NETWORK') && Platform::getEnv('COMPOSER_DISABLE_NETWORK') !== 'prime') { @@ -309,13 +297,6 @@ class Git return true; } - /** - * @param string $url - * @param string $dir - * @param string $ref - * - * @return bool - */ public function fetchRefOrSyncMirror(string $url, string $dir, string $ref): bool { if ($this->checkRefIsInMirror($dir, $ref)) { @@ -329,9 +310,6 @@ class Git return false; } - /** - * @return string - */ public static function getNoShowSignatureFlag(ProcessExecutor $process): string { $gitVersion = self::getVersion($process); @@ -342,12 +320,6 @@ class Git return ''; } - /** - * @param string $dir - * @param string $ref - * - * @return bool - */ private function checkRefIsInMirror(string $dir, string $ref): bool { if (is_dir($dir) && 0 === $this->process->execute('git rev-parse --git-dir', $output, $dir) && trim($output) === '.') { @@ -362,10 +334,7 @@ class Git } /** - * @param string $url * @param string[] $match - * - * @return bool */ private function isAuthenticationFailure(string $url, array &$match): bool { @@ -373,13 +342,13 @@ class Git return false; } - $authFailures = array( + $authFailures = [ 'fatal: Authentication failed', 'remote error: Invalid username or password.', 'error: 401 Unauthorized', 'fatal: unable to access', 'fatal: could not read Username', - ); + ]; $errorOutput = $this->process->getErrorOutput(); foreach ($authFailures as $authFailure) { @@ -423,9 +392,6 @@ class Git return null; } - /** - * @return void - */ public static function cleanEnv(): void { // added in git 1.7.1, prevents prompting the user for username/password @@ -468,7 +434,6 @@ class Git /** * @param non-empty-string $message - * @param string $url * * @return never */ @@ -502,17 +467,14 @@ class Git } /** - * @param string $error * @param string[] $credentials - * - * @return string */ private function maskCredentials(string $error, array $credentials): string { - $maskedCredentials = array(); + $maskedCredentials = []; foreach ($credentials as $credential) { - if (in_array($credential, array('private-token', 'x-token-auth', 'oauth2', 'gitlab-ci-token', 'x-oauth-basic'))) { + if (in_array($credential, ['private-token', 'x-token-auth', 'oauth2', 'gitlab-ci-token', 'x-oauth-basic'])) { $maskedCredentials[] = $credential; } elseif (strlen($credential) > 6) { $maskedCredentials[] = substr($credential, 0, 3) . '...' . substr($credential, -3); diff --git a/src/Composer/Util/GitHub.php b/src/Composer/Util/GitHub.php index cd717fa24..c1f693d55 100644 --- a/src/Composer/Util/GitHub.php +++ b/src/Composer/Util/GitHub.php @@ -40,7 +40,7 @@ class GitHub * @param ProcessExecutor $process Process instance, injectable for mocking * @param HttpDownloader $httpDownloader Remote Filesystem, injectable for mocking */ - public function __construct(IOInterface $io, Config $config, ProcessExecutor $process = null, HttpDownloader $httpDownloader = null) + public function __construct(IOInterface $io, Config $config, ?ProcessExecutor $process = null, ?HttpDownloader $httpDownloader = null) { $this->io = $io; $this->config = $config; @@ -79,7 +79,7 @@ class GitHub * @throws TransportException|\Exception * @return bool true on success */ - public function authorizeOAuthInteractively(string $originUrl, string $message = null): bool + public function authorizeOAuthInteractively(string $originUrl, ?string $message = null): bool { if ($message) { $this->io->writeError($message); @@ -115,11 +115,11 @@ class GitHub try { $apiUrl = ('github.com' === $originUrl) ? 'api.github.com/' : $originUrl . '/api/v3/'; - $this->httpDownloader->get('https://'. $apiUrl, array( + $this->httpDownloader->get('https://'. $apiUrl, [ 'retry-auth-failure' => false, - )); + ]); } catch (TransportException $e) { - if (in_array($e->getCode(), array(403, 401))) { + if (in_array($e->getCode(), [403, 401])) { $this->io->writeError('Invalid token provided.'); $this->io->writeError('You can also add it manually later by using "composer config --global --auth github-oauth.github.com "'); @@ -147,17 +147,17 @@ class GitHub */ public function getRateLimit(array $headers): array { - $rateLimit = array( + $rateLimit = [ 'limit' => '?', 'reset' => '?', - ); + ]; foreach ($headers as $header) { $header = trim($header); if (false === strpos($header, 'X-RateLimit-')) { continue; } - list($type, $value) = explode(':', $header, 2); + [$type, $value] = explode(':', $header, 2); switch ($type) { case 'X-RateLimit-Limit': $rateLimit['limit'] = (int) trim($value); @@ -175,8 +175,6 @@ class GitHub * Extract SSO URL from response. * * @param string[] $headers Headers from Composer\Downloader\TransportException. - * - * @return string|null */ public function getSsoUrl(array $headers): ?string { @@ -197,8 +195,6 @@ class GitHub * Finds whether a request failed due to rate limiting * * @param string[] $headers Headers from Composer\Downloader\TransportException. - * - * @return bool */ public function isRateLimited(array $headers): bool { @@ -217,8 +213,6 @@ class GitHub * @see https://docs.github.com/en/rest/overview/other-authentication-methods#authenticating-for-saml-sso * * @param string[] $headers Headers from Composer\Downloader\TransportException. - * - * @return bool */ public function requiresSso(array $headers): bool { diff --git a/src/Composer/Util/GitLab.php b/src/Composer/Util/GitLab.php index ce32e9535..ce04d29fe 100644 --- a/src/Composer/Util/GitLab.php +++ b/src/Composer/Util/GitLab.php @@ -40,7 +40,7 @@ class GitLab * @param ProcessExecutor $process Process instance, injectable for mocking * @param HttpDownloader $httpDownloader Remote Filesystem, injectable for mocking */ - public function __construct(IOInterface $io, Config $config, ProcessExecutor $process = null, HttpDownloader $httpDownloader = null) + public function __construct(IOInterface $io, Config $config, ?ProcessExecutor $process = null, ?HttpDownloader $httpDownloader = null) { $this->io = $io; $this->config = $config; @@ -95,7 +95,7 @@ class GitLab // Composer expects the GitLab token to be stored as username and 'private-token' or 'gitlab-ci-token' to be stored as password // Detect cases where this is reversed and resolve automatically resolve it - if (in_array($username, array('private-token', 'gitlab-ci-token', 'oauth2'), true)) { + if (in_array($username, ['private-token', 'gitlab-ci-token', 'oauth2'], true)) { $this->io->setAuthentication($originUrl, $password, $username); } else { $this->io->setAuthentication($originUrl, $username, $password); @@ -119,7 +119,7 @@ class GitLab * * @return bool true on success */ - public function authorizeOAuthInteractively(string $scheme, string $originUrl, string $message = null): bool + public function authorizeOAuthInteractively(string $scheme, string $originUrl, ?string $message = null): bool { if ($message) { $this->io->writeError($message); @@ -137,7 +137,7 @@ class GitLab } catch (TransportException $e) { // 401 is bad credentials, // 403 is max login attempts exceeded - if (in_array($e->getCode(), array(403, 401))) { + if (in_array($e->getCode(), [403, 401])) { if (401 === $e->getCode()) { $response = json_decode($e->getResponse(), true); if (isset($response['error']) && $response['error'] === 'invalid_grant') { @@ -197,6 +197,7 @@ class GitLab $response = $this->refreshToken($scheme, $originUrl); } catch (TransportException $e) { $this->io->writeError("Couldn't refresh access token: ".$e->getMessage()); + return false; } @@ -216,9 +217,6 @@ class GitLab } /** - * @param string $scheme - * @param string $originUrl - * * @return array{access_token: non-empty-string, refresh_token: non-empty-string, token_type: non-empty-string, expires_in?: positive-int, created_at: positive-int} * * @see https://docs.gitlab.com/ee/api/oauth2.html#resource-owner-password-credentials-flow @@ -228,22 +226,22 @@ class GitLab $username = $this->io->ask('Username: '); $password = $this->io->askAndHideAnswer('Password: '); - $headers = array('Content-Type: application/x-www-form-urlencoded'); + $headers = ['Content-Type: application/x-www-form-urlencoded']; $apiUrl = $originUrl; - $data = http_build_query(array( + $data = http_build_query([ 'username' => $username, 'password' => $password, 'grant_type' => 'password', - ), '', '&'); - $options = array( + ], '', '&'); + $options = [ 'retry-auth-failure' => false, - 'http' => array( + 'http' => [ 'method' => 'POST', 'header' => $headers, 'content' => $data, - ), - ); + ], + ]; $token = $this->httpDownloader->get($scheme.'://'.$apiUrl.'/oauth/token', $options)->decodeJson(); @@ -270,9 +268,6 @@ class GitLab } /** - * @param string $scheme - * @param string $originUrl - * * @return array{access_token: non-empty-string, refresh_token: non-empty-string, token_type: non-empty-string, expires_in: positive-int, created_at: positive-int} * * @see https://docs.gitlab.com/ee/api/oauth2.html#resource-owner-password-credentials-flow @@ -285,20 +280,20 @@ class GitLab } $refreshToken = $authTokens[$originUrl]['refresh-token']; - $headers = array('Content-Type: application/x-www-form-urlencoded'); + $headers = ['Content-Type: application/x-www-form-urlencoded']; - $data = http_build_query(array( + $data = http_build_query([ 'refresh_token' => $refreshToken, 'grant_type' => 'refresh_token', - ), '', '&'); - $options = array( + ], '', '&'); + $options = [ 'retry-auth-failure' => false, - 'http' => array( + 'http' => [ 'method' => 'POST', 'header' => $headers, 'content' => $data, - ), - ); + ], + ]; $token = $this->httpDownloader->get($scheme.'://'.$originUrl.'/oauth/token', $options)->decodeJson(); $this->io->writeError('GitLab token successfully refreshed', true, IOInterface::VERY_VERBOSE); diff --git a/src/Composer/Util/Hg.php b/src/Composer/Util/Hg.php index 76d063dbe..f6a4275f7 100644 --- a/src/Composer/Util/Hg.php +++ b/src/Composer/Util/Hg.php @@ -46,19 +46,12 @@ class Hg $this->process = $process; } - /** - * @param callable $commandCallable - * @param string $url - * @param string|null $cwd - * - * @return void - */ public function runCommand(callable $commandCallable, string $url, ?string $cwd): void { $this->config->prohibitUrlByConfig($url, $this->io); // Try as is - $command = call_user_func($commandCallable, $url); + $command = $commandCallable($url); if (0 === $this->process->execute($command, $ignoredOutput, $cwd)) { return; @@ -69,7 +62,7 @@ class Hg $auth = $this->io->getAuthentication($match[5]); $authenticatedUrl = $match[1] . '://' . rawurlencode($auth['username']) . ':' . rawurlencode($auth['password']) . '@' . $match[5] . (!empty($match[6]) ? $match[6] : null); - $command = call_user_func($commandCallable, $authenticatedUrl); + $command = $commandCallable($authenticatedUrl); if (0 === $this->process->execute($command, $ignoredOutput, $cwd)) { return; @@ -85,7 +78,6 @@ class Hg /** * @param non-empty-string $message - * @param string $url * * @return never */ diff --git a/src/Composer/Util/Http/CurlDownloader.php b/src/Composer/Util/Http/CurlDownloader.php index 98af5c1a1..bb81ac654 100644 --- a/src/Composer/Util/Http/CurlDownloader.php +++ b/src/Composer/Util/Http/CurlDownloader.php @@ -38,7 +38,7 @@ class CurlDownloader /** @var ?resource */ private $shareHandle; /** @var Job[] */ - private $jobs = array(); + private $jobs = []; /** @var IOInterface */ private $io; /** @var Config */ @@ -56,22 +56,22 @@ class CurlDownloader /** @var bool */ private $supportsSecureProxy; /** @var array */ - protected $multiErrors = array( - CURLM_BAD_HANDLE => array('CURLM_BAD_HANDLE', 'The passed-in handle is not a valid CURLM handle.'), - CURLM_BAD_EASY_HANDLE => array('CURLM_BAD_EASY_HANDLE', "An easy handle was not good/valid. It could mean that it isn't an easy handle at all, or possibly that the handle already is in used by this or another multi handle."), - CURLM_OUT_OF_MEMORY => array('CURLM_OUT_OF_MEMORY', 'You are doomed.'), - CURLM_INTERNAL_ERROR => array('CURLM_INTERNAL_ERROR', 'This can only be returned if libcurl bugs. Please report it to us!'), - ); + protected $multiErrors = [ + CURLM_BAD_HANDLE => ['CURLM_BAD_HANDLE', 'The passed-in handle is not a valid CURLM handle.'], + CURLM_BAD_EASY_HANDLE => ['CURLM_BAD_EASY_HANDLE', "An easy handle was not good/valid. It could mean that it isn't an easy handle at all, or possibly that the handle already is in used by this or another multi handle."], + CURLM_OUT_OF_MEMORY => ['CURLM_OUT_OF_MEMORY', 'You are doomed.'], + CURLM_INTERNAL_ERROR => ['CURLM_INTERNAL_ERROR', 'This can only be returned if libcurl bugs. Please report it to us!'], + ]; /** @var mixed[] */ - private static $options = array( - 'http' => array( + private static $options = [ + 'http' => [ 'method' => CURLOPT_CUSTOMREQUEST, 'content' => CURLOPT_POSTFIELDS, 'header' => CURLOPT_HTTPHEADER, 'timeout' => CURLOPT_TIMEOUT, - ), - 'ssl' => array( + ], + 'ssl' => [ 'cafile' => CURLOPT_CAINFO, 'capath' => CURLOPT_CAPATH, 'verify_peer' => CURLOPT_SSL_VERIFYPEER, @@ -79,24 +79,23 @@ class CurlDownloader 'local_cert' => CURLOPT_SSLCERT, 'local_pk' => CURLOPT_SSLKEY, 'passphrase' => CURLOPT_SSLKEYPASSWD, - ), - ); + ], + ]; /** @var array */ - private static $timeInfo = array( + private static $timeInfo = [ 'total_time' => true, 'namelookup_time' => true, 'connect_time' => true, 'pretransfer_time' => true, 'starttransfer_time' => true, 'redirect_time' => true, - ); + ]; /** * @param mixed[] $options - * @param bool $disableTls */ - public function __construct(IOInterface $io, Config $config, array $options = array(), bool $disableTls = false) + public function __construct(IOInterface $io, Config $config, array $options = [], bool $disableTls = false) { $this->io = $io; $this->config = $config; @@ -125,18 +124,13 @@ class CurlDownloader } /** - * @param callable $resolve - * @param callable $reject - * @param string $origin - * @param string $url * @param mixed[] $options - * @param null|string $copyTo * * @return int internal job id */ public function download(callable $resolve, callable $reject, string $origin, string $url, array $options, ?string $copyTo = null): int { - $attributes = array(); + $attributes = []; if (isset($options['retry-auth-failure'])) { $attributes['retryAuthFailure'] = $options['retry-auth-failure']; unset($options['retry-auth-failure']); @@ -146,18 +140,13 @@ class CurlDownloader } /** - * @param callable $resolve - * @param callable $reject - * @param string $origin - * @param string $url * @param mixed[] $options - * @param null|string $copyTo * * @param array{retryAuthFailure?: bool, redirects?: int<0, max>, retries?: int<0, max>, storeAuth?: 'prompt'|bool} $attributes * * @return int internal job id */ - private function initDownload(callable $resolve, callable $reject, string $origin, string $url, array $options, ?string $copyTo = null, array $attributes = array()): int + private function initDownload(callable $resolve, callable $reject, string $origin, string $url, array $options, ?string $copyTo = null, array $attributes = []): int { // set defaults in a PHPStan-happy way (array_merge is not well supported) $attributes['retryAuthFailure'] = $attributes['retryAuthFailure'] ?? true; @@ -178,7 +167,6 @@ class CurlDownloader throw new \RuntimeException('Failed to open a temp stream to store curl headers'); } - if ($copyTo) { $errorMessage = ''; // @phpstan-ignore-next-line @@ -211,10 +199,10 @@ class CurlDownloader } if (!isset($options['http']['header'])) { - $options['http']['header'] = array(); + $options['http']['header'] = []; } - $options['http']['header'] = array_diff($options['http']['header'], array('Connection: close')); + $options['http']['header'] = array_diff($options['http']['header'], ['Connection: close']); $options['http']['header'][] = 'Connection: keep-alive'; $version = curl_version(); @@ -259,7 +247,7 @@ class CurlDownloader $progress = array_diff_key(curl_getinfo($curlHandle), self::$timeInfo); - $this->jobs[(int) $curlHandle] = array( + $this->jobs[(int) $curlHandle] = [ 'url' => $url, 'origin' => $origin, 'attributes' => $attributes, @@ -271,7 +259,7 @@ class CurlDownloader 'bodyHandle' => $bodyHandle, 'resolve' => $resolve, 'reject' => $reject, - ); + ]; $usingProxy = $proxy->getFormattedUrl(' using proxy (%s)'); $ifModified = false !== stripos(implode(',', $options['http']['header']), 'if-modified-since:') ? ' if modified' : ''; @@ -285,10 +273,6 @@ class CurlDownloader return (int) $curlHandle; } - /** - * @param int $id - * @return void - */ public function abortRequest(int $id): void { if (isset($this->jobs[$id], $this->jobs[$id]['curlHandle'])) { @@ -308,9 +292,6 @@ class CurlDownloader } } - /** - * @return void - */ public function tick(): void { static $timeoutWarning = false; @@ -360,12 +341,12 @@ class CurlDownloader if ( (!isset($job['options']['http']['method']) || $job['options']['http']['method'] === 'GET') && ( - in_array($errno, array(7 /* CURLE_COULDNT_CONNECT */, 16 /* CURLE_HTTP2 */, 92 /* CURLE_HTTP2_STREAM */, 6 /* CURLE_COULDNT_RESOLVE_HOST */), true) + in_array($errno, [7 /* CURLE_COULDNT_CONNECT */, 16 /* CURLE_HTTP2 */, 92 /* CURLE_HTTP2_STREAM */, 6 /* CURLE_COULDNT_RESOLVE_HOST */], true) || ($errno === 35 /* CURLE_SSL_CONNECT_ERROR */ && false !== strpos($error, 'Connection reset by peer')) ) && $job['attributes']['retries'] < $this->maxRetries ) { $this->io->writeError('Retrying ('.($job['attributes']['retries'] + 1).') ' . Url::sanitize($job['url']) . ' due to curl error '. $errno, true, IOInterface::DEBUG); - $this->restartJobWithDelay($job, $job['url'], array('retries' => $job['attributes']['retries'] + 1)); + $this->restartJobWithDelay($job, $job['url'], ['retries' => $job['attributes']['retries'] + 1]); continue; } @@ -392,7 +373,7 @@ class CurlDownloader rewind($job['bodyHandle']); $contents = stream_get_contents($job['bodyHandle']); } - $response = new CurlResponse(array('url' => $progress['url']), $statusCode, $headers, $contents, $progress); + $response = new CurlResponse(['url' => $progress['url']], $statusCode, $headers, $contents, $progress); $this->io->writeError('['.$statusCode.'] '.Url::sanitize($progress['url']), true, IOInterface::DEBUG); } else { $maxFileSize = $job['options']['max_file_size'] ?? null; @@ -408,7 +389,7 @@ class CurlDownloader $contents = stream_get_contents($job['bodyHandle']); } - $response = new CurlResponse(array('url' => $progress['url']), $statusCode, $headers, $contents, $progress); + $response = new CurlResponse(['url' => $progress['url']], $statusCode, $headers, $contents, $progress); $this->io->writeError('['.$statusCode.'] '.Url::sanitize($progress['url']), true, IOInterface::DEBUG); } fclose($job['bodyHandle']); @@ -419,7 +400,7 @@ class CurlDownloader $result = $this->isAuthenticatedRetryNeeded($job, $response); if ($result['retry']) { - $this->restartJob($job, $job['url'], array('storeAuth' => $result['storeAuth'])); + $this->restartJob($job, $job['url'], ['storeAuth' => $result['storeAuth']]); continue; } @@ -427,7 +408,7 @@ class CurlDownloader if ($statusCode >= 300 && $statusCode <= 399 && $statusCode !== 304 && $job['attributes']['redirects'] < $this->maxRedirects) { $location = $this->handleRedirect($job, $response); if ($location) { - $this->restartJob($job, $location, array('redirects' => $job['attributes']['redirects'] + 1)); + $this->restartJob($job, $location, ['redirects' => $job['attributes']['redirects'] + 1]); continue; } } @@ -436,11 +417,11 @@ class CurlDownloader if ($statusCode >= 400 && $statusCode <= 599) { if ( (!isset($job['options']['http']['method']) || $job['options']['http']['method'] === 'GET') - && in_array($statusCode, array(423, 425, 500, 502, 503, 504, 507, 510), true) + && in_array($statusCode, [423, 425, 500, 502, 503, 504, 507, 510], true) && $job['attributes']['retries'] < $this->maxRetries ) { $this->io->writeError('Retrying ('.($job['attributes']['retries'] + 1).') ' . Url::sanitize($job['url']) . ' due to status code '. $statusCode, true, IOInterface::DEBUG); - $this->restartJobWithDelay($job, $job['url'], array('retries' => $job['attributes']['retries'] + 1)); + $this->restartJobWithDelay($job, $job['url'], ['retries' => $job['attributes']['retries'] + 1]); continue; } @@ -454,9 +435,9 @@ class CurlDownloader // resolve promise if (null !== $job['filename']) { rename($job['filename'].'~', $job['filename']); - call_user_func($job['resolve'], $response); + $job['resolve']($response); } else { - call_user_func($job['resolve'], $response); + $job['resolve']($response); } } catch (\Exception $e) { if ($e instanceof TransportException) { @@ -503,7 +484,6 @@ class CurlDownloader /** * @param Job $job - * @return string */ private function handleRedirect(array $job, Response $response): string { @@ -542,7 +522,7 @@ class CurlDownloader */ private function isAuthenticatedRetryNeeded(array $job, Response $response): array { - if (in_array($response->getStatusCode(), array(401, 403)) && $job['attributes']['retryAuthFailure']) { + if (in_array($response->getStatusCode(), [401, 403]) && $job['attributes']['retryAuthFailure']) { $result = $this->authHelper->promptAuthIfNeeded($job['url'], $job['origin'], $response->getStatusCode(), $response->getStatusMessage(), $response->getHeaders(), $job['attributes']['retries']); if ($result['retry']) { @@ -575,7 +555,7 @@ class CurlDownloader if ($needsAuthRetry) { if ($job['attributes']['retryAuthFailure']) { - $result = $this->authHelper->promptAuthIfNeeded($job['url'], $job['origin'], 401, null, array(), $job['attributes']['retries']); + $result = $this->authHelper->promptAuthIfNeeded($job['url'], $job['origin'], 401, null, [], $job['attributes']['retries']); if ($result['retry']) { return $result; } @@ -584,18 +564,15 @@ class CurlDownloader throw $this->failResponse($job, $response, $needsAuthRetry); } - return array('retry' => false, 'storeAuth' => false); + return ['retry' => false, 'storeAuth' => false]; } /** * @param Job $job - * @param string $url * * @param array{retryAuthFailure?: bool, redirects?: int<0, max>, storeAuth?: 'prompt'|bool, retries?: int<1, max>} $attributes - * - * @return void */ - private function restartJob(array $job, string $url, array $attributes = array()): void + private function restartJob(array $job, string $url, array $attributes = []): void { if (null !== $job['filename']) { @unlink($job['filename'].'~'); @@ -609,11 +586,8 @@ class CurlDownloader /** * @param Job $job - * @param string $url * * @param array{retryAuthFailure?: bool, redirects?: int<0, max>, storeAuth?: 'prompt'|bool, retries: int<1, max>} $attributes - * - * @return void */ private function restartJobWithDelay(array $job, string $url, array $attributes): void { @@ -628,8 +602,6 @@ class CurlDownloader /** * @param Job $job - * @param string $errorMessage - * @return TransportException */ private function failResponse(array $job, Response $response, string $errorMessage): TransportException { @@ -638,7 +610,7 @@ class CurlDownloader } $details = ''; - if (in_array(strtolower((string) $response->getHeader('content-type')), array('application/json', 'application/json; charset=utf-8'), true)) { + if (in_array(strtolower((string) $response->getHeader('content-type')), ['application/json', 'application/json; charset=utf-8'], true)) { $details = ':'.PHP_EOL.substr($response->getBody(), 0, 200).(strlen($response->getBody()) > 200 ? '...' : ''); } @@ -647,7 +619,6 @@ class CurlDownloader /** * @param Job $job - * @return void */ private function rejectJob(array $job, \Exception $e): void { @@ -660,13 +631,9 @@ class CurlDownloader if (null !== $job['filename']) { @unlink($job['filename'].'~'); } - call_user_func($job['reject'], $e); + $job['reject']($e); } - /** - * @param int $code - * @return void - */ private function checkCurlResult(int $code): void { if ($code !== CURLM_OK && $code !== CURLM_CALL_MULTI_PERFORM) { diff --git a/src/Composer/Util/Http/CurlResponse.php b/src/Composer/Util/Http/CurlResponse.php index 41c703727..aca8f37ed 100644 --- a/src/Composer/Util/Http/CurlResponse.php +++ b/src/Composer/Util/Http/CurlResponse.php @@ -27,7 +27,7 @@ class CurlResponse extends Response /** * @phpstan-param CurlInfo $curlInfo */ - public function __construct(array $request, $code, array $headers, $body, array $curlInfo) + public function __construct(array $request, ?int $code, array $headers, ?string $body, array $curlInfo) { parent::__construct($request, $code, $headers, $body); $this->curlInfo = $curlInfo; diff --git a/src/Composer/Util/Http/ProxyHelper.php b/src/Composer/Util/Http/ProxyHelper.php index a83fd454a..be4711bf9 100644 --- a/src/Composer/Util/Http/ProxyHelper.php +++ b/src/Composer/Util/Http/ProxyHelper.php @@ -34,33 +34,32 @@ class ProxyHelper // Handle http_proxy/HTTP_PROXY on CLI only for security reasons if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { - if ($env = self::getProxyEnv(array('http_proxy', 'HTTP_PROXY'), $name)) { + if ($env = self::getProxyEnv(['http_proxy', 'HTTP_PROXY'], $name)) { $httpProxy = self::checkProxy($env, $name); } } // Prefer CGI_HTTP_PROXY if available - if ($env = self::getProxyEnv(array('CGI_HTTP_PROXY'), $name)) { + if ($env = self::getProxyEnv(['CGI_HTTP_PROXY'], $name)) { $httpProxy = self::checkProxy($env, $name); } // Handle https_proxy/HTTPS_PROXY - if ($env = self::getProxyEnv(array('https_proxy', 'HTTPS_PROXY'), $name)) { + if ($env = self::getProxyEnv(['https_proxy', 'HTTPS_PROXY'], $name)) { $httpsProxy = self::checkProxy($env, $name); } else { $httpsProxy = $httpProxy; } // Handle no_proxy - $noProxy = self::getProxyEnv(array('no_proxy', 'NO_PROXY'), $name); + $noProxy = self::getProxyEnv(['no_proxy', 'NO_PROXY'], $name); - return array($httpProxy, $httpsProxy, $noProxy); + return [$httpProxy, $httpsProxy, $noProxy]; } /** * Returns http context options for the proxy url * - * @param string $proxyUrl * * @return array{http: array{proxy: string, header?: string}} */ @@ -70,7 +69,7 @@ class ProxyHelper // Remove any authorization $proxyUrl = self::formatParsedUrl($proxy, false); - $proxyUrl = str_replace(array('http://', 'https://'), array('tcp://', 'ssl://'), $proxyUrl); + $proxyUrl = str_replace(['http://', 'https://'], ['tcp://', 'ssl://'], $proxyUrl); $options['http']['proxy'] = $proxyUrl; @@ -92,10 +91,7 @@ class ProxyHelper /** * Sets/unsets request_fulluri value in http context options array * - * @param string $requestUrl * @param mixed[] $options Set by method - * - * @return void */ public static function setRequestFullUri(string $requestUrl, array &$options): void { @@ -128,8 +124,6 @@ class ProxyHelper /** * Checks and formats a proxy url from the environment * - * @param string $proxyUrl - * @param string $envName * @throws \RuntimeException on malformed url * @return string The formatted proxy url */ @@ -157,7 +151,6 @@ class ProxyHelper * Formats a url from its component parts * * @param array{scheme?: string, host: string, port?: int, user?: string, pass?: string} $proxy - * @param bool $includeAuth * * @return string The formatted value */ diff --git a/src/Composer/Util/Http/ProxyManager.php b/src/Composer/Util/Http/ProxyManager.php index fa91bf7e0..2f8764f82 100644 --- a/src/Composer/Util/Http/ProxyManager.php +++ b/src/Composer/Util/Http/ProxyManager.php @@ -42,22 +42,19 @@ class ProxyManager private function __construct() { - $this->fullProxy = $this->safeProxy = array( + $this->fullProxy = $this->safeProxy = [ 'http' => null, 'https' => null, - ); + ]; - $this->streams['http'] = $this->streams['https'] = array( + $this->streams['http'] = $this->streams['https'] = [ 'options' => null, - ); + ]; $this->hasProxy = false; $this->initProxyData(); } - /** - * @return ProxyManager - */ public static function getInstance(): ProxyManager { if (!self::$instance) { @@ -69,8 +66,6 @@ class ProxyManager /** * Clears the persistent instance - * - * @return void */ public static function reset(): void { @@ -79,9 +74,6 @@ class ProxyManager /** * Returns a RequestProxy instance for the request url - * - * @param string $requestUrl - * @return RequestProxy */ public function getProxyForRequest(string $requestUrl): RequestProxy { @@ -91,10 +83,10 @@ class ProxyManager $scheme = parse_url($requestUrl, PHP_URL_SCHEME) ?: 'http'; $proxyUrl = ''; - $options = array(); + $options = []; $formattedProxyUrl = ''; - if ($this->hasProxy && in_array($scheme, array('http', 'https'), true) && $this->fullProxy[$scheme]) { + if ($this->hasProxy && in_array($scheme, ['http', 'https'], true) && $this->fullProxy[$scheme]) { if ($this->noProxy($requestUrl)) { $formattedProxyUrl = 'excluded by no_proxy'; } else { @@ -130,20 +122,18 @@ class ProxyManager /** * Initializes proxy values from the environment - * - * @return void */ private function initProxyData(): void { try { - list($httpProxy, $httpsProxy, $noProxy) = ProxyHelper::getProxyData(); + [$httpProxy, $httpsProxy, $noProxy] = ProxyHelper::getProxyData(); } catch (\RuntimeException $e) { $this->error = $e->getMessage(); return; } - $info = array(); + $info = []; if ($httpProxy) { $info[] = $this->setData($httpProxy, 'http'); @@ -180,9 +170,6 @@ class ProxyManager /** * Returns true if a url matches no_proxy value - * - * @param string $requestUrl - * @return bool */ private function noProxy(string $requestUrl): bool { diff --git a/src/Composer/Util/Http/RequestProxy.php b/src/Composer/Util/Http/RequestProxy.php index 36a5fdbab..c80c8799e 100644 --- a/src/Composer/Util/Http/RequestProxy.php +++ b/src/Composer/Util/Http/RequestProxy.php @@ -30,9 +30,7 @@ class RequestProxy private $url; /** - * @param string $url * @param mixed[] $contextOptions - * @param string $formattedUrl */ public function __construct(string $url, array $contextOptions, string $formattedUrl) { diff --git a/src/Composer/Util/Http/Response.php b/src/Composer/Util/Http/Response.php index 1c685265c..53afb67ba 100644 --- a/src/Composer/Util/Http/Response.php +++ b/src/Composer/Util/Http/Response.php @@ -31,10 +31,8 @@ class Response private $body; /** - * @param Request $request - * @param int $code + * @param Request $request * @param list $headers - * @param null|string $body */ public function __construct(array $request, ?int $code, array $headers, ?string $body) { @@ -47,17 +45,11 @@ class Response $this->body = $body; } - /** - * @return int - */ public function getStatusCode(): int { return $this->code; } - /** - * @return string|null - */ public function getStatusMessage(): ?string { $value = null; @@ -81,7 +73,6 @@ class Response } /** - * @param string $name * @return ?string */ public function getHeader(string $name): ?string @@ -106,7 +97,6 @@ class Response } /** - * @return void * @phpstan-impure */ public function collect(): void @@ -118,7 +108,6 @@ class Response /** * @param string[] $headers array of returned headers like from getLastHeaders() * @param string $name header name (case insensitive) - * @return string|null */ public static function findHeaderValue(array $headers, string $name): ?string { diff --git a/src/Composer/Util/HttpDownloader.php b/src/Composer/Util/HttpDownloader.php index 68f211085..9e2303974 100644 --- a/src/Composer/Util/HttpDownloader.php +++ b/src/Composer/Util/HttpDownloader.php @@ -43,9 +43,9 @@ class HttpDownloader /** @var Config */ private $config; /** @var array */ - private $jobs = array(); + private $jobs = []; /** @var mixed[] */ - private $options = array(); + private $options = []; /** @var int */ private $runningJobs = 0; /** @var int */ @@ -65,9 +65,8 @@ class HttpDownloader * @param IOInterface $io The IO instance * @param Config $config The config * @param mixed[] $options The options - * @param bool $disableTls */ - public function __construct(IOInterface $io, Config $config, array $options = array(), bool $disableTls = false) + public function __construct(IOInterface $io, Config $config, array $options = [], bool $disableTls = false) { $this->io = $io; @@ -103,9 +102,9 @@ class HttpDownloader * @throws TransportException * @return Response */ - public function get(string $url, array $options = array()) + public function get(string $url, array $options = []) { - list($job) = $this->addJob(array('url' => $url, 'options' => $options, 'copyTo' => null), true); + [$job] = $this->addJob(['url' => $url, 'options' => $options, 'copyTo' => null], true); $this->wait($job['id']); $response = $this->getResponse($job['id']); @@ -122,9 +121,9 @@ class HttpDownloader * @throws TransportException * @return PromiseInterface */ - public function add(string $url, array $options = array()) + public function add(string $url, array $options = []) { - list(, $promise) = $this->addJob(array('url' => $url, 'options' => $options, 'copyTo' => null)); + [, $promise] = $this->addJob(['url' => $url, 'options' => $options, 'copyTo' => null]); return $promise; } @@ -139,9 +138,9 @@ class HttpDownloader * @throws TransportException * @return Response */ - public function copy(string $url, string $to, array $options = array()) + public function copy(string $url, string $to, array $options = []) { - list($job) = $this->addJob(array('url' => $url, 'options' => $options, 'copyTo' => $to), true); + [$job] = $this->addJob(['url' => $url, 'options' => $options, 'copyTo' => $to], true); $this->wait($job['id']); return $this->getResponse($job['id']); @@ -157,9 +156,9 @@ class HttpDownloader * @throws TransportException * @return PromiseInterface */ - public function addCopy(string $url, string $to, array $options = array()) + public function addCopy(string $url, string $to, array $options = []) { - list(, $promise) = $this->addJob(array('url' => $url, 'options' => $options, 'copyTo' => $to)); + [, $promise] = $this->addJob(['url' => $url, 'options' => $options, 'copyTo' => $to]); return $promise; } @@ -194,13 +193,13 @@ class HttpDownloader $request['options'] = array_replace_recursive($this->options, $request['options']); /** @var Job */ - $job = array( + $job = [ 'id' => $this->idGen++, 'status' => self::STATUS_QUEUED, 'request' => $request, 'sync' => $sync, 'origin' => Url::getOrigin($this->config, $request['url']), - ); + ]; if (!$sync && !$this->allowAsync) { throw new \LogicException('You must use the HttpDownloader instance which is part of a Composer\Loop instance to be able to run async http requests'); @@ -282,13 +281,9 @@ class HttpDownloader $this->startJob($job['id']); } - return array($job, $promise); + return [$job, $promise]; } - /** - * @param int $id - * @return void - */ private function startJob(int $id): void { $job = &$this->jobs[$id]; @@ -308,7 +303,7 @@ class HttpDownloader if ($this->disabled) { if (isset($job['request']['options']['http']['header']) && false !== stripos(implode('', $job['request']['options']['http']['header']), 'if-modified-since')) { - $resolve(new Response(array('url' => $url), 304, array(), '')); + $resolve(new Response(['url' => $url], 304, [], '')); } else { $e = new TransportException('Network disabled, request canceled: '.Url::sanitize($url), 499); $e->setStatusCode(499); @@ -350,8 +345,6 @@ class HttpDownloader /** * @internal - * - * @return void */ public function enableAsync(): void { @@ -396,7 +389,6 @@ class HttpDownloader /** * @param int $index Job id - * @return Response */ private function getResponse(int $index): Response { @@ -422,9 +414,7 @@ class HttpDownloader /** * @internal * - * @param string $url * @param array{warning?: string, info?: string, warning-versions?: string, info-versions?: string, warnings?: array, infos?: array} $data - * @return void */ public static function outputWarnings(IOInterface $io, string $url, $data): void { @@ -437,7 +427,7 @@ class HttpDownloader }; // legacy warning/info keys - foreach (array('warning', 'info') as $type) { + foreach (['warning', 'info'] as $type) { if (empty($data[$type])) { continue; } @@ -455,7 +445,7 @@ class HttpDownloader } // modern Composer 2.2+ format with support for multiple warning/info messages - foreach (array('warnings', 'infos') as $key) { + foreach (['warnings', 'infos'] as $key) { if (empty($data[$key])) { continue; } @@ -490,20 +480,20 @@ class HttpDownloader || false !== strpos($e->getMessage(), 'Could not resolve host') ) { Silencer::suppress(); - $testConnectivity = file_get_contents('https://8.8.8.8', false, stream_context_create(array( - 'ssl' => array('verify_peer' => false), - 'http' => array('follow_location' => false, 'ignore_errors' => true), - ))); + $testConnectivity = file_get_contents('https://8.8.8.8', false, stream_context_create([ + 'ssl' => ['verify_peer' => false], + 'http' => ['follow_location' => false, 'ignore_errors' => true], + ])); Silencer::restore(); if (false !== $testConnectivity) { - return array( + return [ 'The following exception probably indicates you have misconfigured DNS resolver(s)', - ); + ]; } - return array( + return [ 'The following exception probably indicates you are offline or have misconfigured DNS resolver(s)', - ); + ]; } return null; @@ -511,7 +501,6 @@ class HttpDownloader /** * @param Job $job - * @return bool */ private function canUseCurl(array $job): bool { @@ -532,7 +521,6 @@ class HttpDownloader /** * @internal - * @return bool */ public static function isCurlEnabled(): bool { diff --git a/src/Composer/Util/IniHelper.php b/src/Composer/Util/IniHelper.php index 111ad66d5..c01a97dbb 100644 --- a/src/Composer/Util/IniHelper.php +++ b/src/Composer/Util/IniHelper.php @@ -38,8 +38,6 @@ class IniHelper /** * Describes the location of the loaded php.ini file(s) - * - * @return string */ public static function getMessage(): string { diff --git a/src/Composer/Util/Loop.php b/src/Composer/Util/Loop.php index 1ea0bdeb6..a1abed9a5 100644 --- a/src/Composer/Util/Loop.php +++ b/src/Composer/Util/Loop.php @@ -26,11 +26,11 @@ class Loop /** @var ProcessExecutor|null */ private $processExecutor; /** @var PromiseInterface[][] */ - private $currentPromises = array(); + private $currentPromises = []; /** @var int */ private $waitIndex = 0; - public function __construct(HttpDownloader $httpDownloader, ProcessExecutor $processExecutor = null) + public function __construct(HttpDownloader $httpDownloader, ?ProcessExecutor $processExecutor = null) { $this->httpDownloader = $httpDownloader; $this->httpDownloader->enableAsync(); @@ -41,17 +41,11 @@ class Loop } } - /** - * @return HttpDownloader - */ public function getHttpDownloader(): HttpDownloader { return $this->httpDownloader; } - /** - * @return ProcessExecutor|null - */ public function getProcessExecutor(): ?ProcessExecutor { return $this->processExecutor; @@ -60,9 +54,8 @@ class Loop /** * @param PromiseInterface[] $promises * @param ?ProgressBar $progress - * @return void */ - public function wait(array $promises, ProgressBar $progress = null): void + public function wait(array $promises, ?ProgressBar $progress = null): void { /** @var \Exception|null */ $uncaught = null; @@ -119,9 +112,6 @@ class Loop } } - /** - * @return void - */ public function abortJobs(): void { foreach ($this->currentPromises as $promiseGroup) { diff --git a/src/Composer/Util/NoProxyPattern.php b/src/Composer/Util/NoProxyPattern.php index 857095b66..ebba75369 100644 --- a/src/Composer/Util/NoProxyPattern.php +++ b/src/Composer/Util/NoProxyPattern.php @@ -23,12 +23,12 @@ class NoProxyPattern /** * @var string[] */ - protected $hostNames = array(); + protected $hostNames = []; /** * @var (null|object)[] */ - protected $rules = array(); + protected $rules = []; /** * @var bool @@ -46,10 +46,6 @@ class NoProxyPattern /** * Returns true if a URL matches the NO_PROXY pattern - * - * @param string $url - * - * @return bool */ public function test(string $url): bool { @@ -73,7 +69,6 @@ class NoProxyPattern /** * Returns false is the url cannot be parsed, otherwise a data object * - * @param string $url * * @return bool|stdClass */ @@ -97,7 +92,7 @@ class NoProxyPattern } $hostName = $host . ($port ? ':' . $port : ''); - list($host, $port, $err) = $this->splitHostPort($hostName); + [$host, $port, $err] = $this->splitHostPort($hostName); if ($err || !$this->ipCheckData($host, $ipdata)) { return false; @@ -108,12 +103,6 @@ class NoProxyPattern /** * Returns true if the url is matched by a rule - * - * @param int $index - * @param string $hostName - * @param stdClass $url - * - * @return bool */ protected function match(int $index, string $hostName, stdClass $url): bool { @@ -148,11 +137,6 @@ class NoProxyPattern /** * Returns true if the target ip is in the network range - * - * @param stdClass $network - * @param stdClass $target - * - * @return bool */ protected function matchRange(stdClass $network, stdClass $target): bool { @@ -181,8 +165,6 @@ class NoProxyPattern /** * Finds or creates rule data for a hostname * - * @param int $index - * @param string $hostName * * @return null|stdClass Null if the hostname is invalid */ @@ -193,7 +175,7 @@ class NoProxyPattern } $this->rules[$index] = null; - list($host, $port, $err) = $this->splitHostPort($hostName); + [$host, $port, $err] = $this->splitHostPort($hostName); if ($err || !$this->ipCheckData($host, $ipdata, true)) { return null; @@ -207,7 +189,6 @@ class NoProxyPattern /** * Creates an object containing IP data if the host is an IP address * - * @param string $host * @param null|stdClass $ipdata Set by method if IP address found * @param bool $allowPrefix Whether a CIDR prefix-length is expected * @@ -222,7 +203,7 @@ class NoProxyPattern // Check for a CIDR prefix-length if (strpos($host, '/') !== false) { - list($host, $prefix) = explode('/', $host); + [$host, $prefix] = explode('/', $host); if (!$allowPrefix || !$this->validateInt($prefix, 0, 128)) { return false; @@ -236,7 +217,7 @@ class NoProxyPattern return !$modified; } - list($ip, $size) = $this->ipGetAddr($host); + [$ip, $size] = $this->ipGetAddr($host); if ($prefix !== null) { // Check for a valid prefix @@ -244,7 +225,7 @@ class NoProxyPattern return false; } - list($ip, $netmask) = $this->ipGetNetwork($ip, $size, $prefix); + [$ip, $netmask] = $this->ipGetNetwork($ip, $size, $prefix); } $ipdata = $this->makeIpData($ip, $size, $netmask); @@ -258,7 +239,6 @@ class NoProxyPattern * IPv4 addresses are always mapped to IPv6, which simplifies handling * and comparison. * - * @param string $host * * @return mixed[] in_addr, size */ @@ -268,7 +248,7 @@ class NoProxyPattern $size = strlen($ip); $mapped = $this->ipMapTo6($ip, $size); - return array($mapped, $size); + return [$mapped, $size]; } /** @@ -276,8 +256,6 @@ class NoProxyPattern * * @param int $prefix CIDR prefix-length * @param int $size Byte size of in_addr - * - * @return string */ private function ipGetMask(int $prefix, int $size): string { @@ -324,7 +302,7 @@ class NoProxyPattern $net .= chr($ip[$i] & $mask[$i]); } - return array($net, $netmask); + return [$net, $netmask]; } /** @@ -347,21 +325,15 @@ class NoProxyPattern /** * Creates a rule data object - * - * @param string $host - * @param int $port - * @param null|stdClass $ipdata - * - * @return stdClass */ private function makeData(string $host, int $port, ?stdClass $ipdata): stdClass { - return (object) array( + return (object) [ 'host' => $host, 'name' => '.' . ltrim($host, '.'), 'port' => $port, 'ipdata' => $ipdata, - ); + ]; } /** @@ -370,29 +342,26 @@ class NoProxyPattern * @param string $ip in_addr * @param int $size Byte size of in_addr * @param null|string $netmask Network mask - * - * @return stdClass */ private function makeIpData(string $ip, int $size, ?string $netmask): stdClass { - return (object) array( + return (object) [ 'ip' => $ip, 'size' => $size, 'netmask' => $netmask, - ); + ]; } /** * Splits the hostname into host and port components * - * @param string $hostName * * @return mixed[] host, port, if there was error */ private function splitHostPort(string $hostName): array { // host, port, err - $error = array('', '', true); + $error = ['', '', true]; $port = 0; $ip6 = ''; @@ -427,26 +396,20 @@ class NoProxyPattern $host = $ip6 . $hostName; - return array($host, $port, false); + return [$host, $port, false]; } /** * Wrapper around filter_var FILTER_VALIDATE_INT - * - * @param string $int - * @param int $min - * @param int $max - * - * @return bool */ private function validateInt(string $int, int $min, int $max): bool { - $options = array( - 'options' => array( + $options = [ + 'options' => [ 'min_range' => $min, 'max_range' => $max, - ), - ); + ], + ]; return false !== filter_var($int, FILTER_VALIDATE_INT, $options); } diff --git a/src/Composer/Util/PackageSorter.php b/src/Composer/Util/PackageSorter.php index 6060c2781..85c6ba7ac 100644 --- a/src/Composer/Util/PackageSorter.php +++ b/src/Composer/Util/PackageSorter.php @@ -28,7 +28,7 @@ class PackageSorter */ public static function getMostCurrentVersion(array $packages): ?PackageInterface { - return array_reduce($packages, function ($carry, $pkg) { + return array_reduce($packages, static function ($carry, $pkg) { if ($carry === null) { return $pkg; } @@ -70,9 +70,9 @@ class PackageSorter * @param array $weights Pre-set weights for some packages to give them more (negative number) or less (positive) weight offsets * @return PackageInterface[] sorted array */ - public static function sortPackages(array $packages, array $weights = array()): array + public static function sortPackages(array $packages, array $weights = []): array { - $usageList = array(); + $usageList = []; foreach ($packages as $package) { $links = $package->getRequires(); @@ -84,8 +84,8 @@ class PackageSorter $usageList[$target][] = $package->getName(); } } - $computing = array(); - $computed = array(); + $computing = []; + $computed = []; $computeImportance = static function ($name) use (&$computeImportance, &$computing, &$computed, $usageList, $weights) { // reusing computed importance if (isset($computed[$name])) { @@ -112,12 +112,12 @@ class PackageSorter return $weight; }; - $weightedPackages = array(); + $weightedPackages = []; foreach ($packages as $index => $package) { $name = $package->getName(); $weight = $computeImportance($name); - $weightedPackages[] = array('name' => $name, 'weight' => $weight, 'index' => $index); + $weightedPackages[] = ['name' => $name, 'weight' => $weight, 'index' => $index]; } usort($weightedPackages, static function (array $a, array $b): int { @@ -128,7 +128,7 @@ class PackageSorter return strnatcasecmp($a['name'], $b['name']); }); - $sortedPackages = array(); + $sortedPackages = []; foreach ($weightedPackages as $pkg) { $sortedPackages[] = $packages[$pkg['index']]; diff --git a/src/Composer/Util/Perforce.php b/src/Composer/Util/Perforce.php index 8355d7f6f..d24209a42 100644 --- a/src/Composer/Util/Perforce.php +++ b/src/Composer/Util/Perforce.php @@ -60,11 +60,6 @@ class Perforce /** * @phpstan-param RepoConfig $repoConfig - * @param string $port - * @param string $path - * @param ProcessExecutor $process - * @param bool $isWindows - * @param IOInterface $io */ public function __construct($repoConfig, string $port, string $path, ProcessExecutor $process, bool $isWindows, IOInterface $io) { @@ -78,24 +73,12 @@ class Perforce /** * @phpstan-param RepoConfig $repoConfig - * @param string $port - * @param string $path - * @param ProcessExecutor $process - * @param IOInterface $io - * - * @return self */ public static function create($repoConfig, string $port, string $path, ProcessExecutor $process, IOInterface $io): self { return new Perforce($repoConfig, $port, $path, $process, Platform::isWindows(), $io); } - /** - * @param string $url - * @param ProcessExecutor $processExecutor - * - * @return bool - */ public static function checkServerExists(string $url, ProcessExecutor $processExecutor): bool { return 0 === $processExecutor->execute('p4 -p ' . ProcessExecutor::escape($url) . ' info -s', $ignoredOutput); @@ -103,8 +86,6 @@ class Perforce /** * @phpstan-param RepoConfig $repoConfig - * - * @return void */ public function initialize($repoConfig): void { @@ -132,12 +113,6 @@ class Perforce } } - /** - * @param string|null $depot - * @param string|null $branch - * - * @return void - */ public function initializeDepotAndBranch(?string $depot, ?string $branch): void { if (isset($depot)) { @@ -156,9 +131,6 @@ class Perforce return gethostname() . "_" . time(); } - /** - * @return void - */ public function cleanupClientSpec(): void { $client = $this->getClient(); @@ -173,8 +145,6 @@ class Perforce /** * @param non-empty-string $command - * - * @return int */ protected function executeCommand($command): int { @@ -183,32 +153,21 @@ class Perforce return $this->process->execute($command, $this->commandResult); } - /** - * @return string - */ public function getClient(): string { if (!isset($this->p4Client)) { - $cleanStreamName = str_replace(array('//', '/', '@'), array('', '_', ''), $this->getStream()); + $cleanStreamName = str_replace(['//', '/', '@'], ['', '_', ''], $this->getStream()); $this->p4Client = 'composer_perforce_' . $this->uniquePerforceClientName . '_' . $cleanStreamName; } return $this->p4Client; } - /** - * @return string - */ protected function getPath(): string { return $this->path; } - /** - * @param string $path - * - * @return void - */ public function initializePath(string $path): void { $this->path = $path; @@ -216,19 +175,11 @@ class Perforce $fs->ensureDirectoryExists($path); } - /** - * @return string - */ protected function getPort(): string { return $this->p4Port; } - /** - * @param string $stream - * - * @return void - */ public function setStream(string $stream): void { $this->p4Stream = $stream; @@ -239,17 +190,11 @@ class Perforce } } - /** - * @return bool - */ public function isStream(): bool { return is_string($this->p4DepotType) && (strcmp($this->p4DepotType, 'stream') === 0); } - /** - * @return string - */ public function getStream(): string { if (!isset($this->p4Stream)) { @@ -263,11 +208,6 @@ class Perforce return $this->p4Stream; } - /** - * @param string $stream - * - * @return string - */ public function getStreamWithoutLabel(string $stream): string { $index = strpos($stream, '@'); @@ -286,27 +226,16 @@ class Perforce return $this->path . '/' . $this->getClient() . '.p4.spec'; } - /** - * @return string|null - */ public function getUser(): ?string { return $this->p4User; } - /** - * @param string|null $user - * - * @return void - */ public function setUser(?string $user): void { $this->p4User = $user; } - /** - * @return void - */ public function queryP4User(): void { $this->getUser(); @@ -327,7 +256,6 @@ class Perforce } /** - * @param string $name * @return ?string */ protected function getP4variable(string $name): ?string @@ -362,9 +290,6 @@ class Perforce return $result; } - /** - * @return string|null - */ public function queryP4Password(): ?string { if (isset($this->p4Password)) { @@ -380,9 +305,6 @@ class Perforce } /** - * @param string $command - * @param bool $useClient - * * @return non-empty-string */ public function generateP4Command(string $command, bool $useClient = true): string @@ -397,9 +319,6 @@ class Perforce return $p4Command; } - /** - * @return bool - */ public function isLoggedIn(): bool { $command = $this->generateP4Command('login -s', false); @@ -420,9 +339,6 @@ class Perforce return true; } - /** - * @return void - */ public function connectClient(): void { $p4CreateClientCommand = $this->generateP4Command( @@ -431,11 +347,6 @@ class Perforce $this->executeCommand($p4CreateClientCommand); } - /** - * @param string|null $sourceReference - * - * @return void - */ public function syncCodeBase(?string $sourceReference): void { $prevDir = Platform::getCwd(); @@ -450,8 +361,6 @@ class Perforce /** * @param resource|false $spec - * - * @return void */ public function writeClientSpecToFile($spec): void { @@ -476,9 +385,6 @@ class Perforce } } - /** - * @return void - */ public function writeP4ClientSpec(): void { $clientSpec = $this->getP4ClientSpec(); @@ -495,8 +401,6 @@ class Perforce /** * @param resource $pipe * @param mixed $name - * - * @return void */ protected function read($pipe, $name): void { @@ -509,11 +413,6 @@ class Perforce } } - /** - * @param string|null $password - * - * @return int - */ public function windowsLogin(?string $password): int { $command = $this->generateP4Command(' login -a'); @@ -523,9 +422,6 @@ class Perforce return $process->run(); } - /** - * @return void - */ public function p4Login(): void { $this->queryP4User(); @@ -544,8 +440,6 @@ class Perforce } /** - * @param string $identifier - * * @return mixed[]|null */ public function getComposerInformation(string $identifier): ?array @@ -559,12 +453,6 @@ class Perforce return json_decode($composerFileContent, true); } - /** - * @param string $file - * @param string $identifier - * - * @return string|null - */ public function getFileContent(string $file, string $identifier): ?string { $path = $this->getFilePath($file, $identifier); @@ -580,12 +468,6 @@ class Perforce return $result; } - /** - * @param string $file - * @param string $identifier - * - * @return string|null - */ public function getFilePath(string $file, string $identifier): ?string { $index = strpos($identifier, '@'); @@ -616,7 +498,7 @@ class Perforce */ public function getBranches(): array { - $possibleBranches = array(); + $possibleBranches = []; if (!$this->isStream()) { $possibleBranches[$this->p4Branch] = $this->getStream(); } else { @@ -640,7 +522,7 @@ class Perforce $lastCommitArr = explode(' ', $lastCommit); $lastCommitNum = $lastCommitArr[1]; - return array('master' => $possibleBranches[$this->p4Branch] . '@'. $lastCommitNum); + return ['master' => $possibleBranches[$this->p4Branch] . '@'. $lastCommitNum]; } /** @@ -652,7 +534,7 @@ class Perforce $this->executeCommand($command); $result = $this->commandResult; $resArray = explode(PHP_EOL, $result); - $tags = array(); + $tags = []; foreach ($resArray as $line) { if (strpos($line, 'Label') !== false) { $fields = explode(' ', $line); @@ -663,9 +545,6 @@ class Perforce return $tags; } - /** - * @return bool - */ public function checkStream(): bool { $command = $this->generateP4Command('depots', false); @@ -687,7 +566,6 @@ class Perforce } /** - * @param string $reference * @return mixed|null */ protected function getChangeList(string $reference): mixed @@ -709,8 +587,6 @@ class Perforce } /** - * @param string $fromReference - * @param string $toReference * @return mixed|null */ public function getCommitLogs(string $fromReference, string $toReference): mixed @@ -731,9 +607,6 @@ class Perforce return $this->commandResult; } - /** - * @return Filesystem - */ public function getFilesystem(): Filesystem { if (null === $this->filesystem) { @@ -743,9 +616,6 @@ class Perforce return $this->filesystem; } - /** - * @return void - */ public function setFilesystem(Filesystem $fs): void { $this->filesystem = $fs; diff --git a/src/Composer/Util/Platform.php b/src/Composer/Util/Platform.php index ad9ffdc16..2bbc61225 100644 --- a/src/Composer/Util/Platform.php +++ b/src/Composer/Util/Platform.php @@ -55,7 +55,6 @@ class Platform /** * getenv() equivalent but reads from the runtime global variables first * - * @param string $name * @return string|false */ public static function getEnv(string $name) @@ -72,10 +71,6 @@ class Platform /** * putenv() equivalent but updates the runtime global variables too - * - * @param string $name - * @param string $value - * @return void */ public static function putEnv(string $name, string $value): void { @@ -86,9 +81,6 @@ class Platform /** * putenv('X') equivalent but updates the runtime global variables too - * - * @param string $name - * @return void */ public static function clearEnv(string $name): void { @@ -98,9 +90,6 @@ class Platform /** * Parses tildes and environment variables in paths. - * - * @param string $path - * @return string */ public static function expandPath(string $path): string { @@ -176,7 +165,6 @@ class Platform } /** - * @param string $str * @return int return a guaranteed binary length of the string, regardless of silly mbstring configs */ public static function strlen(string $str): int @@ -195,7 +183,6 @@ class Platform /** * @param ?resource $fd Open file descriptor or null to default to STDOUT - * @return bool */ public static function isTty($fd = null): bool { @@ -208,7 +195,7 @@ class Platform // detect msysgit/mingw and assume this is a tty because detection // does not work correctly, see https://github.com/composer/composer/issues/9690 - if (in_array(strtoupper(self::getEnv('MSYSTEM') ?: ''), array('MINGW32', 'MINGW64'), true)) { + if (in_array(strtoupper(self::getEnv('MSYSTEM') ?: ''), ['MINGW32', 'MINGW64'], true)) { return true; } @@ -236,9 +223,6 @@ class Platform return '_complete' === ($_SERVER['argv'][1] ?? null); } - /** - * @return void - */ public static function workaroundFilesystemIssues(): void { if (self::isVirtualBoxGuest()) { @@ -250,8 +234,6 @@ class Platform * Attempts detection of VirtualBox guest VMs * * This works based on the process' user being "vagrant", the COMPOSER_RUNTIME_ENV env var being set to "virtualbox", or lsmod showing the virtualbox guest additions are loaded - * - * @return bool */ private static function isVirtualBoxGuest(): bool { diff --git a/src/Composer/Util/ProcessExecutor.php b/src/Composer/Util/ProcessExecutor.php index 3f57239bf..aab99f788 100644 --- a/src/Composer/Util/ProcessExecutor.php +++ b/src/Composer/Util/ProcessExecutor.php @@ -46,7 +46,7 @@ class ProcessExecutor /** * @phpstan-var array> */ - private $jobs = array(); + private $jobs = []; /** @var int */ private $runningJobs = 0; /** @var int */ @@ -56,7 +56,7 @@ class ProcessExecutor /** @var bool */ private $allowAsync = false; - public function __construct(IOInterface $io = null) + public function __construct(?IOInterface $io = null) { $this->io = $io; } @@ -97,10 +97,7 @@ class ProcessExecutor /** * @param string|list $command - * @param null|string $cwd - * @param bool $tty * @param mixed $output - * @return int */ private function doExecute($command, ?string $cwd, bool $tty, &$output = null): int { @@ -158,7 +155,6 @@ class ProcessExecutor * * @param string|list $command the command to execute * @param string $cwd the working directory - * @return PromiseInterface */ public function executeAsync($command, ?string $cwd = null): PromiseInterface { @@ -166,12 +162,12 @@ class ProcessExecutor throw new \LogicException('You must use the ProcessExecutor instance which is part of a Composer\Loop instance to be able to run async processes'); } - $job = array( + $job = [ 'id' => $this->idGen++, 'status' => self::STATUS_QUEUED, 'command' => $command, 'cwd' => $cwd, - ); + ]; $resolver = static function ($resolve, $reject) use (&$job): void { $job['status'] = ProcessExecutor::STATUS_QUEUED; @@ -245,10 +241,6 @@ class ProcessExecutor } } - /** - * @param int $id - * @return void - */ private function startJob(int $id): void { $job = &$this->jobs[$id]; @@ -272,7 +264,7 @@ class ProcessExecutor $process = new Process($command, $cwd, null, null, static::getTimeout()); } } catch (\Throwable $e) { - call_user_func($job['reject'], $e); + $job['reject']($e); return; } @@ -282,7 +274,7 @@ class ProcessExecutor try { $process->start(); } catch (\Throwable $e) { - call_user_func($job['reject'], $e); + $job['reject']($e); return; } @@ -300,7 +292,6 @@ class ProcessExecutor /** * @param ?int $index job id - * @return void */ public function wait($index = null): void { @@ -315,8 +306,6 @@ class ProcessExecutor /** * @internal - * - * @return void */ public function enableAsync(): void { @@ -370,20 +359,17 @@ class ProcessExecutor } /** - * @param null|string $output * @return string[] */ public function splitLines(?string $output): array { $output = trim((string) $output); - return $output === '' ? array() : Preg::split('{\r?\n}', $output); + return $output === '' ? [] : Preg::split('{\r?\n}', $output); } /** * Get any error output from the last command - * - * @return string */ public function getErrorOutput(): string { @@ -400,7 +386,6 @@ class ProcessExecutor /** * @param int $timeout the timeout in seconds - * @return void */ public static function setTimeout(int $timeout): void { @@ -456,8 +441,6 @@ class ProcessExecutor * MIT Licensed (c) John Stevenson * * @param string|false|null $argument - * - * @return string */ private static function escapeArgument($argument): string { diff --git a/src/Composer/Util/RemoteFilesystem.php b/src/Composer/Util/RemoteFilesystem.php index 0585beeea..3ff6f2e40 100644 --- a/src/Composer/Util/RemoteFilesystem.php +++ b/src/Composer/Util/RemoteFilesystem.php @@ -49,7 +49,7 @@ class RemoteFilesystem /** @var ?int */ private $lastProgress; /** @var mixed[] */ - private $options = array(); + private $options = []; /** @var bool */ private $disableTls = false; /** @var string[] */ @@ -73,10 +73,9 @@ class RemoteFilesystem * @param IOInterface $io The IO instance * @param Config $config The config * @param mixed[] $options The options - * @param bool $disableTls * @param AuthHelper $authHelper */ - public function __construct(IOInterface $io, Config $config, array $options = array(), bool $disableTls = false, AuthHelper $authHelper = null) + public function __construct(IOInterface $io, Config $config, array $options = [], bool $disableTls = false, ?AuthHelper $authHelper = null) { $this->io = $io; @@ -106,7 +105,7 @@ class RemoteFilesystem * * @return bool true */ - public function copy(string $originUrl, string $fileUrl, string $fileName, bool $progress = true, array $options = array()) + public function copy(string $originUrl, string $fileUrl, string $fileName, bool $progress = true, array $options = []) { return $this->get($originUrl, $fileUrl, $options, $fileName, $progress); } @@ -121,7 +120,7 @@ class RemoteFilesystem * * @return bool|string The content */ - public function getContents(string $originUrl, string $fileUrl, bool $progress = true, array $options = array()) + public function getContents(string $originUrl, string $fileUrl, bool $progress = true, array $options = []) { return $this->get($originUrl, $fileUrl, $options, null, $progress); } @@ -217,7 +216,7 @@ class RemoteFilesystem * * @return bool|string */ - protected function get(string $originUrl, string $fileUrl, array $additionalOptions = array(), string $fileName = null, bool $progress = true) + protected function get(string $originUrl, string $fileUrl, array $additionalOptions = [], ?string $fileName = null, bool $progress = true) { $this->scheme = parse_url(strtr($fileUrl, '\\', '/'), PHP_URL_SCHEME); $this->bytesMax = 0; @@ -227,7 +226,7 @@ class RemoteFilesystem $this->progress = $progress; $this->lastProgress = null; $retryAuthFailure = true; - $this->lastHeaders = array(); + $this->lastHeaders = []; $this->redirects = 1; // The first request counts. $tempAdditionalOptions = $additionalOptions; @@ -271,7 +270,7 @@ class RemoteFilesystem unset($options['max_file_size']); } - $ctx = StreamContextFactory::getContext($fileUrl, $options, array('notification' => array($this, 'callbackGet'))); + $ctx = StreamContextFactory::getContext($fileUrl, $options, ['notification' => [$this, 'callbackGet']]); $proxy = $this->proxyManager->getProxyForRequest($fileUrl); $usingProxy = $proxy->getFormattedUrl(' using proxy (%s)'); @@ -298,7 +297,7 @@ class RemoteFilesystem return true; }); - $http_response_header = array(); + $http_response_header = []; try { $result = $this->getRemoteContents($originUrl, $fileUrl, $ctx, $http_response_header, $maxFileSize); @@ -308,7 +307,7 @@ class RemoteFilesystem HttpDownloader::outputWarnings($this->io, $originUrl, json_decode($result, true)); } - if (in_array($statusCode, array(401, 403)) && $retryAuthFailure) { + if (in_array($statusCode, [401, 403]) && $retryAuthFailure) { $this->promptAuthAndRetry($statusCode, $this->findStatusMessage($http_response_header), $http_response_header); } } @@ -347,10 +346,10 @@ class RemoteFilesystem if (!$this->degradedMode && false !== strpos($e->getMessage(), 'Operation timed out')) { $this->degradedMode = true; $this->io->writeError(''); - $this->io->writeError(array( + $this->io->writeError([ ''.$e->getMessage().'', 'Retrying with degraded mode, check https://getcomposer.org/doc/articles/troubleshooting.md#degraded-mode for more info', - )); + ]); return $this->get($this->originUrl, $this->fileUrl, $additionalOptions, $this->fileName, $this->progress); } @@ -428,11 +427,11 @@ class RemoteFilesystem } $this->degradedMode = true; - $this->io->writeError(array( + $this->io->writeError([ '', 'Failed to decode response: '.$e->getMessage().'', 'Retrying with degraded mode, check https://getcomposer.org/doc/articles/troubleshooting.md#degraded-mode for more info', - )); + ]); return $this->get($this->originUrl, $this->fileUrl, $additionalOptions, $this->fileName, $this->progress); } @@ -482,10 +481,10 @@ class RemoteFilesystem if (!$this->degradedMode && false !== strpos($e->getMessage(), 'Operation timed out')) { $this->degradedMode = true; $this->io->writeError(''); - $this->io->writeError(array( + $this->io->writeError([ ''.$e->getMessage().'', 'Retrying with degraded mode, check https://getcomposer.org/doc/articles/troubleshooting.md#degraded-mode for more info', - )); + ]); return $this->get($this->originUrl, $this->fileUrl, $additionalOptions, $this->fileName, $this->progress); } @@ -511,7 +510,7 @@ class RemoteFilesystem * * @return string|false The response contents or false on failure */ - protected function getRemoteContents(string $originUrl, string $fileUrl, $context, array &$responseHeaders = null, int $maxFileSize = null) + protected function getRemoteContents(string $originUrl, string $fileUrl, $context, ?array &$responseHeaders = null, ?int $maxFileSize = null) { $result = false; @@ -531,7 +530,7 @@ class RemoteFilesystem } // https://www.php.net/manual/en/reserved.variables.httpresponseheader.php - $responseHeaders = $http_response_header ?? array(); + $responseHeaders = $http_response_header ?? []; if (null !== $e) { throw $e; @@ -587,12 +586,11 @@ class RemoteFilesystem /** * @param positive-int $httpStatus - * @param string|null $reason * @param string[] $headers * * @return void */ - protected function promptAuthAndRetry($httpStatus, ?string $reason = null, array $headers = array()) + protected function promptAuthAndRetry($httpStatus, ?string $reason = null, array $headers = []) { $result = $this->authHelper->promptAuthIfNeeded($this->fileUrl, $this->originUrl, $httpStatus, $reason, $headers, 1 /** always pass 1 as RemoteFilesystem is single threaded there is no race condition possible */); @@ -605,15 +603,14 @@ class RemoteFilesystem } /** - * @param string $originUrl * @param mixed[] $additionalOptions * * @return mixed[] */ protected function getOptionsForUrl(string $originUrl, array $additionalOptions) { - $tlsOptions = array(); - $headers = array(); + $tlsOptions = []; + $headers = []; if (extension_loaded('zlib')) { $headers[] = 'Accept-Encoding: gzip'; @@ -695,8 +692,6 @@ class RemoteFilesystem /** * @param string|false $result * @param string[] $http_response_header - * - * @return string|null */ private function decodeResult($result, array $http_response_header): ?string { @@ -719,8 +714,6 @@ class RemoteFilesystem /** * @param string|false $result - * - * @return string|null */ private function normalizeResult($result): ?string { diff --git a/src/Composer/Util/Silencer.php b/src/Composer/Util/Silencer.php index c01404be6..f2b9f73fc 100644 --- a/src/Composer/Util/Silencer.php +++ b/src/Composer/Util/Silencer.php @@ -22,7 +22,7 @@ class Silencer /** * @var int[] Unpop stack */ - private static $stack = array(); + private static $stack = []; /** * Suppresses given mask or errors. @@ -44,8 +44,6 @@ class Silencer /** * Restores a single state. - * - * @return void */ public static function restore(): void { diff --git a/src/Composer/Util/StreamContextFactory.php b/src/Composer/Util/StreamContextFactory.php index c905df4f8..18425d7ad 100644 --- a/src/Composer/Util/StreamContextFactory.php +++ b/src/Composer/Util/StreamContextFactory.php @@ -37,13 +37,13 @@ final class StreamContextFactory * @throws \RuntimeException if https proxy required and OpenSSL uninstalled * @return resource Default context */ - public static function getContext(string $url, array $defaultOptions = array(), array $defaultParams = array()) + public static function getContext(string $url, array $defaultOptions = [], array $defaultParams = []) { - $options = array('http' => array( + $options = ['http' => [ // specify defaults again to try and work better with curlwrappers enabled 'follow_location' => 1, 'max_redirects' => 20, - )); + ]]; $options = array_replace_recursive($options, self::initOptions($url, $defaultOptions)); unset($defaultOptions['http']['header']); @@ -57,7 +57,6 @@ final class StreamContextFactory } /** - * @param string $url * @param mixed[] $options * @param bool $forCurl When true, will not add proxy values as these are handled separately * @phpstan-return array{http: array{header: string[], proxy?: string, request_fulluri: bool}, ssl?: mixed[]} @@ -67,7 +66,7 @@ final class StreamContextFactory { // Make sure the headers are in an array form if (!isset($options['http']['header'])) { - $options['http']['header'] = array(); + $options['http']['header'] = []; } if (is_string($options['http']['header'])) { $options['http']['header'] = explode("\r\n", $options['http']['header']); @@ -134,9 +133,9 @@ final class StreamContextFactory * * @return mixed[] */ - public static function getTlsDefaults(array $options, LoggerInterface $logger = null): array + public static function getTlsDefaults(array $options, ?LoggerInterface $logger = null): array { - $ciphers = implode(':', array( + $ciphers = implode(':', [ 'ECDHE-RSA-AES128-GCM-SHA256', 'ECDHE-ECDSA-AES128-GCM-SHA256', 'ECDHE-RSA-AES256-GCM-SHA384', @@ -178,7 +177,7 @@ final class StreamContextFactory '!EDH-DSS-DES-CBC3-SHA', '!EDH-RSA-DES-CBC3-SHA', '!KRB5-DES-CBC3-SHA', - )); + ]); /** * CN_match and SNI_server_name are only known once a URL is passed. @@ -186,15 +185,15 @@ final class StreamContextFactory * * cafile or capath can be overridden by passing in those options to constructor. */ - $defaults = array( - 'ssl' => array( + $defaults = [ + 'ssl' => [ 'ciphers' => $ciphers, 'verify_peer' => true, 'verify_depth' => 7, 'SNI_enabled' => true, 'capture_peer_cert' => true, - ), - ); + ], + ]; if (isset($options['ssl'])) { $defaults['ssl'] = array_replace_recursive($defaults['ssl'], $options['ssl']); diff --git a/src/Composer/Util/Svn.php b/src/Composer/Util/Svn.php index d385ccb74..ea7d5dbeb 100644 --- a/src/Composer/Util/Svn.php +++ b/src/Composer/Util/Svn.php @@ -70,12 +70,9 @@ class Svn private static $version; /** - * @param string $url - * @param \Composer\IO\IOInterface $io - * @param Config $config * @param ProcessExecutor $process */ - public function __construct(string $url, IOInterface $io, Config $config, ProcessExecutor $process = null) + public function __construct(string $url, IOInterface $io, Config $config, ?ProcessExecutor $process = null) { $this->url = $url; $this->io = $io; @@ -83,9 +80,6 @@ class Svn $this->process = $process ?: new ProcessExecutor($io); } - /** - * @return void - */ public static function cleanEnv(): void { // clean up env for OSX, see https://github.com/composer/composer/issues/2146#issuecomment-35478940 @@ -103,7 +97,6 @@ class Svn * @param bool $verbose Output all output to the user * * @throws \RuntimeException - * @return string */ public function execute(string $command, string $url, ?string $cwd = null, ?string $path = null, bool $verbose = false): string { @@ -123,9 +116,8 @@ class Svn * @param bool $verbose Output all output to the user * * @throws \RuntimeException - * @return string */ - public function executeLocal(string $command, string $path, string $cwd = null, bool $verbose = false): string + public function executeLocal(string $command, string $path, ?string $cwd = null, bool $verbose = false): string { // A local command has no remote url return $this->executeWithAuthRetry($command, $cwd, '', $path, $verbose); @@ -156,7 +148,7 @@ class Svn } $errorOutput = $this->process->getErrorOutput(); - $fullOutput = trim(implode("\n", array($output, $errorOutput))); + $fullOutput = trim(implode("\n", [$output, $errorOutput])); // the error is not auth-related if (false === stripos($fullOutput, 'Could not authenticate to server:') @@ -181,10 +173,6 @@ class Svn ); } - /** - * @param bool $cacheCredentials - * @return void - */ public function setCacheCredentials(bool $cacheCredentials): void { $this->cacheCredentials = $cacheCredentials; @@ -208,10 +196,10 @@ class Svn $this->io->writeError("The Subversion server ({$this->url}) requested credentials:"); $this->hasAuth = true; - $this->credentials = array( + $this->credentials = [ 'username' => (string) $this->io->ask("Username: ", ''), 'password' => (string) $this->io->askAndHideAnswer("Password: "), - ); + ]; $this->cacheCredentials = $this->io->askConfirmation("Should Subversion cache these credentials? (yes/no) "); @@ -224,8 +212,6 @@ class Svn * @param string $cmd Usually 'svn ls' or something like that. * @param string $url Repo URL. * @param string $path Target for a checkout - * - * @return string */ protected function getCommand(string $cmd, string $url, ?string $path = null): string { @@ -248,8 +234,6 @@ class Svn * Return the credential string for the svn command. * * Adds --no-auth-cache when credentials are present. - * - * @return string */ protected function getCredentialString(): string { @@ -269,7 +253,6 @@ class Svn * Get the password for the svn command. Can be empty. * * @throws \LogicException - * @return string */ protected function getPassword(): string { @@ -284,7 +267,6 @@ class Svn * Get the username for the svn command. * * @throws \LogicException - * @return string */ protected function getUsername(): string { @@ -297,8 +279,6 @@ class Svn /** * Detect Svn Auth. - * - * @return bool */ protected function hasAuth(): bool { @@ -315,8 +295,6 @@ class Svn /** * Return the no-auth-cache switch. - * - * @return string */ protected function getAuthCache(): string { @@ -325,8 +303,6 @@ class Svn /** * Create the auth params from the configuration file. - * - * @return bool */ private function createAuthFromConfig(): bool { @@ -338,10 +314,10 @@ class Svn $host = parse_url($this->url, PHP_URL_HOST); if (isset($authConfig[$host])) { - $this->credentials = array( + $this->credentials = [ 'username' => $authConfig[$host]['username'], 'password' => $authConfig[$host]['password'], - ); + ]; return $this->hasAuth = true; } @@ -351,8 +327,6 @@ class Svn /** * Create the auth params from the url - * - * @return bool */ private function createAuthFromUrl(): bool { @@ -361,18 +335,16 @@ class Svn return $this->hasAuth = false; } - $this->credentials = array( + $this->credentials = [ 'username' => $uri['user'], 'password' => !empty($uri['pass']) ? $uri['pass'] : '', - ); + ]; return $this->hasAuth = true; } /** * Returns the version of the svn binary contained in PATH - * - * @return string|null */ public function binaryVersion(): ?string { diff --git a/src/Composer/Util/SyncHelper.php b/src/Composer/Util/SyncHelper.php index 819115d83..198169212 100644 --- a/src/Composer/Util/SyncHelper.php +++ b/src/Composer/Util/SyncHelper.php @@ -28,10 +28,8 @@ class SyncHelper * @param string $path the installation path for the package * @param PackageInterface $package the package to install * @param PackageInterface|null $prevPackage the previous package if this is an update and not an initial installation - * - * @return void */ - public static function downloadAndInstallPackageSync(Loop $loop, DownloaderInterface $downloader, string $path, PackageInterface $package, PackageInterface $prevPackage = null): void + public static function downloadAndInstallPackageSync(Loop $loop, DownloaderInterface $downloader, string $path, PackageInterface $package, ?PackageInterface $prevPackage = null): void { $type = $prevPackage ? 'update' : 'install'; @@ -57,14 +55,11 @@ class SyncHelper * Waits for a promise to resolve * * @param Loop $loop Loop instance which you can get from $composer->getLoop() - * @param PromiseInterface|null $promise - * - * @return void */ - public static function await(Loop $loop, PromiseInterface $promise = null): void + public static function await(Loop $loop, ?PromiseInterface $promise = null): void { if ($promise) { - $loop->wait(array($promise)); + $loop->wait([$promise]); } } } diff --git a/src/Composer/Util/Tar.php b/src/Composer/Util/Tar.php index 489565b1b..bb8c8c3d2 100644 --- a/src/Composer/Util/Tar.php +++ b/src/Composer/Util/Tar.php @@ -17,11 +17,6 @@ namespace Composer\Util; */ class Tar { - /** - * @param string $pathToArchive - * - * @return string|null - */ public static function getComposerJson(string $pathToArchive): ?string { $phar = new \PharData($pathToArchive); @@ -34,11 +29,7 @@ class Tar } /** - * @param \PharData $phar - * * @throws \RuntimeException - * - * @return string */ private static function extractComposerJsonFromFolder(\PharData $phar): string { @@ -46,7 +37,7 @@ class Tar return $phar['composer.json']->getContent(); } - $topLevelPaths = array(); + $topLevelPaths = []; foreach ($phar as $folderFile) { $name = $folderFile->getBasename(); diff --git a/src/Composer/Util/TlsHelper.php b/src/Composer/Util/TlsHelper.php index 8de4dc836..aca227270 100644 --- a/src/Composer/Util/TlsHelper.php +++ b/src/Composer/Util/TlsHelper.php @@ -27,10 +27,8 @@ final class TlsHelper * @param mixed $certificate X.509 certificate * @param string $hostname Hostname in the URL * @param string $cn Set to the common name of the certificate iff match found - * - * @return bool */ - public static function checkCertificateHost($certificate, string $hostname, string &$cn = null): bool + public static function checkCertificateHost($certificate, string $hostname, ?string &$cn = null): bool { $names = self::getCertificateNames($certificate); @@ -38,7 +36,7 @@ final class TlsHelper return false; } - $combinedNames = array_merge($names['san'], array($names['cn'])); + $combinedNames = array_merge($names['san'], [$names['cn']]); $hostname = strtolower($hostname); foreach ($combinedNames as $certName) { @@ -74,7 +72,7 @@ final class TlsHelper } $commonName = strtolower($info['subject']['commonName']); - $subjectAltNames = array(); + $subjectAltNames = []; if (isset($info['extensions']['subjectAltName'])) { $subjectAltNames = Preg::split('{\s*,\s*}', $info['extensions']['subjectAltName']); @@ -88,10 +86,10 @@ final class TlsHelper $subjectAltNames = array_values($subjectAltNames); } - return array( + return [ 'cn' => $commonName, 'san' => $subjectAltNames, - ); + ]; } /** @@ -132,9 +130,6 @@ final class TlsHelper * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @param string $certificate - * @return string */ public static function getCertificateFingerprint(string $certificate): string { @@ -158,8 +153,6 @@ final class TlsHelper * * This checks if OpenSSL extensions is vulnerable to remote code execution * via the exploit documented as CVE-2013-6420. - * - * @return bool */ public static function isOpensslParseSafe(): bool { @@ -170,8 +163,6 @@ final class TlsHelper * Convert certificate name into matching function. * * @param string $certName CN/SAN - * - * @return callable|null */ private static function certNameMatcher(string $certName): ?callable { diff --git a/src/Composer/Util/Url.php b/src/Composer/Util/Url.php index b98178505..143b19f48 100644 --- a/src/Composer/Util/Url.php +++ b/src/Composer/Util/Url.php @@ -21,9 +21,6 @@ use Composer\Pcre\Preg; class Url { /** - * @param Config $config - * @param string $url - * @param string $ref * @return string the updated URL */ public static function updateDistReference(Config $config, string $url, string $ref): string @@ -60,10 +57,6 @@ class Url return $url; } - /** - * @param string $url - * @return string - */ public static function getOrigin(Config $config, string $url): string { if (0 === strpos($url, 'file://')) { @@ -103,10 +96,6 @@ class Url return $origin; } - /** - * @param string $url - * @return string - */ public static function sanitize(string $url): string { // GitHub repository rename result in redirect locations containing the access_token as GET parameter diff --git a/src/Composer/Util/Zip.php b/src/Composer/Util/Zip.php index 96b705c8f..9fd8f0785 100644 --- a/src/Composer/Util/Zip.php +++ b/src/Composer/Util/Zip.php @@ -19,10 +19,6 @@ class Zip { /** * Gets content of the root composer.json inside a ZIP archive. - * - * @param string $pathToZip - * - * @return string|null */ public static function getComposerJson(string $pathToZip): ?string { @@ -59,11 +55,7 @@ class Zip /** * Find a file by name, returning the one that has the shortest path. * - * @param \ZipArchive $zip - * @param string $filename * @throws \RuntimeException - * - * @return int */ private static function locateFile(\ZipArchive $zip, string $filename): int { @@ -72,7 +64,7 @@ class Zip return $index; } - $topLevelPaths = array(); + $topLevelPaths = []; for ($i = 0; $i < $zip->numFiles; $i++) { $name = $zip->getNameIndex($i); $dirname = dirname($name); diff --git a/tests/Composer/Test/Advisory/AuditorTest.php b/tests/Composer/Test/Advisory/AuditorTest.php index 1dec611d4..7f074bb0d 100644 --- a/tests/Composer/Test/Advisory/AuditorTest.php +++ b/tests/Composer/Test/Advisory/AuditorTest.php @@ -1,22 +1,27 @@ + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Composer\Test\Advisory; use Composer\Advisory\PartialSecurityAdvisory; use Composer\Advisory\SecurityAdvisory; -use Composer\IO\IOInterface; use Composer\IO\NullIO; -use Composer\Json\JsonFile; use Composer\Package\Package; use Composer\Package\Version\VersionParser; use Composer\Repository\ComposerRepository; use Composer\Repository\RepositorySet; use Composer\Test\TestCase; use Composer\Advisory\Auditor; -use Composer\Util\Http\Response; -use Composer\Util\HttpDownloader; use InvalidArgumentException; -use PHPUnit\Framework\MockObject\MockObject; class AuditorTest extends TestCase { @@ -83,7 +88,7 @@ class AuditorTest extends TestCase $repo ->method('getSecurityAdvisories') - ->willReturnCallback(function (array $packageConstraintMap, bool $allowPartialAdvisories) { + ->willReturnCallback(static function (array $packageConstraintMap, bool $allowPartialAdvisories) { $advisories = []; $parser = new VersionParser(); @@ -92,16 +97,16 @@ class AuditorTest extends TestCase * @param string $name * @return ($allowPartialAdvisories is false ? SecurityAdvisory|null : PartialSecurityAdvisory|SecurityAdvisory|null) */ - $create = function (array $data, string $name) use ($parser, $allowPartialAdvisories, $packageConstraintMap): ?PartialSecurityAdvisory { - $advisory = PartialSecurityAdvisory::create($name, $data, $parser); - if (!$allowPartialAdvisories && !$advisory instanceof SecurityAdvisory) { - throw new \RuntimeException('Advisory for '.$name.' could not be loaded as a full advisory from test repo'); - } - if (!$advisory->affectedVersions->matches($packageConstraintMap[$name])) { - return null; - } + $create = static function (array $data, string $name) use ($parser, $allowPartialAdvisories, $packageConstraintMap): ?PartialSecurityAdvisory { + $advisory = PartialSecurityAdvisory::create($name, $data, $parser); + if (!$allowPartialAdvisories && !$advisory instanceof SecurityAdvisory) { + throw new \RuntimeException('Advisory for '.$name.' could not be loaded as a full advisory from test repo'); + } + if (!$advisory->affectedVersions->matches($packageConstraintMap[$name])) { + return null; + } - return $advisory; + return $advisory; }; foreach (self::getMockAdvisories() as $package => $list) { @@ -109,7 +114,9 @@ class AuditorTest extends TestCase continue; } $advisories[$package] = array_filter(array_map( - function ($data) use ($package, $create) { return $create($data, $package); }, + static function ($data) use ($package, $create) { + return $create($data, $package); + }, $list )); } @@ -174,7 +181,7 @@ class AuditorTest extends TestCase ], 'reportedAt' => '', 'composerRepository' => 'https://packagist.org', - ] + ], ], 'vendor1/package2' => [ [ @@ -244,7 +251,7 @@ class AuditorTest extends TestCase ], 'reportedAt' => '2015-05-25 13:21:00', 'composerRepository' => 'https://packagist.org', - ] + ], ], 'vendory/packagey' => [ [ diff --git a/tests/Composer/Test/AllFunctionalTest.php b/tests/Composer/Test/AllFunctionalTest.php index 81ee7b382..f006d756c 100644 --- a/tests/Composer/Test/AllFunctionalTest.php +++ b/tests/Composer/Test/AllFunctionalTest.php @@ -99,7 +99,6 @@ class AllFunctionalTest extends TestCase /** * @dataProvider getTestFiles * @depends testBuildPhar - * @param string $testFile */ public function testIntegration(string $testFile): void { @@ -114,15 +113,15 @@ class AllFunctionalTest extends TestCase $fs->copy($testFileSetupDir, $this->testDir); } - $env = array( + $env = [ 'COMPOSER_HOME' => $this->testDir.'home', 'COMPOSER_CACHE_DIR' => $this->testDir.'cache', - ); + ]; $proc = Process::fromShellCommandline(escapeshellcmd(PHP_BINARY).' '.escapeshellarg(self::$pharPath).' --no-ansi '.$testData['RUN'], $this->testDir, $env, null, 300); $output = ''; - $exitCode = $proc->run(function ($type, $buffer) use (&$output): void { + $exitCode = $proc->run(static function ($type, $buffer) use (&$output): void { $output .= $buffer; }); @@ -182,22 +181,21 @@ class AllFunctionalTest extends TestCase */ public function getTestFiles(): array { - $tests = array(); + $tests = []; foreach (Finder::create()->in(__DIR__.'/Fixtures/functional')->name('*.test')->files() as $file) { - $tests[$file->getFilename()] = array((string) $file); + $tests[$file->getFilename()] = [(string) $file]; } return $tests; } /** - * @param string $file * @return array{RUN: string, EXPECT?: string, EXPECT-EXIT-CODE?: int, EXPECT-REGEX?: string, EXPECT-REGEXES?: string, TEST?: string} */ private function parseTestFile(string $file): array { $tokens = Preg::split('#(?:^|\n*)--([A-Z-]+)--\n#', file_get_contents($file), -1, PREG_SPLIT_DELIM_CAPTURE); - $data = array(); + $data = []; $section = null; foreach ($tokens as $token) { @@ -252,10 +250,6 @@ class AllFunctionalTest extends TestCase return $data; // @phpstan-ignore-line } - /** - * @param string $output - * @return string - */ private function cleanOutput(string $output): string { $processed = ''; diff --git a/tests/Composer/Test/ApplicationTest.php b/tests/Composer/Test/ApplicationTest.php index 7588e830b..0cd0d1b38 100644 --- a/tests/Composer/Test/ApplicationTest.php +++ b/tests/Composer/Test/ApplicationTest.php @@ -14,7 +14,6 @@ namespace Composer\Test; use Composer\Console\Application; use Composer\Util\Platform; -use Composer\XdebugHandler\XdebugHandler; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Output\BufferedOutput; diff --git a/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php b/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php index 9129b9e68..b662ff8d9 100644 --- a/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php +++ b/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php @@ -97,17 +97,17 @@ class AutoloadGeneratorTest extends TestCase $this->config = $this->getMockBuilder('Composer\Config')->getMock(); - $this->configValueMap = array( + $this->configValueMap = [ 'vendor-dir' => function (): string { return $this->vendorDir; }, - 'platform-check' => function (): bool { + 'platform-check' => static function (): bool { return true; }, - 'use-include-path' => function (): bool { + 'use-include-path' => static function (): bool { return false; }, - ); + ]; $this->config->expects($this->atLeastOnce()) ->method('get') @@ -139,7 +139,7 @@ class AutoloadGeneratorTest extends TestCase $this->repository = $this->getMockBuilder('Composer\Repository\InstalledRepositoryInterface')->getMock(); $this->repository->expects($this->any()) ->method('getDevPackageNames') - ->willReturn(array()); + ->willReturn([]); $this->eventDispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->disableOriginalConstructor() @@ -165,21 +165,21 @@ class AutoloadGeneratorTest extends TestCase public function testRootPackageAutoloading(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array( - 'psr-0' => array( + $package->setAutoload([ + 'psr-0' => [ 'Main' => 'src/', - 'Lala' => array('src/', 'lib/'), - ), - 'psr-4' => array( + 'Lala' => ['src/', 'lib/'], + ], + 'psr-4' => [ 'Acme\Fruit\\' => 'src-fruit/', - 'Acme\Cake\\' => array('src-cake/', 'lib-cake/'), - ), - 'classmap' => array('composersrc/'), - )); + 'Acme\Cake\\' => ['src-cake/', 'lib-cake/'], + ], + 'classmap' => ['composersrc/'], + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $this->fs->ensureDirectoryExists($this->workingDir.'/composer'); $this->fs->ensureDirectoryExists($this->workingDir.'/src/Lala/Test'); @@ -210,21 +210,21 @@ class AutoloadGeneratorTest extends TestCase public function testRootPackageDevAutoloading(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array( - 'psr-0' => array( + $package->setAutoload([ + 'psr-0' => [ 'Main' => 'src/', - ), - )); - $package->setDevAutoload(array( - 'files' => array('devfiles/foo.php'), - 'psr-0' => array( + ], + ]); + $package->setDevAutoload([ + 'files' => ['devfiles/foo.php'], + 'psr-0' => [ 'Main' => 'tests/', - ), - )); + ], + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $this->fs->ensureDirectoryExists($this->workingDir.'/composer'); $this->fs->ensureDirectoryExists($this->workingDir.'/src/Main'); @@ -248,18 +248,18 @@ class AutoloadGeneratorTest extends TestCase public function testRootPackageDevAutoloadingDisabledByDefault(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array( - 'psr-0' => array( + $package->setAutoload([ + 'psr-0' => [ 'Main' => 'src/', - ), - )); - $package->setDevAutoload(array( - 'files' => array('devfiles/foo.php'), - )); + ], + ]); + $package->setDevAutoload([ + 'files' => ['devfiles/foo.php'], + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $this->fs->ensureDirectoryExists($this->workingDir.'/composer'); $this->fs->ensureDirectoryExists($this->workingDir.'/src/Main'); @@ -283,18 +283,18 @@ class AutoloadGeneratorTest extends TestCase $this->vendorDir = $this->workingDir; $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array( - 'psr-0' => array('Main' => 'src/', 'Lala' => 'src/'), - 'psr-4' => array( + $package->setAutoload([ + 'psr-0' => ['Main' => 'src/', 'Lala' => 'src/'], + 'psr-4' => [ 'Acme\Fruit\\' => 'src-fruit/', - 'Acme\Cake\\' => array('src-cake/', 'lib-cake/'), - ), - 'classmap' => array('composersrc/'), - )); + 'Acme\Cake\\' => ['src-cake/', 'lib-cake/'], + ], + 'classmap' => ['composersrc/'], + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $this->fs->ensureDirectoryExists($this->vendorDir.'/composer'); $this->fs->ensureDirectoryExists($this->vendorDir.'/src/Main'); @@ -312,18 +312,18 @@ class AutoloadGeneratorTest extends TestCase public function testRootPackageAutoloadingAlternativeVendorDir(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array( - 'psr-0' => array('Main' => 'src/', 'Lala' => 'src/'), - 'psr-4' => array( + $package->setAutoload([ + 'psr-0' => ['Main' => 'src/', 'Lala' => 'src/'], + 'psr-4' => [ 'Acme\Fruit\\' => 'src-fruit/', - 'Acme\Cake\\' => array('src-cake/', 'lib-cake/'), - ), - 'classmap' => array('composersrc/'), - )); + 'Acme\Cake\\' => ['src-cake/', 'lib-cake/'], + ], + 'classmap' => ['composersrc/'], + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $this->vendorDir .= '/subdir'; @@ -341,16 +341,16 @@ class AutoloadGeneratorTest extends TestCase public function testRootPackageAutoloadingWithTargetDir(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array( - 'psr-0' => array('Main\\Foo' => '', 'Main\\Bar' => ''), - 'classmap' => array('Main/Foo/src', 'lib'), - 'files' => array('foo.php', 'Main/Foo/bar.php'), - )); + $package->setAutoload([ + 'psr-0' => ['Main\\Foo' => '', 'Main\\Bar' => ''], + 'classmap' => ['Main/Foo/src', 'lib'], + 'files' => ['foo.php', 'Main/Foo/bar.php'], + ]); $package->setTargetDir('Main/Foo/'); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $this->fs->ensureDirectoryExists($this->vendorDir.'/a'); $this->fs->ensureDirectoryExists($this->workingDir.'/src'); @@ -372,17 +372,17 @@ class AutoloadGeneratorTest extends TestCase public function testVendorsAutoloading(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setRequires(array( + $package->setRequires([ 'a/a' => new Link('a', 'a/a', new MatchAllConstraint()), 'b/b' => new Link('a', 'b/b', new MatchAllConstraint()), - )); + ]); - $packages = array(); + $packages = []; $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); $packages[] = $c = new AliasPackage($b, '1.2', '1.2'); - $a->setAutoload(array('psr-0' => array('A' => 'src/', 'A\\B' => 'lib/'))); - $b->setAutoload(array('psr-0' => array('B\\Sub\\Name' => 'src/'))); + $a->setAutoload(['psr-0' => ['A' => 'src/', 'A\\B' => 'lib/']]); + $b->setAutoload(['psr-0' => ['B\\Sub\\Name' => 'src/']]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') @@ -401,21 +401,21 @@ class AutoloadGeneratorTest extends TestCase public function testNonDevAutoloadExclusionWithRecursion(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setRequires(array( + $package->setRequires([ 'a/a' => new Link('a', 'a/a', new MatchAllConstraint()), - )); + ]); - $packages = array(); + $packages = []; $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); - $a->setAutoload(array('psr-0' => array('A' => 'src/', 'A\\B' => 'lib/'))); - $a->setRequires(array( + $a->setAutoload(['psr-0' => ['A' => 'src/', 'A\\B' => 'lib/']]); + $a->setRequires([ 'b/b' => new Link('a/a', 'b/b', new MatchAllConstraint()), - )); - $b->setAutoload(array('psr-0' => array('B\\Sub\\Name' => 'src/'))); - $b->setRequires(array( + ]); + $b->setAutoload(['psr-0' => ['B\\Sub\\Name' => 'src/']]); + $b->setRequires([ 'a/a' => new Link('b/b', 'a/a', new MatchAllConstraint()), - )); + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') @@ -434,17 +434,17 @@ class AutoloadGeneratorTest extends TestCase public function testNonDevAutoloadShouldIncludeReplacedPackages(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setRequires(array('a/a' => new Link('a', 'a/a', new MatchAllConstraint()))); + $package->setRequires(['a/a' => new Link('a', 'a/a', new MatchAllConstraint())]); - $packages = array(); + $packages = []; $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); - $a->setRequires(array('b/c' => new Link('a/a', 'b/c', new MatchAllConstraint()))); + $a->setRequires(['b/c' => new Link('a/a', 'b/c', new MatchAllConstraint())]); - $b->setAutoload(array('psr-4' => array('B\\' => 'src/'))); + $b->setAutoload(['psr-4' => ['B\\' => 'src/']]); $b->setReplaces( - array('b/c' => new Link('b/b', 'b/c', new Constraint('==', '1.0'), Link::TYPE_REPLACE)) + ['b/c' => new Link('b/b', 'b/c', new Constraint('==', '1.0'), Link::TYPE_REPLACE)] ); $this->repository->expects($this->once()) @@ -457,10 +457,10 @@ class AutoloadGeneratorTest extends TestCase $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_5'); $this->assertEquals( - array( + [ 'B\\C\\C' => $this->vendorDir.'/b/b/src/C/C.php', 'Composer\\InstalledVersions' => $this->vendorDir . '/composer/InstalledVersions.php', - ), + ], include $this->vendorDir.'/composer/autoload_classmap.php' ); } @@ -468,21 +468,21 @@ class AutoloadGeneratorTest extends TestCase public function testNonDevAutoloadExclusionWithRecursionReplace(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setRequires(array( + $package->setRequires([ 'a/a' => new Link('a', 'a/a', new MatchAllConstraint()), - )); + ]); - $packages = array(); + $packages = []; $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); - $a->setAutoload(array('psr-0' => array('A' => 'src/', 'A\\B' => 'lib/'))); - $a->setRequires(array( + $a->setAutoload(['psr-0' => ['A' => 'src/', 'A\\B' => 'lib/']]); + $a->setRequires([ 'c/c' => new Link('a/a', 'c/c', new MatchAllConstraint()), - )); - $b->setAutoload(array('psr-0' => array('B\\Sub\\Name' => 'src/'))); - $b->setReplaces(array( + ]); + $b->setAutoload(['psr-0' => ['B\\Sub\\Name' => 'src/']]); + $b->setReplaces([ 'c/c' => new Link('b/b', 'c/c', new MatchAllConstraint()), - )); + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') @@ -501,33 +501,33 @@ class AutoloadGeneratorTest extends TestCase public function testNonDevAutoloadReplacesNestedRequirements(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setRequires(array( + $package->setRequires([ 'a/a' => new Link('a', 'a/a', new MatchAllConstraint()), - )); + ]); - $packages = array(); + $packages = []; $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); $packages[] = $c = new Package('c/c', '1.0', '1.0'); $packages[] = $d = new Package('d/d', '1.0', '1.0'); $packages[] = $e = new Package('e/e', '1.0', '1.0'); - $a->setAutoload(array('classmap' => array('src/A.php'))); - $a->setRequires(array( + $a->setAutoload(['classmap' => ['src/A.php']]); + $a->setRequires([ 'b/b' => new Link('a/a', 'b/b', new MatchAllConstraint()), - )); - $b->setAutoload(array('classmap' => array('src/B.php'))); - $b->setRequires(array( + ]); + $b->setAutoload(['classmap' => ['src/B.php']]); + $b->setRequires([ 'e/e' => new Link('b/b', 'e/e', new MatchAllConstraint()), - )); - $c->setAutoload(array('classmap' => array('src/C.php'))); - $c->setReplaces(array( + ]); + $c->setAutoload(['classmap' => ['src/C.php']]); + $c->setReplaces([ 'b/b' => new Link('c/c', 'b/b', new MatchAllConstraint()), - )); - $c->setRequires(array( + ]); + $c->setRequires([ 'd/d' => new Link('c/c', 'd/d', new MatchAllConstraint()), - )); - $d->setAutoload(array('classmap' => array('src/D.php'))); - $e->setAutoload(array('classmap' => array('src/E.php'))); + ]); + $d->setAutoload(['classmap' => ['src/D.php']]); + $e->setAutoload(['classmap' => ['src/E.php']]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') @@ -553,36 +553,36 @@ class AutoloadGeneratorTest extends TestCase public function testPharAutoload(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setRequires(array( + $package->setRequires([ 'a/a' => new Link('a', 'a/a', new MatchAllConstraint()), - )); + ]); - $package->setAutoload(array( - 'psr-0' => array( + $package->setAutoload([ + 'psr-0' => [ 'Foo' => 'foo.phar', 'Bar' => 'dir/bar.phar/src', - ), - 'psr-4' => array( + ], + 'psr-4' => [ 'Baz\\' => 'baz.phar', 'Qux\\' => 'dir/qux.phar/src', - ), - )); + ], + ]); $vendorPackage = new Package('a/a', '1.0', '1.0'); - $vendorPackage->setAutoload(array( - 'psr-0' => array( + $vendorPackage->setAutoload([ + 'psr-0' => [ 'Lorem' => 'lorem.phar', 'Ipsum' => 'dir/ipsum.phar/src', - ), - 'psr-4' => array( + ], + 'psr-4' => [ 'Dolor\\' => 'dolor.phar', 'Sit\\' => 'dir/sit.phar/src', - ), - )); + ], + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array($vendorPackage))); + ->will($this->returnValue([$vendorPackage])); $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, 'Phar'); @@ -595,21 +595,21 @@ class AutoloadGeneratorTest extends TestCase { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array( - 'psr-0' => array('Prefix' => 'foo/bar/non/existing/'), - 'psr-4' => array('Prefix\\' => 'foo/bar/non/existing2/'), - )); + $package->setAutoload([ + 'psr-0' => ['Prefix' => 'foo/bar/non/existing/'], + 'psr-4' => ['Prefix\\' => 'foo/bar/non/existing2/'], + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_8'); $this->assertFileExists($this->vendorDir.'/composer/autoload_classmap.php', "ClassMap file needs to be generated."); $this->assertEquals( - array( + [ 'Composer\\InstalledVersions' => $this->vendorDir.'/composer/InstalledVersions.php', - ), + ], include $this->vendorDir.'/composer/autoload_classmap.php' ); } @@ -618,14 +618,14 @@ class AutoloadGeneratorTest extends TestCase { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array( - 'psr-0' => array('psr0_' => 'psr0/'), - 'psr-4' => array('psr4\\' => 'psr4/'), - )); + $package->setAutoload([ + 'psr-0' => ['psr0_' => 'psr0/'], + 'psr-4' => ['psr4\\' => 'psr4/'], + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $this->fs->ensureDirectoryExists($this->workingDir.'/psr0/psr0'); $this->fs->ensureDirectoryExists($this->workingDir.'/psr4'); @@ -658,16 +658,16 @@ EOF; public function testVendorsClassMapAutoloading(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setRequires(array( + $package->setRequires([ 'a/a' => new Link('a', 'a/a', new MatchAllConstraint()), 'b/b' => new Link('a', 'b/b', new MatchAllConstraint()), - )); + ]); - $packages = array(); + $packages = []; $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); - $a->setAutoload(array('classmap' => array('src/'))); - $b->setAutoload(array('classmap' => array('src/', 'lib/'))); + $a->setAutoload(['classmap' => ['src/']]); + $b->setAutoload(['classmap' => ['src/', 'lib/']]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') @@ -684,12 +684,12 @@ EOF; $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, '_6'); $this->assertFileExists($this->vendorDir.'/composer/autoload_classmap.php', "ClassMap file needs to be generated."); $this->assertEquals( - array( + [ 'ClassMapBar' => $this->vendorDir.'/b/b/src/b.php', 'ClassMapBaz' => $this->vendorDir.'/b/b/lib/c.php', 'ClassMapFoo' => $this->vendorDir.'/a/a/src/a.php', 'Composer\\InstalledVersions' => $this->vendorDir.'/composer/InstalledVersions.php', - ), + ], include $this->vendorDir.'/composer/autoload_classmap.php' ); $this->assertAutoloadFiles('classmap4', $this->vendorDir.'/composer', 'classmap'); @@ -698,17 +698,17 @@ EOF; public function testVendorsClassMapAutoloadingWithTargetDir(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setRequires(array( + $package->setRequires([ 'a/a' => new Link('a', 'a/a', new MatchAllConstraint()), 'b/b' => new Link('a', 'b/b', new MatchAllConstraint()), - )); + ]); - $packages = array(); + $packages = []; $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); - $a->setAutoload(array('classmap' => array('target/src/', 'lib/'))); + $a->setAutoload(['classmap' => ['target/src/', 'lib/']]); $a->setTargetDir('target'); - $b->setAutoload(array('classmap' => array('src/'))); + $b->setAutoload(['classmap' => ['src/']]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') @@ -725,12 +725,12 @@ EOF; $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, '_6'); $this->assertFileExists($this->vendorDir.'/composer/autoload_classmap.php', "ClassMap file needs to be generated."); $this->assertEquals( - array( + [ 'ClassMapBar' => $this->vendorDir.'/a/a/target/lib/b.php', 'ClassMapBaz' => $this->vendorDir.'/b/b/src/c.php', 'ClassMapFoo' => $this->vendorDir.'/a/a/target/src/a.php', 'Composer\\InstalledVersions' => $this->vendorDir.'/composer/InstalledVersions.php', - ), + ], include $this->vendorDir.'/composer/autoload_classmap.php' ); } @@ -738,19 +738,19 @@ EOF; public function testClassMapAutoloadingEmptyDirAndExactFile(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setRequires(array( + $package->setRequires([ 'a/a' => new Link('a', 'a/a', new MatchAllConstraint()), 'b/b' => new Link('a', 'b/b', new MatchAllConstraint()), 'c/c' => new Link('a', 'c/c', new MatchAllConstraint()), - )); + ]); - $packages = array(); + $packages = []; $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); $packages[] = $c = new Package('c/c', '1.0', '1.0'); - $a->setAutoload(array('classmap' => array(''))); - $b->setAutoload(array('classmap' => array('test.php'))); - $c->setAutoload(array('classmap' => array('./'))); + $a->setAutoload(['classmap' => ['']]); + $b->setAutoload(['classmap' => ['test.php']]); + $c->setAutoload(['classmap' => ['./']]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') @@ -767,12 +767,12 @@ EOF; $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, '_7'); $this->assertFileExists($this->vendorDir.'/composer/autoload_classmap.php', "ClassMap file needs to be generated."); $this->assertEquals( - array( + [ 'ClassMapBar' => $this->vendorDir.'/b/b/test.php', 'ClassMapBaz' => $this->vendorDir.'/c/c/foo/test.php', 'ClassMapFoo' => $this->vendorDir.'/a/a/src/a.php', 'Composer\\InstalledVersions' => $this->vendorDir.'/composer/InstalledVersions.php', - ), + ], include $this->vendorDir.'/composer/autoload_classmap.php' ); $this->assertAutoloadFiles('classmap5', $this->vendorDir.'/composer', 'classmap'); @@ -783,19 +783,19 @@ EOF; public function testClassMapAutoloadingAuthoritativeAndApcu(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setRequires(array( + $package->setRequires([ 'a/a' => new Link('a', 'a/a', new MatchAllConstraint()), 'b/b' => new Link('a', 'b/b', new MatchAllConstraint()), 'c/c' => new Link('a', 'c/c', new MatchAllConstraint()), - )); + ]); - $packages = array(); + $packages = []; $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); $packages[] = $c = new Package('c/c', '1.0', '1.0'); - $a->setAutoload(array('psr-4' => array('' => 'src/'))); - $b->setAutoload(array('psr-4' => array('' => './'))); - $c->setAutoload(array('psr-4' => array('' => 'foo/'))); + $a->setAutoload(['psr-4' => ['' => 'src/']]); + $b->setAutoload(['psr-4' => ['' => './']]); + $c->setAutoload(['psr-4' => ['' => 'foo/']]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') @@ -815,12 +815,12 @@ EOF; $this->assertFileExists($this->vendorDir.'/composer/autoload_classmap.php', "ClassMap file needs to be generated."); $this->assertEquals( - array( + [ 'ClassMapBar' => $this->vendorDir.'/b/b/ClassMapBar.php', 'ClassMapBaz' => $this->vendorDir.'/c/c/foo/ClassMapBaz.php', 'ClassMapFoo' => $this->vendorDir.'/a/a/src/ClassMapFoo.php', 'Composer\\InstalledVersions' => $this->vendorDir.'/composer/InstalledVersions.php', - ), + ], include $this->vendorDir.'/composer/autoload_classmap.php' ); $this->assertAutoloadFiles('classmap8', $this->vendorDir.'/composer', 'classmap'); @@ -832,19 +832,19 @@ EOF; public function testClassMapAutoloadingAuthoritativeAndApcuPrefix(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setRequires(array( + $package->setRequires([ 'a/a' => new Link('a', 'a/a', new MatchAllConstraint()), 'b/b' => new Link('a', 'b/b', new MatchAllConstraint()), 'c/c' => new Link('a', 'c/c', new MatchAllConstraint()), - )); + ]); - $packages = array(); + $packages = []; $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); $packages[] = $c = new Package('c/c', '1.0', '1.0'); - $a->setAutoload(array('psr-4' => array('' => 'src/'))); - $b->setAutoload(array('psr-4' => array('' => './'))); - $c->setAutoload(array('psr-4' => array('' => 'foo/'))); + $a->setAutoload(['psr-4' => ['' => 'src/']]); + $b->setAutoload(['psr-4' => ['' => './']]); + $c->setAutoload(['psr-4' => ['' => 'foo/']]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') @@ -864,12 +864,12 @@ EOF; $this->assertFileExists($this->vendorDir.'/composer/autoload_classmap.php', "ClassMap file needs to be generated."); $this->assertEquals( - array( + [ 'ClassMapBar' => $this->vendorDir.'/b/b/ClassMapBar.php', 'ClassMapBaz' => $this->vendorDir.'/c/c/foo/ClassMapBaz.php', 'ClassMapFoo' => $this->vendorDir.'/a/a/src/ClassMapFoo.php', 'Composer\\InstalledVersions' => $this->vendorDir.'/composer/InstalledVersions.php', - ), + ], include $this->vendorDir.'/composer/autoload_classmap.php' ); $this->assertAutoloadFiles('classmap8', $this->vendorDir.'/composer', 'classmap'); @@ -881,20 +881,20 @@ EOF; public function testFilesAutoloadGeneration(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array('files' => array('root.php'))); - $package->setRequires(array( + $package->setAutoload(['files' => ['root.php']]); + $package->setRequires([ 'a/a' => new Link('a', 'a/a', new MatchAllConstraint()), 'b/b' => new Link('a', 'b/b', new MatchAllConstraint()), 'c/c' => new Link('a', 'c/c', new MatchAllConstraint()), - )); + ]); - $packages = array(); + $packages = []; $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); $packages[] = $c = new Package('c/c', '1.0', '1.0'); - $a->setAutoload(array('files' => array('test.php'))); - $b->setAutoload(array('files' => array('test2.php'))); - $c->setAutoload(array('files' => array('test3.php', 'foo/bar/test4.php'))); + $a->setAutoload(['files' => ['test.php']]); + $b->setAutoload(['files' => ['test2.php']]); + $c->setAutoload(['files' => ['test3.php', 'foo/bar/test4.php']]); $c->setTargetDir('foo/bar'); $this->repository->expects($this->once()) @@ -928,32 +928,32 @@ EOF; public function testFilesAutoloadGenerationRemoveExtraEntitiesFromAutoloadFiles(): void { $autoloadPackage = new RootPackage('root/a', '1.0', '1.0'); - $autoloadPackage->setAutoload(array('files' => array('root.php'))); - $autoloadPackage->setIncludePaths(array('/lib', '/src')); + $autoloadPackage->setAutoload(['files' => ['root.php']]); + $autoloadPackage->setIncludePaths(['/lib', '/src']); $notAutoloadPackage = new RootPackage('root/a', '1.0', '1.0'); - $requires = array( + $requires = [ 'a/a' => new Link('a', 'a/a', new MatchAllConstraint()), 'b/b' => new Link('a', 'b/b', new MatchAllConstraint()), 'c/c' => new Link('a', 'c/c', new MatchAllConstraint()), - ); + ]; $autoloadPackage->setRequires($requires); $notAutoloadPackage->setRequires($requires); - $autoloadPackages = array(); + $autoloadPackages = []; $autoloadPackages[] = $a = new Package('a/a', '1.0', '1.0'); $autoloadPackages[] = $b = new Package('b/b', '1.0', '1.0'); $autoloadPackages[] = $c = new Package('c/c', '1.0', '1.0'); - $a->setAutoload(array('files' => array('test.php'))); - $a->setIncludePaths(array('lib1', 'src1')); - $b->setAutoload(array('files' => array('test2.php'))); - $b->setIncludePaths(array('lib2')); - $c->setAutoload(array('files' => array('test3.php', 'foo/bar/test4.php'))); - $c->setIncludePaths(array('lib3')); + $a->setAutoload(['files' => ['test.php']]); + $a->setIncludePaths(['lib1', 'src1']); + $b->setAutoload(['files' => ['test2.php']]); + $b->setIncludePaths(['lib2']); + $c->setAutoload(['files' => ['test3.php', 'foo/bar/test4.php']]); + $c->setIncludePaths(['lib3']); $c->setTargetDir('foo/bar'); - $notAutoloadPackages = array(); + $notAutoloadPackages = []; $notAutoloadPackages[] = $a = new Package('a/a', '1.0', '1.0'); $notAutoloadPackages[] = $b = new Package('b/b', '1.0', '1.0'); $notAutoloadPackages[] = $c = new Package('c/c', '1.0', '1.0'); @@ -999,15 +999,15 @@ EOF; public function testFilesAutoloadOrderByDependencies(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array('files' => array('root2.php'))); - $package->setRequires(array( + $package->setAutoload(['files' => ['root2.php']]); + $package->setRequires([ 'z/foo' => new Link('a', 'z/foo', new MatchAllConstraint()), 'b/bar' => new Link('a', 'b/bar', new MatchAllConstraint()), 'd/d' => new Link('a', 'd/d', new MatchAllConstraint()), 'e/e' => new Link('a', 'e/e', new MatchAllConstraint()), - )); + ]); - $packages = array(); + $packages = []; $packages[] = $z = new Package('z/foo', '1.0', '1.0'); $packages[] = $b = new Package('b/bar', '1.0', '1.0'); $packages[] = $d = new Package('d/d', '1.0', '1.0'); @@ -1022,19 +1022,19 @@ EOF; // z requires c // (b, e, z ordered alphabetically) - $z->setAutoload(array('files' => array('testA.php'))); - $z->setRequires(array('c/lorem' => new Link('z/foo', 'c/lorem', new MatchAllConstraint()))); + $z->setAutoload(['files' => ['testA.php']]); + $z->setRequires(['c/lorem' => new Link('z/foo', 'c/lorem', new MatchAllConstraint())]); - $b->setAutoload(array('files' => array('testB.php'))); - $b->setRequires(array('c/lorem' => new Link('b/bar', 'c/lorem', new MatchAllConstraint()), 'd/d' => new Link('b/bar', 'd/d', new MatchAllConstraint()))); + $b->setAutoload(['files' => ['testB.php']]); + $b->setRequires(['c/lorem' => new Link('b/bar', 'c/lorem', new MatchAllConstraint()), 'd/d' => new Link('b/bar', 'd/d', new MatchAllConstraint())]); - $c->setAutoload(array('files' => array('testC.php'))); + $c->setAutoload(['files' => ['testC.php']]); - $d->setAutoload(array('files' => array('testD.php'))); - $d->setRequires(array('c/lorem' => new Link('d/d', 'c/lorem', new MatchAllConstraint()))); + $d->setAutoload(['files' => ['testD.php']]); + $d->setRequires(['c/lorem' => new Link('d/d', 'c/lorem', new MatchAllConstraint())]); - $e->setAutoload(array('files' => array('testE.php'))); - $e->setRequires(array('c/lorem' => new Link('e/e', 'c/lorem', new MatchAllConstraint()))); + $e->setAutoload(['files' => ['testE.php']]); + $e->setRequires(['c/lorem' => new Link('e/e', 'c/lorem', new MatchAllConstraint())]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') @@ -1077,25 +1077,25 @@ EOF; public function testOverrideVendorsAutoloading(): void { $rootPackage = new RootPackage('root/z', '1.0', '1.0'); - $rootPackage->setAutoload(array( - 'psr-0' => array('A\\B' => $this->workingDir.'/lib'), - 'classmap' => array($this->workingDir.'/src'), - )); - $rootPackage->setRequires(array( + $rootPackage->setAutoload([ + 'psr-0' => ['A\\B' => $this->workingDir.'/lib'], + 'classmap' => [$this->workingDir.'/src'], + ]); + $rootPackage->setRequires([ 'a/a' => new Link('z', 'a/a', new MatchAllConstraint()), 'b/b' => new Link('z', 'b/b', new MatchAllConstraint()), - )); + ]); - $packages = array(); + $packages = []; $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); - $a->setAutoload(array( - 'psr-0' => array('A' => 'src/', 'A\\B' => 'lib/'), - 'classmap' => array('classmap'), - )); - $b->setAutoload(array( - 'psr-0' => array('B\\Sub\\Name' => 'src/'), - )); + $a->setAutoload([ + 'psr-0' => ['A' => 'src/', 'A\\B' => 'lib/'], + 'classmap' => ['classmap'], + ]); + $b->setAutoload([ + 'psr-0' => ['B\\Sub\\Name' => 'src/'], + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') @@ -1172,16 +1172,16 @@ EOF; public function testIncludePathFileGeneration(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $packages = array(); + $packages = []; $a = new Package("a/a", "1.0", "1.0"); - $a->setIncludePaths(array("lib/")); + $a->setIncludePaths(["lib/"]); $b = new Package("b/b", "1.0", "1.0"); - $b->setIncludePaths(array("library")); + $b->setIncludePaths(["library"]); $c = new Package("c", "1.0", "1.0"); - $c->setIncludePaths(array("library")); + $c->setIncludePaths(["library"]); $packages[] = $a; $packages[] = $b; @@ -1197,11 +1197,11 @@ EOF; $this->assertFileContentEquals(__DIR__.'/Fixtures/include_paths.php', $this->vendorDir.'/composer/include_paths.php'); $this->assertEquals( - array( + [ $this->vendorDir."/a/a/lib", $this->vendorDir."/b/b/library", $this->vendorDir."/c/library", - ), + ], require $this->vendorDir."/composer/include_paths.php" ); } @@ -1209,10 +1209,10 @@ EOF; public function testIncludePathsArePrependedInAutoloadFile(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $packages = array(); + $packages = []; $a = new Package("a/a", "1.0", "1.0"); - $a->setIncludePaths(array("lib/")); + $a->setIncludePaths(["lib/"]); $packages[] = $a; @@ -1240,10 +1240,10 @@ EOF; public function testIncludePathsInRootPackage(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setIncludePaths(array('/lib', '/src')); + $package->setIncludePaths(['/lib', '/src']); - $packages = array($a = new Package("a/a", "1.0", "1.0")); - $a->setIncludePaths(array("lib/")); + $packages = [$a = new Package("a/a", "1.0", "1.0")]; + $a->setIncludePaths(["lib/"]); $this->repository->expects($this->once()) ->method("getCanonicalPackages") @@ -1269,7 +1269,7 @@ EOF; public function testIncludePathFileWithoutPathsIsSkipped(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $packages = array(); + $packages = []; $a = new Package("a/a", "1.0", "1.0"); $packages[] = $a; @@ -1296,11 +1296,11 @@ EOF; ); $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array('psr-0' => array('Prefix' => 'foo/bar/non/existing/'))); + $package->setAutoload(['psr-0' => ['Prefix' => 'foo/bar/non/existing/']]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $this->generator->setRunScripts(true); $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_8'); @@ -1309,14 +1309,14 @@ EOF; public function testUseGlobalIncludePath(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array( - 'psr-0' => array('Main\\Foo' => '', 'Main\\Bar' => ''), - )); + $package->setAutoload([ + 'psr-0' => ['Main\\Foo' => '', 'Main\\Bar' => ''], + ]); $package->setTargetDir('Main/Foo/'); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $this->configValueMap['use-include-path'] = true; @@ -1336,34 +1336,34 @@ EOF; chdir($workingDir); $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array( - 'psr-0' => array('Foo' => 'src'), - 'psr-4' => array('Acme\Foo\\' => 'src-psr4'), - 'classmap' => array('classmap'), - 'files' => array('test.php'), - )); - $package->setRequires(array( + $package->setAutoload([ + 'psr-0' => ['Foo' => 'src'], + 'psr-4' => ['Acme\Foo\\' => 'src-psr4'], + 'classmap' => ['classmap'], + 'files' => ['test.php'], + ]); + $package->setRequires([ 'b/b' => new Link('a', 'b/b', new MatchAllConstraint()), - )); + ]); $vendorPackage = new Package('b/b', '1.0', '1.0'); - $vendorPackage->setAutoload(array( - 'psr-0' => array('Bar' => 'lib'), - 'psr-4' => array('Acme\Bar\\' => 'lib-psr4'), - 'classmap' => array('classmaps'), - 'files' => array('bootstrap.php'), - )); + $vendorPackage->setAutoload([ + 'psr-0' => ['Bar' => 'lib'], + 'psr-4' => ['Acme\Bar\\' => 'lib-psr4'], + 'classmap' => ['classmaps'], + 'files' => ['bootstrap.php'], + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array($vendorPackage))); + ->will($this->returnValue([$vendorPackage])); $im = $this->getMockBuilder('Composer\Installer\InstallationManager') ->disableOriginalConstructor() ->getMock(); $im->expects($this->any()) ->method('getInstallPath') - ->will($this->returnCallback(function ($package) use ($vendorDir): string { + ->will($this->returnCallback(static function ($package) use ($vendorDir): string { $targetDir = $package->getTargetDir(); return $vendorDir.'/'.$package->getName() . ($targetDir ? '/'.$targetDir : ''); @@ -1448,17 +1448,17 @@ EOF; chdir($workingDir); $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array( - 'psr-0' => array('Foo' => '../path/../src'), - 'psr-4' => array('Acme\Foo\\' => '../path/../src-psr4'), - 'classmap' => array('../classmap', '../classmap2/subdir', 'classmap3', 'classmap4'), - 'files' => array('../test.php'), - 'exclude-from-classmap' => array('./../classmap/excluded', '../classmap2', 'classmap3/classes.php', 'classmap4/*/classes.php'), - )); + $package->setAutoload([ + 'psr-0' => ['Foo' => '../path/../src'], + 'psr-4' => ['Acme\Foo\\' => '../path/../src-psr4'], + 'classmap' => ['../classmap', '../classmap2/subdir', 'classmap3', 'classmap4'], + 'files' => ['../test.php'], + 'exclude-from-classmap' => ['./../classmap/excluded', '../classmap2', 'classmap3/classes.php', 'classmap4/*/classes.php'], + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $this->fs->ensureDirectoryExists($this->workingDir.'/src/Foo'); $this->fs->ensureDirectoryExists($this->workingDir.'/classmap/excluded'); @@ -1528,18 +1528,18 @@ EOF; public function testAutoloadRulesInPackageThatDoesNotExistOnDisk(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setRequires(array( + $package->setRequires([ 'dep/a' => new Link('root/a', 'dep/a', new MatchAllConstraint(), 'requires'), - )); + ]); $dep = new CompletePackage('dep/a', '1.0', '1.0'); $this->repository->expects($this->any()) ->method('getCanonicalPackages') - ->will($this->returnValue(array($dep))); + ->will($this->returnValue([$dep])); - $dep->setAutoload(array( - 'psr-0' => array('Foo' => './src'), - )); + $dep->setAutoload([ + 'psr-0' => ['Foo' => './src'], + ]); $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_19'); $expectedNamespace = <<<'EOF' @@ -1557,9 +1557,9 @@ return array( EOF; $this->assertStringEqualsFile($this->vendorDir.'/composer/autoload_namespaces.php', $expectedNamespace); - $dep->setAutoload(array( - 'psr-4' => array('Acme\Foo\\' => './src-psr4'), - )); + $dep->setAutoload([ + 'psr-4' => ['Acme\Foo\\' => './src-psr4'], + ]); $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_19'); $expectedPsr4 = <<<'EOF' @@ -1577,47 +1577,47 @@ return array( EOF; $this->assertStringEqualsFile($this->vendorDir.'/composer/autoload_psr4.php', $expectedPsr4); - $dep->setAutoload(array( - 'classmap' => array('classmap'), - )); + $dep->setAutoload([ + 'classmap' => ['classmap'], + ]); try { $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_19'); } catch (\RuntimeException $e) { $this->assertSame('Could not scan for classes inside "'.$this->vendorDir.'/dep/a/classmap" which does not appear to be a file nor a folder', $e->getMessage()); } - $dep->setAutoload(array( - 'files' => array('./test.php'), - )); + $dep->setAutoload([ + 'files' => ['./test.php'], + ]); $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_19'); $this->assertStringContainsString("\$vendorDir . '/dep/a/test.php',\n", (string) file_get_contents($this->vendorDir.'/composer/autoload_files.php')); - $package->setAutoload(array( - 'exclude-from-classmap' => array('../excludedroot', 'root/excl'), - )); - $dep->setAutoload(array( - 'exclude-from-classmap' => array('../../excluded', 'foo/bar'), - )); - $map = $this->generator->buildPackageMap($this->im, $package, array($dep)); + $package->setAutoload([ + 'exclude-from-classmap' => ['../excludedroot', 'root/excl'], + ]); + $dep->setAutoload([ + 'exclude-from-classmap' => ['../../excluded', 'foo/bar'], + ]); + $map = $this->generator->buildPackageMap($this->im, $package, [$dep]); $parsed = $this->generator->parseAutoloads($map, $package); - $this->assertSame(array( + $this->assertSame([ preg_quote(strtr((string) realpath(dirname($this->workingDir)), '\\', '/')).'/excludedroot($|/)', - preg_quote(strtr((string) realpath($this->workingDir), '\\', '/')).'/root/excl($|/)' - ), $parsed['exclude-from-classmap']); + preg_quote(strtr((string) realpath($this->workingDir), '\\', '/')).'/root/excl($|/)', + ], $parsed['exclude-from-classmap']); } public function testEmptyPaths(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array( - 'psr-0' => array('Foo' => ''), - 'psr-4' => array('Acme\Foo\\' => ''), - 'classmap' => array(''), - )); + $package->setAutoload([ + 'psr-0' => ['Foo' => ''], + 'psr-4' => ['Acme\Foo\\' => ''], + 'classmap' => [''], + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $this->fs->ensureDirectoryExists($this->workingDir.'/Foo'); file_put_contents($this->workingDir.'/Foo/Bar.php', 'setAutoload(array( - 'psr-0' => array('Foo' => 'composer-test-autoload-src/src'), - 'psr-4' => array('Acme\Foo\\' => 'composer-test-autoload-src/src-psr4'), - )); + $package->setAutoload([ + 'psr-0' => ['Foo' => 'composer-test-autoload-src/src'], + 'psr-4' => ['Acme\Foo\\' => 'composer-test-autoload-src/src-psr4'], + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $this->fs->ensureDirectoryExists($this->vendorDir.'/a'); @@ -1724,17 +1724,17 @@ EOF; public function testExcludeFromClassmap(): void { $package = new RootPackage('root/a', '1.0', '1.0'); - $package->setAutoload(array( - 'psr-0' => array( + $package->setAutoload([ + 'psr-0' => [ 'Main' => 'src/', - 'Lala' => array('src/', 'lib/'), - ), - 'psr-4' => array( + 'Lala' => ['src/', 'lib/'], + ], + 'psr-4' => [ 'Acme\Fruit\\' => 'src-fruit/', - 'Acme\Cake\\' => array('src-cake/', 'lib-cake/'), - ), - 'classmap' => array('composersrc/'), - 'exclude-from-classmap' => array( + 'Acme\Cake\\' => ['src-cake/', 'lib-cake/'], + ], + 'classmap' => ['composersrc/'], + 'exclude-from-classmap' => [ '/composersrc/foo/bar/', '/composersrc/excludedTests/', '/composersrc/ClassToExclude.php', @@ -1742,12 +1742,12 @@ EOF; '**/excsubpath', 'composers', // should _not_ cause exclusion of /composersrc/**, as it is equivalent to /composers/** '/src-ca/', // should _not_ cause exclusion of /src-cake/**, as it is equivalent to /src-ca/** - ), - )); + ], + ]); $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $this->fs->ensureDirectoryExists($this->workingDir.'/composer'); $this->fs->ensureDirectoryExists($this->workingDir.'/src/Lala/Test'); @@ -1792,14 +1792,13 @@ EOF; /** * @param array $requires - * @param string|null $expectedFixture * @param array $provides * @param array $replaces * @param bool|array $ignorePlatformReqs * * @dataProvider platformCheckProvider */ - public function testGeneratesPlatformCheck(array $requires, ?string $expectedFixture, array $provides = array(), array $replaces = array(), $ignorePlatformReqs = false): void + public function testGeneratesPlatformCheck(array $requires, ?string $expectedFixture, array $provides = [], array $replaces = [], $ignorePlatformReqs = false): void { $package = new RootPackage('root/a', '1.0', '1.0'); $package->setRequires($requires); @@ -1814,7 +1813,7 @@ EOF; $this->repository->expects($this->once()) ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $this->generator->setPlatformRequirementFilter(PlatformRequirementFilterFactory::fromBoolOrList($ignorePlatformReqs)); $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_1'); @@ -1835,111 +1834,104 @@ EOF; { $versionParser = new VersionParser(); - return array( - 'Typical project requirements' => array( - array( + return [ + 'Typical project requirements' => [ + [ 'php' => new Link('a', 'php', $versionParser->parseConstraints('^7.2')), 'ext-xml' => new Link('a', 'ext-xml', $versionParser->parseConstraints('*')), 'ext-json' => new Link('a', 'ext-json', $versionParser->parseConstraints('*')), - ), + ], 'typical', - ), - 'No PHP lower bound' => array( - array( + ], + 'No PHP lower bound' => [ + [ 'php' => new Link('a', 'php', $versionParser->parseConstraints('< 8')), - ), + ], null, - ), - 'No PHP upper bound' => array( - array( + ], + 'No PHP upper bound' => [ + [ 'php' => new Link('a', 'php', $versionParser->parseConstraints('>= 7.2')), - ), + ], 'no_php_upper_bound', - ), - 'Specific PHP release version' => array( - array( + ], + 'Specific PHP release version' => [ + [ 'php' => new Link('a', 'php', $versionParser->parseConstraints('^7.2.8')), - ), + ], 'specific_php_release', - ), - 'No PHP required' => array( - array( + ], + 'No PHP required' => [ + [ 'ext-xml' => new Link('a', 'ext-xml', $versionParser->parseConstraints('*')), 'ext-json' => new Link('a', 'ext-json', $versionParser->parseConstraints('*')), - ), + ], 'no_php_required', - ), - 'Ignoring all platform requirements skips check completely' => array( - array( + ], + 'Ignoring all platform requirements skips check completely' => [ + [ 'php' => new Link('a', 'php', $versionParser->parseConstraints('^7.2')), 'ext-xml' => new Link('a', 'ext-xml', $versionParser->parseConstraints('*')), 'ext-json' => new Link('a', 'ext-json', $versionParser->parseConstraints('*')), - ), + ], null, - array(), - array(), + [], + [], true, - ), - 'Ignored platform requirements are not checked for' => array( - array( + ], + 'Ignored platform requirements are not checked for' => [ + [ 'php' => new Link('a', 'php', $versionParser->parseConstraints('^7.2.8')), 'ext-xml' => new Link('a', 'ext-xml', $versionParser->parseConstraints('*')), 'ext-json' => new Link('a', 'ext-json', $versionParser->parseConstraints('*')), 'ext-pdo' => new Link('a', 'ext-pdo', $versionParser->parseConstraints('*')), - ), + ], 'no_php_required', - array(), - array(), - array('php', 'ext-pdo'), - ), - 'Via wildcard ignored platform requirements are not checked for' => array( - array( + [], + [], + ['php', 'ext-pdo'], + ], + 'Via wildcard ignored platform requirements are not checked for' => [ + [ 'php' => new Link('a', 'php', $versionParser->parseConstraints('^7.2.8')), 'ext-xml' => new Link('a', 'ext-xml', $versionParser->parseConstraints('*')), 'ext-json' => new Link('a', 'ext-json', $versionParser->parseConstraints('*')), 'ext-fileinfo' => new Link('a', 'ext-fileinfo', $versionParser->parseConstraints('*')), 'ext-filesystem' => new Link('a', 'ext-filesystem', $versionParser->parseConstraints('*')), 'ext-filter' => new Link('a', 'ext-filter', $versionParser->parseConstraints('*')), - ), + ], 'no_php_required', - array(), - array(), - array('php', 'ext-fil*'), - ), - 'No extensions required' => array( - array( + [], + [], + ['php', 'ext-fil*'], + ], + 'No extensions required' => [ + [ 'php' => new Link('a', 'php', $versionParser->parseConstraints('^7.2')), - ), + ], 'no_extensions_required', - ), - 'Replaced/provided extensions are not checked for + checking case insensitivity' => array( - array( + ], + 'Replaced/provided extensions are not checked for + checking case insensitivity' => [ + [ 'ext-xml' => new Link('a', 'ext-xml', $versionParser->parseConstraints('^7.2')), 'ext-pdo' => new Link('a', 'ext-Pdo', $versionParser->parseConstraints('^7.2')), 'ext-bcmath' => new Link('a', 'ext-bcMath', $versionParser->parseConstraints('^7.2')), - ), + ], 'replaced_provided_exts', - array( + [ // constraint does not satisfy all the ^7.2 requirement so we do not accept it as being replaced 'ext-pdo' => new Link('a', 'ext-PDO', $versionParser->parseConstraints('7.1.*')), // valid replace of bcmath so no need to check for it 'ext-bcmath' => new Link('a', 'ext-BCMath', $versionParser->parseConstraints('^7.1')), - ), - array( + ], + [ // valid provide of ext-xml so no need to check for it 'ext-xml' => new Link('a', 'ext-XML', $versionParser->parseConstraints('*')), - ), - ), - ); + ], + ], + ]; } - /** - * @param string $name - * @param string $dir - * @param string $type - * - * @return void - */ private function assertAutoloadFiles(string $name, string $dir, string $type = 'namespaces'): void { $a = __DIR__.'/Fixtures/autoload_'.$name.'.php'; @@ -1947,13 +1939,6 @@ EOF; $this->assertFileContentEquals($a, $b); } - /** - * @param string $expected - * @param string $actual - * @param string|null $message - * - * @return void - */ public static function assertFileContentEquals(string $expected, string $actual, ?string $message = null): void { self::assertSame( diff --git a/tests/Composer/Test/Autoload/ClassLoaderTest.php b/tests/Composer/Test/Autoload/ClassLoaderTest.php index 81d6f5fd0..37bfc784d 100644 --- a/tests/Composer/Test/Autoload/ClassLoaderTest.php +++ b/tests/Composer/Test/Autoload/ClassLoaderTest.php @@ -44,11 +44,11 @@ class ClassLoaderTest extends TestCase */ public function getLoadClassTests(): array { - return array( - array('Namespaced\\Foo'), - array('Pearlike_Foo'), - array('ShinyVendor\\ShinyPackage\\SubNamespace\\Foo'), - ); + return [ + ['Namespaced\\Foo'], + ['Pearlike_Foo'], + ['ShinyVendor\\ShinyPackage\\SubNamespace\\Foo'], + ]; } /** diff --git a/tests/Composer/Test/CacheTest.php b/tests/Composer/Test/CacheTest.php index 51954c84e..81a07b6d1 100644 --- a/tests/Composer/Test/CacheTest.php +++ b/tests/Composer/Test/CacheTest.php @@ -31,7 +31,7 @@ class CacheTest extends TestCase public function setUp(): void { $this->root = self::getUniqueTmpDirectory(); - $this->files = array(); + $this->files = []; $zeros = str_repeat('0', 1000); for ($i = 0; $i < 4; $i++) { @@ -44,8 +44,8 @@ class CacheTest extends TestCase $io = $this->getMockBuilder('Composer\IO\IOInterface')->getMock(); $this->cache = $this->getMockBuilder('Composer\Cache') - ->onlyMethods(array('getFinder')) - ->setConstructorArgs(array($io, $this->root)) + ->onlyMethods(['getFinder']) + ->setConstructorArgs([$io, $this->root]) ->getMock(); $this->cache ->expects($this->any()) diff --git a/tests/Composer/Test/Command/ArchiveCommandTest.php b/tests/Composer/Test/Command/ArchiveCommandTest.php index 0d7b07401..fa7ce960a 100644 --- a/tests/Composer/Test/Command/ArchiveCommandTest.php +++ b/tests/Composer/Test/Command/ArchiveCommandTest.php @@ -23,7 +23,7 @@ class ArchiveCommandTest extends TestCase { public function testUsesConfigFromComposerObject(): void { - $input = new ArrayInput(array()); + $input = new ArrayInput([]); $output = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface') ->getMock(); @@ -33,7 +33,7 @@ class ArchiveCommandTest extends TestCase $composer = new Composer; $config = new Config; - $config->merge(array('config' => array('archive-format' => 'zip'))); + $config->merge(['config' => ['archive-format' => 'zip']]); $composer->setConfig($config); $manager = $this->getMockBuilder('Composer\Package\Archiver\ArchiveManager') @@ -50,13 +50,13 @@ class ArchiveCommandTest extends TestCase $composer->setPackage($package); $command = $this->getMockBuilder('Composer\Command\ArchiveCommand') - ->onlyMethods(array( + ->onlyMethods([ 'mergeApplicationDefinition', 'getSynopsis', 'initialize', 'tryComposer', 'requireComposer', - ))->getMock(); + ])->getMock(); $command->expects($this->atLeastOnce())->method('tryComposer') ->willReturn($composer); $command->expects($this->atLeastOnce())->method('requireComposer') @@ -67,20 +67,20 @@ class ArchiveCommandTest extends TestCase public function testUsesConfigFromFactoryWhenComposerIsNotDefined(): void { - $input = new ArrayInput(array()); + $input = new ArrayInput([]); $output = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface') ->getMock(); $config = Factory::createConfig(); $command = $this->getMockBuilder('Composer\Command\ArchiveCommand') - ->onlyMethods(array( + ->onlyMethods([ 'mergeApplicationDefinition', 'getSynopsis', 'initialize', 'tryComposer', 'archive', - ))->getMock(); + ])->getMock(); $command->expects($this->once())->method('tryComposer') ->willReturn(null); $command->expects($this->once())->method('archive') diff --git a/tests/Composer/Test/Command/BumpCommandTest.php b/tests/Composer/Test/Command/BumpCommandTest.php index 30770c9f5..63e7cf30f 100644 --- a/tests/Composer/Test/Command/BumpCommandTest.php +++ b/tests/Composer/Test/Command/BumpCommandTest.php @@ -68,7 +68,7 @@ class BumpCommandTest extends TestCase 'require-dev' => [ 'dev/pkg' => '^2.3.4.5', ], - ] + ], ]; yield 'bump only dev with --dev-only' => [ @@ -90,7 +90,7 @@ class BumpCommandTest extends TestCase 'require-dev' => [ 'dev/pkg' => '^2.3.4.5', ], - ] + ], ]; yield 'bump only non-dev with --no-dev-only' => [ @@ -112,7 +112,7 @@ class BumpCommandTest extends TestCase 'require-dev' => [ 'dev/pkg' => '~2.0', ], - ] + ], ]; yield 'bump works from installed repo without lock file' => [ @@ -129,8 +129,7 @@ class BumpCommandTest extends TestCase 'second/pkg' => '^3.4', ], ], - false + false, ]; - } } diff --git a/tests/Composer/Test/Command/ConfigCommandTest.php b/tests/Composer/Test/Command/ConfigCommandTest.php index b8ab10e32..d6d148e6a 100644 --- a/tests/Composer/Test/Command/ConfigCommandTest.php +++ b/tests/Composer/Test/Command/ConfigCommandTest.php @@ -12,11 +12,7 @@ namespace Composer\Test\Command; -use Composer\Composer; -use Composer\Config; -use Composer\Script\Event as ScriptEvent; use Composer\Test\TestCase; -use Composer\Util\Filesystem; class ConfigCommandTest extends TestCase { diff --git a/tests/Composer/Test/Command/RunScriptCommandTest.php b/tests/Composer/Test/Command/RunScriptCommandTest.php index b26bd397d..13f1b5f52 100644 --- a/tests/Composer/Test/Command/RunScriptCommandTest.php +++ b/tests/Composer/Test/Command/RunScriptCommandTest.php @@ -16,14 +16,11 @@ use Composer\Composer; use Composer\Config; use Composer\Script\Event as ScriptEvent; use Composer\Test\TestCase; -use Composer\Util\Filesystem; class RunScriptCommandTest extends TestCase { /** * @dataProvider getDevOptions - * @param bool $dev - * @param bool $noDev */ public function testDetectAndPassDevModeToEventAndToDispatching(bool $dev, bool $noDev): void { @@ -32,18 +29,18 @@ class RunScriptCommandTest extends TestCase $input = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock(); $input ->method('getOption') - ->will($this->returnValueMap(array( - array('list', false), - array('dev', $dev), - array('no-dev', $noDev), - ))); + ->will($this->returnValueMap([ + ['list', false], + ['dev', $dev], + ['no-dev', $noDev], + ])); $input ->method('getArgument') - ->will($this->returnValueMap(array( - array('script', $scriptName), - array('args', array()), - ))); + ->will($this->returnValueMap([ + ['script', $scriptName], + ['args', []], + ])); $input ->method('hasArgument') ->with('command') @@ -62,7 +59,7 @@ class RunScriptCommandTest extends TestCase $ed->expects($this->once()) ->method('hasEventListeners') - ->with($this->callback(function (ScriptEvent $event) use ($scriptName, $expectedDevMode): bool { + ->with($this->callback(static function (ScriptEvent $event) use ($scriptName, $expectedDevMode): bool { return $event->getName() === $scriptName && $event->isDevMode() === $expectedDevMode; })) @@ -70,19 +67,19 @@ class RunScriptCommandTest extends TestCase $ed->expects($this->once()) ->method('dispatchScript') - ->with($scriptName, $expectedDevMode, array()) + ->with($scriptName, $expectedDevMode, []) ->willReturn(0); $composer = $this->createComposerInstance(); $composer->setEventDispatcher($ed); $command = $this->getMockBuilder('Composer\Command\RunScriptCommand') - ->onlyMethods(array( + ->onlyMethods([ 'mergeApplicationDefinition', 'getSynopsis', 'initialize', 'requireComposer', - )) + ]) ->getMock(); $command->expects($this->any())->method('requireComposer')->willReturn($composer); @@ -115,12 +112,12 @@ class RunScriptCommandTest extends TestCase /** @return bool[][] **/ public function getDevOptions(): array { - return array( - array(true, true), - array(true, false), - array(false, true), - array(false, false), - ); + return [ + [true, true], + [true, false], + [false, true], + [false, false], + ]; } /** @return Composer **/ diff --git a/tests/Composer/Test/CompletionFunctionalTest.php b/tests/Composer/Test/CompletionFunctionalTest.php index 32baa33ce..43c0ddcd1 100644 --- a/tests/Composer/Test/CompletionFunctionalTest.php +++ b/tests/Composer/Test/CompletionFunctionalTest.php @@ -1,4 +1,4 @@ -getMockBuilder('Composer\IO\IOInterface')->getMock(); - $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')->setConstructorArgs(array($io))->getMock(); + $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')->setConstructorArgs([$io])->getMock(); $composer->setDownloadManager($manager); $this->assertSame($manager, $composer->getDownloadManager()); diff --git a/tests/Composer/Test/Config/JsonConfigSourceTest.php b/tests/Composer/Test/Config/JsonConfigSourceTest.php index f3e6021a0..01dca600e 100644 --- a/tests/Composer/Test/Config/JsonConfigSourceTest.php +++ b/tests/Composer/Test/Config/JsonConfigSourceTest.php @@ -24,11 +24,6 @@ class JsonConfigSourceTest extends TestCase /** @var string */ private $workingDir; - /** - * @param string $name - * - * @return string - */ protected function fixturePath(string $name): string { return __DIR__.'/Fixtures/'.$name; @@ -53,7 +48,7 @@ class JsonConfigSourceTest extends TestCase $config = $this->workingDir.'/composer.json'; copy($this->fixturePath('composer-repositories.json'), $config); $jsonConfigSource = new JsonConfigSource(new JsonFile($config)); - $jsonConfigSource->addRepository('example_tld', array('type' => 'git', 'url' => 'example.tld')); + $jsonConfigSource->addRepository('example_tld', ['type' => 'git', 'url' => 'example.tld']); $this->assertFileEquals($this->fixturePath('config/config-with-exampletld-repository.json'), $config); } @@ -63,15 +58,15 @@ class JsonConfigSourceTest extends TestCase $config = $this->workingDir.'/composer.json'; copy($this->fixturePath('composer-repositories.json'), $config); $jsonConfigSource = new JsonConfigSource(new JsonFile($config)); - $jsonConfigSource->addRepository('example_tld', array( + $jsonConfigSource->addRepository('example_tld', [ 'type' => 'composer', 'url' => 'https://example.tld', - 'options' => array( - 'ssl' => array( + 'options' => [ + 'ssl' => [ 'local_cert' => '/home/composer/.ssl/composer.pem', - ), - ), - )); + ], + ], + ]); $this->assertFileEquals($this->fixturePath('config/config-with-exampletld-repository-and-options.json'), $config); } @@ -150,25 +145,19 @@ class JsonConfigSourceTest extends TestCase } /** - * @param string $type - * @param string $name - * @param string $value - * @param string $fixtureBasename - * @param string $before - * * @return string[] * * @phpstan-return array{string, string, string, string, string} */ protected function addLinkDataArguments(string $type, string $name, string $value, string $fixtureBasename, string $before): array { - return array( + return [ $before, $type, $name, $value, $this->fixturePath('addLink/'.$fixtureBasename.'.json'), - ); + ]; } /** @@ -180,7 +169,7 @@ class JsonConfigSourceTest extends TestCase $oneOfEverything = $this->fixturePath('composer-one-of-everything.json'); $twoOfEverything = $this->fixturePath('composer-two-of-everything.json'); - return array( + return [ $this->addLinkDataArguments('require', 'my-vend/my-lib', '1.*', 'require-from-empty', $empty), $this->addLinkDataArguments('require', 'my-vend/my-lib', '1.*', 'require-from-oneOfEverything', $oneOfEverything), $this->addLinkDataArguments('require', 'my-vend/my-lib', '1.*', 'require-from-twoOfEverything', $twoOfEverything), @@ -204,27 +193,22 @@ class JsonConfigSourceTest extends TestCase $this->addLinkDataArguments('conflict', 'my-vend/my-old-app', '1.*', 'conflict-from-empty', $empty), $this->addLinkDataArguments('conflict', 'my-vend/my-old-app', '1.*', 'conflict-from-oneOfEverything', $oneOfEverything), $this->addLinkDataArguments('conflict', 'my-vend/my-old-app', '1.*', 'conflict-from-twoOfEverything', $twoOfEverything), - ); + ]; } /** - * @param string $type - * @param string $name - * @param string $fixtureBasename - * @param string|null $after - * * @return string[] * * @phpstan-return array{string, string, string, string} */ protected function removeLinkDataArguments(string $type, string $name, string $fixtureBasename, ?string $after = null): array { - return array( + return [ $this->fixturePath('removeLink/'.$fixtureBasename.'.json'), $type, $name, $after ?: $this->fixturePath('removeLink/'.$fixtureBasename.'-after.json'), - ); + ]; } /** @@ -235,7 +219,7 @@ class JsonConfigSourceTest extends TestCase $oneOfEverything = $this->fixturePath('composer-one-of-everything.json'); $twoOfEverything = $this->fixturePath('composer-two-of-everything.json'); - return array( + return [ $this->removeLinkDataArguments('require', 'my-vend/my-lib', 'require-to-empty'), $this->removeLinkDataArguments('require', 'my-vend/my-lib', 'require-to-oneOfEverything', $oneOfEverything), $this->removeLinkDataArguments('require', 'my-vend/my-lib', 'require-to-twoOfEverything', $twoOfEverything), @@ -259,6 +243,6 @@ class JsonConfigSourceTest extends TestCase $this->removeLinkDataArguments('conflict', 'my-vend/my-old-app', 'conflict-to-empty'), $this->removeLinkDataArguments('conflict', 'my-vend/my-old-app', 'conflict-to-oneOfEverything', $oneOfEverything), $this->removeLinkDataArguments('conflict', 'my-vend/my-old-app', 'conflict-to-twoOfEverything', $twoOfEverything), - ); + ]; } } diff --git a/tests/Composer/Test/ConfigTest.php b/tests/Composer/Test/ConfigTest.php index 9fe1da3fc..a8b828fe4 100644 --- a/tests/Composer/Test/ConfigTest.php +++ b/tests/Composer/Test/ConfigTest.php @@ -13,9 +13,7 @@ namespace Composer\Test; use Composer\Config; -use Composer\IO\BaseIO; use Composer\IO\IOInterface; -use Composer\IO\NullIO; use Composer\Util\Platform; class ConfigTest extends TestCase @@ -30,116 +28,116 @@ class ConfigTest extends TestCase { $config = new Config(false); if ($systemConfig) { - $config->merge(array('repositories' => $systemConfig)); + $config->merge(['repositories' => $systemConfig]); } - $config->merge(array('repositories' => $localConfig)); + $config->merge(['repositories' => $localConfig]); $this->assertEquals($expected, $config->getRepositories()); } public function dataAddPackagistRepository(): array { - $data = array(); - $data['local config inherits system defaults'] = array( - array( - 'packagist.org' => array('type' => 'composer', 'url' => 'https://repo.packagist.org'), - ), - array(), - ); + $data = []; + $data['local config inherits system defaults'] = [ + [ + 'packagist.org' => ['type' => 'composer', 'url' => 'https://repo.packagist.org'], + ], + [], + ]; - $data['local config can disable system config by name'] = array( - array(), - array( - array('packagist.org' => false), - ), - ); + $data['local config can disable system config by name'] = [ + [], + [ + ['packagist.org' => false], + ], + ]; - $data['local config can disable system config by name bc'] = array( - array(), - array( - array('packagist' => false), - ), - ); + $data['local config can disable system config by name bc'] = [ + [], + [ + ['packagist' => false], + ], + ]; - $data['local config adds above defaults'] = array( - array( - 1 => array('type' => 'vcs', 'url' => 'git://github.com/composer/composer.git'), - 0 => array('type' => 'pear', 'url' => 'http://pear.composer.org'), - 'packagist.org' => array('type' => 'composer', 'url' => 'https://repo.packagist.org'), - ), - array( - array('type' => 'vcs', 'url' => 'git://github.com/composer/composer.git'), - array('type' => 'pear', 'url' => 'http://pear.composer.org'), - ), - ); + $data['local config adds above defaults'] = [ + [ + 1 => ['type' => 'vcs', 'url' => 'git://github.com/composer/composer.git'], + 0 => ['type' => 'pear', 'url' => 'http://pear.composer.org'], + 'packagist.org' => ['type' => 'composer', 'url' => 'https://repo.packagist.org'], + ], + [ + ['type' => 'vcs', 'url' => 'git://github.com/composer/composer.git'], + ['type' => 'pear', 'url' => 'http://pear.composer.org'], + ], + ]; - $data['system config adds above core defaults'] = array( - array( - 'example.com' => array('type' => 'composer', 'url' => 'http://example.com'), - 'packagist.org' => array('type' => 'composer', 'url' => 'https://repo.packagist.org'), - ), - array(), - array( - 'example.com' => array('type' => 'composer', 'url' => 'http://example.com'), - ), - ); + $data['system config adds above core defaults'] = [ + [ + 'example.com' => ['type' => 'composer', 'url' => 'http://example.com'], + 'packagist.org' => ['type' => 'composer', 'url' => 'https://repo.packagist.org'], + ], + [], + [ + 'example.com' => ['type' => 'composer', 'url' => 'http://example.com'], + ], + ]; - $data['local config can disable repos by name and re-add them anonymously to bring them above system config'] = array( - array( - 0 => array('type' => 'composer', 'url' => 'http://packagist.org'), - 'example.com' => array('type' => 'composer', 'url' => 'http://example.com'), - ), - array( - array('packagist.org' => false), - array('type' => 'composer', 'url' => 'http://packagist.org'), - ), - array( - 'example.com' => array('type' => 'composer', 'url' => 'http://example.com'), - ), - ); + $data['local config can disable repos by name and re-add them anonymously to bring them above system config'] = [ + [ + 0 => ['type' => 'composer', 'url' => 'http://packagist.org'], + 'example.com' => ['type' => 'composer', 'url' => 'http://example.com'], + ], + [ + ['packagist.org' => false], + ['type' => 'composer', 'url' => 'http://packagist.org'], + ], + [ + 'example.com' => ['type' => 'composer', 'url' => 'http://example.com'], + ], + ]; - $data['local config can override by name to bring a repo above system config'] = array( - array( - 'packagist.org' => array('type' => 'composer', 'url' => 'http://packagistnew.org'), - 'example.com' => array('type' => 'composer', 'url' => 'http://example.com'), - ), - array( - 'packagist.org' => array('type' => 'composer', 'url' => 'http://packagistnew.org'), - ), - array( - 'example.com' => array('type' => 'composer', 'url' => 'http://example.com'), - ), - ); + $data['local config can override by name to bring a repo above system config'] = [ + [ + 'packagist.org' => ['type' => 'composer', 'url' => 'http://packagistnew.org'], + 'example.com' => ['type' => 'composer', 'url' => 'http://example.com'], + ], + [ + 'packagist.org' => ['type' => 'composer', 'url' => 'http://packagistnew.org'], + ], + [ + 'example.com' => ['type' => 'composer', 'url' => 'http://example.com'], + ], + ]; - $data['local config redefining packagist.org by URL override it if no named keys are used'] = array( - array( - array('type' => 'composer', 'url' => 'https://repo.packagist.org'), - ), - array( - array('type' => 'composer', 'url' => 'https://repo.packagist.org'), - ), - ); + $data['local config redefining packagist.org by URL override it if no named keys are used'] = [ + [ + ['type' => 'composer', 'url' => 'https://repo.packagist.org'], + ], + [ + ['type' => 'composer', 'url' => 'https://repo.packagist.org'], + ], + ]; - $data['local config redefining packagist.org by URL override it also with named keys'] = array( - array( - 'example' => array('type' => 'composer', 'url' => 'https://repo.packagist.org'), - ), - array( - 'example' => array('type' => 'composer', 'url' => 'https://repo.packagist.org'), - ), - ); + $data['local config redefining packagist.org by URL override it also with named keys'] = [ + [ + 'example' => ['type' => 'composer', 'url' => 'https://repo.packagist.org'], + ], + [ + 'example' => ['type' => 'composer', 'url' => 'https://repo.packagist.org'], + ], + ]; - $data['incorrect local config does not cause ErrorException'] = array( - array( - 'packagist.org' => array('type' => 'composer', 'url' => 'https://repo.packagist.org'), + $data['incorrect local config does not cause ErrorException'] = [ + [ + 'packagist.org' => ['type' => 'composer', 'url' => 'https://repo.packagist.org'], 'type' => 'vcs', 'url' => 'http://example.com', - ), - array( + ], + [ 'type' => 'vcs', 'url' => 'http://example.com', - ), - ); + ], + ]; return $data; } @@ -147,8 +145,8 @@ class ConfigTest extends TestCase public function testPreferredInstallAsString(): void { $config = new Config(false); - $config->merge(array('config' => array('preferred-install' => 'source'))); - $config->merge(array('config' => array('preferred-install' => 'dist'))); + $config->merge(['config' => ['preferred-install' => 'source']]); + $config->merge(['config' => ['preferred-install' => 'dist']]); $this->assertEquals('dist', $config->get('preferred-install')); } @@ -156,29 +154,29 @@ class ConfigTest extends TestCase public function testMergePreferredInstall(): void { $config = new Config(false); - $config->merge(array('config' => array('preferred-install' => 'dist'))); - $config->merge(array('config' => array('preferred-install' => array('foo/*' => 'source')))); + $config->merge(['config' => ['preferred-install' => 'dist']]); + $config->merge(['config' => ['preferred-install' => ['foo/*' => 'source']]]); // This assertion needs to make sure full wildcard preferences are placed last // Handled by composer because we convert string preferences for BC, all other // care for ordering and collision prevention is up to the user - $this->assertEquals(array('foo/*' => 'source', '*' => 'dist'), $config->get('preferred-install')); + $this->assertEquals(['foo/*' => 'source', '*' => 'dist'], $config->get('preferred-install')); } public function testMergeGithubOauth(): void { $config = new Config(false); - $config->merge(array('config' => array('github-oauth' => array('foo' => 'bar')))); - $config->merge(array('config' => array('github-oauth' => array('bar' => 'baz')))); + $config->merge(['config' => ['github-oauth' => ['foo' => 'bar']]]); + $config->merge(['config' => ['github-oauth' => ['bar' => 'baz']]]); - $this->assertEquals(array('foo' => 'bar', 'bar' => 'baz'), $config->get('github-oauth')); + $this->assertEquals(['foo' => 'bar', 'bar' => 'baz'], $config->get('github-oauth')); } public function testVarReplacement(): void { $config = new Config(false); - $config->merge(array('config' => array('a' => 'b', 'c' => '{$a}'))); - $config->merge(array('config' => array('bin-dir' => '$HOME', 'cache-dir' => '~/foo/'))); + $config->merge(['config' => ['a' => 'b', 'c' => '{$a}']]); + $config->merge(['config' => ['bin-dir' => '$HOME', 'cache-dir' => '~/foo/']]); $home = rtrim(getenv('HOME') ?: getenv('USERPROFILE'), '\\/'); $this->assertEquals('b', $config->get('c')); @@ -189,11 +187,11 @@ class ConfigTest extends TestCase public function testRealpathReplacement(): void { $config = new Config(false, '/foo/bar'); - $config->merge(array('config' => array( + $config->merge(['config' => [ 'bin-dir' => '$HOME/foo', 'cache-dir' => '/baz/', 'vendor-dir' => 'vendor', - ))); + ]]); $home = rtrim(getenv('HOME') ?: getenv('USERPROFILE'), '\\/'); $this->assertEquals('/foo/bar/vendor', $config->get('vendor-dir')); @@ -204,9 +202,9 @@ class ConfigTest extends TestCase public function testStreamWrapperDirs(): void { $config = new Config(false, '/foo/bar'); - $config->merge(array('config' => array( + $config->merge(['config' => [ 'cache-dir' => 's3://baz/', - ))); + ]]); $this->assertEquals('s3://baz', $config->get('cache-dir')); } @@ -214,10 +212,10 @@ class ConfigTest extends TestCase public function testFetchingRelativePaths(): void { $config = new Config(false, '/foo/bar'); - $config->merge(array('config' => array( + $config->merge(['config' => [ 'bin-dir' => '{$vendor-dir}/foo', 'vendor-dir' => 'vendor', - ))); + ]]); $this->assertEquals('/foo/bar/vendor', $config->get('vendor-dir')); $this->assertEquals('/foo/bar/vendor/foo', $config->get('bin-dir')); @@ -228,27 +226,25 @@ class ConfigTest extends TestCase public function testOverrideGithubProtocols(): void { $config = new Config(false); - $config->merge(array('config' => array('github-protocols' => array('https', 'ssh')))); - $config->merge(array('config' => array('github-protocols' => array('https')))); + $config->merge(['config' => ['github-protocols' => ['https', 'ssh']]]); + $config->merge(['config' => ['github-protocols' => ['https']]]); - $this->assertEquals(array('https'), $config->get('github-protocols')); + $this->assertEquals(['https'], $config->get('github-protocols')); } public function testGitDisabledByDefaultInGithubProtocols(): void { $config = new Config(false); - $config->merge(array('config' => array('github-protocols' => array('https', 'git')))); - $this->assertEquals(array('https'), $config->get('github-protocols')); + $config->merge(['config' => ['github-protocols' => ['https', 'git']]]); + $this->assertEquals(['https'], $config->get('github-protocols')); - $config->merge(array('config' => array('secure-http' => false))); - $this->assertEquals(array('https', 'git'), $config->get('github-protocols')); + $config->merge(['config' => ['secure-http' => false]]); + $this->assertEquals(['https', 'git'], $config->get('github-protocols')); } /** * @dataProvider allowedUrlProvider * @doesNotPerformAssertions - * - * @param string $url */ public function testAllowedUrlsPass(string $url): void { @@ -258,8 +254,6 @@ class ConfigTest extends TestCase /** * @dataProvider prohibitedUrlProvider - * - * @param string $url */ public function testProhibitedUrlsThrowException(string $url): void { @@ -274,7 +268,7 @@ class ConfigTest extends TestCase */ public function allowedUrlProvider(): array { - $urls = array( + $urls = [ 'https://packagist.org', 'git@github.com:composer/composer.git', 'hg://user:pass@my.satis/satis', @@ -283,10 +277,10 @@ class ConfigTest extends TestCase 'file://example.org/mygit.git', 'git:Department/Repo.git', 'ssh://[user@]host.xz[:port]/path/to/repo.git/', - ); + ]; - return array_combine($urls, array_map(function ($e): array { - return array($e); + return array_combine($urls, array_map(static function ($e): array { + return [$e]; }, $urls)); } @@ -295,7 +289,7 @@ class ConfigTest extends TestCase */ public function prohibitedUrlProvider(): array { - $urls = array( + $urls = [ 'http://packagist.org', 'http://10.1.0.1/satis', 'http://127.0.0.1/satis', @@ -304,10 +298,10 @@ class ConfigTest extends TestCase 'svn://192.168.0.1/trunk', 'svn://1.2.3.4/trunk', 'git://5.6.7.8/git.git', - ); + ]; - return array_combine($urls, array_map(function ($e): array { - return array($e); + return array_combine($urls, array_map(static function ($e): array { + return [$e]; }, $urls)); } @@ -325,7 +319,7 @@ class ConfigTest extends TestCase 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, - ] + ], ]); } @@ -336,11 +330,11 @@ class ConfigTest extends TestCase { $config = new Config; $config->merge( - array('config' => array('disable-tls' => 'false')) + ['config' => ['disable-tls' => 'false']] ); $this->assertFalse($config->get('disable-tls')); $config->merge( - array('config' => array('disable-tls' => 'true')) + ['config' => ['disable-tls' => 'true']] ); $this->assertTrue($config->get('disable-tls')); } @@ -374,7 +368,7 @@ class ConfigTest extends TestCase $this->assertSame(Config::SOURCE_DEFAULT, $config->getSourceOfValue('process-timeout')); $config->merge( - array('config' => array('process-timeout' => 1)), + ['config' => ['process-timeout' => 1]], 'phpunit-test' ); @@ -412,30 +406,30 @@ class ConfigTest extends TestCase public function testMergesPluginConfig(): void { $config = new Config(false); - $config->merge(array('config' => array('allow-plugins' => array('some/plugin' => true)))); - $this->assertEquals(array('some/plugin' => true), $config->get('allow-plugins')); + $config->merge(['config' => ['allow-plugins' => ['some/plugin' => true]]]); + $this->assertEquals(['some/plugin' => true], $config->get('allow-plugins')); - $config->merge(array('config' => array('allow-plugins' => array('another/plugin' => true)))); - $this->assertEquals(array('some/plugin' => true, 'another/plugin' => true), $config->get('allow-plugins')); + $config->merge(['config' => ['allow-plugins' => ['another/plugin' => true]]]); + $this->assertEquals(['some/plugin' => true, 'another/plugin' => true], $config->get('allow-plugins')); } public function testOverridesGlobalBooleanPluginsConfig(): void { $config = new Config(false); - $config->merge(array('config' => array('allow-plugins' => true))); + $config->merge(['config' => ['allow-plugins' => true]]); $this->assertEquals(true, $config->get('allow-plugins')); - $config->merge(array('config' => array('allow-plugins' => array('another/plugin' => true)))); - $this->assertEquals(array('another/plugin' => true), $config->get('allow-plugins')); + $config->merge(['config' => ['allow-plugins' => ['another/plugin' => true]]]); + $this->assertEquals(['another/plugin' => true], $config->get('allow-plugins')); } public function testAllowsAllPluginsFromLocalBoolean(): void { $config = new Config(false); - $config->merge(array('config' => array('allow-plugins' => array('some/plugin' => true)))); - $this->assertEquals(array('some/plugin' => true), $config->get('allow-plugins')); + $config->merge(['config' => ['allow-plugins' => ['some/plugin' => true]]]); + $this->assertEquals(['some/plugin' => true], $config->get('allow-plugins')); - $config->merge(array('config' => array('allow-plugins' => true))); + $config->merge(['config' => ['allow-plugins' => true]]); $this->assertEquals(true, $config->get('allow-plugins')); } } diff --git a/tests/Composer/Test/Console/HtmlOutputFormatterTest.php b/tests/Composer/Test/Console/HtmlOutputFormatterTest.php index 46ab0caab..6d02a7396 100644 --- a/tests/Composer/Test/Console/HtmlOutputFormatterTest.php +++ b/tests/Composer/Test/Console/HtmlOutputFormatterTest.php @@ -20,9 +20,9 @@ class HtmlOutputFormatterTest extends TestCase { public function testFormatting(): void { - $formatter = new HtmlOutputFormatter(array( + $formatter = new HtmlOutputFormatter([ 'warning' => new OutputFormatterStyle('black', 'yellow'), - )); + ]); $this->assertEquals( 'text green yellow black w/ yello bg', diff --git a/tests/Composer/Test/DependencyResolver/DefaultPolicyTest.php b/tests/Composer/Test/DependencyResolver/DefaultPolicyTest.php index 4d0c3c136..08eaf18f9 100644 --- a/tests/Composer/Test/DependencyResolver/DefaultPolicyTest.php +++ b/tests/Composer/Test/DependencyResolver/DefaultPolicyTest.php @@ -48,8 +48,8 @@ class DefaultPolicyTest extends TestCase $pool = $this->repositorySet->createPoolForPackage('A', $this->repoLocked); - $literals = array($packageA->getId()); - $expected = array($packageA->getId()); + $literals = [$packageA->getId()]; + $expected = [$packageA->getId()]; $selected = $this->policy->selectPreferredPackages($pool, $literals); @@ -64,8 +64,8 @@ class DefaultPolicyTest extends TestCase $pool = $this->repositorySet->createPoolForPackage('A', $this->repoLocked); - $literals = array($packageA1->getId(), $packageA2->getId()); - $expected = array($packageA2->getId()); + $literals = [$packageA1->getId(), $packageA2->getId()]; + $expected = [$packageA2->getId()]; $selected = $this->policy->selectPreferredPackages($pool, $literals); @@ -80,8 +80,8 @@ class DefaultPolicyTest extends TestCase $pool = $this->repositorySet->createPoolForPackage('A', $this->repoLocked); - $literals = array($packageA1->getId(), $packageA2->getId()); - $expected = array($packageA2->getId()); + $literals = [$packageA1->getId(), $packageA2->getId()]; + $expected = [$packageA2->getId()]; $selected = $this->policy->selectPreferredPackages($pool, $literals); @@ -96,8 +96,8 @@ class DefaultPolicyTest extends TestCase $pool = $this->repositorySet->createPoolForPackage('A', $this->repoLocked); - $literals = array($packageA1->getId(), $packageA2->getId()); - $expected = array($packageA1->getId()); + $literals = [$packageA1->getId(), $packageA2->getId()]; + $expected = [$packageA1->getId()]; $policy = new DefaultPolicy(true); $selected = $policy->selectPreferredPackages($pool, $literals); @@ -113,8 +113,8 @@ class DefaultPolicyTest extends TestCase $pool = $this->repositorySet->createPoolForPackage('A', $this->repoLocked); - $literals = array($packageA1->getId(), $packageA2->getId()); - $expected = array($packageA2->getId()); + $literals = [$packageA1->getId(), $packageA2->getId()]; + $expected = [$packageA2->getId()]; $selected = $this->policy->selectPreferredPackages($pool, $literals); @@ -136,8 +136,8 @@ class DefaultPolicyTest extends TestCase $pool = $this->repositorySet->createPoolForPackage('A', $this->repoLocked); - $literals = array($package1->getId(), $package2->getId(), $package3->getId(), $package4->getId()); - $expected = array($package2->getId()); + $literals = [$package1->getId(), $package2->getId(), $package3->getId(), $package4->getId()]; + $expected = [$package2->getId()]; $selected = $this->policy->selectPreferredPackages($pool, $literals); $this->assertSame($expected, $selected); @@ -148,7 +148,7 @@ class DefaultPolicyTest extends TestCase $pool = $this->repositorySet->createPoolForPackage('A', $this->repoLocked); - $expected = array($package4->getId()); + $expected = [$package4->getId()]; $selected = $this->policy->selectPreferredPackages($pool, $literals); $this->assertSame($expected, $selected); @@ -173,12 +173,12 @@ class DefaultPolicyTest extends TestCase $pool = $this->repositorySet->createPoolForPackage('A', $this->repoLocked); $packages = $pool->whatProvides('a', new Constraint('=', '2.1.9999999.9999999-dev')); - $literals = array(); + $literals = []; foreach ($packages as $package) { $literals[] = $package->getId(); } - $expected = array($packageAAliasImportant->getId()); + $expected = [$packageAAliasImportant->getId()]; $selected = $this->policy->selectPreferredPackages($pool, $literals); @@ -190,14 +190,14 @@ class DefaultPolicyTest extends TestCase $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '2.0')); - $packageA->setProvides(array('x' => new Link('A', 'X', new Constraint('==', '1.0'), Link::TYPE_PROVIDE))); - $packageB->setProvides(array('x' => new Link('B', 'X', new Constraint('==', '1.0'), Link::TYPE_PROVIDE))); + $packageA->setProvides(['x' => new Link('A', 'X', new Constraint('==', '1.0'), Link::TYPE_PROVIDE)]); + $packageB->setProvides(['x' => new Link('B', 'X', new Constraint('==', '1.0'), Link::TYPE_PROVIDE)]); $this->repositorySet->addRepository($this->repo); - $pool = $this->repositorySet->createPoolForPackages(array('A', 'B'), $this->repoLocked); + $pool = $this->repositorySet->createPoolForPackages(['A', 'B'], $this->repoLocked); - $literals = array($packageA->getId(), $packageB->getId()); + $literals = [$packageA->getId(), $packageB->getId()]; $expected = $literals; $selected = $this->policy->selectPreferredPackages($pool, $literals); @@ -210,13 +210,13 @@ class DefaultPolicyTest extends TestCase $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '2.0')); - $packageB->setReplaces(array('a' => new Link('B', 'A', new Constraint('==', '1.0'), Link::TYPE_REPLACE))); + $packageB->setReplaces(['a' => new Link('B', 'A', new Constraint('==', '1.0'), Link::TYPE_REPLACE)]); $this->repositorySet->addRepository($this->repo); - $pool = $this->repositorySet->createPoolForPackages(array('A', 'B'), $this->repoLocked); + $pool = $this->repositorySet->createPoolForPackages(['A', 'B'], $this->repoLocked); - $literals = array($packageA->getId(), $packageB->getId()); + $literals = [$packageA->getId(), $packageB->getId()]; $expected = $literals; $selected = $this->policy->selectPreferredPackages($pool, $literals); @@ -230,14 +230,14 @@ class DefaultPolicyTest extends TestCase $this->repo->addPackage($packageB = $this->getPackage('vendor-b/replacer', '1.0')); $this->repo->addPackage($packageA = $this->getPackage('vendor-a/replacer', '1.0')); - $packageA->setReplaces(array('vendor-a/package' => new Link('vendor-a/replacer', 'vendor-a/package', new Constraint('==', '1.0'), Link::TYPE_REPLACE))); - $packageB->setReplaces(array('vendor-a/package' => new Link('vendor-b/replacer', 'vendor-a/package', new Constraint('==', '1.0'), Link::TYPE_REPLACE))); + $packageA->setReplaces(['vendor-a/package' => new Link('vendor-a/replacer', 'vendor-a/package', new Constraint('==', '1.0'), Link::TYPE_REPLACE)]); + $packageB->setReplaces(['vendor-a/package' => new Link('vendor-b/replacer', 'vendor-a/package', new Constraint('==', '1.0'), Link::TYPE_REPLACE)]); $this->repositorySet->addRepository($this->repo); - $pool = $this->repositorySet->createPoolForPackages(array('vendor-a/replacer', 'vendor-b/replacer'), $this->repoLocked); + $pool = $this->repositorySet->createPoolForPackages(['vendor-a/replacer', 'vendor-b/replacer'], $this->repoLocked); - $literals = array($packageA->getId(), $packageB->getId()); + $literals = [$packageA->getId(), $packageB->getId()]; $expected = $literals; $selected = $this->policy->selectPreferredPackages($pool, $literals, 'vendor-a/package'); @@ -251,9 +251,9 @@ class DefaultPolicyTest extends TestCase $repositorySet = new RepositorySet('dev'); $repositorySet->addRepository($this->repo); - $pool = $this->repositorySet->createPoolForPackages(array('vendor-a/replacer', 'vendor-b/replacer'), $this->repoLocked); + $pool = $this->repositorySet->createPoolForPackages(['vendor-a/replacer', 'vendor-b/replacer'], $this->repoLocked); - $literals = array($packageA->getId(), $packageB->getId()); + $literals = [$packageA->getId(), $packageB->getId()]; $expected = $literals; $selected = $this->policy->selectPreferredPackages($pool, $literals, 'vendor-a/package'); @@ -270,8 +270,8 @@ class DefaultPolicyTest extends TestCase $pool = $this->repositorySet->createPoolForPackage('A', $this->repoLocked); - $literals = array($packageA1->getId(), $packageA2->getId()); - $expected = array($packageA1->getId()); + $literals = [$packageA1->getId(), $packageA2->getId()]; + $expected = [$packageA1->getId()]; $selected = $policy->selectPreferredPackages($pool, $literals); diff --git a/tests/Composer/Test/DependencyResolver/PoolBuilderTest.php b/tests/Composer/Test/DependencyResolver/PoolBuilderTest.php index 316fd82b5..e6c804454 100644 --- a/tests/Composer/Test/DependencyResolver/PoolBuilderTest.php +++ b/tests/Composer/Test/DependencyResolver/PoolBuilderTest.php @@ -36,8 +36,6 @@ class PoolBuilderTest extends TestCase { /** * @dataProvider getIntegrationTests - * @param string $file - * @param string $message * @param string[] $expect * @param string[] $expectOptimized * @param mixed[] $root @@ -47,11 +45,11 @@ class PoolBuilderTest extends TestCase */ public function testPoolBuilder(string $file, string $message, array $expect, array $expectOptimized, array $root, array $requestData, array $packageRepos, array $fixed): void { - $rootAliases = !empty($root['aliases']) ? $root['aliases'] : array(); + $rootAliases = !empty($root['aliases']) ? $root['aliases'] : []; $minimumStability = !empty($root['minimum-stability']) ? $root['minimum-stability'] : 'stable'; - $stabilityFlags = !empty($root['stability-flags']) ? $root['stability-flags'] : array(); - $rootReferences = !empty($root['references']) ? $root['references'] : array(); - $stabilityFlags = array_map(function ($stability): int { + $stabilityFlags = !empty($root['stability-flags']) ? $root['stability-flags'] : []; + $rootReferences = !empty($root['references']) ? $root['references'] : []; + $stabilityFlags = array_map(static function ($stability): int { return BasePackage::$stabilities[$stability]; }, $stabilityFlags); @@ -62,8 +60,8 @@ class PoolBuilderTest extends TestCase } $loader = new ArrayLoader(null, true); - $packageIds = array(); - $loadPackage = function ($data) use ($loader, &$packageIds): \Composer\Package\PackageInterface { + $packageIds = []; + $loadPackage = static function ($data) use ($loader, &$packageIds): \Composer\Package\PackageInterface { /** @var ?int $id */ $id = null; if (!empty($data['id'])) { @@ -154,12 +152,12 @@ class PoolBuilderTest extends TestCase */ private function getPackageResultSet(Pool $pool, array $packageIds): array { - $result = array(); + $result = []; for ($i = 1, $count = count($pool); $i <= $count; $i++) { $result[] = $pool->packageById($i); } - return array_map(function (BasePackage $package) use ($packageIds) { + return array_map(static function (BasePackage $package) use ($packageIds) { if ($id = array_search($package, $packageIds, true)) { return $id; } @@ -190,7 +188,7 @@ class PoolBuilderTest extends TestCase public function getIntegrationTests(): array { $fixturesDir = realpath(__DIR__.'/Fixtures/poolbuilder/'); - $tests = array(); + $tests = []; foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($fixturesDir), \RecursiveIteratorIterator::LEAVES_ONLY) as $file) { $file = (string) $file; @@ -204,10 +202,10 @@ class PoolBuilderTest extends TestCase $message = $testData['TEST']; $request = JsonFile::parseJson($testData['REQUEST']); - $root = !empty($testData['ROOT']) ? JsonFile::parseJson($testData['ROOT']) : array(); + $root = !empty($testData['ROOT']) ? JsonFile::parseJson($testData['ROOT']) : []; $packageRepos = JsonFile::parseJson($testData['PACKAGE-REPOS']); - $fixed = array(); + $fixed = []; if (!empty($testData['FIXED'])) { $fixed = JsonFile::parseJson($testData['FIXED']); } @@ -217,7 +215,7 @@ class PoolBuilderTest extends TestCase die(sprintf('Test "%s" is not valid: '.$e->getMessage(), str_replace($fixturesDir.'/', '', $file))); } - $tests[basename($file)] = array(str_replace($fixturesDir.'/', '', $file), $message, $expect, $expectOptimized, $root, $request, $packageRepos, $fixed); + $tests[basename($file)] = [str_replace($fixturesDir.'/', '', $file), $message, $expect, $expectOptimized, $root, $request, $packageRepos, $fixed]; } return $tests; @@ -230,7 +228,7 @@ class PoolBuilderTest extends TestCase { $tokens = Preg::split('#(?:^|\n*)--([A-Z-]+)--\n#', file_get_contents($file), -1, PREG_SPLIT_DELIM_CAPTURE); - $sectionInfo = array( + $sectionInfo = [ 'TEST' => true, 'ROOT' => false, 'REQUEST' => true, @@ -238,10 +236,10 @@ class PoolBuilderTest extends TestCase 'PACKAGE-REPOS' => true, 'EXPECT' => true, 'EXPECT-OPTIMIZED' => false, - ); + ]; $section = null; - $data = array(); + $data = []; foreach ($tokens as $i => $token) { if (null === $section && empty($token)) { continue; // skip leading blank diff --git a/tests/Composer/Test/DependencyResolver/PoolOptimizerTest.php b/tests/Composer/Test/DependencyResolver/PoolOptimizerTest.php index 18ef95dc3..88dc2bfd8 100644 --- a/tests/Composer/Test/DependencyResolver/PoolOptimizerTest.php +++ b/tests/Composer/Test/DependencyResolver/PoolOptimizerTest.php @@ -32,7 +32,6 @@ class PoolOptimizerTest extends TestCase * @param mixed[] $requestData * @param BasePackage[] $packagesBefore * @param BasePackage[] $expectedPackages - * @param string $message */ public function testPoolOptimizer(array $requestData, array $packagesBefore, array $expectedPackages, string $message): void { @@ -74,7 +73,7 @@ class PoolOptimizerTest extends TestCase public function provideIntegrationTests(): array { $fixturesDir = realpath(__DIR__.'/Fixtures/pooloptimizer/'); - $tests = array(); + $tests = []; foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($fixturesDir), \RecursiveIteratorIterator::LEAVES_ONLY) as $file) { $file = (string) $file; @@ -92,7 +91,7 @@ class PoolOptimizerTest extends TestCase die(sprintf('Test "%s" is not valid: '.$e->getMessage(), str_replace($fixturesDir.'/', '', $file))); } - $tests[basename($file)] = array($requestData, $packagesBefore, $expectedPackages, $message); + $tests[basename($file)] = [$requestData, $packagesBefore, $expectedPackages, $message]; } return $tests; @@ -106,15 +105,15 @@ class PoolOptimizerTest extends TestCase $tokens = Preg::split('#(?:^|\n*)--([A-Z-]+)--\n#', file_get_contents($file), -1, PREG_SPLIT_DELIM_CAPTURE); /** @var array $sectionInfo */ - $sectionInfo = array( + $sectionInfo = [ 'TEST' => true, 'REQUEST' => true, 'POOL-BEFORE' => true, 'POOL-AFTER' => true, - ); + ]; $section = null; - $data = array(); + $data = []; foreach ($tokens as $i => $token) { if (null === $section && empty($token)) { continue; // skip leading blank @@ -157,7 +156,7 @@ class PoolOptimizerTest extends TestCase */ private function reducePackagesInfoForComparison(array $packages): array { - $packagesInfo = array(); + $packagesInfo = []; foreach ($packages as $package) { $packagesInfo[] = $package->getName() . '@' . $package->getVersion() . ($package instanceof AliasPackage ? ' (alias of '.$package->getAliasOf()->getVersion().')' : ''); @@ -174,7 +173,7 @@ class PoolOptimizerTest extends TestCase */ private function loadPackages(array $packagesData): array { - $packages = array(); + $packages = []; foreach ($packagesData as $packageData) { $packages[] = $package = $this->loadPackage($packageData); @@ -188,7 +187,6 @@ class PoolOptimizerTest extends TestCase /** * @param mixed[] $packageData - * @return BasePackage */ private function loadPackage(array $packageData): BasePackage { diff --git a/tests/Composer/Test/DependencyResolver/PoolTest.php b/tests/Composer/Test/DependencyResolver/PoolTest.php index 6952955d8..62e8eb5d3 100644 --- a/tests/Composer/Test/DependencyResolver/PoolTest.php +++ b/tests/Composer/Test/DependencyResolver/PoolTest.php @@ -21,10 +21,10 @@ class PoolTest extends TestCase { $package = $this->getPackage('foo', '1'); - $pool = $this->createPool(array($package)); + $pool = $this->createPool([$package]); - $this->assertEquals(array($package), $pool->whatProvides('foo')); - $this->assertEquals(array($package), $pool->whatProvides('foo')); + $this->assertEquals([$package], $pool->whatProvides('foo')); + $this->assertEquals([$package], $pool->whatProvides('foo')); } public function testWhatProvidesPackageWithConstraint(): void @@ -32,20 +32,20 @@ class PoolTest extends TestCase $firstPackage = $this->getPackage('foo', '1'); $secondPackage = $this->getPackage('foo', '2'); - $pool = $this->createPool(array( + $pool = $this->createPool([ $firstPackage, $secondPackage, - )); + ]); - $this->assertEquals(array($firstPackage, $secondPackage), $pool->whatProvides('foo')); - $this->assertEquals(array($secondPackage), $pool->whatProvides('foo', $this->getVersionConstraint('==', '2'))); + $this->assertEquals([$firstPackage, $secondPackage], $pool->whatProvides('foo')); + $this->assertEquals([$secondPackage], $pool->whatProvides('foo', $this->getVersionConstraint('==', '2'))); } public function testPackageById(): void { $package = $this->getPackage('foo', '1'); - $pool = $this->createPool(array($package)); + $pool = $this->createPool([$package]); $this->assertSame($package, $pool->packageById(1)); } @@ -54,14 +54,13 @@ class PoolTest extends TestCase { $pool = $this->createPool(); - $this->assertEquals(array(), $pool->whatProvides('foo')); + $this->assertEquals([], $pool->whatProvides('foo')); } /** * @param array<\Composer\Package\BasePackage>|null $packages - * @return \Composer\DependencyResolver\Pool */ - protected function createPool(?array $packages = array()): Pool + protected function createPool(?array $packages = []): Pool { return new Pool($packages); } diff --git a/tests/Composer/Test/DependencyResolver/RequestTest.php b/tests/Composer/Test/DependencyResolver/RequestTest.php index a749be8bf..6b1e7d84a 100644 --- a/tests/Composer/Test/DependencyResolver/RequestTest.php +++ b/tests/Composer/Test/DependencyResolver/RequestTest.php @@ -34,9 +34,9 @@ class RequestTest extends TestCase $request->requireName('foo'); $this->assertEquals( - array( + [ 'foo' => new MatchAllConstraint(), - ), + ], $request->getRequires() ); } @@ -56,9 +56,9 @@ class RequestTest extends TestCase $request->requireName('foo', $constraint = $this->getVersionConstraint('=', '1')); $this->assertEquals( - array( + [ 'foo' => $constraint, - ), + ], $request->getRequires() ); } diff --git a/tests/Composer/Test/DependencyResolver/RuleSetIteratorTest.php b/tests/Composer/Test/DependencyResolver/RuleSetIteratorTest.php index 7e55c7013..d158335d3 100644 --- a/tests/Composer/Test/DependencyResolver/RuleSetIteratorTest.php +++ b/tests/Composer/Test/DependencyResolver/RuleSetIteratorTest.php @@ -31,32 +31,32 @@ class RuleSetIteratorTest extends TestCase { $this->pool = new Pool(); - $this->rules = array( - RuleSet::TYPE_REQUEST => array( - new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)), - new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)), - ), - RuleSet::TYPE_LEARNED => array( - new GenericRule(array(), Rule::RULE_LEARNED, 1), - ), - RuleSet::TYPE_PACKAGE => array(), - ); + $this->rules = [ + RuleSet::TYPE_REQUEST => [ + new GenericRule([], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]), + new GenericRule([], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]), + ], + RuleSet::TYPE_LEARNED => [ + new GenericRule([], Rule::RULE_LEARNED, 1), + ], + RuleSet::TYPE_PACKAGE => [], + ]; } public function testForeach(): void { $ruleSetIterator = new RuleSetIterator($this->rules); - $result = array(); + $result = []; foreach ($ruleSetIterator as $rule) { $result[] = $rule; } - $expected = array( + $expected = [ $this->rules[RuleSet::TYPE_REQUEST][0], $this->rules[RuleSet::TYPE_REQUEST][1], $this->rules[RuleSet::TYPE_LEARNED][0], - ); + ]; $this->assertEquals($expected, $result); } @@ -65,16 +65,16 @@ class RuleSetIteratorTest extends TestCase { $ruleSetIterator = new RuleSetIterator($this->rules); - $result = array(); + $result = []; foreach ($ruleSetIterator as $key => $rule) { $result[] = $key; } - $expected = array( + $expected = [ RuleSet::TYPE_REQUEST, RuleSet::TYPE_REQUEST, RuleSet::TYPE_LEARNED, - ); + ]; $this->assertEquals($expected, $result); } diff --git a/tests/Composer/Test/DependencyResolver/RuleSetTest.php b/tests/Composer/Test/DependencyResolver/RuleSetTest.php index 2912ebc3f..0bbb42804 100644 --- a/tests/Composer/Test/DependencyResolver/RuleSetTest.php +++ b/tests/Composer/Test/DependencyResolver/RuleSetTest.php @@ -24,16 +24,16 @@ class RuleSetTest extends TestCase { public function testAdd(): void { - $rules = array( - RuleSet::TYPE_PACKAGE => array(), - RuleSet::TYPE_REQUEST => array( - new GenericRule(array(1), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)), - new GenericRule(array(2), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)), - ), - RuleSet::TYPE_LEARNED => array( - new GenericRule(array(), Rule::RULE_LEARNED, 1), - ), - ); + $rules = [ + RuleSet::TYPE_PACKAGE => [], + RuleSet::TYPE_REQUEST => [ + new GenericRule([1], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]), + new GenericRule([2], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]), + ], + RuleSet::TYPE_LEARNED => [ + new GenericRule([], Rule::RULE_LEARNED, 1), + ], + ]; $ruleSet = new RuleSet; @@ -46,13 +46,13 @@ class RuleSetTest extends TestCase public function testAddIgnoresDuplicates(): void { - $rules = array( - RuleSet::TYPE_REQUEST => array( - new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)), - new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)), - new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)), - ), - ); + $rules = [ + RuleSet::TYPE_REQUEST => [ + new GenericRule([], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]), + new GenericRule([], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]), + new GenericRule([], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]), + ], + ]; $ruleSet = new RuleSet; @@ -60,7 +60,7 @@ class RuleSetTest extends TestCase $ruleSet->add($rules[RuleSet::TYPE_REQUEST][1], RuleSet::TYPE_REQUEST); $ruleSet->add($rules[RuleSet::TYPE_REQUEST][2], RuleSet::TYPE_REQUEST); - $this->assertCount(1, $ruleSet->getIteratorFor(array(RuleSet::TYPE_REQUEST))); + $this->assertCount(1, $ruleSet->getIteratorFor([RuleSet::TYPE_REQUEST])); } public function testAddWhenTypeIsNotRecognized(): void @@ -69,15 +69,15 @@ class RuleSetTest extends TestCase self::expectException('OutOfBoundsException'); // @phpstan-ignore-next-line - $ruleSet->add(new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)), 7); + $ruleSet->add(new GenericRule([], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]), 7); } public function testCount(): void { $ruleSet = new RuleSet; - $ruleSet->add(new GenericRule(array(1), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)), RuleSet::TYPE_REQUEST); - $ruleSet->add(new GenericRule(array(2), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)), RuleSet::TYPE_REQUEST); + $ruleSet->add(new GenericRule([1], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]), RuleSet::TYPE_REQUEST); + $ruleSet->add(new GenericRule([2], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]), RuleSet::TYPE_REQUEST); $this->assertEquals(2, $ruleSet->count()); } @@ -86,7 +86,7 @@ class RuleSetTest extends TestCase { $ruleSet = new RuleSet; - $rule = new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); + $rule = new GenericRule([], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); $ruleSet->add($rule, RuleSet::TYPE_REQUEST); $this->assertSame($rule, $ruleSet->ruleById[0]); @@ -96,8 +96,8 @@ class RuleSetTest extends TestCase { $ruleSet = new RuleSet; - $rule1 = new GenericRule(array(1), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); - $rule2 = new GenericRule(array(2), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); + $rule1 = new GenericRule([1], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); + $rule2 = new GenericRule([2], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); $ruleSet->add($rule1, RuleSet::TYPE_REQUEST); $ruleSet->add($rule2, RuleSet::TYPE_LEARNED); @@ -111,8 +111,8 @@ class RuleSetTest extends TestCase public function testGetIteratorFor(): void { $ruleSet = new RuleSet; - $rule1 = new GenericRule(array(1), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); - $rule2 = new GenericRule(array(2), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); + $rule1 = new GenericRule([1], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); + $rule2 = new GenericRule([2], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); $ruleSet->add($rule1, RuleSet::TYPE_REQUEST); $ruleSet->add($rule2, RuleSet::TYPE_LEARNED); @@ -125,8 +125,8 @@ class RuleSetTest extends TestCase public function testGetIteratorWithout(): void { $ruleSet = new RuleSet; - $rule1 = new GenericRule(array(1), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); - $rule2 = new GenericRule(array(2), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); + $rule1 = new GenericRule([1], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); + $rule2 = new GenericRule([2], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); $ruleSet->add($rule1, RuleSet::TYPE_REQUEST); $ruleSet->add($rule2, RuleSet::TYPE_LEARNED); @@ -138,16 +138,16 @@ class RuleSetTest extends TestCase public function testPrettyString(): void { - $pool = new Pool(array( + $pool = new Pool([ $p = $this->getPackage('foo', '2.1'), - )); + ]); $repositorySetMock = $this->getMockBuilder('Composer\Repository\RepositorySet')->disableOriginalConstructor()->getMock(); $requestMock = $this->getMockBuilder('Composer\DependencyResolver\Request')->disableOriginalConstructor()->getMock(); $ruleSet = new RuleSet; $literal = $p->getId(); - $rule = new GenericRule(array($literal), Rule::RULE_ROOT_REQUIRE, array('packageName' => 'foo/bar', 'constraint' => new MatchNoneConstraint)); + $rule = new GenericRule([$literal], Rule::RULE_ROOT_REQUIRE, ['packageName' => 'foo/bar', 'constraint' => new MatchNoneConstraint]); $ruleSet->add($rule, RuleSet::TYPE_REQUEST); diff --git a/tests/Composer/Test/DependencyResolver/RuleTest.php b/tests/Composer/Test/DependencyResolver/RuleTest.php index 9bd9e5377..d3e2054b7 100644 --- a/tests/Composer/Test/DependencyResolver/RuleTest.php +++ b/tests/Composer/Test/DependencyResolver/RuleTest.php @@ -24,7 +24,7 @@ class RuleTest extends TestCase { public function testGetHash(): void { - $rule = new GenericRule(array(123), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); + $rule = new GenericRule([123], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); $hash = unpack('ihash', md5('123', true)); $this->assertEquals($hash['hash'], $rule->getHash()); @@ -32,31 +32,31 @@ class RuleTest extends TestCase public function testEqualsForRulesWithDifferentHashes(): void { - $rule = new GenericRule(array(1, 2), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); - $rule2 = new GenericRule(array(1, 3), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); + $rule = new GenericRule([1, 2], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); + $rule2 = new GenericRule([1, 3], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); $this->assertFalse($rule->equals($rule2)); } public function testEqualsForRulesWithDifferLiteralsQuantity(): void { - $rule = new GenericRule(array(1, 12), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); - $rule2 = new GenericRule(array(1), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); + $rule = new GenericRule([1, 12], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); + $rule2 = new GenericRule([1], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); $this->assertFalse($rule->equals($rule2)); } public function testEqualsForRulesWithSameLiterals(): void { - $rule = new GenericRule(array(1, 12), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); - $rule2 = new GenericRule(array(1, 12), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); + $rule = new GenericRule([1, 12], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); + $rule2 = new GenericRule([1, 12], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); $this->assertTrue($rule->equals($rule2)); } public function testSetAndGetType(): void { - $rule = new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); + $rule = new GenericRule([], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); $rule->setType(RuleSet::TYPE_REQUEST); $this->assertEquals(RuleSet::TYPE_REQUEST, $rule->getType()); @@ -64,7 +64,7 @@ class RuleTest extends TestCase public function testEnable(): void { - $rule = new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); + $rule = new GenericRule([], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); $rule->disable(); $rule->enable(); @@ -74,7 +74,7 @@ class RuleTest extends TestCase public function testDisable(): void { - $rule = new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); + $rule = new GenericRule([], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); $rule->enable(); $rule->disable(); @@ -84,8 +84,8 @@ class RuleTest extends TestCase public function testIsAssertions(): void { - $rule = new GenericRule(array(1, 12), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); - $rule2 = new GenericRule(array(1), Rule::RULE_ROOT_REQUIRE, array('packageName' => '', 'constraint' => new MatchAllConstraint)); + $rule = new GenericRule([1, 12], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); + $rule2 = new GenericRule([1], Rule::RULE_ROOT_REQUIRE, ['packageName' => '', 'constraint' => new MatchAllConstraint]); $this->assertFalse($rule->isAssertion()); $this->assertTrue($rule2->isAssertion()); @@ -93,10 +93,10 @@ class RuleTest extends TestCase public function testPrettyString(): void { - $pool = new Pool(array( + $pool = new Pool([ $p1 = $this->getPackage('foo', '2.1'), $p2 = $this->getPackage('baz', '1.1'), - )); + ]); $repositorySetMock = $this->getMockBuilder('Composer\Repository\RepositorySet')->disableOriginalConstructor()->getMock(); $requestMock = $this->getMockBuilder('Composer\DependencyResolver\Request')->disableOriginalConstructor()->getMock(); @@ -104,7 +104,7 @@ class RuleTest extends TestCase $emptyConstraint = new MatchAllConstraint(); $emptyConstraint->setPrettyString('*'); - $rule = new GenericRule(array($p1->getId(), -$p2->getId()), Rule::RULE_PACKAGE_REQUIRES, new Link('baz', 'foo', $emptyConstraint)); + $rule = new GenericRule([$p1->getId(), -$p2->getId()], Rule::RULE_PACKAGE_REQUIRES, new Link('baz', 'foo', $emptyConstraint)); $this->assertEquals('baz 1.1 relates to foo * -> satisfiable by foo[2.1].', $rule->getPrettyString($repositorySetMock, $requestMock, $pool, false)); } diff --git a/tests/Composer/Test/DependencyResolver/SolverTest.php b/tests/Composer/Test/DependencyResolver/SolverTest.php index a3c2e3d3a..9955d50c4 100644 --- a/tests/Composer/Test/DependencyResolver/SolverTest.php +++ b/tests/Composer/Test/DependencyResolver/SolverTest.php @@ -66,9 +66,9 @@ class SolverTest extends TestCase $this->request->requireName('A'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $packageA), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $packageA], + ]); } public function testSolverRemoveIfNotRequested(): void @@ -76,9 +76,9 @@ class SolverTest extends TestCase $this->repoLocked->addPackage($packageA = $this->getPackage('A', '1.0')); $this->reposComplete(); - $this->checkSolverResult(array( - array('job' => 'remove', 'package' => $packageA), - )); + $this->checkSolverResult([ + ['job' => 'remove', 'package' => $packageA], + ]); } public function testInstallNonExistingPackageFails(): void @@ -113,9 +113,9 @@ class SolverTest extends TestCase $this->request->requireName('foo'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $foo1), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $foo1], + ]); } public function testSolverInstallWithDeps(): void @@ -124,16 +124,16 @@ class SolverTest extends TestCase $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($newPackageB = $this->getPackage('B', '1.1')); - $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('<', '1.1'), Link::TYPE_REQUIRE))); + $packageA->setRequires(['b' => new Link('A', 'B', $this->getVersionConstraint('<', '1.1'), Link::TYPE_REQUIRE)]); $this->reposComplete(); $this->request->requireName('A'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $packageB), - array('job' => 'install', 'package' => $packageA), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $packageB], + ['job' => 'install', 'package' => $packageA], + ]); } public function testSolverInstallHonoursNotEqualOperator(): void @@ -144,22 +144,22 @@ class SolverTest extends TestCase $this->repo->addPackage($newPackageB12 = $this->getPackage('B', '1.2')); $this->repo->addPackage($newPackageB13 = $this->getPackage('B', '1.3')); - $packageA->setRequires(array( - 'b' => new Link('A', 'B', new MultiConstraint(array( + $packageA->setRequires([ + 'b' => new Link('A', 'B', new MultiConstraint([ $this->getVersionConstraint('<=', '1.3'), $this->getVersionConstraint('<>', '1.3'), $this->getVersionConstraint('!=', '1.2'), - )), Link::TYPE_REQUIRE), - )); + ]), Link::TYPE_REQUIRE), + ]); $this->reposComplete(); $this->request->requireName('A'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $newPackageB11), - array('job' => 'install', 'package' => $packageA), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $newPackageB11], + ['job' => 'install', 'package' => $packageA], + ]); } public function testSolverInstallWithDepsInOrder(): void @@ -168,13 +168,13 @@ class SolverTest extends TestCase $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($packageC = $this->getPackage('C', '1.0')); - $packageB->setRequires(array( + $packageB->setRequires([ 'a' => new Link('B', 'A', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE), 'c' => new Link('B', 'C', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE), - )); - $packageC->setRequires(array( + ]); + $packageC->setRequires([ 'a' => new Link('C', 'A', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE), - )); + ]); $this->reposComplete(); @@ -182,11 +182,11 @@ class SolverTest extends TestCase $this->request->requireName('B'); $this->request->requireName('C'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $packageA), - array('job' => 'install', 'package' => $packageC), - array('job' => 'install', 'package' => $packageB), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $packageA], + ['job' => 'install', 'package' => $packageC], + ['job' => 'install', 'package' => $packageB], + ]); } /** @@ -215,28 +215,28 @@ class SolverTest extends TestCase $this->repo->addPackage($extForPhp74 = $this->getPackage('ourcustom/ext-foobar', '1.0')); $this->repo->addPackage($extForPhp80 = $this->getPackage('ourcustom/ext-foobar', '1.0')); - $extForPhp74->setRequires(array( - 'ourcustom/php' => new Link('ourcustom/ext-foobar', 'ourcustom/PHP', new MultiConstraint(array( + $extForPhp74->setRequires([ + 'ourcustom/php' => new Link('ourcustom/ext-foobar', 'ourcustom/PHP', new MultiConstraint([ $this->getVersionConstraint('>=', '7.4.0'), $this->getVersionConstraint('<', '7.5.0'), - )), Link::TYPE_REQUIRE), - )); - $extForPhp80->setRequires(array( - 'ourcustom/php' => new Link('ourcustom/ext-foobar', 'ourcustom/PHP', new MultiConstraint(array( + ]), Link::TYPE_REQUIRE), + ]); + $extForPhp80->setRequires([ + 'ourcustom/php' => new Link('ourcustom/ext-foobar', 'ourcustom/PHP', new MultiConstraint([ $this->getVersionConstraint('>=', '8.0.0'), $this->getVersionConstraint('<', '8.1.0'), - )), Link::TYPE_REQUIRE), - )); + ]), Link::TYPE_REQUIRE), + ]); $this->reposComplete(); $this->request->requireName('ourcustom/PHP'); $this->request->requireName('ourcustom/ext-foobar'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $php80), - array('job' => 'install', 'package' => $extForPhp80), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $php80], + ['job' => 'install', 'package' => $extForPhp80], + ]); // now we flip the requirements around: we request "ext-foobar" before "php" // because the ext-foobar package that requires php74 comes first in the repo, and the one that requires php80 second, the solver will pick the one for php74, and then, as it is a dependency, also php74 @@ -246,10 +246,10 @@ class SolverTest extends TestCase $this->request->requireName('ourcustom/ext-foobar'); $this->request->requireName('ourcustom/PHP'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $php74), - array('job' => 'install', 'package' => $extForPhp74), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $php74], + ['job' => 'install', 'package' => $extForPhp74], + ]); } /** @@ -264,38 +264,38 @@ class SolverTest extends TestCase $this->repo->addPackage($extForPhp80 = $this->getPackage('ourcustom/ext-foobar', '1.0')); // note we are inserting this one into the repo first, unlike in the previous test $this->repo->addPackage($extForPhp74 = $this->getPackage('ourcustom/ext-foobar', '1.0')); - $extForPhp80->setRequires(array( - 'ourcustom/php' => new Link('ourcustom/ext-foobar', 'ourcustom/PHP', new MultiConstraint(array( + $extForPhp80->setRequires([ + 'ourcustom/php' => new Link('ourcustom/ext-foobar', 'ourcustom/PHP', new MultiConstraint([ $this->getVersionConstraint('>=', '8.0.0'), $this->getVersionConstraint('<', '8.1.0'), - )), Link::TYPE_REQUIRE), - )); - $extForPhp74->setRequires(array( - 'ourcustom/php' => new Link('ourcustom/ext-foobar', 'ourcustom/PHP', new MultiConstraint(array( + ]), Link::TYPE_REQUIRE), + ]); + $extForPhp74->setRequires([ + 'ourcustom/php' => new Link('ourcustom/ext-foobar', 'ourcustom/PHP', new MultiConstraint([ $this->getVersionConstraint('>=', '7.4.0'), $this->getVersionConstraint('<', '7.5.0'), - )), Link::TYPE_REQUIRE), - )); + ]), Link::TYPE_REQUIRE), + ]); $this->reposComplete(); $this->request->requireName('ourcustom/PHP'); $this->request->requireName('ourcustom/ext-foobar'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $php80), - array('job' => 'install', 'package' => $extForPhp80), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $php80], + ['job' => 'install', 'package' => $extForPhp80], + ]); // unlike in the previous test, the order of requirements no longer matters now $this->request = new Request($this->repoLocked); $this->request->requireName('ourcustom/ext-foobar'); $this->request->requireName('ourcustom/PHP'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $php80), - array('job' => 'install', 'package' => $extForPhp80), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $php80], + ['job' => 'install', 'package' => $extForPhp80], + ]); } public function testSolverFixLocked(): void @@ -305,7 +305,7 @@ class SolverTest extends TestCase $this->request->fixPackage($packageA); - $this->checkSolverResult(array()); + $this->checkSolverResult([]); } public function testSolverFixLockedWithAlternative(): void @@ -316,7 +316,7 @@ class SolverTest extends TestCase $this->request->fixPackage($packageA); - $this->checkSolverResult(array()); + $this->checkSolverResult([]); } public function testSolverUpdateDoesOnlyUpdate(): void @@ -326,14 +326,14 @@ class SolverTest extends TestCase $this->repo->addPackage($newPackageB = $this->getPackage('B', '1.1')); $this->reposComplete(); - $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0.0.0'), Link::TYPE_REQUIRE))); + $packageA->setRequires(['b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0.0.0'), Link::TYPE_REQUIRE)]); $this->request->fixPackage($packageA); $this->request->requireName('B', $this->getVersionConstraint('=', '1.1.0.0')); - $this->checkSolverResult(array( - array('job' => 'update', 'from' => $packageB, 'to' => $newPackageB), - )); + $this->checkSolverResult([ + ['job' => 'update', 'from' => $packageB, 'to' => $newPackageB], + ]); } public function testSolverUpdateSingle(): void @@ -344,9 +344,9 @@ class SolverTest extends TestCase $this->request->requireName('A'); - $this->checkSolverResult(array( - array('job' => 'update', 'from' => $packageA, 'to' => $newPackageA), - )); + $this->checkSolverResult([ + ['job' => 'update', 'from' => $packageA, 'to' => $newPackageA], + ]); } public function testSolverUpdateAll(): void @@ -356,17 +356,17 @@ class SolverTest extends TestCase $this->repo->addPackage($newPackageA = $this->getPackage('A', '1.1')); $this->repo->addPackage($newPackageB = $this->getPackage('B', '1.1')); - $packageA->setRequires(array('b' => new Link('A', 'B', new MatchAllConstraint(), Link::TYPE_REQUIRE))); - $newPackageA->setRequires(array('b' => new Link('A', 'B', new MatchAllConstraint(), Link::TYPE_REQUIRE))); + $packageA->setRequires(['b' => new Link('A', 'B', new MatchAllConstraint(), Link::TYPE_REQUIRE)]); + $newPackageA->setRequires(['b' => new Link('A', 'B', new MatchAllConstraint(), Link::TYPE_REQUIRE)]); $this->reposComplete(); $this->request->requireName('A'); - $this->checkSolverResult(array( - array('job' => 'update', 'from' => $packageB, 'to' => $newPackageB), - array('job' => 'update', 'from' => $packageA, 'to' => $newPackageA), - )); + $this->checkSolverResult([ + ['job' => 'update', 'from' => $packageB, 'to' => $newPackageB], + ['job' => 'update', 'from' => $packageA, 'to' => $newPackageA], + ]); } public function testSolverUpdateCurrent(): void @@ -377,7 +377,7 @@ class SolverTest extends TestCase $this->request->requireName('A'); - $this->checkSolverResult(array()); + $this->checkSolverResult([]); } public function testSolverUpdateOnlyUpdatesSelectedPackage(): void @@ -392,9 +392,9 @@ class SolverTest extends TestCase $this->request->requireName('A'); $this->request->fixPackage($packageB); - $this->checkSolverResult(array( - array('job' => 'update', 'from' => $packageA, 'to' => $packageAnewer), - )); + $this->checkSolverResult([ + ['job' => 'update', 'from' => $packageA, 'to' => $packageAnewer], + ]); } public function testSolverUpdateConstrained(): void @@ -406,11 +406,11 @@ class SolverTest extends TestCase $this->request->requireName('A', $this->getVersionConstraint('<', '2.0.0.0')); - $this->checkSolverResult(array(array( + $this->checkSolverResult([[ 'job' => 'update', 'from' => $packageA, 'to' => $newPackageA, - ))); + ]]); } public function testSolverUpdateFullyConstrained(): void @@ -422,11 +422,11 @@ class SolverTest extends TestCase $this->request->requireName('A', $this->getVersionConstraint('<', '2.0.0.0')); - $this->checkSolverResult(array(array( + $this->checkSolverResult([[ 'job' => 'update', 'from' => $packageA, 'to' => $newPackageA, - ))); + ]]); } public function testSolverUpdateFullyConstrainedPrunesInstalledPackages(): void @@ -439,17 +439,17 @@ class SolverTest extends TestCase $this->request->requireName('A', $this->getVersionConstraint('<', '2.0.0.0')); - $this->checkSolverResult(array( - array( + $this->checkSolverResult([ + [ 'job' => 'remove', 'package' => $packageB, - ), - array( + ], + [ 'job' => 'update', 'from' => $packageA, 'to' => $newPackageA, - ), - )); + ], + ]); } public function testSolverAllJobs(): void @@ -462,19 +462,19 @@ class SolverTest extends TestCase $this->repo->addPackage($newPackageB = $this->getPackage('B', '1.1')); $this->repo->addPackage($packageC = $this->getPackage('C', '1.1')); $this->repo->addPackage($this->getPackage('D', '1.0')); - $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('<', '1.1'), Link::TYPE_REQUIRE))); + $packageA->setRequires(['b' => new Link('A', 'B', $this->getVersionConstraint('<', '1.1'), Link::TYPE_REQUIRE)]); $this->reposComplete(); $this->request->requireName('A'); $this->request->requireName('C'); - $this->checkSolverResult(array( - array('job' => 'remove', 'package' => $packageD), - array('job' => 'install', 'package' => $packageB), - array('job' => 'install', 'package' => $packageA), - array('job' => 'update', 'from' => $oldPackageC, 'to' => $packageC), - )); + $this->checkSolverResult([ + ['job' => 'remove', 'package' => $packageD], + ['job' => 'install', 'package' => $packageB], + ['job' => 'install', 'package' => $packageA], + ['job' => 'update', 'from' => $oldPackageC, 'to' => $packageC], + ]); } public function testSolverThreeAlternativeRequireAndConflict(): void @@ -483,33 +483,33 @@ class SolverTest extends TestCase $this->repo->addPackage($middlePackageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($newPackageB = $this->getPackage('B', '1.1')); $this->repo->addPackage($oldPackageB = $this->getPackage('B', '0.9')); - $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('<', '1.1'), Link::TYPE_REQUIRE))); - $packageA->setConflicts(array('b' => new Link('A', 'B', $this->getVersionConstraint('<', '1.0'), Link::TYPE_CONFLICT))); + $packageA->setRequires(['b' => new Link('A', 'B', $this->getVersionConstraint('<', '1.1'), Link::TYPE_REQUIRE)]); + $packageA->setConflicts(['b' => new Link('A', 'B', $this->getVersionConstraint('<', '1.0'), Link::TYPE_CONFLICT)]); $this->reposComplete(); $this->request->requireName('A'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $middlePackageB), - array('job' => 'install', 'package' => $packageA), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $middlePackageB], + ['job' => 'install', 'package' => $packageA], + ]); } public function testSolverObsolete(): void { $this->repoLocked->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); - $packageB->setReplaces(array('a' => new Link('B', 'A', new MatchAllConstraint()))); + $packageB->setReplaces(['a' => new Link('B', 'A', new MatchAllConstraint())]); $this->reposComplete(); $this->request->requireName('B'); - $this->checkSolverResult(array( - array('job' => 'remove', 'package' => $packageA), - array('job' => 'install', 'package' => $packageB), - )); + $this->checkSolverResult([ + ['job' => 'remove', 'package' => $packageA], + ['job' => 'install', 'package' => $packageB], + ]); } public function testInstallOneOfTwoAlternatives(): void @@ -521,17 +521,17 @@ class SolverTest extends TestCase $this->request->requireName('A'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $packageA), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $packageA], + ]); } public function testInstallProvider(): void { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageQ = $this->getPackage('Q', '1.0')); - $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE))); - $packageQ->setProvides(array('b' => new Link('Q', 'B', $this->getVersionConstraint('=', '1.0'), Link::TYPE_PROVIDE))); + $packageA->setRequires(['b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE)]); + $packageQ->setProvides(['b' => new Link('Q', 'B', $this->getVersionConstraint('=', '1.0'), Link::TYPE_PROVIDE)]); $this->reposComplete(); @@ -548,25 +548,25 @@ class SolverTest extends TestCase $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageQ = $this->getPackage('Q', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); - $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE))); - $packageQ->setReplaces(array('b' => new Link('Q', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REPLACE))); + $packageA->setRequires(['b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE)]); + $packageQ->setReplaces(['b' => new Link('Q', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REPLACE)]); $this->reposComplete(); $this->request->requireName('A'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $packageB), - array('job' => 'install', 'package' => $packageA), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $packageB], + ['job' => 'install', 'package' => $packageA], + ]); } public function testNoInstallReplacerOfMissingPackage(): void { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageQ = $this->getPackage('Q', '1.0')); - $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE))); - $packageQ->setReplaces(array('b' => new Link('Q', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REPLACE))); + $packageA->setRequires(['b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE)]); + $packageQ->setReplaces(['b' => new Link('Q', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REPLACE)]); $this->reposComplete(); @@ -582,56 +582,56 @@ class SolverTest extends TestCase $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageQ = $this->getPackage('Q', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); - $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE))); - $packageQ->setReplaces(array('b' => new Link('Q', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REPLACE))); + $packageA->setRequires(['b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE)]); + $packageQ->setReplaces(['b' => new Link('Q', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REPLACE)]); $this->reposComplete(); $this->request->requireName('A'); $this->request->requireName('Q'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $packageQ), - array('job' => 'install', 'package' => $packageA), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $packageQ], + ['job' => 'install', 'package' => $packageA], + ]); } public function testPickOlderIfNewerConflicts(): void { $this->repo->addPackage($packageX = $this->getPackage('X', '1.0')); - $packageX->setRequires(array( + $packageX->setRequires([ 'a' => new Link('X', 'A', $this->getVersionConstraint('>=', '2.0.0.0'), Link::TYPE_REQUIRE), 'b' => new Link('X', 'B', $this->getVersionConstraint('>=', '2.0.0.0'), Link::TYPE_REQUIRE), - )); + ]); $this->repo->addPackage($packageA = $this->getPackage('A', '2.0.0')); $this->repo->addPackage($newPackageA = $this->getPackage('A', '2.1.0')); $this->repo->addPackage($newPackageB = $this->getPackage('B', '2.1.0')); - $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '2.0.0.0'), Link::TYPE_REQUIRE))); + $packageA->setRequires(['b' => new Link('A', 'B', $this->getVersionConstraint('>=', '2.0.0.0'), Link::TYPE_REQUIRE)]); // new package A depends on version of package B that does not exist // => new package A is not installable - $newPackageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '2.2.0.0'), Link::TYPE_REQUIRE))); + $newPackageA->setRequires(['b' => new Link('A', 'B', $this->getVersionConstraint('>=', '2.2.0.0'), Link::TYPE_REQUIRE)]); // add a package S replacing both A and B, so that S and B or S and A cannot be simultaneously installed // but an alternative option for A and B both exists // this creates a more difficult so solve conflict $this->repo->addPackage($packageS = $this->getPackage('S', '2.0.0')); - $packageS->setReplaces(array( + $packageS->setReplaces([ 'a' => new Link('S', 'A', $this->getVersionConstraint('>=', '2.0.0.0'), Link::TYPE_REPLACE), 'b' => new Link('S', 'B', $this->getVersionConstraint('>=', '2.0.0.0'), Link::TYPE_REPLACE), - )); + ]); $this->reposComplete(); $this->request->requireName('X'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $newPackageB), - array('job' => 'install', 'package' => $packageA), - array('job' => 'install', 'package' => $packageX), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $newPackageB], + ['job' => 'install', 'package' => $packageA], + ['job' => 'install', 'package' => $packageX], + ]); } public function testInstallCircularRequire(): void @@ -639,17 +639,17 @@ class SolverTest extends TestCase $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB1 = $this->getPackage('B', '0.9')); $this->repo->addPackage($packageB2 = $this->getPackage('B', '1.1')); - $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE))); - $packageB2->setRequires(array('a' => new Link('B', 'A', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE))); + $packageA->setRequires(['b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE)]); + $packageB2->setRequires(['a' => new Link('B', 'A', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE)]); $this->reposComplete(); $this->request->requireName('A'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $packageB2), - array('job' => 'install', 'package' => $packageA), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $packageB2], + ['job' => 'install', 'package' => $packageA], + ]); } public function testInstallAlternativeWithCircularRequire(): void @@ -658,24 +658,24 @@ class SolverTest extends TestCase $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($packageC = $this->getPackage('C', '1.0')); $this->repo->addPackage($packageD = $this->getPackage('D', '1.0')); - $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE))); - $packageB->setRequires(array('virtual' => new Link('B', 'Virtual', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE))); - $packageC->setProvides(array('virtual' => new Link('C', 'Virtual', $this->getVersionConstraint('==', '1.0'), Link::TYPE_PROVIDE))); - $packageD->setProvides(array('virtual' => new Link('D', 'Virtual', $this->getVersionConstraint('==', '1.0'), Link::TYPE_PROVIDE))); + $packageA->setRequires(['b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE)]); + $packageB->setRequires(['virtual' => new Link('B', 'Virtual', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE)]); + $packageC->setProvides(['virtual' => new Link('C', 'Virtual', $this->getVersionConstraint('==', '1.0'), Link::TYPE_PROVIDE)]); + $packageD->setProvides(['virtual' => new Link('D', 'Virtual', $this->getVersionConstraint('==', '1.0'), Link::TYPE_PROVIDE)]); - $packageC->setRequires(array('a' => new Link('C', 'A', $this->getVersionConstraint('==', '1.0'), Link::TYPE_REQUIRE))); - $packageD->setRequires(array('a' => new Link('D', 'A', $this->getVersionConstraint('==', '1.0'), Link::TYPE_REQUIRE))); + $packageC->setRequires(['a' => new Link('C', 'A', $this->getVersionConstraint('==', '1.0'), Link::TYPE_REQUIRE)]); + $packageD->setRequires(['a' => new Link('D', 'A', $this->getVersionConstraint('==', '1.0'), Link::TYPE_REQUIRE)]); $this->reposComplete(); $this->request->requireName('A'); $this->request->requireName('C'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $packageB), - array('job' => 'install', 'package' => $packageA), - array('job' => 'install', 'package' => $packageC), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $packageB], + ['job' => 'install', 'package' => $packageA], + ['job' => 'install', 'package' => $packageC], + ]); } /** @@ -689,30 +689,30 @@ class SolverTest extends TestCase $this->repo->addPackage($packageD = $this->getPackage('D', '1.0')); $this->repo->addPackage($packageD2 = $this->getPackage('D', '1.1')); - $packageA->setRequires(array( + $packageA->setRequires([ 'b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE), 'c' => new Link('A', 'C', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE), - )); + ]); - $packageD->setReplaces(array( + $packageD->setReplaces([ 'b' => new Link('D', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REPLACE), 'c' => new Link('D', 'C', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REPLACE), - )); + ]); - $packageD2->setReplaces(array( + $packageD2->setReplaces([ 'b' => new Link('D', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REPLACE), 'c' => new Link('D', 'C', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REPLACE), - )); + ]); $this->reposComplete(); $this->request->requireName('A'); $this->request->requireName('D'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $packageD2), - array('job' => 'install', 'package' => $packageA), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $packageD2], + ['job' => 'install', 'package' => $packageA], + ]); } public function testIssue265(): void @@ -725,20 +725,20 @@ class SolverTest extends TestCase $this->repo->addPackage($packageC = $this->getPackage('C', '2.0-dev')); $this->repo->addPackage($packageD = $this->getPackage('D', '2.0.9')); - $packageC->setRequires(array( + $packageC->setRequires([ 'a' => new Link('C', 'A', $this->getVersionConstraint('>=', '2.0'), Link::TYPE_REQUIRE), 'd' => new Link('C', 'D', $this->getVersionConstraint('>=', '2.0'), Link::TYPE_REQUIRE), - )); + ]); - $packageD->setRequires(array( + $packageD->setRequires([ 'a' => new Link('D', 'A', $this->getVersionConstraint('>=', '2.1'), Link::TYPE_REQUIRE), 'b' => new Link('D', 'B', $this->getVersionConstraint('>=', '2.0-dev'), Link::TYPE_REQUIRE), - )); + ]); - $packageB1->setRequires(array('a' => new Link('B', 'A', $this->getVersionConstraint('==', '2.1.0.0-dev'), Link::TYPE_REQUIRE))); - $packageB2->setRequires(array('a' => new Link('B', 'A', $this->getVersionConstraint('==', '2.1.0.0-dev'), Link::TYPE_REQUIRE))); + $packageB1->setRequires(['a' => new Link('B', 'A', $this->getVersionConstraint('==', '2.1.0.0-dev'), Link::TYPE_REQUIRE)]); + $packageB2->setRequires(['a' => new Link('B', 'A', $this->getVersionConstraint('==', '2.1.0.0-dev'), Link::TYPE_REQUIRE)]); - $packageB2->setReplaces(array('d' => new Link('B', 'D', $this->getVersionConstraint('==', '2.0.9.0'), Link::TYPE_REPLACE))); + $packageB2->setReplaces(['d' => new Link('B', 'D', $this->getVersionConstraint('==', '2.0.9.0'), Link::TYPE_REPLACE)]); $this->reposComplete(); @@ -754,9 +754,9 @@ class SolverTest extends TestCase { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); - $packageA->setConflicts(array( + $packageA->setConflicts([ 'b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_CONFLICT), - )); + ]); $this->reposComplete(); @@ -788,9 +788,9 @@ class SolverTest extends TestCase $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); - $packageA->setRequires(array( + $packageA->setRequires([ 'b' => new Link('A', 'B', $this->getVersionConstraint('>=', '2.0'), Link::TYPE_REQUIRE), - )); + ]); $this->reposComplete(); @@ -821,18 +821,18 @@ class SolverTest extends TestCase $this->repo->addPackage($packageC = $this->getPackage('C', '1.0')); $this->repo->addPackage($packageD = $this->getPackage('D', '1.0')); - $packageA->setRequires(array( + $packageA->setRequires([ 'b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE), - )); - $packageB->setRequires(array( + ]); + $packageB->setRequires([ 'c' => new Link('B', 'C', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE), - )); - $packageC->setRequires(array( + ]); + $packageC->setRequires([ 'd' => new Link('C', 'D', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE), - )); - $packageD->setRequires(array( + ]); + $packageD->setRequires([ 'b' => new Link('D', 'B', $this->getVersionConstraint('<', '1.0'), Link::TYPE_REQUIRE), - )); + ]); $this->reposComplete(); @@ -869,23 +869,23 @@ class SolverTest extends TestCase $this->repo->addPackage($packageSymfony = $this->getPackage('symfony/symfony', '2.0')); $this->repo->addPackage($packageTwigBridge = $this->getPackage('symfony/twig-bridge', '2.0')); - $packageTwigBridge->setRequires(array( + $packageTwigBridge->setRequires([ 'twig/twig' => new Link('symfony/twig-bridge', 'twig/twig', $this->getVersionConstraint('<', '2.0'), Link::TYPE_REQUIRE), - )); + ]); - $packageSymfony->setReplaces(array( + $packageSymfony->setReplaces([ 'symfony/twig-bridge' => new Link('symfony/symfony', 'symfony/twig-bridge', $this->getVersionConstraint('==', '2.0'), Link::TYPE_REPLACE), - )); + ]); $this->reposComplete(); $this->request->requireName('symfony/twig-bridge'); $this->request->requireName('twig/twig'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $packageTwig16), - array('job' => 'install', 'package' => $packageTwigBridge), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $packageTwig16], + ['job' => 'install', 'package' => $packageTwigBridge], + ]); } public function testInstallRecursiveAliasDependencies(): void @@ -894,12 +894,12 @@ class SolverTest extends TestCase $this->repo->addPackage($packageB = $this->getPackage('B', '2.0')); $this->repo->addPackage($packageA2 = $this->getPackage('A', '2.0')); - $packageA2->setRequires(array( + $packageA2->setRequires([ 'b' => new Link('A', 'B', $this->getVersionConstraint('==', '2.0'), Link::TYPE_REQUIRE, '== 2.0'), - )); - $packageB->setRequires(array( + ]); + $packageB->setRequires([ 'a' => new Link('B', 'A', $this->getVersionConstraint('>=', '2.0'), Link::TYPE_REQUIRE), - )); + ]); $this->repo->addPackage($packageA2Alias = $this->getAliasPackage($packageA2, '1.1')); @@ -907,11 +907,11 @@ class SolverTest extends TestCase $this->request->requireName('A', $this->getVersionConstraint('==', '1.1.0.0')); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $packageB), - array('job' => 'install', 'package' => $packageA2), - array('job' => 'markAliasInstalled', 'package' => $packageA2Alias), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $packageB], + ['job' => 'install', 'package' => $packageA2], + ['job' => 'markAliasInstalled', 'package' => $packageA2Alias], + ]); } public function testInstallDevAlias(): void @@ -919,9 +919,9 @@ class SolverTest extends TestCase $this->repo->addPackage($packageA = $this->getPackage('A', '2.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); - $packageB->setRequires(array( + $packageB->setRequires([ 'a' => new Link('B', 'A', $this->getVersionConstraint('<', '2.0'), Link::TYPE_REQUIRE), - )); + ]); $this->repo->addPackage($packageAAlias = $this->getAliasPackage($packageA, '1.1')); @@ -930,11 +930,11 @@ class SolverTest extends TestCase $this->request->requireName('A', $this->getVersionConstraint('==', '2.0')); $this->request->requireName('B'); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $packageA), - array('job' => 'markAliasInstalled', 'package' => $packageAAlias), - array('job' => 'install', 'package' => $packageB), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $packageA], + ['job' => 'markAliasInstalled', 'package' => $packageAAlias], + ['job' => 'install', 'package' => $packageB], + ]); } public function testInstallRootAliasesIfAliasOfIsInstalled(): void @@ -957,14 +957,14 @@ class SolverTest extends TestCase $this->request->requireName('B', $this->getVersionConstraint('==', '1.0')); $this->request->requireName('C', $this->getVersionConstraint('==', '1.0')); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $packageA), - array('job' => 'markAliasInstalled', 'package' => $packageAAlias), - array('job' => 'install', 'package' => $packageB), - array('job' => 'markAliasInstalled', 'package' => $packageBAlias), - array('job' => 'install', 'package' => $packageC), - array('job' => 'markAliasInstalled', 'package' => $packageCAlias), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $packageA], + ['job' => 'markAliasInstalled', 'package' => $packageAAlias], + ['job' => 'install', 'package' => $packageB], + ['job' => 'markAliasInstalled', 'package' => $packageBAlias], + ['job' => 'install', 'package' => $packageC], + ['job' => 'markAliasInstalled', 'package' => $packageCAlias], + ]); } /** @@ -990,31 +990,31 @@ class SolverTest extends TestCase $this->repo->addPackage($packageG2 = $this->getPackage('G', '2.0')); $this->repo->addPackage($packageG3 = $this->getPackage('G', '3.0')); - $packageA->setRequires(array( + $packageA->setRequires([ 'b' => new Link('A', 'B', $this->getVersionConstraint('==', '1.0'), Link::TYPE_REQUIRE), 'c' => new Link('A', 'C', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE), 'd' => new Link('A', 'D', $this->getVersionConstraint('==', '1.0'), Link::TYPE_REQUIRE), - )); + ]); - $packageB->setRequires(array( + $packageB->setRequires([ 'e' => new Link('B', 'E', $this->getVersionConstraint('==', '1.0'), Link::TYPE_REQUIRE), - )); + ]); - $packageC1->setRequires(array( + $packageC1->setRequires([ 'f' => new Link('C', 'F', $this->getVersionConstraint('==', '1.0'), Link::TYPE_REQUIRE), - )); - $packageC2->setRequires(array( + ]); + $packageC2->setRequires([ 'f' => new Link('C', 'F', $this->getVersionConstraint('==', '1.0'), Link::TYPE_REQUIRE), 'g' => new Link('C', 'G', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE), - )); + ]); - $packageD->setRequires(array( + $packageD->setRequires([ 'f' => new Link('D', 'F', $this->getVersionConstraint('>=', '1.0'), Link::TYPE_REQUIRE), - )); + ]); - $packageE->setRequires(array( + $packageE->setRequires([ 'g' => new Link('E', 'G', $this->getVersionConstraint('<=', '2.0'), Link::TYPE_REQUIRE), - )); + ]); $this->reposComplete(); @@ -1025,33 +1025,27 @@ class SolverTest extends TestCase // check correct setup for assertion later $this->assertFalse($this->solver->testFlagLearnedPositiveLiteral); - $this->checkSolverResult(array( - array('job' => 'install', 'package' => $packageF1), - array('job' => 'install', 'package' => $packageD), - array('job' => 'install', 'package' => $packageG2), - array('job' => 'install', 'package' => $packageC2), - array('job' => 'install', 'package' => $packageE), - array('job' => 'install', 'package' => $packageB), - array('job' => 'install', 'package' => $packageA), - )); + $this->checkSolverResult([ + ['job' => 'install', 'package' => $packageF1], + ['job' => 'install', 'package' => $packageD], + ['job' => 'install', 'package' => $packageG2], + ['job' => 'install', 'package' => $packageC2], + ['job' => 'install', 'package' => $packageE], + ['job' => 'install', 'package' => $packageB], + ['job' => 'install', 'package' => $packageA], + ]); // verify that the code path leading to a negative literal resulting in a positive learned literal is actually // executed $this->assertTrue($this->solver->testFlagLearnedPositiveLiteral); } - /** - * @return void - */ protected function reposComplete(): void { $this->repoSet->addRepository($this->repo); $this->repoSet->addRepository($this->repoLocked); } - /** - * @return void - */ protected function createSolver(): void { $io = new NullIO(); @@ -1061,42 +1055,41 @@ class SolverTest extends TestCase /** * @param array $expected - * @return void */ protected function checkSolverResult(array $expected): void { $this->createSolver(); $transaction = $this->solver->solve($this->request); - $result = array(); + $result = []; foreach ($transaction->getOperations() as $operation) { if ($operation instanceof UpdateOperation) { - $result[] = array( + $result[] = [ 'job' => 'update', 'from' => $operation->getInitialPackage(), 'to' => $operation->getTargetPackage(), - ); + ]; } elseif ($operation instanceof MarkAliasInstalledOperation || $operation instanceof MarkAliasUninstalledOperation) { - $result[] = array( + $result[] = [ 'job' => $operation->getOperationType(), 'package' => $operation->getPackage(), - ); + ]; } elseif ($operation instanceof UninstallOperation || $operation instanceof InstallOperation) { $job = ('uninstall' === $operation->getOperationType() ? 'remove' : 'install'); - $result[] = array( + $result[] = [ 'job' => $job, 'package' => $operation->getPackage(), - ); + ]; } else { throw new \LogicException('Unexpected operation: '.get_class($operation)); } } - $expectedReadable = array(); + $expectedReadable = []; foreach ($expected as $op) { $expectedReadable[] = array_map('strval', $op); } - $resultReadable = array(); + $resultReadable = []; foreach ($result as $op) { $resultReadable[] = array_map('strval', $op); } diff --git a/tests/Composer/Test/DependencyResolver/TransactionTest.php b/tests/Composer/Test/DependencyResolver/TransactionTest.php index 0cb73d3fc..4f274d25d 100644 --- a/tests/Composer/Test/DependencyResolver/TransactionTest.php +++ b/tests/Composer/Test/DependencyResolver/TransactionTest.php @@ -30,15 +30,15 @@ class TransactionTest extends TestCase public function testTransactionGenerationAndSorting(): void { - $presentPackages = array( + $presentPackages = [ $packageA = $this->getPackage('a/a', 'dev-master'), $packageAalias = $this->getAliasPackage($packageA, '1.0.x-dev'), $packageB = $this->getPackage('b/b', '1.0.0'), $packageE = $this->getPackage('e/e', 'dev-foo'), $packageEalias = $this->getAliasPackage($packageE, '1.0.x-dev'), $packageC = $this->getPackage('c/c', '1.0.0'), - ); - $resultPackages = array( + ]; + $resultPackages = [ $packageA, $packageAalias, $packageBnew = $this->getPackage('b/b', '2.1.3'), @@ -54,71 +54,69 @@ class TransactionTest extends TestCase $dlModifyingPlugin = $this->getPackage('x/downloads-modifying', '1.0.0'), $dlModifyingPlugin2Dep = $this->getPackage('x/downloads-modifying2-dep', '1.0.0'), $dlModifyingPlugin2 = $this->getPackage('x/downloads-modifying2', '1.0.0'), - ); + ]; $plugin->setType('composer-installer'); - foreach (array($plugin2, $dlModifyingPlugin, $dlModifyingPlugin2) as $pluginPackage) { + foreach ([$plugin2, $dlModifyingPlugin, $dlModifyingPlugin2] as $pluginPackage) { $pluginPackage->setType('composer-plugin'); } - $plugin2->setRequires(array( + $plugin2->setRequires([ 'x/plugin2-dep' => new Link('x/plugin2', 'x/plugin2-dep', $this->getVersionConstraint('=', '1.0.0'), Link::TYPE_REQUIRE), - )); - $dlModifyingPlugin2->setRequires(array( + ]); + $dlModifyingPlugin2->setRequires([ 'x/downloads-modifying2-dep' => new Link('x/downloads-modifying2', 'x/downloads-modifying2-dep', $this->getVersionConstraint('=', '1.0.0'), Link::TYPE_REQUIRE), - )); - $dlModifyingPlugin->setExtra(array('plugin-modifies-downloads' => true)); - $dlModifyingPlugin2->setExtra(array('plugin-modifies-downloads' => true)); + ]); + $dlModifyingPlugin->setExtra(['plugin-modifies-downloads' => true]); + $dlModifyingPlugin2->setExtra(['plugin-modifies-downloads' => true]); - $packageD->setRequires(array( + $packageD->setRequires([ 'f/f' => new Link('d/d', 'f/f', $this->getVersionConstraint('>', '0.2'), Link::TYPE_REQUIRE), 'g/provider' => new Link('d/d', 'g/provider', $this->getVersionConstraint('>', '0.2'), Link::TYPE_REQUIRE), - )); - $packageG->setProvides(array('g/provider' => new Link('g/g', 'g/provider', $this->getVersionConstraint('==', '1.0.0'), Link::TYPE_PROVIDE))); + ]); + $packageG->setProvides(['g/provider' => new Link('g/g', 'g/provider', $this->getVersionConstraint('==', '1.0.0'), Link::TYPE_PROVIDE)]); - $expectedOperations = array( - array('job' => 'uninstall', 'package' => $packageC), - array('job' => 'uninstall', 'package' => $packageE), - array('job' => 'markAliasUninstalled', 'package' => $packageEalias), - array('job' => 'install', 'package' => $dlModifyingPlugin), - array('job' => 'install', 'package' => $dlModifyingPlugin2Dep), - array('job' => 'install', 'package' => $dlModifyingPlugin2), - array('job' => 'install', 'package' => $plugin), - array('job' => 'install', 'package' => $plugin2Dep), - array('job' => 'install', 'package' => $plugin2), - array('job' => 'install', 'package' => $packageA0first), - array('job' => 'update', 'from' => $packageB, 'to' => $packageBnew), - array('job' => 'install', 'package' => $packageG), - array('job' => 'install', 'package' => $packageF), - array('job' => 'markAliasInstalled', 'package' => $packageFalias2), - array('job' => 'markAliasInstalled', 'package' => $packageFalias1), - array('job' => 'install', 'package' => $packageD), - ); + $expectedOperations = [ + ['job' => 'uninstall', 'package' => $packageC], + ['job' => 'uninstall', 'package' => $packageE], + ['job' => 'markAliasUninstalled', 'package' => $packageEalias], + ['job' => 'install', 'package' => $dlModifyingPlugin], + ['job' => 'install', 'package' => $dlModifyingPlugin2Dep], + ['job' => 'install', 'package' => $dlModifyingPlugin2], + ['job' => 'install', 'package' => $plugin], + ['job' => 'install', 'package' => $plugin2Dep], + ['job' => 'install', 'package' => $plugin2], + ['job' => 'install', 'package' => $packageA0first], + ['job' => 'update', 'from' => $packageB, 'to' => $packageBnew], + ['job' => 'install', 'package' => $packageG], + ['job' => 'install', 'package' => $packageF], + ['job' => 'markAliasInstalled', 'package' => $packageFalias2], + ['job' => 'markAliasInstalled', 'package' => $packageFalias1], + ['job' => 'install', 'package' => $packageD], + ]; $transaction = new Transaction($presentPackages, $resultPackages); $this->checkTransactionOperations($transaction, $expectedOperations); } /** - * @param \Composer\DependencyResolver\Transaction $transaction * @param array $expected - * @return void */ protected function checkTransactionOperations(Transaction $transaction, array $expected): void { - $result = array(); + $result = []; foreach ($transaction->getOperations() as $operation) { if ($operation instanceof UpdateOperation) { - $result[] = array( + $result[] = [ 'job' => 'update', 'from' => $operation->getInitialPackage(), 'to' => $operation->getTargetPackage(), - ); + ]; } elseif ($operation instanceof InstallOperation || $operation instanceof UninstallOperation || $operation instanceof MarkAliasInstalledOperation || $operation instanceof MarkAliasUninstalledOperation) { - $result[] = array( + $result[] = [ 'job' => $operation->getOperationType(), 'package' => $operation->getPackage(), - ); + ]; } else { throw new \UnexpectedValueException('Unknown operation type: '.get_class($operation)); } diff --git a/tests/Composer/Test/Downloader/ArchiveDownloaderTest.php b/tests/Composer/Test/Downloader/ArchiveDownloaderTest.php index c0d4d7ee7..69a68f7b6 100644 --- a/tests/Composer/Test/Downloader/ArchiveDownloaderTest.php +++ b/tests/Composer/Test/Downloader/ArchiveDownloaderTest.php @@ -91,7 +91,6 @@ class ArchiveDownloaderTest extends TestCase /** * @dataProvider provideUrls - * @param string $url */ public function testProcessUrlRewriteDist(string $url): void { @@ -117,20 +116,18 @@ class ArchiveDownloaderTest extends TestCase public function provideUrls(): array { - return array( - array('https://api.github.com/repos/composer/composer/zipball/master'), - array('https://api.github.com/repos/composer/composer/tarball/master'), - array('https://github.com/composer/composer/zipball/master'), - array('https://www.github.com/composer/composer/tarball/master'), - array('https://github.com/composer/composer/archive/master.zip'), - array('https://github.com/composer/composer/archive/master.tar.gz'), - ); + return [ + ['https://api.github.com/repos/composer/composer/zipball/master'], + ['https://api.github.com/repos/composer/composer/tarball/master'], + ['https://github.com/composer/composer/zipball/master'], + ['https://www.github.com/composer/composer/tarball/master'], + ['https://github.com/composer/composer/archive/master.zip'], + ['https://github.com/composer/composer/archive/master.tar.gz'], + ]; } /** * @dataProvider provideBitbucketUrls - * @param string $url - * @param string $extension */ public function testProcessUrlRewriteBitbucketDist(string $url, string $extension): void { @@ -156,11 +153,11 @@ class ArchiveDownloaderTest extends TestCase public function provideBitbucketUrls(): array { - return array( - array('https://bitbucket.org/davereid/drush-virtualhost/get/77ca490c26ac818e024d1138aa8bd3677d1ef21f', 'zip'), - array('https://bitbucket.org/davereid/drush-virtualhost/get/master', 'tar.gz'), - array('https://bitbucket.org/davereid/drush-virtualhost/get/v1.0', 'tar.bz2'), - ); + return [ + ['https://bitbucket.org/davereid/drush-virtualhost/get/77ca490c26ac818e024d1138aa8bd3677d1ef21f', 'zip'], + ['https://bitbucket.org/davereid/drush-virtualhost/get/master', 'tar.gz'], + ['https://bitbucket.org/davereid/drush-virtualhost/get/v1.0', 'tar.bz2'], + ]; } /** @@ -170,11 +167,11 @@ class ArchiveDownloaderTest extends TestCase { return $this->getMockForAbstractClass( 'Composer\Downloader\ArchiveDownloader', - array( + [ $io = $this->getMockBuilder('Composer\IO\IOInterface')->getMock(), $this->config = $this->getMockBuilder('Composer\Config')->getMock(), new \Composer\Util\HttpDownloader($io, $this->config), - ) + ] ); } } diff --git a/tests/Composer/Test/Downloader/DownloadManagerTest.php b/tests/Composer/Test/Downloader/DownloadManagerTest.php index 324fc9772..9717c3a7a 100644 --- a/tests/Composer/Test/Downloader/DownloadManagerTest.php +++ b/tests/Composer/Test/Downloader/DownloadManagerTest.php @@ -76,8 +76,8 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue('dist')); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloader')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloader']) ->getMock(); $manager @@ -108,8 +108,8 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue('source')); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloader')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloader']) ->getMock(); $manager @@ -142,8 +142,8 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue('source')); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloader')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloader']) ->getMock(); $manager @@ -174,8 +174,8 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue('dist')); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloader')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloader']) ->getMock(); $manager @@ -227,8 +227,8 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue(\React\Promise\resolve(null))); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) @@ -278,8 +278,8 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue(\React\Promise\resolve(null))); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->exactly(2)) @@ -336,8 +336,8 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue(\React\Promise\resolve(null))); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) @@ -373,8 +373,8 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue(\React\Promise\resolve(null))); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) @@ -403,8 +403,8 @@ class DownloadManagerTest extends TestCase ->with('source'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) @@ -440,8 +440,8 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue(\React\Promise\resolve(null))); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) @@ -478,8 +478,8 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue(\React\Promise\resolve(null))); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) @@ -516,8 +516,8 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue(\React\Promise\resolve(null))); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) @@ -640,10 +640,7 @@ class DownloadManagerTest extends TestCase /** * @dataProvider updatesProvider - * @param null|string $prevPkgSource - * @param null|bool $prevPkgIsDev * @param string[] $targetAvailable - * @param bool $targetIsDev * @param string[] $expected */ public function testGetAvailableSourcesUpdateSticksToSameSource(?string $prevPkgSource, ?bool $prevPkgIsDev, array $targetAvailable, bool $targetIsDev, array $expected): void @@ -678,25 +675,25 @@ class DownloadManagerTest extends TestCase public static function updatesProvider(): array { - return array( + return [ // prevPkg source, prevPkg isDev, pkg available, pkg isDev, expected // updates keep previous source as preference - array('source', false, array('source', 'dist'), false, array('source', 'dist')), - array('dist', false, array('source', 'dist'), false, array('dist', 'source')), + ['source', false, ['source', 'dist'], false, ['source', 'dist']], + ['dist', false, ['source', 'dist'], false, ['dist', 'source']], // updates do not keep previous source if target package does not have it - array('source', false, array('dist'), false, array('dist')), - array('dist', false, array('source'), false, array('source')), + ['source', false, ['dist'], false, ['dist']], + ['dist', false, ['source'], false, ['source']], // updates do not keep previous source if target is dev and prev wasn't dev and installed from dist - array('source', false, array('source', 'dist'), true, array('source', 'dist')), - array('dist', false, array('source', 'dist'), true, array('source', 'dist')), + ['source', false, ['source', 'dist'], true, ['source', 'dist']], + ['dist', false, ['source', 'dist'], true, ['source', 'dist']], // install picks the right default - array(null, null, array('source', 'dist'), true, array('source', 'dist')), - array(null, null, array('dist'), true, array('dist')), - array(null, null, array('source'), true, array('source')), - array(null, null, array('source', 'dist'), false, array('dist', 'source')), - array(null, null, array('dist'), false, array('dist')), - array(null, null, array('source'), false, array('source')), - ); + [null, null, ['source', 'dist'], true, ['source', 'dist']], + [null, null, ['dist'], true, ['dist']], + [null, null, ['source'], true, ['source']], + [null, null, ['source', 'dist'], false, ['dist', 'source']], + [null, null, ['dist'], false, ['dist']], + [null, null, ['source'], false, ['source']], + ]; } public function testUpdateMetapackage(): void @@ -705,8 +702,8 @@ class DownloadManagerTest extends TestCase $target = $this->createPackageMock(); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->exactly(2)) @@ -728,8 +725,8 @@ class DownloadManagerTest extends TestCase ->with($package, 'vendor/bundles/FOS/UserBundle'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) @@ -745,8 +742,8 @@ class DownloadManagerTest extends TestCase $package = $this->createPackageMock(); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) @@ -789,8 +786,8 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue(\React\Promise\resolve(null))); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) @@ -833,8 +830,8 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue(\React\Promise\resolve(null))); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) @@ -880,15 +877,15 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue(\React\Promise\resolve(null))); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForPackage') ->with($package) ->will($this->returnValue($downloader)); - $manager->setPreferences(array('foo/*' => 'source')); + $manager->setPreferences(['foo/*' => 'source']); $manager->download($package, 'target_dir'); } @@ -928,15 +925,15 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue(\React\Promise\resolve(null))); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForPackage') ->with($package) ->will($this->returnValue($downloader)); - $manager->setPreferences(array('foo/*' => 'source')); + $manager->setPreferences(['foo/*' => 'source']); $manager->download($package, 'target_dir'); } @@ -976,15 +973,15 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue(\React\Promise\resolve(null))); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForPackage') ->with($package) ->will($this->returnValue($downloader)); - $manager->setPreferences(array('foo/*' => 'auto')); + $manager->setPreferences(['foo/*' => 'auto']); $manager->download($package, 'target_dir'); } @@ -1024,15 +1021,15 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue(\React\Promise\resolve(null))); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForPackage') ->with($package) ->will($this->returnValue($downloader)); - $manager->setPreferences(array('foo/*' => 'auto')); + $manager->setPreferences(['foo/*' => 'auto']); $manager->download($package, 'target_dir'); } @@ -1068,15 +1065,15 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue(\React\Promise\resolve(null))); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForPackage') ->with($package) ->will($this->returnValue($downloader)); - $manager->setPreferences(array('foo/*' => 'source')); + $manager->setPreferences(['foo/*' => 'source']); $manager->download($package, 'target_dir'); } @@ -1112,15 +1109,15 @@ class DownloadManagerTest extends TestCase ->will($this->returnValue(\React\Promise\resolve(null))); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($this->io, false, $this->filesystem)) - ->onlyMethods(array('getDownloaderForPackage')) + ->setConstructorArgs([$this->io, false, $this->filesystem]) + ->onlyMethods(['getDownloaderForPackage']) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForPackage') ->with($package) ->will($this->returnValue($downloader)); - $manager->setPreferences(array('foo/*' => 'dist')); + $manager->setPreferences(['foo/*' => 'dist']); $manager->download($package, 'target_dir'); } diff --git a/tests/Composer/Test/Downloader/FileDownloaderTest.php b/tests/Composer/Test/Downloader/FileDownloaderTest.php index 2bbbdb103..ee08a33f2 100644 --- a/tests/Composer/Test/Downloader/FileDownloaderTest.php +++ b/tests/Composer/Test/Downloader/FileDownloaderTest.php @@ -38,9 +38,8 @@ class FileDownloaderTest extends TestCase * @param \Composer\Cache $cache * @param \Composer\Util\HttpDownloader&\PHPUnit\Framework\MockObject\MockObject $httpDownloader * @param \Composer\Util\Filesystem $filesystem - * @return \Composer\Downloader\FileDownloader */ - protected function getDownloader(\Composer\IO\IOInterface $io = null, ?Config $config = null, EventDispatcher $eventDispatcher = null, \Composer\Cache $cache = null, $httpDownloader = null, Filesystem $filesystem = null): FileDownloader + protected function getDownloader(?\Composer\IO\IOInterface $io = null, ?Config $config = null, ?EventDispatcher $eventDispatcher = null, ?\Composer\Cache $cache = null, $httpDownloader = null, ?Filesystem $filesystem = null): FileDownloader { $io = $io ?: $this->getMockBuilder('Composer\IO\IOInterface')->getMock(); $config = $config ?: $this->getConfig(); @@ -48,7 +47,7 @@ class FileDownloaderTest extends TestCase $httpDownloader ->expects($this->any()) ->method('addCopy') - ->will($this->returnValue(\React\Promise\resolve(new Response(array('url' => 'http://example.org/'), 200, array(), 'file~')))); + ->will($this->returnValue(\React\Promise\resolve(new Response(['url' => 'http://example.org/'], 200, [], 'file~')))); $this->httpDownloader = $httpDownloader; return new FileDownloader($io, $config, $httpDownloader, $eventDispatcher, $cache, $filesystem); @@ -109,7 +108,7 @@ class FileDownloaderTest extends TestCase $ioMock = $this->getMockBuilder('Composer\IO\IOInterface')->getMock(); $ioMock->expects($this->any()) ->method('write') - ->will($this->returnCallback(function ($messages, $newline = true) use ($path) { + ->will($this->returnCallback(static function ($messages, $newline = true) use ($path) { if (is_file($path.'/script.js')) { unlink($path.'/script.js'); } @@ -124,7 +123,7 @@ class FileDownloaderTest extends TestCase try { $loop = new Loop($this->httpDownloader); $promise = $downloader->download($package, $path); - $loop->wait(array($promise)); + $loop->wait([$promise]); $this->fail('Download was expected to throw'); } catch (\Exception $e) { @@ -166,7 +165,7 @@ class FileDownloaderTest extends TestCase $this->getMockBuilder('Composer\IO\IOInterface')->getMock(), $this->getProcessExecutorMock() ); - $dispatcher->addListener(PluginEvents::PRE_FILE_DOWNLOAD, function (PreFileDownloadEvent $event) use ($expectedUrl): void { + $dispatcher->addListener(PluginEvents::PRE_FILE_DOWNLOAD, static function (PreFileDownloadEvent $event) use ($expectedUrl): void { $event->setProcessedUrl($expectedUrl); }); @@ -198,7 +197,7 @@ class FileDownloaderTest extends TestCase $this->assertEquals($expectedUrl, $url, 'Failed assertion on $url argument of HttpDownloader::addCopy method:'); return \React\Promise\resolve( - new Response(array('url' => 'http://example.org/'), 200, array(), 'file~') + new Response(['url' => 'http://example.org/'], 200, [], 'file~') ); })); @@ -207,7 +206,7 @@ class FileDownloaderTest extends TestCase try { $loop = new Loop($this->httpDownloader); $promise = $downloader->download($package, $path); - $loop->wait(array($promise)); + $loop->wait([$promise]); $this->fail('Download was expected to throw'); } catch (\Exception $e) { @@ -250,7 +249,7 @@ class FileDownloaderTest extends TestCase $this->getMockBuilder('Composer\IO\IOInterface')->getMock(), $this->getProcessExecutorMock() ); - $dispatcher->addListener(PluginEvents::PRE_FILE_DOWNLOAD, function (PreFileDownloadEvent $event) use ($customCacheKey): void { + $dispatcher->addListener(PluginEvents::PRE_FILE_DOWNLOAD, static function (PreFileDownloadEvent $event) use ($customCacheKey): void { $event->setCustomCacheKey($customCacheKey); }); @@ -282,7 +281,7 @@ class FileDownloaderTest extends TestCase $this->assertEquals($expectedUrl, $url, 'Failed assertion on $url argument of HttpDownloader::addCopy method:'); return \React\Promise\resolve( - new Response(array('url' => 'http://example.org/'), 200, array(), 'file~') + new Response(['url' => 'http://example.org/'], 200, [], 'file~') ); })); @@ -291,7 +290,7 @@ class FileDownloaderTest extends TestCase try { $loop = new Loop($this->httpDownloader); $promise = $downloader->download($package, $path); - $loop->wait(array($promise)); + $loop->wait([$promise]); $this->fail('Download was expected to throw'); } catch (\Exception $e) { @@ -354,7 +353,7 @@ class FileDownloaderTest extends TestCase try { $loop = new Loop($this->httpDownloader); $promise = $downloader->download($package, $path); - $loop->wait(array($promise)); + $loop->wait([$promise]); $this->fail('Download was expected to throw'); } catch (\Exception $e) { @@ -403,7 +402,7 @@ class FileDownloaderTest extends TestCase $loop = new Loop($this->httpDownloader); $promise = $downloader->download($newPackage, $path, $oldPackage); - $loop->wait(array($promise)); + $loop->wait([$promise]); $downloader->update($oldPackage, $newPackage, $path); } diff --git a/tests/Composer/Test/Downloader/FossilDownloaderTest.php b/tests/Composer/Test/Downloader/FossilDownloaderTest.php index d6daa53bb..6e789c76b 100644 --- a/tests/Composer/Test/Downloader/FossilDownloaderTest.php +++ b/tests/Composer/Test/Downloader/FossilDownloaderTest.php @@ -40,9 +40,8 @@ class FossilDownloaderTest extends TestCase * @param \Composer\Config $config * @param \Composer\Test\Mock\ProcessExecutorMock $executor * @param \Composer\Util\Filesystem $filesystem - * @return FossilDownloader */ - protected function getDownloaderMock(\Composer\IO\IOInterface $io = null, \Composer\Config $config = null, \Composer\Test\Mock\ProcessExecutorMock $executor = null, Filesystem $filesystem = null): FossilDownloader + protected function getDownloaderMock(?\Composer\IO\IOInterface $io = null, ?\Composer\Config $config = null, ?\Composer\Test\Mock\ProcessExecutorMock $executor = null, ?Filesystem $filesystem = null): FossilDownloader { $io = $io ?: $this->getMockBuilder('Composer\IO\IOInterface')->getMock(); $config = $config ?: $this->getConfig(['secure-http' => false]); @@ -73,14 +72,14 @@ class FossilDownloaderTest extends TestCase ->will($this->returnValue('trunk')); $packageMock->expects($this->once()) ->method('getSourceUrls') - ->will($this->returnValue(array('http://fossil.kd2.org/kd2fw/'))); + ->will($this->returnValue(['http://fossil.kd2.org/kd2fw/'])); $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ $this->getCmd('fossil clone -- \'http://fossil.kd2.org/kd2fw/\' \''.$this->workingDir.'.fossil\''), $this->getCmd('fossil open --nested -- \''.$this->workingDir.'.fossil\''), $this->getCmd('fossil update -- \'trunk\''), - ), true); + ], true); $downloader = $this->getDownloaderMock(null, null, $process); $downloader->install($packageMock, $this->workingDir); @@ -117,16 +116,16 @@ class FossilDownloaderTest extends TestCase ->will($this->returnValue('trunk')); $packageMock->expects($this->any()) ->method('getSourceUrls') - ->will($this->returnValue(array('http://fossil.kd2.org/kd2fw/'))); + ->will($this->returnValue(['http://fossil.kd2.org/kd2fw/'])); $packageMock->expects($this->any()) ->method('getVersion') ->will($this->returnValue('1.0.0.0')); $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ $this->getCmd("fossil changes"), $this->getCmd("fossil pull && fossil up 'trunk'"), - ), true); + ], true); $downloader = $this->getDownloaderMock(null, null, $process); $downloader->prepare('update', $packageMock, $this->workingDir, $packageMock); @@ -143,9 +142,9 @@ class FossilDownloaderTest extends TestCase $packageMock = $this->getMockBuilder('Composer\Package\PackageInterface')->getMock(); $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ $this->getCmd('fossil changes'), - ), true); + ], true); $filesystem = $this->getMockBuilder('Composer\Util\Filesystem')->getMock(); $filesystem->expects($this->once()) diff --git a/tests/Composer/Test/Downloader/GitDownloaderTest.php b/tests/Composer/Test/Downloader/GitDownloaderTest.php index afcf69af0..03845dad4 100644 --- a/tests/Composer/Test/Downloader/GitDownloaderTest.php +++ b/tests/Composer/Test/Downloader/GitDownloaderTest.php @@ -48,7 +48,6 @@ class GitDownloaderTest extends TestCase /** * @param string|bool $version - * @return void */ private function initGitVersion($version): void { @@ -60,7 +59,6 @@ class GitDownloaderTest extends TestCase /** * @param ?\Composer\Config $config - * @return \Composer\Config */ protected function setupConfig($config = null): Config { @@ -69,7 +67,7 @@ class GitDownloaderTest extends TestCase } if (!$config->has('home')) { $tmpDir = realpath(sys_get_temp_dir()).DIRECTORY_SEPARATOR.'cmptest-'.md5(uniqid('', true)); - $config->merge(array('config' => array('home' => $tmpDir))); + $config->merge(['config' => ['home' => $tmpDir]]); } return $config; @@ -80,9 +78,8 @@ class GitDownloaderTest extends TestCase * @param \Composer\Config $config * @param \Composer\Test\Mock\ProcessExecutorMock $executor * @param \Composer\Util\Filesystem $filesystem - * @return GitDownloader */ - protected function getDownloaderMock(\Composer\IO\IOInterface $io = null, Config $config = null, \Composer\Test\Mock\ProcessExecutorMock $executor = null, Filesystem $filesystem = null): GitDownloader + protected function getDownloaderMock(?\Composer\IO\IOInterface $io = null, ?Config $config = null, ?\Composer\Test\Mock\ProcessExecutorMock $executor = null, ?Filesystem $filesystem = null): GitDownloader { $io = $io ?: $this->getMockBuilder('Composer\IO\IOInterface')->getMock(); $executor = $executor ?: $this->getProcessExecutorMock(); @@ -116,7 +113,7 @@ class GitDownloaderTest extends TestCase ->will($this->returnValue('1234567890123456789012345678901234567890')); $packageMock->expects($this->any()) ->method('getSourceUrls') - ->will($this->returnValue(array('https://example.com/composer/composer'))); + ->will($this->returnValue(['https://example.com/composer/composer'])); $packageMock->expects($this->any()) ->method('getSourceUrl') ->will($this->returnValue('https://example.com/composer/composer')); @@ -125,11 +122,11 @@ class GitDownloaderTest extends TestCase ->will($this->returnValue('dev-master')); $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ $this->winCompat("git clone --no-checkout -- 'https://example.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer -- 'https://example.com/composer/composer' && git fetch composer && git remote set-url origin -- 'https://example.com/composer/composer' && git remote set-url composer -- 'https://example.com/composer/composer'"), $this->winCompat("git branch -r"), $this->winCompat("(git checkout 'master' -- || git checkout -B 'master' 'composer/master' --) && git reset --hard '1234567890123456789012345678901234567890' --"), - ), true); + ], true); $downloader = $this->getDownloaderMock(null, null, $process); $downloader->download($packageMock, 'composerPath'); @@ -146,7 +143,7 @@ class GitDownloaderTest extends TestCase ->will($this->returnValue('1234567890123456789012345678901234567890')); $packageMock->expects($this->any()) ->method('getSourceUrls') - ->will($this->returnValue(array('https://example.com/composer/composer'))); + ->will($this->returnValue(['https://example.com/composer/composer'])); $packageMock->expects($this->any()) ->method('getSourceUrl') ->will($this->returnValue('https://example.com/composer/composer')); @@ -164,16 +161,16 @@ class GitDownloaderTest extends TestCase $filesystem->removeDirectory($cachePath); $process = $this->getProcessExecutorMock(); - $process->expects(array( - array('cmd' => $this->winCompat(sprintf("git clone --mirror -- 'https://example.com/composer/composer' '%s'", $cachePath)), 'callback' => function () use ($cachePath): void { + $process->expects([ + ['cmd' => $this->winCompat(sprintf("git clone --mirror -- 'https://example.com/composer/composer' '%s'", $cachePath)), 'callback' => static function () use ($cachePath): void { @mkdir($cachePath, 0777, true); - }), - array('cmd' => 'git rev-parse --git-dir', 'stdout' => '.'), + }], + ['cmd' => 'git rev-parse --git-dir', 'stdout' => '.'], $this->winCompat('git rev-parse --quiet --verify \'1234567890123456789012345678901234567890^{commit}\''), $this->winCompat(sprintf("git clone --no-checkout '%1\$s' 'composerPath' --dissociate --reference '%1\$s' && cd 'composerPath' && git remote set-url origin -- 'https://example.com/composer/composer' && git remote add composer -- 'https://example.com/composer/composer'", $cachePath)), 'git branch -r', $this->winCompat("(git checkout 'master' -- || git checkout -B 'master' 'composer/master' --) && git reset --hard '1234567890123456789012345678901234567890' --"), - ), true); + ], true); $downloader = $this->getDownloaderMock(null, $config, $process); $downloader->download($packageMock, 'composerPath'); @@ -191,7 +188,7 @@ class GitDownloaderTest extends TestCase ->will($this->returnValue('ref')); $packageMock->expects($this->any()) ->method('getSourceUrls') - ->will($this->returnValue(array('https://github.com/mirrors/composer', 'https://github.com/composer/composer'))); + ->will($this->returnValue(['https://github.com/mirrors/composer', 'https://github.com/composer/composer'])); $packageMock->expects($this->any()) ->method('getSourceUrl') ->will($this->returnValue('https://github.com/composer/composer')); @@ -200,18 +197,18 @@ class GitDownloaderTest extends TestCase ->will($this->returnValue('1.0.0')); $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => $this->winCompat("git clone --no-checkout -- 'https://github.com/mirrors/composer' 'composerPath' && cd 'composerPath' && git remote add composer -- 'https://github.com/mirrors/composer' && git fetch composer && git remote set-url origin -- 'https://github.com/mirrors/composer' && git remote set-url composer -- 'https://github.com/mirrors/composer'"), 'return' => 1, 'stderr' => 'Error1', - ), + ], $this->winCompat("git clone --no-checkout -- 'git@github.com:mirrors/composer' 'composerPath' && cd 'composerPath' && git remote add composer -- 'git@github.com:mirrors/composer' && git fetch composer && git remote set-url origin -- 'git@github.com:mirrors/composer' && git remote set-url composer -- 'git@github.com:mirrors/composer'"), $this->winCompat("git remote set-url origin -- 'https://github.com/composer/composer'"), $this->winCompat("git remote set-url --push origin -- 'git@github.com:composer/composer.git'"), 'git branch -r', $this->winCompat("git checkout 'ref' -- && git reset --hard 'ref' --"), - ), true); + ], true); $downloader = $this->getDownloaderMock(null, new Config(), $process); $downloader->download($packageMock, 'composerPath'); @@ -222,21 +219,19 @@ class GitDownloaderTest extends TestCase public function pushUrlProvider(): array { - return array( + return [ // ssh proto should use git@ all along - array(array('ssh'), 'git@github.com:composer/composer', 'git@github.com:composer/composer.git'), + [['ssh'], 'git@github.com:composer/composer', 'git@github.com:composer/composer.git'], // auto-proto uses git@ by default for push url, but not fetch - array(array('https', 'ssh', 'git'), 'https://github.com/composer/composer', 'git@github.com:composer/composer.git'), + [['https', 'ssh', 'git'], 'https://github.com/composer/composer', 'git@github.com:composer/composer.git'], // if restricted to https then push url is not overwritten to git@ - array(array('https'), 'https://github.com/composer/composer', 'https://github.com/composer/composer.git'), - ); + [['https'], 'https://github.com/composer/composer', 'https://github.com/composer/composer.git'], + ]; } /** * @dataProvider pushUrlProvider * @param string[] $protocols - * @param string $url - * @param string $pushUrl */ public function testDownloadAndSetPushUrlUseCustomVariousProtocolsForGithub(array $protocols, string $url, string $pushUrl): void { @@ -246,7 +241,7 @@ class GitDownloaderTest extends TestCase ->will($this->returnValue('ref')); $packageMock->expects($this->any()) ->method('getSourceUrls') - ->will($this->returnValue(array('https://github.com/composer/composer'))); + ->will($this->returnValue(['https://github.com/composer/composer'])); $packageMock->expects($this->any()) ->method('getSourceUrl') ->will($this->returnValue('https://github.com/composer/composer')); @@ -255,15 +250,15 @@ class GitDownloaderTest extends TestCase ->will($this->returnValue('1.0.0')); $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ $this->winCompat("git clone --no-checkout -- '{$url}' 'composerPath' && cd 'composerPath' && git remote add composer -- '{$url}' && git fetch composer && git remote set-url origin -- '{$url}' && git remote set-url composer -- '{$url}'"), $this->winCompat("git remote set-url --push origin -- '{$pushUrl}'"), 'git branch -r', $this->winCompat("git checkout 'ref' -- && git reset --hard 'ref' --"), - ), true); + ], true); $config = new Config(); - $config->merge(array('config' => array('github-protocols' => $protocols))); + $config->merge(['config' => ['github-protocols' => $protocols]]); $downloader = $this->getDownloaderMock(null, $config, $process); $downloader->download($packageMock, 'composerPath'); @@ -280,7 +275,7 @@ class GitDownloaderTest extends TestCase ->will($this->returnValue('ref')); $packageMock->expects($this->any()) ->method('getSourceUrls') - ->will($this->returnValue(array('https://example.com/composer/composer'))); + ->will($this->returnValue(['https://example.com/composer/composer'])); $packageMock->expects($this->any()) ->method('getSourceUrl') ->will($this->returnValue('https://example.com/composer/composer')); @@ -289,12 +284,12 @@ class GitDownloaderTest extends TestCase ->will($this->returnValue('1.0.0')); $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => $this->winCompat("git clone --no-checkout -- 'https://example.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer -- 'https://example.com/composer/composer' && git fetch composer && git remote set-url origin -- 'https://example.com/composer/composer' && git remote set-url composer -- 'https://example.com/composer/composer'"), 'return' => 1, - ), - )); + ], + ]); // not using PHPUnit's expected exception because Prophecy exceptions extend from RuntimeException too so it is not safe try { @@ -340,7 +335,7 @@ class GitDownloaderTest extends TestCase ->will($this->returnValue('ref')); $packageMock->expects($this->any()) ->method('getSourceUrls') - ->will($this->returnValue(array('https://github.com/composer/composer'))); + ->will($this->returnValue(['https://github.com/composer/composer'])); $packageMock->expects($this->any()) ->method('getVersion') ->will($this->returnValue('1.0.0.0')); @@ -349,7 +344,7 @@ class GitDownloaderTest extends TestCase ->will($this->returnValue('1.0.0')); $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ $this->winCompat('git show-ref --head -d'), $this->winCompat('git status --porcelain --untracked-files=no'), $this->winCompat('git remote -v'), @@ -357,7 +352,7 @@ class GitDownloaderTest extends TestCase $this->winCompat('git branch -r'), $this->winCompat("git checkout 'ref' -- && git reset --hard 'ref' --"), $this->winCompat('git remote -v'), - ), true); + ], true); $this->fs->ensureDirectoryExists($this->workingDir.'/.git'); $downloader = $this->getDownloaderMock(null, new Config(), $process); @@ -377,7 +372,7 @@ class GitDownloaderTest extends TestCase ->will($this->returnValue('ref')); $packageMock->expects($this->any()) ->method('getSourceUrls') - ->will($this->returnValue(array('https://github.com/composer/composer'))); + ->will($this->returnValue(['https://github.com/composer/composer'])); $packageMock->expects($this->any()) ->method('getSourceUrl') ->will($this->returnValue('https://github.com/composer/composer')); @@ -389,24 +384,24 @@ class GitDownloaderTest extends TestCase ->will($this->returnValue('1.0.0')); $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ $this->winCompat("git show-ref --head -d"), $this->winCompat("git status --porcelain --untracked-files=no"), $this->winCompat("git remote -v"), $this->winCompat($expectedGitUpdateCommand), 'git branch -r', $this->winCompat("git checkout 'ref' -- && git reset --hard 'ref' --"), - array( + [ 'cmd' => $this->winCompat("git remote -v"), 'stdout' => 'origin https://github.com/old/url (fetch) origin https://github.com/old/url (push) composer https://github.com/old/url (fetch) composer https://github.com/old/url (push) ', - ), + ], $this->winCompat("git remote set-url origin -- 'https://github.com/composer/composer'"), $this->winCompat("git remote set-url --push origin -- 'git@github.com:composer/composer.git'"), - ), true); + ], true); $this->fs->ensureDirectoryExists($this->workingDir.'/.git'); $downloader = $this->getDownloaderMock(null, new Config(), $process); @@ -430,26 +425,26 @@ composer https://github.com/old/url (push) ->will($this->returnValue('ref')); $packageMock->expects($this->any()) ->method('getSourceUrls') - ->will($this->returnValue(array('https://github.com/composer/composer'))); + ->will($this->returnValue(['https://github.com/composer/composer'])); $packageMock->expects($this->any()) ->method('getVersion') ->will($this->returnValue('1.0.0.0')); $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ $this->winCompat('git show-ref --head -d'), $this->winCompat('git status --porcelain --untracked-files=no'), $this->winCompat('git remote -v'), - array( + [ 'cmd' => $expectedGitUpdateCommand, 'return' => 1, - ), - array( + ], + [ 'cmd' => $expectedGitUpdateCommand2, 'return' => 1, - ), + ], $this->winCompat('git --version'), - ), true); + ], true); $this->fs->ensureDirectoryExists($this->workingDir.'/.git'); @@ -484,30 +479,30 @@ composer https://github.com/old/url (push) ->will($this->returnValue('1.0.0.0')); $packageMock->expects($this->any()) ->method('getSourceUrls') - ->will($this->returnValue(array(Platform::isWindows() ? 'C:\\' : '/', 'https://github.com/composer/composer'))); + ->will($this->returnValue([Platform::isWindows() ? 'C:\\' : '/', 'https://github.com/composer/composer'])); $packageMock->expects($this->any()) ->method('getPrettyVersion') ->will($this->returnValue('1.0.0')); $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ $this->winCompat('git show-ref --head -d'), $this->winCompat('git status --porcelain --untracked-files=no'), $this->winCompat('git remote -v'), - array( + [ 'cmd' => $expectedFirstGitUpdateCommand, 'return' => 1, - ), + ], $this->winCompat('git --version'), $this->winCompat('git remote -v'), - array( + [ 'cmd' => $expectedSecondGitUpdateCommand, 'return' => 0, - ), + ], $this->winCompat('git branch -r'), $this->winCompat("git checkout 'ref' -- && git reset --hard 'ref' --"), $this->winCompat('git remote -v'), - ), true); + ], true); $this->fs->ensureDirectoryExists($this->workingDir.'/.git'); $downloader = $this->getDownloaderMock(null, new Config(), $process); @@ -531,7 +526,7 @@ composer https://github.com/old/url (push) ->will($this->returnValue('ref')); $oldPackage->expects($this->any()) ->method('getSourceUrls') - ->will($this->returnValue(array('/foo/bar', 'https://github.com/composer/composer'))); + ->will($this->returnValue(['/foo/bar', 'https://github.com/composer/composer'])); $newPackage = $this->getMockBuilder('Composer\Package\PackageInterface')->getMock(); $newPackage->expects($this->any()) @@ -539,7 +534,7 @@ composer https://github.com/old/url (push) ->will($this->returnValue('ref')); $newPackage->expects($this->any()) ->method('getSourceUrls') - ->will($this->returnValue(array('https://github.com/composer/composer'))); + ->will($this->returnValue(['https://github.com/composer/composer'])); $newPackage->expects($this->any()) ->method('getVersion') ->will($this->returnValue('1.0.0.0')); @@ -578,7 +573,7 @@ composer https://github.com/old/url (push) ->will($this->returnValue('ref')); $oldPackage->expects($this->any()) ->method('getSourceUrls') - ->will($this->returnValue(array('/foo/bar', 'https://github.com/composer/composer'))); + ->will($this->returnValue(['/foo/bar', 'https://github.com/composer/composer'])); $newPackage = $this->getMockBuilder('Composer\Package\PackageInterface')->getMock(); $newPackage->expects($this->any()) @@ -586,7 +581,7 @@ composer https://github.com/old/url (push) ->will($this->returnValue('ref')); $newPackage->expects($this->any()) ->method('getSourceUrls') - ->will($this->returnValue(array('https://github.com/composer/composer'))); + ->will($this->returnValue(['https://github.com/composer/composer'])); $newPackage->expects($this->any()) ->method('getVersion') ->will($this->returnValue('dev-ref2')); @@ -617,10 +612,10 @@ composer https://github.com/old/url (push) $packageMock = $this->getMockBuilder('Composer\Package\PackageInterface')->getMock(); $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ 'git show-ref --head -d', $expectedGitResetCommand, - ), true); + ], true); $this->fs->ensureDirectoryExists($this->workingDir.'/.git'); @@ -643,10 +638,6 @@ composer https://github.com/old/url (push) $this->assertEquals('source', $downloader->getInstallationSource()); } - /** - * @param string $cmd - * @return string - */ private function winCompat(string $cmd): string { if (Platform::isWindows()) { diff --git a/tests/Composer/Test/Downloader/HgDownloaderTest.php b/tests/Composer/Test/Downloader/HgDownloaderTest.php index 1e861f32b..3c0f1afd8 100644 --- a/tests/Composer/Test/Downloader/HgDownloaderTest.php +++ b/tests/Composer/Test/Downloader/HgDownloaderTest.php @@ -40,9 +40,8 @@ class HgDownloaderTest extends TestCase * @param \Composer\Config $config * @param \Composer\Test\Mock\ProcessExecutorMock $executor * @param \Composer\Util\Filesystem $filesystem - * @return HgDownloader */ - protected function getDownloaderMock(\Composer\IO\IOInterface $io = null, \Composer\Config $config = null, \Composer\Test\Mock\ProcessExecutorMock $executor = null, Filesystem $filesystem = null): HgDownloader + protected function getDownloaderMock(?\Composer\IO\IOInterface $io = null, ?\Composer\Config $config = null, ?\Composer\Test\Mock\ProcessExecutorMock $executor = null, ?Filesystem $filesystem = null): HgDownloader { $io = $io ?: $this->getMockBuilder('Composer\IO\IOInterface')->getMock(); $config = $config ?: $this->getMockBuilder('Composer\Config')->getMock(); @@ -73,13 +72,13 @@ class HgDownloaderTest extends TestCase ->will($this->returnValue('ref')); $packageMock->expects($this->once()) ->method('getSourceUrls') - ->will($this->returnValue(array('https://mercurial.dev/l3l0/composer'))); + ->will($this->returnValue(['https://mercurial.dev/l3l0/composer'])); $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ $this->getCmd('hg clone -- \'https://mercurial.dev/l3l0/composer\' \''.$this->workingDir.'\''), $this->getCmd('hg up -- \'ref\''), - ), true); + ], true); $downloader = $this->getDownloaderMock(null, null, $process); $downloader->install($packageMock, $this->workingDir); @@ -114,13 +113,13 @@ class HgDownloaderTest extends TestCase ->will($this->returnValue('1.0.0.0')); $packageMock->expects($this->any()) ->method('getSourceUrls') - ->will($this->returnValue(array('https://github.com/l3l0/composer'))); + ->will($this->returnValue(['https://github.com/l3l0/composer'])); $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ $this->getCmd('hg st'), $this->getCmd("hg pull -- 'https://github.com/l3l0/composer' && hg up -- 'ref'"), - ), true); + ], true); $downloader = $this->getDownloaderMock(null, null, $process); $downloader->prepare('update', $packageMock, $this->workingDir, $packageMock); @@ -135,9 +134,9 @@ class HgDownloaderTest extends TestCase $packageMock = $this->getMockBuilder('Composer\Package\PackageInterface')->getMock(); $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ $this->getCmd('hg st'), - ), true); + ], true); $filesystem = $this->getMockBuilder('Composer\Util\Filesystem')->getMock(); $filesystem->expects($this->once()) diff --git a/tests/Composer/Test/Downloader/PerforceDownloaderTest.php b/tests/Composer/Test/Downloader/PerforceDownloaderTest.php index bb9be8a4d..d0f7890cb 100644 --- a/tests/Composer/Test/Downloader/PerforceDownloaderTest.php +++ b/tests/Composer/Test/Downloader/PerforceDownloaderTest.php @@ -82,20 +82,18 @@ class PerforceDownloaderTest extends TestCase */ protected function getRepoConfig(): array { - return array('url' => 'TEST_URL', 'p4user' => 'TEST_USER'); + return ['url' => 'TEST_URL', 'p4user' => 'TEST_USER']; } /** * @param string[] $repoConfig - * @param \Composer\IO\IOInterface $io - * @param \Composer\Config $config * @return \Composer\Repository\VcsRepository&\PHPUnit\Framework\MockObject\MockObject */ protected function getMockRepository(array $repoConfig, IOInterface $io, Config $config) { $repository = $this->getMockBuilder('Composer\Repository\VcsRepository') - ->onlyMethods(array('getRepoConfig')) - ->setConstructorArgs(array($repoConfig, $io, $config, Factory::createHttpDownloader($io, $config))) + ->onlyMethods(['getRepoConfig']) + ->setConstructorArgs([$repoConfig, $io, $config, Factory::createHttpDownloader($io, $config)]) ->getMock(); $repository->expects($this->any())->method('getRepoConfig')->will($this->returnValue($repoConfig)); @@ -129,7 +127,7 @@ class PerforceDownloaderTest extends TestCase $label = 123; $this->package->expects($this->once())->method('getSourceReference')->will($this->returnValue($ref)); $this->io->expects($this->once())->method('writeError')->with($this->stringContains('Cloning '.$ref)); - $perforceMethods = array('setStream', 'p4Login', 'writeP4ClientSpec', 'connectClient', 'syncCodeBase', 'cleanupClientSpec'); + $perforceMethods = ['setStream', 'p4Login', 'writeP4ClientSpec', 'connectClient', 'syncCodeBase', 'cleanupClientSpec']; $perforce = $this->getMockBuilder('Composer\Util\Perforce')->disableOriginalConstructor()->getMock(); $perforce->expects($this->once())->method('initializePath')->with($this->equalTo($this->testPath)); $perforce->expects($this->once())->method('setStream')->with($this->equalTo($ref)); @@ -152,7 +150,7 @@ class PerforceDownloaderTest extends TestCase $label = null; $this->package->expects($this->once())->method('getSourceReference')->will($this->returnValue($ref)); $this->io->expects($this->once())->method('writeError')->with($this->stringContains('Cloning '.$ref)); - $perforceMethods = array('setStream', 'p4Login', 'writeP4ClientSpec', 'connectClient', 'syncCodeBase', 'cleanupClientSpec'); + $perforceMethods = ['setStream', 'p4Login', 'writeP4ClientSpec', 'connectClient', 'syncCodeBase', 'cleanupClientSpec']; $perforce = $this->getMockBuilder('Composer\Util\Perforce')->disableOriginalConstructor()->getMock(); $perforce->expects($this->once())->method('initializePath')->with($this->equalTo($this->testPath)); $perforce->expects($this->once())->method('setStream')->with($this->equalTo($ref)); diff --git a/tests/Composer/Test/Downloader/XzDownloaderTest.php b/tests/Composer/Test/Downloader/XzDownloaderTest.php index 200ae49ac..ed70c87c1 100644 --- a/tests/Composer/Test/Downloader/XzDownloaderTest.php +++ b/tests/Composer/Test/Downloader/XzDownloaderTest.php @@ -61,7 +61,7 @@ class XzDownloaderTest extends TestCase try { $loop = new Loop($httpDownloader); $promise = $downloader->download($package, $this->testDir.'/install-path'); - $loop->wait(array($promise)); + $loop->wait([$promise]); $downloader->install($package, $this->testDir.'/install-path'); $this->fail('Download of invalid tarball should throw an exception'); diff --git a/tests/Composer/Test/Downloader/ZipDownloaderTest.php b/tests/Composer/Test/Downloader/ZipDownloaderTest.php index 65581a877..56aa7a04d 100644 --- a/tests/Composer/Test/Downloader/ZipDownloaderTest.php +++ b/tests/Composer/Test/Downloader/ZipDownloaderTest.php @@ -57,10 +57,8 @@ class ZipDownloaderTest extends TestCase } /** - * @param string $name * @param mixed $value * @param ?\Composer\Test\Downloader\MockedZipDownloader $obj - * @return void */ public function setPrivateProperty(string $name, $value, $obj = null): void { @@ -91,11 +89,11 @@ class ZipDownloaderTest extends TestCase ; $this->package->expects($this->any()) ->method('getDistUrls') - ->will($this->returnValue(array($distUrl))) + ->will($this->returnValue([$distUrl])) ; $this->package->expects($this->atLeastOnce()) ->method('getTransportOptions') - ->will($this->returnValue(array())) + ->will($this->returnValue([])) ; $downloader = new ZipDownloader($this->io, $this->config, $this->httpDownloader); @@ -103,7 +101,7 @@ class ZipDownloaderTest extends TestCase try { $loop = new Loop($this->httpDownloader); $promise = $downloader->download($this->package, $path = sys_get_temp_dir().'/composer-zip-test'); - $loop->wait(array($promise)); + $loop->wait([$promise]); $downloader->install($this->package, $path); $this->fail('Download of invalid zip files should throw an exception'); @@ -185,7 +183,7 @@ class ZipDownloaderTest extends TestCase self::expectExceptionMessage('Failed to extract : (1) unzip'); $this->setPrivateProperty('isWindows', false); $this->setPrivateProperty('hasZipArchive', false); - $this->setPrivateProperty('unzipCommands', array(array('unzip', 'unzip -qq %s -d %s'))); + $this->setPrivateProperty('unzipCommands', [['unzip', 'unzip -qq %s -d %s']]); $procMock = $this->getMockBuilder('Symfony\Component\Process\Process')->disableOriginalConstructor()->getMock(); $procMock->expects($this->any()) @@ -212,7 +210,7 @@ class ZipDownloaderTest extends TestCase { $this->setPrivateProperty('isWindows', false); $this->setPrivateProperty('hasZipArchive', false); - $this->setPrivateProperty('unzipCommands', array(array('unzip', 'unzip -qq %s -d %s'))); + $this->setPrivateProperty('unzipCommands', [['unzip', 'unzip -qq %s -d %s']]); $procMock = $this->getMockBuilder('Symfony\Component\Process\Process')->disableOriginalConstructor()->getMock(); $procMock->expects($this->any()) @@ -317,7 +315,6 @@ class ZipDownloaderTest extends TestCase /** * @param ?\React\Promise\PromiseInterface $promise - * @return void */ private function wait($promise): void { @@ -326,9 +323,9 @@ class ZipDownloaderTest extends TestCase } $e = null; - $promise->then(function (): void { + $promise->then(static function (): void { // noop - }, function ($ex) use (&$e): void { + }, static function ($ex) use (&$e): void { $e = $ex; }); @@ -340,12 +337,12 @@ class ZipDownloaderTest extends TestCase class MockedZipDownloader extends ZipDownloader { - public function download(PackageInterface $package, $path, PackageInterface $prevPackage = null, $output = true): PromiseInterface + public function download(PackageInterface $package, $path, ?PackageInterface $prevPackage = null, bool $output = true): PromiseInterface { return \React\Promise\resolve(null); } - public function install(PackageInterface $package, $path, $output = true): PromiseInterface + public function install(PackageInterface $package, $path, bool $output = true): PromiseInterface { return \React\Promise\resolve(null); } diff --git a/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php b/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php index 05ca1a272..ce6a36660 100644 --- a/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php +++ b/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php @@ -33,9 +33,9 @@ class EventDispatcherTest extends TestCase self::expectException('RuntimeException'); $io = $this->getMockBuilder('Composer\IO\IOInterface')->getMock(); - $dispatcher = $this->getDispatcherStubForListenersTest(array( + $dispatcher = $this->getDispatcherStubForListenersTest([ 'Composer\Test\EventDispatcher\EventDispatcherTest::call', - ), $io); + ], $io); $io->expects($this->once()) ->method('isVerbose') @@ -53,26 +53,24 @@ class EventDispatcherTest extends TestCase /** * @dataProvider provideValidCommands - * - * @param string $command */ public function testDispatcherCanExecuteSingleCommandLineScript(string $command): void { $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ $command, - ), true); + ], true); $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') - ->setConstructorArgs(array( + ->setConstructorArgs([ $this->createComposerInstance(), $this->getMockBuilder('Composer\IO\IOInterface')->getMock(), $process, - )) - ->onlyMethods(array('getListeners')) + ]) + ->onlyMethods(['getListeners']) ->getMock(); - $listener = array($command); + $listener = [$command]; $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') ->will($this->returnValue($listener)); @@ -82,8 +80,6 @@ class EventDispatcherTest extends TestCase /** * @dataProvider provideDevModes - * - * @param bool $devMode */ public function testDispatcherPassDevModeToAutoloadGeneratorForScriptEvents(bool $devMode): void { @@ -97,7 +93,7 @@ class EventDispatcherTest extends TestCase $composer->setAutoloadGenerator($generator); $package = $this->getMockBuilder('Composer\Package\RootPackageInterface')->getMock(); - $package->method('getScripts')->will($this->returnValue(array('scriptName' => array('scriptName')))); + $package->method('getScripts')->will($this->returnValue(['scriptName' => ['scriptName']])); $composer->setPackage($package); $composer->setRepositoryManager($this->getRepositoryManagerMockForDevModePassingTest()); @@ -122,10 +118,10 @@ class EventDispatcherTest extends TestCase public function provideDevModes(): array { - return array( - array(true), - array(false), - ); + return [ + [true], + [false], + ]; } /** @@ -135,19 +131,19 @@ class EventDispatcherTest extends TestCase { $generator = $this->getMockBuilder('Composer\Autoload\AutoloadGenerator') ->disableOriginalConstructor() - ->onlyMethods(array( + ->onlyMethods([ 'buildPackageMap', 'parseAutoloads', 'createLoader', 'setDevMode', - )) + ]) ->getMock(); $generator ->method('buildPackageMap') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $generator ->method('parseAutoloads') - ->will($this->returnValue(array('psr-0' => array(), 'psr-4' => array(), 'classmap' => array(), 'files' => array(), 'exclude-from-classmap' => array()))); + ->will($this->returnValue(['psr-0' => [], 'psr-4' => [], 'classmap' => [], 'files' => [], 'exclude-from-classmap' => []])); $generator ->method('createLoader') ->will($this->returnValue($this->getMockBuilder('Composer\Autoload\ClassLoader')->getMock())); @@ -162,13 +158,13 @@ class EventDispatcherTest extends TestCase { $rm = $this->getMockBuilder('Composer\Repository\RepositoryManager') ->disableOriginalConstructor() - ->onlyMethods(array('getLocalRepository')) + ->onlyMethods(['getLocalRepository']) ->getMock(); $repo = $this->getMockBuilder('Composer\Repository\InstalledRepositoryInterface')->getMock(); $repo ->method('getCanonicalPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $rm ->method('getLocalRepository') @@ -190,8 +186,8 @@ class EventDispatcherTest extends TestCase $this->getProcessExecutorMock() ); - $listener = array($this, 'someMethod'); - $listener2 = array($this, 'someMethod2'); + $listener = [$this, 'someMethod']; + $listener2 = [$this, 'someMethod2']; $listener3 = 'Composer\\Test\\EventDispatcher\\EventDispatcherTest::someMethod'; $dispatcher->addListener('ev1', $listener, 0); @@ -223,27 +219,27 @@ class EventDispatcherTest extends TestCase public function testDispatcherCanExecuteCliAndPhpInSameEventScriptStack(): void { $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ 'echo -n foo', 'echo -n bar', - ), true); + ], true); $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') - ->setConstructorArgs(array( + ->setConstructorArgs([ $this->createComposerInstance(), $io = new BufferIO('', OutputInterface::VERBOSITY_VERBOSE), $process, - )) - ->onlyMethods(array( + ]) + ->onlyMethods([ 'getListeners', - )) + ]) ->getMock(); - $listeners = array( + $listeners = [ 'echo -n foo', 'Composer\\Test\\EventDispatcher\\EventDispatcherTest::someMethod', 'echo -n bar', - ); + ]; $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') @@ -260,20 +256,20 @@ class EventDispatcherTest extends TestCase public function testDispatcherCanPutEnv(): void { $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') - ->setConstructorArgs(array( + ->setConstructorArgs([ $this->createComposerInstance(), $io = new BufferIO('', OutputInterface::VERBOSITY_VERBOSE), $this->getProcessExecutorMock(), - )) - ->onlyMethods(array( + ]) + ->onlyMethods([ 'getListeners', - )) + ]) ->getMock(); - $listeners = array( + $listeners = [ '@putenv ABC=123', 'Composer\\Test\\EventDispatcher\\EventDispatcherTest::getTestEnv', - ); + ]; $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') @@ -293,18 +289,18 @@ class EventDispatcherTest extends TestCase chdir(__DIR__); Platform::putEnv('COMPOSER_BIN_DIR', __DIR__ . '/vendor/bin'); - $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher')->setConstructorArgs(array( + $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher')->setConstructorArgs([ $this->createComposerInstance(), $io = new BufferIO('', OutputInterface::VERBOSITY_VERBOSE), $this->getProcessExecutorMock(), - ))->onlyMethods(array( + ])->onlyMethods([ 'getListeners', - ))->getMock(); + ])->getMock(); - $listeners = array( + $listeners = [ 'Composer\\Test\\EventDispatcher\\EventDispatcherTest::createsVendorBinFolderChecksEnvDoesNotContainsBin', 'Composer\\Test\\EventDispatcher\\EventDispatcherTest::createsVendorBinFolderChecksEnvContainsBin', - ); + ]; $dispatcher->expects($this->atLeastOnce())->method('getListeners')->will($this->returnValue($listeners)); @@ -320,9 +316,6 @@ class EventDispatcherTest extends TestCase } } - /** - * @return void - */ public static function createsVendorBinFolderChecksEnvDoesNotContainsBin(): void { mkdir(__DIR__ . '/vendor/bin', 0700, true); @@ -335,9 +328,6 @@ class EventDispatcherTest extends TestCase self::assertStringNotContainsString(__DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'bin', $val); } - /** - * @return void - */ public static function createsVendorBinFolderChecksEnvContainsBin(): void { $val = getenv('PATH'); @@ -349,9 +339,6 @@ class EventDispatcherTest extends TestCase self::assertStringContainsString(__DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'bin', $val); } - /** - * @return void - */ public static function getTestEnv(): void { $val = getenv('ABC'); @@ -363,39 +350,39 @@ class EventDispatcherTest extends TestCase public function testDispatcherCanExecuteComposerScriptGroups(): void { $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ 'echo -n foo', 'echo -n baz', 'echo -n bar', - ), true); + ], true); $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') - ->setConstructorArgs(array( + ->setConstructorArgs([ $composer = $this->createComposerInstance(), $io = new BufferIO('', OutputInterface::VERBOSITY_VERBOSE), $process, - )) - ->onlyMethods(array( + ]) + ->onlyMethods([ 'getListeners', - )) + ]) ->getMock(); $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') - ->will($this->returnCallback(function (Event $event): array { + ->will($this->returnCallback(static function (Event $event): array { if ($event->getName() === 'root') { - return array('@group'); + return ['@group']; } if ($event->getName() === 'group') { - return array('echo -n foo', '@subgroup', 'echo -n bar'); + return ['echo -n foo', '@subgroup', 'echo -n bar']; } if ($event->getName() === 'subgroup') { - return array('echo -n baz'); + return ['echo -n baz']; } - return array(); + return []; })); $dispatcher->dispatch('root', new ScriptEvent('root', $composer, $io)); @@ -410,33 +397,33 @@ class EventDispatcherTest extends TestCase public function testRecursionInScriptsNames(): void { $process = $this->getProcessExecutorMock(); - $process->expects(array( + $process->expects([ 'echo Hello '.ProcessExecutor::escape('World'), - ), true); + ], true); $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') - ->setConstructorArgs(array( + ->setConstructorArgs([ $composer = $this->createComposerInstance(), $io = new BufferIO('', OutputInterface::VERBOSITY_VERBOSE), $process, - )) - ->onlyMethods(array( + ]) + ->onlyMethods([ 'getListeners', - )) + ]) ->getMock(); $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') - ->will($this->returnCallback(function (Event $event): array { + ->will($this->returnCallback(static function (Event $event): array { if ($event->getName() === 'hello') { - return array('echo Hello'); + return ['echo Hello']; } if ($event->getName() === 'helloWorld') { - return array('@hello World'); + return ['@hello World']; } - return array(); + return []; })); $dispatcher->dispatch('helloWorld', new ScriptEvent('helloWorld', $composer, $io)); @@ -451,28 +438,28 @@ class EventDispatcherTest extends TestCase self::expectException('RuntimeException'); $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') - ->setConstructorArgs(array( + ->setConstructorArgs([ $composer = $this->createComposerInstance(), $io = $this->getMockBuilder('Composer\IO\IOInterface')->getMock(), $this->getProcessExecutorMock(), - )) - ->onlyMethods(array( + ]) + ->onlyMethods([ 'getListeners', - )) + ]) ->getMock(); $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') - ->will($this->returnCallback(function (Event $event): array { + ->will($this->returnCallback(static function (Event $event): array { if ($event->getName() === 'root') { - return array('@recurse'); + return ['@recurse']; } if ($event->getName() === 'recurse') { - return array('@root'); + return ['@root']; } - return array(); + return []; })); $dispatcher->dispatch('root', new ScriptEvent('root', $composer, $io)); @@ -486,11 +473,11 @@ class EventDispatcherTest extends TestCase private function getDispatcherStubForListenersTest(array $listeners, IOInterface $io) { $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') - ->setConstructorArgs(array( + ->setConstructorArgs([ $this->createComposerInstance(), $io, - )) - ->onlyMethods(array('getListeners')) + ]) + ->onlyMethods(['getListeners']) ->getMock(); $dispatcher->expects($this->atLeastOnce()) @@ -502,25 +489,25 @@ class EventDispatcherTest extends TestCase public function provideValidCommands(): array { - return array( - array('phpunit'), - array('echo foo'), - array('echo -n foo'), - ); + return [ + ['phpunit'], + ['echo foo'], + ['echo -n foo'], + ]; } public function testDispatcherOutputsCommand(): void { $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') - ->setConstructorArgs(array( + ->setConstructorArgs([ $this->createComposerInstance(), $io = $this->getMockBuilder('Composer\IO\IOInterface')->getMock(), new ProcessExecutor($io), - )) - ->onlyMethods(array('getListeners')) + ]) + ->onlyMethods(['getListeners']) ->getMock(); - $listener = array('echo foo'); + $listener = ['echo foo']; $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') ->will($this->returnValue($listener)); @@ -539,16 +526,16 @@ class EventDispatcherTest extends TestCase public function testDispatcherOutputsErrorOnFailedCommand(): void { $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') - ->setConstructorArgs(array( + ->setConstructorArgs([ $this->createComposerInstance(), $io = $this->getMockBuilder('Composer\IO\IOInterface')->getMock(), new ProcessExecutor, - )) - ->onlyMethods(array('getListeners')) + ]) + ->onlyMethods(['getListeners']) ->getMock(); $code = 'exit 1'; - $listener = array($code); + $listener = [$code]; $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') ->will($this->returnValue($listener)); @@ -575,26 +562,23 @@ class EventDispatcherTest extends TestCase public function testDispatcherInstallerEvents(): void { $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') - ->setConstructorArgs(array( + ->setConstructorArgs([ $this->createComposerInstance(), $this->getMockBuilder('Composer\IO\IOInterface')->getMock(), $this->getProcessExecutorMock(), - )) - ->onlyMethods(array('getListeners')) + ]) + ->onlyMethods(['getListeners']) ->getMock(); $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $transaction = $this->getMockBuilder('Composer\DependencyResolver\LockTransaction')->disableOriginalConstructor()->getMock(); $dispatcher->dispatchInstallerEvent(InstallerEvents::PRE_OPERATIONS_EXEC, true, true, $transaction); } - /** - * @return void - */ public static function call(): void { throw new \RuntimeException(); @@ -616,9 +600,6 @@ class EventDispatcherTest extends TestCase return true; } - /** - * @return Composer - */ private function createComposerInstance(): Composer { $composer = new Composer; diff --git a/tests/Composer/Test/Filter/PlatformRequirementFilter/IgnoreAllPlatformRequirementFilterTest.php b/tests/Composer/Test/Filter/PlatformRequirementFilter/IgnoreAllPlatformRequirementFilterTest.php index 97a43bf80..3011434bf 100644 --- a/tests/Composer/Test/Filter/PlatformRequirementFilter/IgnoreAllPlatformRequirementFilterTest.php +++ b/tests/Composer/Test/Filter/PlatformRequirementFilter/IgnoreAllPlatformRequirementFilterTest.php @@ -19,9 +19,6 @@ final class IgnoreAllPlatformRequirementFilterTest extends TestCase { /** * @dataProvider dataIsIgnored - * - * @param string $req - * @param bool $expectIgnored */ public function testIsIgnored(string $req, bool $expectIgnored): void { @@ -35,9 +32,9 @@ final class IgnoreAllPlatformRequirementFilterTest extends TestCase */ public function dataIsIgnored(): array { - return array( - 'php is ignored' => array('php', true), - 'monolog/monolog is not ignored' => array('monolog/monolog', false), - ); + return [ + 'php is ignored' => ['php', true], + 'monolog/monolog is not ignored' => ['monolog/monolog', false], + ]; } } diff --git a/tests/Composer/Test/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilterTest.php b/tests/Composer/Test/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilterTest.php index 6de438ff1..9ee9a1da3 100644 --- a/tests/Composer/Test/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilterTest.php +++ b/tests/Composer/Test/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilterTest.php @@ -21,8 +21,6 @@ final class IgnoreListPlatformRequirementFilterTest extends TestCase * @dataProvider dataIsIgnored * * @param string[] $reqList - * @param string $req - * @param bool $expectIgnored */ public function testIsIgnored(array $reqList, string $req, bool $expectIgnored): void { @@ -36,18 +34,18 @@ final class IgnoreListPlatformRequirementFilterTest extends TestCase */ public function dataIsIgnored(): array { - return array( - 'ext-json is ignored if listed' => array(array('ext-json', 'monolog/monolog'), 'ext-json', true), - 'php is not ignored if not listed' => array(array('ext-json', 'monolog/monolog'), 'php', false), - 'monolog/monolog is not ignored even if listed' => array(array('ext-json', 'monolog/monolog'), 'monolog/monolog', false), - 'ext-json is ignored if ext-* is listed' => array(array('ext-*'), 'ext-json', true), - 'php is ignored if php* is listed' => array(array('ext-*', 'php*'), 'php', true), - 'ext-json is ignored if * is listed' => array(array('foo', '*'), 'ext-json', true), - 'php is ignored if * is listed' => array(array('*', 'foo'), 'php', true), - 'monolog/monolog is not ignored even if * or monolog/* are listed' => array(array('*', 'monolog/*'), 'monolog/monolog', false), - 'empty list entry does not ignore' => array(array(''), 'ext-foo', false), - 'empty array does not ignore' => array(array(), 'ext-foo', false), - 'list entries are not completing each other' => array(array('ext-', 'foo'), 'ext-foo', false), - ); + return [ + 'ext-json is ignored if listed' => [['ext-json', 'monolog/monolog'], 'ext-json', true], + 'php is not ignored if not listed' => [['ext-json', 'monolog/monolog'], 'php', false], + 'monolog/monolog is not ignored even if listed' => [['ext-json', 'monolog/monolog'], 'monolog/monolog', false], + 'ext-json is ignored if ext-* is listed' => [['ext-*'], 'ext-json', true], + 'php is ignored if php* is listed' => [['ext-*', 'php*'], 'php', true], + 'ext-json is ignored if * is listed' => [['foo', '*'], 'ext-json', true], + 'php is ignored if * is listed' => [['*', 'foo'], 'php', true], + 'monolog/monolog is not ignored even if * or monolog/* are listed' => [['*', 'monolog/*'], 'monolog/monolog', false], + 'empty list entry does not ignore' => [[''], 'ext-foo', false], + 'empty array does not ignore' => [[], 'ext-foo', false], + 'list entries are not completing each other' => [['ext-', 'foo'], 'ext-foo', false], + ]; } } diff --git a/tests/Composer/Test/Filter/PlatformRequirementFilter/IgnoreNothingPlatformRequirementFilterTest.php b/tests/Composer/Test/Filter/PlatformRequirementFilter/IgnoreNothingPlatformRequirementFilterTest.php index fa4f32fdf..817ef328a 100644 --- a/tests/Composer/Test/Filter/PlatformRequirementFilter/IgnoreNothingPlatformRequirementFilterTest.php +++ b/tests/Composer/Test/Filter/PlatformRequirementFilter/IgnoreNothingPlatformRequirementFilterTest.php @@ -19,8 +19,6 @@ final class IgnoreNothingPlatformRequirementFilterTest extends TestCase { /** * @dataProvider dataIsIgnored - * - * @param string $req */ public function testIsIgnored(string $req): void { @@ -34,9 +32,9 @@ final class IgnoreNothingPlatformRequirementFilterTest extends TestCase */ public function dataIsIgnored(): array { - return array( - 'php is not ignored' => array('php'), - 'monolog/monolog is not ignored' => array('monolog/monolog'), - ); + return [ + 'php is not ignored' => ['php'], + 'monolog/monolog is not ignored' => ['monolog/monolog'], + ]; } } diff --git a/tests/Composer/Test/Filter/PlatformRequirementFilter/PlatformRequirementFilterFactoryTest.php b/tests/Composer/Test/Filter/PlatformRequirementFilter/PlatformRequirementFilterFactoryTest.php index ce2055e39..65497cc0d 100644 --- a/tests/Composer/Test/Filter/PlatformRequirementFilter/PlatformRequirementFilterFactoryTest.php +++ b/tests/Composer/Test/Filter/PlatformRequirementFilter/PlatformRequirementFilterFactoryTest.php @@ -33,11 +33,11 @@ final class PlatformRequirementFilterFactoryTest extends TestCase */ public function dataFromBoolOrList(): array { - return array( - 'true creates IgnoreAllFilter' => array(true, 'Composer\Filter\PlatformRequirementFilter\IgnoreAllPlatformRequirementFilter'), - 'false creates IgnoreNothingFilter' => array(false, 'Composer\Filter\PlatformRequirementFilter\IgnoreNothingPlatformRequirementFilter'), - 'list creates IgnoreListFilter' => array(array('php', 'ext-json'), 'Composer\Filter\PlatformRequirementFilter\IgnoreListPlatformRequirementFilter'), - ); + return [ + 'true creates IgnoreAllFilter' => [true, 'Composer\Filter\PlatformRequirementFilter\IgnoreAllPlatformRequirementFilter'], + 'false creates IgnoreNothingFilter' => [false, 'Composer\Filter\PlatformRequirementFilter\IgnoreNothingPlatformRequirementFilter'], + 'list creates IgnoreListFilter' => [['php', 'ext-json'], 'Composer\Filter\PlatformRequirementFilter\IgnoreListPlatformRequirementFilter'], + ]; } public function testFromBoolThrowsExceptionIfTypeIsUnknown(): void diff --git a/tests/Composer/Test/IO/BufferIOTest.php b/tests/Composer/Test/IO/BufferIOTest.php index 0e2d11101..0cf979677 100644 --- a/tests/Composer/Test/IO/BufferIOTest.php +++ b/tests/Composer/Test/IO/BufferIOTest.php @@ -31,11 +31,11 @@ class BufferIOTest extends TestCase self::expectExceptionMessage('Setting the user inputs requires at least the version 3.2 of the symfony/console component.'); } - $bufferIO->setUserInputs(array( + $bufferIO->setUserInputs([ 'yes', 'no', '', - )); + ]); $this->assertTrue($bufferIO->askConfirmation('Please say yes!', false)); $this->assertFalse($bufferIO->askConfirmation('Now please say no!', true)); diff --git a/tests/Composer/Test/IO/ConsoleIOTest.php b/tests/Composer/Test/IO/ConsoleIOTest.php index 8a0799acf..04483e751 100644 --- a/tests/Composer/Test/IO/ConsoleIOTest.php +++ b/tests/Composer/Test/IO/ConsoleIOTest.php @@ -83,7 +83,7 @@ class ConsoleIOTest extends TestCase $outputMock->expects($this->once()) ->method('write') ->with( - $this->callback(function ($messages): bool { + $this->callback(static function ($messages): bool { $result = Preg::isMatch("[(.*)/(.*) First line]", $messages[0]); $result = $result && Preg::isMatch("[(.*)/(.*) Second line]", $messages[1]); @@ -209,7 +209,7 @@ class ConsoleIOTest extends TestCase ->will($this->returnValue($helperMock)) ; - $validator = function ($value): bool { + $validator = static function ($value): bool { return true; }; $consoleIO = new ConsoleIO($inputMock, $outputMock, $setMock); @@ -231,7 +231,7 @@ class ConsoleIOTest extends TestCase $this->isInstanceOf('Symfony\Component\Console\Output\OutputInterface'), $this->isInstanceOf('Symfony\Component\Console\Question\Question') ) - ->will($this->returnValue(array('item2'))); + ->will($this->returnValue(['item2'])); $setMock ->expects($this->once()) @@ -241,8 +241,8 @@ class ConsoleIOTest extends TestCase ; $consoleIO = new ConsoleIO($inputMock, $outputMock, $setMock); - $result = $consoleIO->select('Select item', array("item1", "item2"), 'item1', false, "Error message", true); - $this->assertEquals(array('1'), $result); + $result = $consoleIO->select('Select item', ["item1", "item2"], 'item1', false, "Error message", true); + $this->assertEquals(['1'], $result); } public function testSetAndgetAuthentication(): void @@ -255,7 +255,7 @@ class ConsoleIOTest extends TestCase $consoleIO->setAuthentication('repoName', 'l3l0', 'passwd'); $this->assertEquals( - array('username' => 'l3l0', 'password' => 'passwd'), + ['username' => 'l3l0', 'password' => 'passwd'], $consoleIO->getAuthentication('repoName') ); } @@ -269,7 +269,7 @@ class ConsoleIOTest extends TestCase $consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock); $this->assertEquals( - array('username' => null, 'password' => null), + ['username' => null, 'password' => null], $consoleIO->getAuthentication('repoName') ); } diff --git a/tests/Composer/Test/IO/NullIOTest.php b/tests/Composer/Test/IO/NullIOTest.php index c9e02af37..9aa6bc6a9 100644 --- a/tests/Composer/Test/IO/NullIOTest.php +++ b/tests/Composer/Test/IO/NullIOTest.php @@ -44,7 +44,7 @@ class NullIOTest extends TestCase $this->assertIsArray($io->getAuthentications()); // @phpstan-ignore-line $this->assertEmpty($io->getAuthentications()); - $this->assertEquals(array('username' => null, 'password' => null), $io->getAuthentication('foo')); + $this->assertEquals(['username' => null, 'password' => null], $io->getAuthentication('foo')); } public function testAsk(): void @@ -65,7 +65,7 @@ class NullIOTest extends TestCase { $io = new NullIO(); - $this->assertEquals('foo', $io->askAndValidate('question', function ($x): bool { + $this->assertEquals('foo', $io->askAndValidate('question', static function ($x): bool { return true; }, null, 'foo')); } @@ -74,6 +74,6 @@ class NullIOTest extends TestCase { $io = new NullIO(); - $this->assertEquals('1', $io->select('question', array('item1', 'item2'), '1', 2, 'foo', true)); + $this->assertEquals('1', $io->select('question', ['item1', 'item2'], '1', 2, 'foo', true)); } } diff --git a/tests/Composer/Test/InstalledVersionsTest.php b/tests/Composer/Test/InstalledVersionsTest.php index 4eab8d028..6edd91e04 100644 --- a/tests/Composer/Test/InstalledVersionsTest.php +++ b/tests/Composer/Test/InstalledVersionsTest.php @@ -33,7 +33,7 @@ class InstalledVersionsTest extends TestCase $prop = new \ReflectionProperty('Composer\Autoload\ClassLoader', 'registeredLoaders'); $prop->setAccessible(true); self::$previousRegisteredLoaders = $prop->getValue(); - $prop->setValue(array()); + $prop->setValue([]); } public static function tearDownAfterClass(): void @@ -54,7 +54,7 @@ class InstalledVersionsTest extends TestCase public function testGetInstalledPackages(): void { - $names = array( + $names = [ '__root__', 'a/provider', 'a/provider2', @@ -64,15 +64,12 @@ class InstalledVersionsTest extends TestCase 'foo/impl2', 'foo/replaced', 'meta/package', - ); + ]; $this->assertSame($names, InstalledVersions::getInstalledPackages()); } /** * @dataProvider isInstalledProvider - * @param bool $expected - * @param string $name - * @param bool $includeDevRequirements */ public function testIsInstalled(bool $expected, string $name, bool $includeDevRequirements = true): void { @@ -81,23 +78,20 @@ class InstalledVersionsTest extends TestCase public static function isInstalledProvider(): array { - return array( - array(true, 'foo/impl'), - array(true, 'foo/replaced'), - array(true, 'c/c'), - array(false, 'c/c', false), - array(true, '__root__'), - array(true, 'b/replacer'), - array(false, 'not/there'), - array(true, 'meta/package'), - ); + return [ + [true, 'foo/impl'], + [true, 'foo/replaced'], + [true, 'c/c'], + [false, 'c/c', false], + [true, '__root__'], + [true, 'b/replacer'], + [false, 'not/there'], + [true, 'meta/package'], + ]; } /** * @dataProvider satisfiesProvider - * @param bool $expected - * @param string $name - * @param string $constraint */ public function testSatisfies(bool $expected, string $name, string $constraint): void { @@ -106,38 +100,36 @@ class InstalledVersionsTest extends TestCase public static function satisfiesProvider(): array { - return array( - array(true, 'foo/impl', '1.5'), - array(true, 'foo/impl', '1.2'), - array(true, 'foo/impl', '^1.0'), - array(true, 'foo/impl', '^3 || ^2'), - array(false, 'foo/impl', '^3'), + return [ + [true, 'foo/impl', '1.5'], + [true, 'foo/impl', '1.2'], + [true, 'foo/impl', '^1.0'], + [true, 'foo/impl', '^3 || ^2'], + [false, 'foo/impl', '^3'], - array(true, 'foo/replaced', '3.5'), - array(true, 'foo/replaced', '^3.2'), - array(false, 'foo/replaced', '4.0'), + [true, 'foo/replaced', '3.5'], + [true, 'foo/replaced', '^3.2'], + [false, 'foo/replaced', '4.0'], - array(true, 'c/c', '3.0.0'), - array(true, 'c/c', '^3'), - array(false, 'c/c', '^3.1'), + [true, 'c/c', '3.0.0'], + [true, 'c/c', '^3'], + [false, 'c/c', '^3.1'], - array(true, '__root__', 'dev-master'), - array(true, '__root__', '^1.10'), - array(false, '__root__', '^2'), + [true, '__root__', 'dev-master'], + [true, '__root__', '^1.10'], + [false, '__root__', '^2'], - array(true, 'b/replacer', '^2.1'), - array(false, 'b/replacer', '^2.3'), + [true, 'b/replacer', '^2.1'], + [false, 'b/replacer', '^2.3'], - array(true, 'a/provider2', '^1.2'), - array(true, 'a/provider2', '^1.4'), - array(false, 'a/provider2', '^1.5'), - ); + [true, 'a/provider2', '^1.2'], + [true, 'a/provider2', '^1.4'], + [false, 'a/provider2', '^1.5'], + ]; } /** * @dataProvider getVersionRangesProvider - * @param string $expected - * @param string $name */ public function testGetVersionRanges(string $expected, string $name): void { @@ -146,22 +138,20 @@ class InstalledVersionsTest extends TestCase public static function getVersionRangesProvider(): array { - return array( - array('dev-master || 1.10.x-dev', '__root__'), - array('^1.1 || 1.2 || 1.4 || 2.0', 'foo/impl'), - array('2.2 || 2.0', 'foo/impl2'), - array('^3.0', 'foo/replaced'), - array('1.1', 'a/provider'), - array('1.2 || 1.4', 'a/provider2'), - array('2.2', 'b/replacer'), - array('3.0', 'c/c'), - ); + return [ + ['dev-master || 1.10.x-dev', '__root__'], + ['^1.1 || 1.2 || 1.4 || 2.0', 'foo/impl'], + ['2.2 || 2.0', 'foo/impl2'], + ['^3.0', 'foo/replaced'], + ['1.1', 'a/provider'], + ['1.2 || 1.4', 'a/provider2'], + ['2.2', 'b/replacer'], + ['3.0', 'c/c'], + ]; } /** * @dataProvider getVersionProvider - * @param null|string $expected - * @param string $name */ public function testGetVersion(?string $expected, string $name): void { @@ -170,22 +160,20 @@ class InstalledVersionsTest extends TestCase public static function getVersionProvider(): array { - return array( - array('dev-master', '__root__'), - array(null, 'foo/impl'), - array(null, 'foo/impl2'), - array(null, 'foo/replaced'), - array('1.1.0.0', 'a/provider'), - array('1.2.0.0', 'a/provider2'), - array('2.2.0.0', 'b/replacer'), - array('3.0.0.0', 'c/c'), - ); + return [ + ['dev-master', '__root__'], + [null, 'foo/impl'], + [null, 'foo/impl2'], + [null, 'foo/replaced'], + ['1.1.0.0', 'a/provider'], + ['1.2.0.0', 'a/provider2'], + ['2.2.0.0', 'b/replacer'], + ['3.0.0.0', 'c/c'], + ]; } /** * @dataProvider getPrettyVersionProvider - * @param null|string $expected - * @param string $name */ public function testGetPrettyVersion(?string $expected, string $name): void { @@ -194,16 +182,16 @@ class InstalledVersionsTest extends TestCase public static function getPrettyVersionProvider(): array { - return array( - array('dev-master', '__root__'), - array(null, 'foo/impl'), - array(null, 'foo/impl2'), - array(null, 'foo/replaced'), - array('1.1', 'a/provider'), - array('1.2', 'a/provider2'), - array('2.2', 'b/replacer'), - array('3.0', 'c/c'), - ); + return [ + ['dev-master', '__root__'], + [null, 'foo/impl'], + [null, 'foo/impl2'], + [null, 'foo/replaced'], + ['1.1', 'a/provider'], + ['1.2', 'a/provider2'], + ['2.2', 'b/replacer'], + ['3.0', 'c/c'], + ]; } public function testGetVersionOutOfBounds(): void @@ -214,18 +202,18 @@ class InstalledVersionsTest extends TestCase public function testGetRootPackage(): void { - $this->assertSame(array( + $this->assertSame([ 'name' => '__root__', 'pretty_version' => 'dev-master', 'version' => 'dev-master', 'reference' => 'sourceref-by-default', 'type' => 'library', 'install_path' => $this->root . '/./', - 'aliases' => array( + 'aliases' => [ '1.10.x-dev', - ), + ], 'dev' => true, - ), InstalledVersions::getRootPackage()); + ], InstalledVersions::getRootPackage()); } /** @@ -239,8 +227,6 @@ class InstalledVersionsTest extends TestCase /** * @dataProvider getReferenceProvider - * @param null|string $expected - * @param string $name */ public function testGetReference(?string $expected, string $name): void { @@ -249,27 +235,27 @@ class InstalledVersionsTest extends TestCase public static function getReferenceProvider(): array { - return array( - array('sourceref-by-default', '__root__'), - array(null, 'foo/impl'), - array(null, 'foo/impl2'), - array(null, 'foo/replaced'), - array('distref-as-no-source', 'a/provider'), - array('distref-as-installed-from-dist', 'a/provider2'), - array(null, 'b/replacer'), - array(null, 'c/c'), - ); + return [ + ['sourceref-by-default', '__root__'], + [null, 'foo/impl'], + [null, 'foo/impl2'], + [null, 'foo/replaced'], + ['distref-as-no-source', 'a/provider'], + ['distref-as-installed-from-dist', 'a/provider2'], + [null, 'b/replacer'], + [null, 'c/c'], + ]; } public function testGetInstalledPackagesByType(): void { - $names = array( + $names = [ '__root__', 'a/provider', 'a/provider2', 'b/replacer', 'c/c', - ); + ]; $this->assertSame($names, \Composer\InstalledVersions::getInstalledPackagesByType('library')); } diff --git a/tests/Composer/Test/Installer/BinaryInstallerTest.php b/tests/Composer/Test/Installer/BinaryInstallerTest.php index 2bcc9b610..cedfd2027 100644 --- a/tests/Composer/Test/Installer/BinaryInstallerTest.php +++ b/tests/Composer/Test/Installer/BinaryInstallerTest.php @@ -66,14 +66,13 @@ class BinaryInstallerTest extends TestCase /** * @dataProvider executableBinaryProvider - * @param string $contents */ public function testInstallAndExecBinaryWithFullCompat(string $contents): void { $package = $this->createPackageMock(); $package->expects($this->any()) ->method('getBinaries') - ->willReturn(array('binary')); + ->willReturn(['binary']); $this->ensureDirectoryExistsAndClear($this->vendorDir.'/foo/bar'); file_put_contents($this->vendorDir.'/foo/bar/binary', $contents); @@ -89,31 +88,31 @@ class BinaryInstallerTest extends TestCase public function executableBinaryProvider(): array { - return array( - 'simple php file' => array(<<<'EOL' + return [ + 'simple php file' => [<<<'EOL' array(<<<'EOL' + ], + 'php file with shebang' => [<<<'EOL' #!/usr/bin/env php array( + ], + 'phar file' => [ base64_decode('IyEvdXNyL2Jpbi9lbnYgcGhwCjw/cGhwCgpQaGFyOjptYXBQaGFyKCd0ZXN0LnBoYXInKTsKCnJlcXVpcmUgJ3BoYXI6Ly90ZXN0LnBoYXIvcnVuLnBocCc7CgpfX0hBTFRfQ09NUElMRVIoKTsgPz4NCj4AAAABAAAAEQAAAAEACQAAAHRlc3QucGhhcgAAAAAHAAAAcnVuLnBocCoAAADb9n9hKgAAAMUDDWGkAQAAAAAAADw/cGhwIGVjaG8gInN1Y2Nlc3MgIi4kX1NFUlZFUlsiYXJndiJdWzFdO1SOC0IE3+UN0yzrHIwyspp9slhmAgAAAEdCTUI='), - ), - 'shebang with strict types declare' => array(<<<'EOL' + ], + 'shebang with strict types declare' => [<<<'EOL' #!/usr/bin/env php getMockBuilder('Composer\Package\Package') - ->setConstructorArgs(array(md5((string) mt_rand()), '1.0.0.0', '1.0.0')) + ->setConstructorArgs([md5((string) mt_rand()), '1.0.0.0', '1.0.0']) ->getMock(); } } diff --git a/tests/Composer/Test/Installer/InstallationManagerTest.php b/tests/Composer/Test/Installer/InstallationManagerTest.php index 5b3d4b428..d1c7746d0 100644 --- a/tests/Composer/Test/Installer/InstallationManagerTest.php +++ b/tests/Composer/Test/Installer/InstallationManagerTest.php @@ -50,7 +50,7 @@ class InstallationManagerTest extends TestCase $installer ->expects($this->exactly(2)) ->method('supports') - ->will($this->returnCallback(function ($arg): bool { + ->will($this->returnCallback(static function ($arg): bool { return $arg === 'vendor'; })); @@ -70,7 +70,7 @@ class InstallationManagerTest extends TestCase $installer ->expects($this->exactly(2)) ->method('supports') - ->will($this->returnCallback(function ($arg): bool { + ->will($this->returnCallback(static function ($arg): bool { return $arg === 'vendor'; })); @@ -79,7 +79,7 @@ class InstallationManagerTest extends TestCase $installer2 ->expects($this->exactly(1)) ->method('supports') - ->will($this->returnCallback(function ($arg): bool { + ->will($this->returnCallback(static function ($arg): bool { return $arg === 'vendor'; })); @@ -96,8 +96,8 @@ class InstallationManagerTest extends TestCase public function testExecute(): void { $manager = $this->getMockBuilder('Composer\Installer\InstallationManager') - ->setConstructorArgs(array($this->loop, $this->io)) - ->onlyMethods(array('install', 'update', 'uninstall')) + ->setConstructorArgs([$this->loop, $this->io]) + ->onlyMethods(['install', 'update', 'uninstall']) ->getMock(); $installOperation = new InstallOperation($package = $this->createPackageMock()); @@ -125,7 +125,7 @@ class InstallationManagerTest extends TestCase ->with($this->repository, $updateOperation); $manager->addInstaller(new NoopInstaller()); - $manager->execute($this->repository, array($installOperation, $removeOperation, $updateOperation)); + $manager->execute($this->repository, [$installOperation, $removeOperation, $updateOperation]); } public function testInstall(): void @@ -212,7 +212,7 @@ class InstallationManagerTest extends TestCase $bundleInstaller ->expects($this->exactly(2)) ->method('supports') - ->will($this->returnCallback(function ($arg): bool { + ->will($this->returnCallback(static function ($arg): bool { return $arg === 'bundles'; })); diff --git a/tests/Composer/Test/Installer/LibraryInstallerTest.php b/tests/Composer/Test/Installer/LibraryInstallerTest.php index 173ba361f..71e4b3c9d 100644 --- a/tests/Composer/Test/Installer/LibraryInstallerTest.php +++ b/tests/Composer/Test/Installer/LibraryInstallerTest.php @@ -81,12 +81,12 @@ class LibraryInstallerTest extends TestCase $this->binDir = $this->rootDir.DIRECTORY_SEPARATOR.'bin'; self::ensureDirectoryExistsAndClear($this->binDir); - $this->config->merge(array( - 'config' => array( + $this->config->merge([ + 'config' => [ 'vendor-dir' => $this->vendorDir, 'bin-dir' => $this->binDir, - ), - )); + ], + ]); $this->dm = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->disableOriginalConstructor() diff --git a/tests/Composer/Test/Installer/MetapackageInstallerTest.php b/tests/Composer/Test/Installer/MetapackageInstallerTest.php index 114c3f95b..83bc2704f 100644 --- a/tests/Composer/Test/Installer/MetapackageInstallerTest.php +++ b/tests/Composer/Test/Installer/MetapackageInstallerTest.php @@ -113,7 +113,7 @@ class MetapackageInstallerTest extends TestCase private function createPackageMock() { return $this->getMockBuilder('Composer\Package\Package') - ->setConstructorArgs(array(md5((string) mt_rand()), '1.0.0.0', '1.0.0')) + ->setConstructorArgs([md5((string) mt_rand()), '1.0.0.0', '1.0.0']) ->getMock(); } } diff --git a/tests/Composer/Test/Installer/SuggestedPackagesReporterTest.php b/tests/Composer/Test/Installer/SuggestedPackagesReporterTest.php index e7fada87b..64a961f0d 100644 --- a/tests/Composer/Test/Installer/SuggestedPackagesReporterTest.php +++ b/tests/Composer/Test/Installer/SuggestedPackagesReporterTest.php @@ -72,7 +72,7 @@ class SuggestedPackagesReporterTest extends TestCase $suggestedPackage['reason'] ); $this->assertSame( - array($suggestedPackage), + [$suggestedPackage], $this->suggestedPackagesReporter->getPackages() ); } @@ -100,7 +100,7 @@ class SuggestedPackagesReporterTest extends TestCase $suggestedPackageB['reason'] ); $this->assertSame( - array($suggestedPackageA, $suggestedPackageB), + [$suggestedPackageA, $suggestedPackageB], $this->suggestedPackagesReporter->getPackages() ); } @@ -113,27 +113,27 @@ class SuggestedPackagesReporterTest extends TestCase $package = $this->createPackageMock(); $package->expects($this->once()) ->method('getSuggests') - ->will($this->returnValue(array( + ->will($this->returnValue([ 'target-a' => 'reason-a', 'target-b' => 'reason-b', - ))); + ])); $package->expects($this->once()) ->method('getPrettyName') ->will($this->returnValue('package-pretty-name')); $this->suggestedPackagesReporter->addSuggestionsFromPackage($package); - $this->assertSame(array( - array( + $this->assertSame([ + [ 'source' => 'package-pretty-name', 'target' => 'target-a', 'reason' => 'reason-a', - ), - array( + ], + [ 'source' => 'package-pretty-name', 'target' => 'target-b', 'reason' => 'reason-b', - ), - ), $this->suggestedPackagesReporter->getPackages()); + ], + ], $this->suggestedPackagesReporter->getPackages()); } /** @@ -229,18 +229,18 @@ class SuggestedPackagesReporterTest extends TestCase $package1->expects($this->once()) ->method('getNames') - ->will($this->returnValue(array('x', 'y'))); + ->will($this->returnValue(['x', 'y'])); $package2->expects($this->once()) ->method('getNames') - ->will($this->returnValue(array('b'))); + ->will($this->returnValue(['b'])); $repository->expects($this->once()) ->method('getPackages') - ->will($this->returnValue(array( + ->will($this->returnValue([ $package1, $package2, - ))); + ])); $this->suggestedPackagesReporter->addPackage('a', 'b', 'c'); $this->suggestedPackagesReporter->addPackage('source package', 'target', 'because reasons'); @@ -273,11 +273,11 @@ class SuggestedPackagesReporterTest extends TestCase */ private function getSuggestedPackageArray(): array { - return array( + return [ 'source' => 'a', 'target' => 'b', 'reason' => 'c', - ); + ]; } /** @@ -286,7 +286,7 @@ class SuggestedPackagesReporterTest extends TestCase private function createPackageMock() { return $this->getMockBuilder('Composer\Package\Package') - ->setConstructorArgs(array(md5((string) mt_rand()), '1.0.0.0', '1.0.0')) + ->setConstructorArgs([md5((string) mt_rand()), '1.0.0.0', '1.0.0']) ->getMock(); } } diff --git a/tests/Composer/Test/InstallerTest.php b/tests/Composer/Test/InstallerTest.php index 33d97a199..6055fbef4 100644 --- a/tests/Composer/Test/InstallerTest.php +++ b/tests/Composer/Test/InstallerTest.php @@ -78,12 +78,12 @@ class InstallerTest extends TestCase $io = new BufferIO('', OutputInterface::VERBOSITY_NORMAL, new OutputFormatter(false)); $downloadManager = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->setConstructorArgs(array($io)) + ->setConstructorArgs([$io]) ->getMock(); $config = $this->getMockBuilder('Composer\Config')->getMock(); $config->expects($this->any()) ->method('get') - ->will($this->returnCallback(function ($key) { + ->will($this->returnCallback(static function ($key) { switch ($key) { case 'vendor-dir': return 'foo'; @@ -91,7 +91,7 @@ class InstallerTest extends TestCase case 'notify-on-install': return true; case 'platform': - return array(); + return []; } throw new \UnexpectedValueException('Unknown key '.$key); @@ -103,7 +103,7 @@ class InstallerTest extends TestCase $repositoryManager->setLocalRepository(new InstalledArrayRepository()); if (!is_array($repositories)) { - $repositories = array($repositories); + $repositories = [$repositories]; } foreach ($repositories as $repository) { $repositoryManager->addRepository($repository); @@ -116,17 +116,17 @@ class InstallerTest extends TestCase $lockJsonMock = $this->getMockBuilder('Composer\Json\JsonFile')->disableOriginalConstructor()->getMock(); $lockJsonMock->expects($this->any()) ->method('read') - ->will($this->returnCallback(function () use (&$lockData) { + ->will($this->returnCallback(static function () use (&$lockData) { return json_decode($lockData, true); })); $lockJsonMock->expects($this->any()) ->method('exists') - ->will($this->returnCallback(function () use (&$lockData): bool { + ->will($this->returnCallback(static function () use (&$lockData): bool { return $lockData !== null; })); $lockJsonMock->expects($this->any()) ->method('write') - ->will($this->returnCallback(function ($value, $options = 0) use (&$lockData): void { + ->will($this->returnCallback(static function ($value, $options = 0) use (&$lockData): void { $lockData = json_encode($value, JSON_PRETTY_PRINT); })); @@ -142,9 +142,9 @@ class InstallerTest extends TestCase $output = str_replace("\r", '', $io->getOutput()); $this->assertEquals(0, $result, $output); - $expectedInstalled = $options['install'] ?? array(); - $expectedUpdated = $options['update'] ?? array(); - $expectedUninstalled = $options['uninstall'] ?? array(); + $expectedInstalled = $options['install'] ?? []; + $expectedUpdated = $options['update'] ?? []; + $expectedUninstalled = $options['uninstall'] ?? []; $installed = $installationManager->getInstalledPackages(); $this->assertEquals($this->makePackagesComparable($expectedInstalled), $this->makePackagesComparable($installed)); @@ -164,7 +164,7 @@ class InstallerTest extends TestCase { $dumper = new ArrayDumper(); - $comparable = array(); + $comparable = []; foreach ($packages as $package) { $comparable[] = $dumper->dump($package); } @@ -174,47 +174,47 @@ class InstallerTest extends TestCase public function provideInstaller(): array { - $cases = array(); + $cases = []; // when A requires B and B requires A, and A is a non-published root package // the install of B should succeed $a = $this->getPackage('A', '1.0.0', 'Composer\Package\RootPackage'); - $a->setRequires(array( + $a->setRequires([ 'b' => new Link('A', 'B', $v = $this->getVersionConstraint('=', '1.0.0'), Link::TYPE_REQUIRE, $v->getPrettyString()), - )); + ]); $b = $this->getPackage('B', '1.0.0'); - $b->setRequires(array( + $b->setRequires([ 'a' => new Link('B', 'A', $v = $this->getVersionConstraint('=', '1.0.0'), Link::TYPE_REQUIRE, $v->getPrettyString()), - )); + ]); - $cases[] = array( + $cases[] = [ $a, - [new ArrayRepository(array($b))], - array( - 'install' => array($b), - ), - ); + [new ArrayRepository([$b])], + [ + 'install' => [$b], + ], + ]; // #480: when A requires B and B requires A, and A is a published root package // only B should be installed, as A is the root $a = $this->getPackage('A', '1.0.0', 'Composer\Package\RootPackage'); - $a->setRequires(array( + $a->setRequires([ 'b' => new Link('A', 'B', $v = $this->getVersionConstraint('=', '1.0.0'), Link::TYPE_REQUIRE, $v->getPrettyString()), - )); + ]); $b = $this->getPackage('B', '1.0.0'); - $b->setRequires(array( + $b->setRequires([ 'a' => new Link('B', 'A', $v = $this->getVersionConstraint('=', '1.0.0'), Link::TYPE_REQUIRE, $v->getPrettyString()), - )); + ]); - $cases[] = array( + $cases[] = [ $a, - [new ArrayRepository(array($a, $b))], - array( - 'install' => array($b), - ), - ); + [new ArrayRepository([$a, $b])], + [ + 'install' => [$b], + ], + ]; // TODO why are there not more cases with uninstall/update? return $cases; @@ -223,18 +223,11 @@ class InstallerTest extends TestCase /** * @group slow * @dataProvider provideSlowIntegrationTests - * @param string $file - * @param string $message - * @param null|string $condition * @param mixed[] $composerConfig * @param ?array $lock * @param ?array $installed - * @param string $run * @param mixed[]|false $expectLock * @param ?array $expectInstalled - * @param null|string $expectOutput - * @param null|string $expectOutputOptimized - * @param string $expect * @param int|class-string<\Throwable> $expectResult */ public function testSlowIntegration(string $file, string $message, ?string $condition, array $composerConfig, ?array $lock, ?array $installed, string $run, $expectLock, ?array $expectInstalled, ?string $expectOutput, ?string $expectOutputOptimized, string $expect, $expectResult): void @@ -246,18 +239,11 @@ class InstallerTest extends TestCase /** * @dataProvider provideIntegrationTests - * @param string $file - * @param string $message - * @param null|string $condition * @param mixed[] $composerConfig * @param ?array $lock * @param ?array $installed - * @param string $run * @param mixed[]|false $expectLock * @param ?array $expectInstalled - * @param null|string $expectOutput - * @param null|string $expectOutputOptimized - * @param string $expect * @param int|class-string<\Throwable> $expectResult */ public function testIntegrationWithPoolOptimizer(string $file, string $message, ?string $condition, array $composerConfig, ?array $lock, ?array $installed, string $run, $expectLock, ?array $expectInstalled, ?string $expectOutput, ?string $expectOutputOptimized, string $expect, $expectResult): void @@ -269,18 +255,11 @@ class InstallerTest extends TestCase /** * @dataProvider provideIntegrationTests - * @param string $file - * @param string $message - * @param null|string $condition * @param mixed[] $composerConfig * @param ?array $lock * @param ?array $installed - * @param string $run * @param mixed[]|false $expectLock * @param ?array $expectInstalled - * @param null|string $expectOutput - * @param null|string $expectOutputOptimized - * @param string $expect * @param int|class-string<\Throwable> $expectResult */ public function testIntegrationWithRawPool(string $file, string $message, ?string $condition, array $composerConfig, ?array $lock, ?array $installed, string $run, $expectLock, ?array $expectInstalled, ?string $expectOutput, ?string $expectOutputOptimized, string $expect, $expectResult): void @@ -291,19 +270,12 @@ class InstallerTest extends TestCase } /** - * @param string $file - * @param string $message - * @param null|string $condition * @param mixed[] $composerConfig * @param ?array $lock * @param ?array $installed - * @param string $run * @param mixed[]|false $expectLock * @param ?array $expectInstalled - * @param null|string $expectOutput - * @param string $expect * @param int|class-string<\Throwable> $expectResult - * @return void */ private function doTestIntegration(string $file, string $message, ?string $condition, array $composerConfig, ?array $lock, ?array $installed, string $run, $expectLock, ?array $expectInstalled, ?string $expectOutput, string $expect, $expectResult): void { @@ -343,25 +315,25 @@ class InstallerTest extends TestCase $lockJsonMock = $this->getMockBuilder('Composer\Json\JsonFile')->disableOriginalConstructor()->getMock(); $lockJsonMock->expects($this->any()) ->method('read') - ->will($this->returnCallback(function () use (&$lockData) { + ->will($this->returnCallback(static function () use (&$lockData) { return json_decode($lockData, true); })); $lockJsonMock->expects($this->any()) ->method('exists') - ->will($this->returnCallback(function () use (&$lockData): bool { + ->will($this->returnCallback(static function () use (&$lockData): bool { return $lockData !== null; })); $lockJsonMock->expects($this->any()) ->method('write') - ->will($this->returnCallback(function ($value, $options = 0) use (&$lockData): void { + ->will($this->returnCallback(static function ($value, $options = 0) use (&$lockData): void { $lockData = json_encode($value, JSON_PRETTY_PRINT); })); if ($expectLock) { - $actualLock = array(); + $actualLock = []; $lockJsonMock->expects($this->atLeastOnce()) ->method('write') - ->will($this->returnCallback(function ($hash, $options) use (&$actualLock): void { + ->will($this->returnCallback(static function ($hash, $options) use (&$actualLock): void { // need to do assertion outside of mock for nice phpunit output // so store value temporarily in reference for later assetion $actualLock = $hash; @@ -377,7 +349,7 @@ class InstallerTest extends TestCase $eventDispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher')->disableOriginalConstructor()->getMock(); $autoloadGenerator = $this->getMockBuilder('Composer\Autoload\AutoloadGenerator') - ->setConstructorArgs(array($eventDispatcher)) + ->setConstructorArgs([$eventDispatcher]) ->getMock(); $composer->setAutoloadGenerator($autoloadGenerator); $composer->setEventDispatcher($eventDispatcher); @@ -390,7 +362,7 @@ class InstallerTest extends TestCase $install->addOption('ignore-platform-req', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY); $install->addOption('no-dev', null, InputOption::VALUE_NONE); $install->addOption('dry-run', null, InputOption::VALUE_NONE); - $install->setCode(function ($input, $output) use ($installer): int { + $install->setCode(static function ($input, $output) use ($installer): int { $ignorePlatformReqs = $input->getOption('ignore-platform-reqs') ?: ($input->getOption('ignore-platform-req') ?: false); $installer @@ -415,10 +387,10 @@ class InstallerTest extends TestCase $update->addOption('prefer-stable', null, InputOption::VALUE_NONE); $update->addOption('prefer-lowest', null, InputOption::VALUE_NONE); $update->addArgument('packages', InputArgument::IS_ARRAY | InputArgument::OPTIONAL); - $update->setCode(function ($input, $output) use ($installer): int { + $update->setCode(static function ($input, $output) use ($installer): int { $packages = $input->getArgument('packages'); - $filteredPackages = array_filter($packages, function ($package): bool { - return !in_array($package, array('lock', 'nothing', 'mirrors'), true); + $filteredPackages = array_filter($packages, static function ($package): bool { + return !in_array($package, ['lock', 'nothing', 'mirrors'], true); }); $updateMirrors = $input->getOption('lock') || count($filteredPackages) !== count($packages); $packages = $filteredPackages; @@ -476,7 +448,7 @@ class InstallerTest extends TestCase } if ($expectInstalled !== null) { - $actualInstalled = array(); + $actualInstalled = []; $dumper = new ArrayDumper(); foreach ($repositoryManager->getLocalRepository()->getCanonicalPackages() as $package) { @@ -485,7 +457,7 @@ class InstallerTest extends TestCase $actualInstalled[] = $package; } - usort($actualInstalled, function ($a, $b): int { + usort($actualInstalled, static function ($a, $b): int { return strcmp($a['name'], $b['name']); }); @@ -515,13 +487,12 @@ class InstallerTest extends TestCase } /** - * @param string $path * @return mixed[] */ public function loadIntegrationTests(string $path): array { $fixturesDir = realpath(__DIR__.'/Fixtures/'.$path); - $tests = array(); + $tests = []; foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($fixturesDir), \RecursiveIteratorIterator::LEAVES_ONLY) as $file) { $file = (string) $file; @@ -533,10 +504,10 @@ class InstallerTest extends TestCase try { $testData = $this->readTestFile($file, $fixturesDir); - $installed = array(); - $installedDev = array(); - $lock = array(); - $expectLock = array(); + $installed = []; + $installedDev = []; + $lock = []; + $expectLock = []; $expectInstalled = null; $expectResult = 0; @@ -596,7 +567,7 @@ class InstallerTest extends TestCase die(sprintf('Test "%s" is not valid: '.$e->getMessage(), str_replace($fixturesDir.'/', '', $file))); } - $tests[basename($file)] = array(str_replace($fixturesDir.'/', '', $file), $message, $condition, $composer, $lock, $installed, $run, $expectLock, $expectInstalled, $expectOutput, $expectOutputOptimized, $expect, $expectResult); + $tests[basename($file)] = [str_replace($fixturesDir.'/', '', $file), $message, $condition, $composer, $lock, $installed, $run, $expectLock, $expectInstalled, $expectOutput, $expectOutputOptimized, $expect, $expectResult]; } return $tests; @@ -609,7 +580,7 @@ class InstallerTest extends TestCase { $tokens = Preg::split('#(?:^|\n*)--([A-Z-]+)--\n#', file_get_contents($file), -1, PREG_SPLIT_DELIM_CAPTURE); - $sectionInfo = array( + $sectionInfo = [ 'TEST' => true, 'CONDITION' => false, 'COMPOSER' => true, @@ -623,10 +594,10 @@ class InstallerTest extends TestCase 'EXPECT-EXIT-CODE' => false, 'EXPECT-EXCEPTION' => false, 'EXPECT' => true, - ); + ]; $section = null; - $data = array(); + $data = []; foreach ($tokens as $i => $token) { if (null === $section && empty($token)) { continue; // skip leading blank diff --git a/tests/Composer/Test/Json/ComposerSchemaTest.php b/tests/Composer/Test/Json/ComposerSchemaTest.php index 6567dc08d..c964a170c 100644 --- a/tests/Composer/Test/Json/ComposerSchemaTest.php +++ b/tests/Composer/Test/Json/ComposerSchemaTest.php @@ -22,14 +22,14 @@ class ComposerSchemaTest extends TestCase { public function testNamePattern(): void { - $expectedError = array( - array( + $expectedError = [ + [ 'property' => 'name', 'message' => 'Does not match the regex pattern ^[a-z0-9]([_.-]?[a-z0-9]+)*/[a-z0-9](([_.]|-{1,2})?[a-z0-9]+)*$', 'constraint' => 'pattern', 'pattern' => '^[a-z0-9]([_.-]?[a-z0-9]+)*/[a-z0-9](([_.]|-{1,2})?[a-z0-9]+)*$', - ), - ); + ], + ]; $json = '{"name": "vendor/-pack__age", "description": "description"}'; $this->assertEquals($expectedError, $this->check($json)); @@ -46,21 +46,21 @@ class ComposerSchemaTest extends TestCase public function testRequireTypes(): void { $json = '{"name": "vendor/package", "description": "description", "require": {"a": ["b"]} }'; - $this->assertEquals(array( - array('property' => 'require.a', 'message' => 'Array value found, but a string is required', 'constraint' => 'type'), - ), $this->check($json)); + $this->assertEquals([ + ['property' => 'require.a', 'message' => 'Array value found, but a string is required', 'constraint' => 'type'], + ], $this->check($json)); } public function testMinimumStabilityValues(): void { - $expectedError = array( - array( + $expectedError = [ + [ 'property' => 'minimum-stability', 'message' => 'Does not have a value in the enumeration ["dev","alpha","beta","rc","RC","stable"]', 'constraint' => 'enum', - 'enum' => array('dev', 'alpha', 'beta', 'rc', 'RC', 'stable'), - ), - ); + 'enum' => ['dev', 'alpha', 'beta', 'rc', 'RC', 'stable'], + ], + ]; $json = '{ "name": "vendor/package", "description": "generic description", "minimum-stability": "" }'; $this->assertEquals($expectedError, $this->check($json), 'empty string'); @@ -91,13 +91,12 @@ class ComposerSchemaTest extends TestCase } /** - * @param string $json * @return mixed */ private function check(string $json) { $validator = new Validator(); - $validator->check(json_decode($json), (object) array('$ref' => 'file://' . __DIR__ . '/../../../../res/composer-schema.json')); + $validator->check(json_decode($json), (object) ['$ref' => 'file://' . __DIR__ . '/../../../../res/composer-schema.json']); if (!$validator->isValid()) { $errors = $validator->getErrors(); diff --git a/tests/Composer/Test/Json/JsonFileTest.php b/tests/Composer/Test/Json/JsonFileTest.php index 8f07eee57..6f0ad2e74 100644 --- a/tests/Composer/Test/Json/JsonFileTest.php +++ b/tests/Composer/Test/Json/JsonFileTest.php @@ -133,7 +133,7 @@ class JsonFileTest extends TestCase $this->fail('Expected exception to be thrown (strict)'); } catch (JsonValidationException $e) { $this->assertEquals(sprintf('"%s" does not match the expected JSON schema', $file), $e->getMessage()); - $this->assertEquals(array('The property foo is not defined and the definition does not allow additional properties'), $e->getErrors()); + $this->assertEquals(['The property foo is not defined and the definition does not allow additional properties'], $e->getErrors()); } $json->validateSchema(JsonFile::LAX_SCHEMA); unlink($file); @@ -164,7 +164,7 @@ class JsonFileTest extends TestCase $this->fail('Expected exception to be thrown (strict)'); } catch (JsonValidationException $e) { $this->assertEquals($expectedMessage, $e->getMessage()); - $this->assertEquals(array('description : The property description is required'), $e->getErrors()); + $this->assertEquals(['description : The property description is required'], $e->getErrors()); } $json->validateSchema(JsonFile::LAX_SCHEMA); @@ -174,7 +174,7 @@ class JsonFileTest extends TestCase $this->fail('Expected exception to be thrown (strict)'); } catch (JsonValidationException $e) { $this->assertEquals($expectedMessage, $e->getMessage()); - $this->assertEquals(array('name : The property name is required'), $e->getErrors()); + $this->assertEquals(['name : The property name is required'], $e->getErrors()); } $json->validateSchema(JsonFile::LAX_SCHEMA); @@ -278,7 +278,7 @@ class JsonFileTest extends TestCase public function testSimpleJsonString(): void { - $data = array('name' => 'composer/composer'); + $data = ['name' => 'composer/composer']; $json = '{ "name": "composer/composer" }'; @@ -287,7 +287,7 @@ class JsonFileTest extends TestCase public function testTrailingBackslash(): void { - $data = array('Metadata\\' => 'src/'); + $data = ['Metadata\\' => 'src/']; $json = '{ "Metadata\\\\": "src/" }'; @@ -296,7 +296,7 @@ class JsonFileTest extends TestCase public function testFormatEmptyArray(): void { - $data = array('test' => array(), 'test2' => new \stdClass); + $data = ['test' => [], 'test2' => new \stdClass]; $json = '{ "test": [], "test2": {} @@ -306,7 +306,7 @@ class JsonFileTest extends TestCase public function testEscape(): void { - $data = array("Metadata\\\"" => 'src/'); + $data = ["Metadata\\\"" => 'src/']; $json = '{ "Metadata\\\\\\"": "src/" }'; @@ -316,7 +316,7 @@ class JsonFileTest extends TestCase public function testUnicode(): void { - $data = array("Žluťoučký \" kůň" => "úpěl ďábelské ódy za €"); + $data = ["Žluťoučký \" kůň" => "úpěl ďábelské ódy za €"]; $json = '{ "Žluťoučký \" kůň": "úpěl ďábelské ódy za €" }'; @@ -355,20 +355,15 @@ class JsonFileTest extends TestCase public function testDoubleEscapedUnicode(): void { $jsonFile = new JsonFile('composer.json'); - $data = array("Zdjęcia","hjkjhl\\u0119kkjk"); + $data = ["Zdjęcia","hjkjhl\\u0119kkjk"]; $encodedData = $jsonFile->encode($data); - $doubleEncodedData = $jsonFile->encode(array('t' => $encodedData)); + $doubleEncodedData = $jsonFile->encode(['t' => $encodedData]); $decodedData = json_decode($doubleEncodedData, true); $doubleData = json_decode($decodedData['t'], true); $this->assertEquals($data, $doubleData); } - /** - * @param string $text - * @param string $json - * @return void - */ private function expectParseException(string $text, string $json): void { try { @@ -380,10 +375,7 @@ class JsonFileTest extends TestCase } /** - * @param string $json * @param mixed $data - * @param int|null $options - * @return void */ private function assertJsonFormat(string $json, $data, ?int $options = null): void { diff --git a/tests/Composer/Test/Json/JsonManipulatorTest.php b/tests/Composer/Test/Json/JsonManipulatorTest.php index 0e32be3bc..5bfb9f3dd 100644 --- a/tests/Composer/Test/Json/JsonManipulatorTest.php +++ b/tests/Composer/Test/Json/JsonManipulatorTest.php @@ -19,11 +19,6 @@ class JsonManipulatorTest extends TestCase { /** * @dataProvider linkProvider - * @param string $json - * @param string $type - * @param string $package - * @param string $constraint - * @param string $expected */ public function testAddLink(string $json, string $type, string $package, string $constraint, string $expected): void { @@ -34,8 +29,8 @@ class JsonManipulatorTest extends TestCase public function linkProvider(): array { - return array( - array( + return [ + [ '{}', 'require', 'vendor/baz', @@ -45,8 +40,8 @@ class JsonManipulatorTest extends TestCase " \"vendor/baz\": \"qux\"\n". " }\n". "}\n", - ), - array( + ], + [ '{ "foo": "bar" }', @@ -60,8 +55,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - array( + ], + [ '{ "require": { } @@ -75,8 +70,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - array( + ], + [ '{ "empty": "", "require": { @@ -94,8 +89,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - array( + ], + [ '{ "require": { @@ -114,9 +109,9 @@ class JsonManipulatorTest extends TestCase } } ', - ), + ], - array( + [ '{ "require": { @@ -135,8 +130,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - array( + ], + [ '{ "require": { @@ -155,8 +150,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - array( + ], + [ '{ "require": { @@ -175,8 +170,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - array( + ], + [ '{ "require": { "foo": "bar" @@ -207,8 +202,8 @@ class JsonManipulatorTest extends TestCase }] } ', - ), - array( + ], + [ '{ "repositories": [{ "type": "package", @@ -236,8 +231,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - array( + ], + [ '{ "require": { "php": "5.*" @@ -255,8 +250,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - array( + ], + [ '{ "require": { "php": "5.*" @@ -277,8 +272,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - array( + ], + [ '{ "repositories": [{ "type": "package", @@ -325,8 +320,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - array( + ], + [ '{ "config": { "cache-files-ttl": 0, @@ -1288,18 +1283,12 @@ class JsonManipulatorTest extends TestCase } } ', - ), - ); + ], + ]; } /** * @dataProvider providerAddLinkAndSortPackages - * @param string $json - * @param string $type - * @param string $package - * @param string $constraint - * @param bool $sortPackages - * @param string $expected */ public function testAddLinkAndSortPackages(string $json, string $type, string $package, string $constraint, bool $sortPackages, string $expected): void { @@ -1310,8 +1299,8 @@ class JsonManipulatorTest extends TestCase public function providerAddLinkAndSortPackages(): array { - return array( - array( + return [ + [ '{ "require": { "vendor/baz": "qux" @@ -1328,8 +1317,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - array( + ], + [ '{ "require": { "vendor/baz": "qux" @@ -1346,8 +1335,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - array( + ], + [ '{ "require": { "foo": "baz", @@ -1374,16 +1363,12 @@ class JsonManipulatorTest extends TestCase } } ', - ), - ); + ], + ]; } /** * @dataProvider removeSubNodeProvider - * @param string $json - * @param string $name - * @param bool $expected - * @param null|string $expectedContent */ public function testRemoveSubNode(string $json, string $name, bool $expected, ?string $expectedContent = null): void { @@ -1397,8 +1382,8 @@ class JsonManipulatorTest extends TestCase public function removeSubNodeProvider(): array { - return array( - 'works on simple ones first' => array( + return [ + 'works on simple ones first' => [ '{ "repositories": { "foo": { @@ -1422,8 +1407,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - 'works on simple ones last' => array( + ], + 'works on simple ones last' => [ '{ "repositories": { "foo": { @@ -1447,8 +1432,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - 'works on simple ones unique' => array( + ], + 'works on simple ones unique' => [ '{ "repositories": { "foo": { @@ -1464,8 +1449,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - 'works on simple ones escaped slash' => array( + ], + 'works on simple ones escaped slash' => [ '{ "repositories": { "foo\/bar": { @@ -1480,8 +1465,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - 'works on simple ones middle' => array( + ], + 'works on simple ones middle' => [ '{ "repositories": { "foo": { @@ -1513,8 +1498,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - 'works on undefined ones' => array( + ], + 'works on undefined ones' => [ '{ "repositories": { "main": { @@ -1534,8 +1519,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - 'works on child having unmatched name' => array( + ], + 'works on child having unmatched name' => [ '{ "repositories": { "baz": { @@ -1555,8 +1540,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - 'works on child having duplicate name' => array( + ], + 'works on child having duplicate name' => [ '{ "repositories": { "foo": { @@ -1578,28 +1563,28 @@ class JsonManipulatorTest extends TestCase } } ', - ), - 'works on empty repos' => array( + ], + 'works on empty repos' => [ '{ "repositories": { } }', 'bar', true, - ), - 'works on empty repos2' => array( + ], + 'works on empty repos2' => [ '{ "repositories": {} }', 'bar', true, - ), - 'works on missing repos' => array( + ], + 'works on missing repos' => [ "{\n}", 'bar', true, - ), - 'works on deep repos' => array( + ], + 'works on deep repos' => [ '{ "repositories": { "foo": { @@ -1614,8 +1599,8 @@ class JsonManipulatorTest extends TestCase } } ', - ), - 'works on deep repos with borked texts' => array( + ], + 'works on deep repos with borked texts' => [ '{ "repositories": { "foo": { @@ -1637,8 +1622,8 @@ class JsonManipulatorTest extends TestCase '{ } ', - ), - 'works on deep repos with borked texts2' => array( + ], + 'works on deep repos with borked texts2' => [ '{ "repositories": { "foo": { @@ -1660,8 +1645,8 @@ class JsonManipulatorTest extends TestCase '{ } ', - ), - 'fails on deep arrays with borked texts' => array( + ], + 'fails on deep arrays with borked texts' => [ '{ "repositories": [ { @@ -1671,8 +1656,8 @@ class JsonManipulatorTest extends TestCase }', 'bar', false, - ), - 'fails on deep arrays with borked texts2' => array( + ], + 'fails on deep arrays with borked texts2' => [ '{ "repositories": [ { @@ -1682,8 +1667,8 @@ class JsonManipulatorTest extends TestCase }', 'bar', false, - ), - ); + ], + ]; } public function testRemoveSubNodeFromRequire(): void @@ -1922,7 +1907,7 @@ class JsonManipulatorTest extends TestCase } }'); - $this->assertTrue($manipulator->addRepository('bar', array('type' => 'composer'))); + $this->assertTrue($manipulator->addRepository('bar', ['type' => 'composer'])); $this->assertEquals('{ "repositories": { "bar": { @@ -1939,7 +1924,7 @@ class JsonManipulatorTest extends TestCase \t\"a\": \"b\" }"); - $this->assertTrue($manipulator->addRepository('bar2', array('type' => 'composer'))); + $this->assertTrue($manipulator->addRepository('bar2', ['type' => 'composer'])); $this->assertEquals("{ \t\"a\": \"b\", \t\"repositories\": { @@ -1962,7 +1947,7 @@ class JsonManipulatorTest extends TestCase } }'); - $this->assertTrue($manipulator->addRepository('bar', array('type' => 'composer'), true)); + $this->assertTrue($manipulator->addRepository('bar', ['type' => 'composer'], true)); $this->assertEquals('{ "repositories": { "foo": { @@ -1988,7 +1973,7 @@ class JsonManipulatorTest extends TestCase } }'); - $this->assertTrue($manipulator->addRepository('bar', array('type' => 'composer'), false)); + $this->assertTrue($manipulator->addRepository('bar', ['type' => 'composer'], false)); $this->assertEquals('{ "repositories": { "bar": { @@ -2014,7 +1999,7 @@ class JsonManipulatorTest extends TestCase } }'); - $this->assertTrue($manipulator->addRepository('baz', array('type' => 'composer'))); + $this->assertTrue($manipulator->addRepository('baz', ['type' => 'composer'])); $this->assertEquals('{ "repositories": { "baz": { @@ -2124,7 +2109,7 @@ class JsonManipulatorTest extends TestCase } }'); - $this->assertTrue($manipulator->addConfigSetting('github-protocols', array('https', 'http'))); + $this->assertTrue($manipulator->addConfigSetting('github-protocols', ['https', 'http'])); $this->assertEquals('{ "config": { "github-oauth": { @@ -2135,7 +2120,7 @@ class JsonManipulatorTest extends TestCase } ', $manipulator->getContents()); - $this->assertTrue($manipulator->addConfigSetting('github-oauth', array('github.com' => 'bar', 'alt.example.org' => 'baz'))); + $this->assertTrue($manipulator->addConfigSetting('github-oauth', ['github.com' => 'bar', 'alt.example.org' => 'baz'])); $this->assertEquals('{ "config": { "github-oauth": { @@ -2368,7 +2353,7 @@ class JsonManipulatorTest extends TestCase } }'); - $this->assertTrue($manipulator->addMainKey('require-dev', array('foo' => 'qux'))); + $this->assertTrue($manipulator->addMainKey('require-dev', ['foo' => 'qux'])); $this->assertEquals('{ "require": { "php": "5.*" @@ -2497,16 +2482,16 @@ class JsonManipulatorTest extends TestCase public function testRemoveMainKeyRemovesKeyWhereValueIsNull(): void { - $manipulator = new JsonManipulator(json_encode(array( + $manipulator = new JsonManipulator(json_encode([ 'foo' => 9000, 'bar' => null, - ))); + ])); $manipulator->removeMainKey('bar'); - $expected = json_encode(array( + $expected = json_encode([ 'foo' => 9000, - )); + ]); $this->assertJsonStringEqualsJsonString($expected, $manipulator->getContents()); } @@ -2520,7 +2505,7 @@ class JsonManipulatorTest extends TestCase } }'); - $this->assertTrue($manipulator->addMainKey('require-dev', array('foo' => 'qux'))); + $this->assertTrue($manipulator->addMainKey('require-dev', ['foo' => 'qux'])); $this->assertEquals('{ "require": { diff --git a/tests/Composer/Test/Json/JsonValidationExceptionTest.php b/tests/Composer/Test/Json/JsonValidationExceptionTest.php index f11dfca88..01f4bcbc9 100644 --- a/tests/Composer/Test/Json/JsonValidationExceptionTest.php +++ b/tests/Composer/Test/Json/JsonValidationExceptionTest.php @@ -32,14 +32,14 @@ class JsonValidationExceptionTest extends TestCase public function testGetErrorsWhenNoErrorsProvided(): void { $object = new JsonValidationException('test message'); - $this->assertEquals(array(), $object->getErrors()); + $this->assertEquals([], $object->getErrors()); } public function errorProvider(): array { - return array( - array('test message', array(), 'test message', []), - array('', ['foo'], '', ['foo']), - ); + return [ + ['test message', [], 'test message', []], + ['', ['foo'], '', ['foo']], + ]; } } diff --git a/tests/Composer/Test/Mock/FactoryMock.php b/tests/Composer/Test/Mock/FactoryMock.php index a4cbe3f77..613e745df 100644 --- a/tests/Composer/Test/Mock/FactoryMock.php +++ b/tests/Composer/Test/Mock/FactoryMock.php @@ -31,14 +31,14 @@ use Composer\Util\ProcessExecutor; class FactoryMock extends Factory { - public static function createConfig(IOInterface $io = null, ?string $cwd = null): Config + public static function createConfig(?IOInterface $io = null, ?string $cwd = null): Config { $config = new Config(true, $cwd); - $config->merge(array( - 'config' => array('home' => TestCase::getUniqueTmpDirectory()), - 'repositories' => array('packagist' => false), - )); + $config->merge([ + 'config' => ['home' => TestCase::getUniqueTmpDirectory()], + 'repositories' => ['packagist' => false], + ]); return $config; } @@ -48,17 +48,17 @@ class FactoryMock extends Factory return new \Composer\Package\Loader\RootPackageLoader($rm, $config, $parser, new VersionGuesserMock(), $io); } - protected function addLocalRepository(IOInterface $io, RepositoryManager $rm, $vendorDir, RootPackageInterface $rootPackage, ProcessExecutor $process = null): void + protected function addLocalRepository(IOInterface $io, RepositoryManager $rm, string $vendorDir, RootPackageInterface $rootPackage, ?ProcessExecutor $process = null): void { $rm->setLocalRepository(new InstalledArrayRepository); } - public function createInstallationManager(Loop $loop = null, IOInterface $io = null, EventDispatcher $dispatcher = null): InstallationManager + public function createInstallationManager(?Loop $loop = null, ?IOInterface $io = null, ?EventDispatcher $dispatcher = null): InstallationManager { return new InstallationManagerMock(); } - protected function createDefaultInstallers(InstallationManager $im, PartialComposer $composer, IOInterface $io, ProcessExecutor $process = null): void + protected function createDefaultInstallers(InstallationManager $im, PartialComposer $composer, IOInterface $io, ?ProcessExecutor $process = null): void { } diff --git a/tests/Composer/Test/Mock/HttpDownloaderMock.php b/tests/Composer/Test/Mock/HttpDownloaderMock.php index beb12ecc8..32168c3f0 100644 --- a/tests/Composer/Test/Mock/HttpDownloaderMock.php +++ b/tests/Composer/Test/Mock/HttpDownloaderMock.php @@ -34,13 +34,13 @@ class HttpDownloaderMock extends HttpDownloader /** * @var array{status: int, body: string, headers: array} */ - private $defaultHandler = array('status' => 200, 'body' => '', 'headers' => []); + private $defaultHandler = ['status' => 200, 'body' => '', 'headers' => []]; /** * @var string[] */ - private $log = array(); + private $log = []; - public function __construct(IOInterface $io = null, Config $config = null) + public function __construct(?IOInterface $io = null, ?Config $config = null) { if ($io === null) { $io = new BufferIO(); @@ -56,10 +56,10 @@ class HttpDownloaderMock extends HttpDownloader * @param bool $strict set to true if you want to provide *all* expected http requests, and not just a subset you are interested in testing * @param array{status?: int, body?: string, headers?: array} $defaultHandler default URL handler for undefined requests if not in strict mode */ - public function expects(array $expectations, bool $strict = false, array $defaultHandler = array('status' => 200, 'body' => '', 'headers' => [])): void + public function expects(array $expectations, bool $strict = false, array $defaultHandler = ['status' => 200, 'body' => '', 'headers' => []]): void { $default = ['url' => '', 'options' => null, 'status' => 200, 'body' => '', 'headers' => ['']]; - $this->expectations = array_map(function (array $expect) use ($default): array { + $this->expectations = array_map(static function (array $expect) use ($default): array { if (count($diff = array_diff_key(array_merge($default, $expect), $default)) > 0) { throw new \UnexpectedValueException('Unexpected keys in process execution step: '.implode(', ', array_keys($diff))); } @@ -91,7 +91,7 @@ class HttpDownloaderMock extends HttpDownloader } if (count($this->expectations) > 0) { - $expectations = array_map(function ($expect): string { + $expectations = array_map(static function ($expect): string { return $expect['url']; }, $this->expectations); throw new AssertionFailedError( @@ -105,7 +105,7 @@ class HttpDownloaderMock extends HttpDownloader Assert::assertTrue(true); // @phpstan-ignore-line } - public function get($fileUrl, $options = array()): Response + public function get($fileUrl, $options = []): Response { $this->log[] = $fileUrl; @@ -132,7 +132,7 @@ class HttpDownloaderMock extends HttpDownloader private function respond(string $url, int $status, array $headers, string $body): Response { if ($status < 400) { - return new Response(array('url' => $url), $status, $headers, $body); + return new Response(['url' => $url], $status, $headers, $body); } $e = new TransportException('The "'.$url.'" file could not be downloaded', $status); diff --git a/tests/Composer/Test/Mock/InstallationManagerMock.php b/tests/Composer/Test/Mock/InstallationManagerMock.php index 31062f736..bfdc580e4 100644 --- a/tests/Composer/Test/Mock/InstallationManagerMock.php +++ b/tests/Composer/Test/Mock/InstallationManagerMock.php @@ -28,19 +28,19 @@ class InstallationManagerMock extends InstallationManager /** * @var PackageInterface[] */ - private $installed = array(); + private $installed = []; /** * @var PackageInterface[][] */ - private $updated = array(); + private $updated = []; /** * @var PackageInterface[] */ - private $uninstalled = array(); + private $uninstalled = []; /** * @var string[] */ - private $trace = array(); + private $trace = []; public function __construct() { @@ -51,7 +51,7 @@ class InstallationManagerMock extends InstallationManager foreach ($operations as $operation) { $method = $operation->getOperationType(); // skipping download() step here for tests - $this->$method($repo, $operation); + $this->{$method}($repo, $operation); } } @@ -82,7 +82,7 @@ class InstallationManagerMock extends InstallationManager */ public function update(InstalledRepositoryInterface $repo, UpdateOperation $operation): ?PromiseInterface { - $this->updated[] = array($operation->getInitialPackage(), $operation->getTargetPackage()); + $this->updated[] = [$operation->getInitialPackage(), $operation->getTargetPackage()]; $this->trace[] = strip_tags((string) $operation); $repo->removePackage($operation->getInitialPackage()); if (!$repo->hasPackage($operation->getTargetPackage())) { diff --git a/tests/Composer/Test/Mock/ProcessExecutorMock.php b/tests/Composer/Test/Mock/ProcessExecutorMock.php index 2f5c2ff23..713fab82c 100644 --- a/tests/Composer/Test/Mock/ProcessExecutorMock.php +++ b/tests/Composer/Test/Mock/ProcessExecutorMock.php @@ -12,7 +12,6 @@ namespace Composer\Test\Mock; -use Composer\Test\TestCase; use PHPUnit\Framework\MockObject\MockBuilder; use React\Promise\PromiseInterface; use Composer\Util\ProcessExecutor; @@ -38,11 +37,11 @@ class ProcessExecutorMock extends ProcessExecutor /** * @var array{return: int, stdout: string, stderr: string} */ - private $defaultHandler = array('return' => 0, 'stdout' => '', 'stderr' => ''); + private $defaultHandler = ['return' => 0, 'stdout' => '', 'stderr' => '']; /** * @var string[] */ - private $log = array(); + private $log = []; /** * @var MockBuilder */ @@ -61,14 +60,12 @@ class ProcessExecutorMock extends ProcessExecutor * @param array, return?: int, stdout?: string, stderr?: string, callback?: callable}> $expectations * @param bool $strict set to true if you want to provide *all* expected commands, and not just a subset you are interested in testing * @param array{return: int, stdout?: string, stderr?: string} $defaultHandler default command handler for undefined commands if not in strict mode - * - * @return void */ - public function expects(array $expectations, bool $strict = false, array $defaultHandler = array('return' => 0, 'stdout' => '', 'stderr' => '')): void + public function expects(array $expectations, bool $strict = false, array $defaultHandler = ['return' => 0, 'stdout' => '', 'stderr' => '']): void { /** @var array{cmd: string|list, return: int, stdout: string, stderr: string, callback: callable} $default */ - $default = array('cmd' => '', 'return' => 0, 'stdout' => '', 'stderr' => '', 'callback' => null); - $this->expectations = array_map(function ($expect) use ($default): array { + $default = ['cmd' => '', 'return' => 0, 'stdout' => '', 'stderr' => '', 'callback' => null]; + $this->expectations = array_map(static function ($expect) use ($default): array { if (is_string($expect)) { $command = $expect; $expect = $default; @@ -104,7 +101,7 @@ class ProcessExecutorMock extends ProcessExecutor } if (count($this->expectations) > 0) { - $expectations = array_map(function ($expect): string { + $expectations = array_map(static function ($expect): string { return is_array($expect['cmd']) ? implode(' ', $expect['cmd']) : $expect['cmd']; }, $this->expectations); throw new AssertionFailedError( @@ -140,8 +137,6 @@ class ProcessExecutorMock extends ProcessExecutor /** * @param string|list $command - * @param string $cwd - * @param bool $tty * @param callable|string|null $output * @return mixed */ @@ -163,7 +158,7 @@ class ProcessExecutorMock extends ProcessExecutor $stderr = $expect['stderr']; $return = $expect['return']; if (isset($expect['callback'])) { - call_user_func($expect['callback']); + $expect['callback'](); } } elseif (!$this->strict) { $stdout = $this->defaultHandler['stdout']; @@ -178,10 +173,10 @@ class ProcessExecutorMock extends ProcessExecutor } if ($stdout) { - call_user_func($callback, Process::OUT, $stdout); + $callback(Process::OUT, $stdout); } if ($stderr) { - call_user_func($callback, Process::ERR, $stderr); + $callback(Process::ERR, $stderr); } if ($this->captureOutput && !is_callable($output)) { @@ -207,7 +202,7 @@ class ProcessExecutorMock extends ProcessExecutor $resolve($procMock); }; - $canceler = function (): void { + $canceler = static function (): void { throw new \RuntimeException('Aborted process'); }; diff --git a/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php b/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php index 3f5a488c8..ad5cb98af 100644 --- a/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php +++ b/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php @@ -42,7 +42,7 @@ class ArchivableFilesFinderTest extends TestCase self::getUniqueTmpDirectory() ); - $fileTree = array( + $fileTree = [ '.foo', 'A/prefixA.foo', 'A/prefixB.foo', @@ -87,7 +87,7 @@ class ArchivableFilesFinderTest extends TestCase '!important!.txt', '!important_too!.txt', '#weirdfile', - ); + ]; foreach ($fileTree as $relativePath) { $path = $this->sources.'/'.$relativePath; @@ -105,18 +105,18 @@ class ArchivableFilesFinderTest extends TestCase public function testManualExcludes(): void { - $excludes = array( + $excludes = [ 'prefixB.foo', '!/prefixB.foo', '/prefixA.foo', 'prefixC.*', '!*/*/*/prefixC.foo', '.*', - ); + ]; $this->finder = new ArchivableFilesFinder($this->sources, $excludes); - $this->assertArchivableFiles(array( + $this->assertArchivableFiles([ '/!important!.txt', '/!important_too!.txt', '/#weirdfile', @@ -153,14 +153,14 @@ class ArchivableFilesFinderTest extends TestCase '/prefixF.foo', '/toplevelA.foo', '/toplevelB.foo', - )); + ]); } public function testGitExcludes(): void { $this->skipIfNotExecutable('git'); - file_put_contents($this->sources.'/.gitattributes', implode("\n", array( + file_put_contents($this->sources.'/.gitattributes', implode("\n", [ '', '# gitattributes rules with comments and blank lines', 'prefixB.foo export-ignore', @@ -187,9 +187,9 @@ class ArchivableFilesFinderTest extends TestCase 'parameters.yml export-ignore', '\!important!.txt export-ignore', '\#* export-ignore', - ))); + ])); - $this->finder = new ArchivableFilesFinder($this->sources, array()); + $this->finder = new ArchivableFilesFinder($this->sources, []); $this->assertArchivableFiles($this->getArchivedFiles( 'git init && '. @@ -206,13 +206,13 @@ class ArchivableFilesFinderTest extends TestCase public function testSkipExcludes(): void { - $excludes = array( + $excludes = [ 'prefixB.foo', - ); + ]; $this->finder = new ArchivableFilesFinder($this->sources, $excludes, true); - $this->assertArchivableFiles(array( + $this->assertArchivableFiles([ '/!important!.txt', '/!important_too!.txt', '/#weirdfile', @@ -257,7 +257,7 @@ class ArchivableFilesFinderTest extends TestCase '/prefixF.foo', '/toplevelA.foo', '/toplevelB.foo', - )); + ]); } /** @@ -265,7 +265,7 @@ class ArchivableFilesFinderTest extends TestCase */ protected function getArchivableFiles(): array { - $files = array(); + $files = []; foreach ($this->finder as $file) { if (!$file->isDir()) { $files[] = Preg::replace('#^'.preg_quote($this->sources, '#').'#', '', $this->fs->normalizePath($file->getRealPath())); @@ -278,8 +278,6 @@ class ArchivableFilesFinderTest extends TestCase } /** - * @param string $command - * * @return string[] */ protected function getArchivedFiles(string $command): array @@ -290,7 +288,7 @@ class ArchivableFilesFinderTest extends TestCase $archive = new \PharData($this->sources.'/archive.zip'); $iterator = new \RecursiveIteratorIterator($archive); - $files = array(); + $files = []; foreach ($iterator as $file) { $files[] = Preg::replace('#^phar://'.preg_quote($this->sources, '#').'/archive\.zip/archive#', '', $this->fs->normalizePath((string) $file)); } @@ -303,8 +301,6 @@ class ArchivableFilesFinderTest extends TestCase /** * @param string[] $expectedFiles - * - * @return void */ protected function assertArchivableFiles(array $expectedFiles): void { diff --git a/tests/Composer/Test/Package/Archiver/ArchiveManagerTest.php b/tests/Composer/Test/Package/Archiver/ArchiveManagerTest.php index 5a898694b..ea66a1f3e 100644 --- a/tests/Composer/Test/Package/Archiver/ArchiveManagerTest.php +++ b/tests/Composer/Test/Package/Archiver/ArchiveManagerTest.php @@ -99,12 +99,6 @@ class ArchiveManagerTest extends ArchiverTest unlink($target); } - /** - * @param string $format - * @param string|null $fileName - * - * @return string - */ protected function getTargetName(CompletePackage $package, string $format, ?string $fileName = null): string { if (null === $fileName) { @@ -118,8 +112,6 @@ class ArchiveManagerTest extends ArchiverTest /** * Create local git repository to run tests against! - * - * @return void */ protected function setupGitRepo(): void { diff --git a/tests/Composer/Test/Package/Archiver/ArchiverTest.php b/tests/Composer/Test/Package/Archiver/ArchiverTest.php index e94ffa8ae..867bf11e7 100644 --- a/tests/Composer/Test/Package/Archiver/ArchiverTest.php +++ b/tests/Composer/Test/Package/Archiver/ArchiverTest.php @@ -49,8 +49,6 @@ abstract class ArchiverTest extends TestCase /** * Util method to quickly setup a package using the source path built. - * - * @return CompletePackage */ protected function setupPackage(): CompletePackage { diff --git a/tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php b/tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php index 79c57f0d0..967a3d6d0 100644 --- a/tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php +++ b/tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php @@ -20,7 +20,6 @@ class GitExcludeFilterTest extends TestCase /** * @dataProvider providePatterns * - * @param string $ignore * @param mixed[] $expected */ public function testPatternEscape(string $ignore, array $expected): void @@ -32,9 +31,9 @@ class GitExcludeFilterTest extends TestCase public function providePatterns(): array { - return array( - array('app/config/parameters.yml export-ignore', array('{(?=[^\.])app/(?=[^\.])config/(?=[^\.])parameters\.yml(?=$|/)}', false, false)), - array('app/config/parameters.yml -export-ignore', array('{(?=[^\.])app/(?=[^\.])config/(?=[^\.])parameters\.yml(?=$|/)}', true, false)), - ); + return [ + ['app/config/parameters.yml export-ignore', ['{(?=[^\.])app/(?=[^\.])config/(?=[^\.])parameters\.yml(?=$|/)}', false, false]], + ['app/config/parameters.yml -export-ignore', ['{(?=[^\.])app/(?=[^\.])config/(?=[^\.])parameters\.yml(?=$|/)}', true, false]], + ]; } } diff --git a/tests/Composer/Test/Package/Archiver/PharArchiverTest.php b/tests/Composer/Test/Package/Archiver/PharArchiverTest.php index 4b81b2b21..02f779b46 100644 --- a/tests/Composer/Test/Package/Archiver/PharArchiverTest.php +++ b/tests/Composer/Test/Package/Archiver/PharArchiverTest.php @@ -26,7 +26,7 @@ class PharArchiverTest extends ArchiverTest // Test archive $archiver = new PharArchiver(); - $archiver->archive($package->getSourceUrl(), $target, 'tar', array('foo/bar', 'baz', '!/foo/bar/baz')); + $archiver->archive($package->getSourceUrl(), $target, 'tar', ['foo/bar', 'baz', '!/foo/bar/baz']); $this->assertFileExists($target); $this->filesystem->removeDirectory(dirname($target)); @@ -49,8 +49,6 @@ class PharArchiverTest extends ArchiverTest /** * Create a local dummy repository to run tests against! - * - * @return void */ protected function setupDummyRepo(): void { @@ -66,13 +64,6 @@ class PharArchiverTest extends ArchiverTest chdir($currentWorkDir); } - /** - * @param string $path - * @param string $content - * @param string $currentWorkDir - * - * @return void - */ protected function writeFile(string $path, string $content, string $currentWorkDir): void { if (!file_exists(dirname($path))) { diff --git a/tests/Composer/Test/Package/Archiver/ZipArchiverTest.php b/tests/Composer/Test/Package/Archiver/ZipArchiverTest.php index e216fe0a6..da9fe536f 100644 --- a/tests/Composer/Test/Package/Archiver/ZipArchiverTest.php +++ b/tests/Composer/Test/Package/Archiver/ZipArchiverTest.php @@ -19,42 +19,40 @@ use Composer\Package\Archiver\ZipArchiver; class ZipArchiverTest extends ArchiverTest { /** - * @param string $include - * * @dataProvider provideGitignoreExcludeNegationTestCases */ public function testGitignoreExcludeNegation(string $include): void { - $this->testZipArchive(array( + $this->testZipArchive([ 'docs/README.md' => '# The doc', '.gitignore' => "/*\n.*\n!.git*\n$include", - )); + ]); } public function provideGitignoreExcludeNegationTestCases(): array { - return array( - array('!/docs'), - array('!/docs/'), - ); + return [ + ['!/docs'], + ['!/docs/'], + ]; } /** * @param array $files */ - public function testZipArchive(array $files = array()): void + public function testZipArchive(array $files = []): void { if (!class_exists('ZipArchive')) { $this->markTestSkipped('Cannot run ZipArchiverTest, missing class "ZipArchive".'); } if (empty($files)) { - $files = array( + $files = [ 'file.txt' => null, 'foo/bar/baz' => null, 'x/baz' => null, 'x/includeme' => null, - ); + ]; if (!Platform::isWindows()) { $files['foo' . Platform::getCwd() . '/file.txt'] = null; @@ -84,8 +82,6 @@ class ZipArchiverTest extends ArchiverTest * Create a local dummy repository to run tests against! * * @param array $files - * - * @return void */ protected function setupDummyRepo(array &$files): void { @@ -101,13 +97,6 @@ class ZipArchiverTest extends ArchiverTest chdir($currentWorkDir); } - /** - * @param string $path - * @param string $content - * @param string $currentWorkDir - * - * @return void - */ protected function writeFile(string $path, string $content, string $currentWorkDir): void { if (!file_exists(dirname($path))) { diff --git a/tests/Composer/Test/Package/BasePackageTest.php b/tests/Composer/Test/Package/BasePackageTest.php index acc8f4de3..8c08c2768 100644 --- a/tests/Composer/Test/Package/BasePackageTest.php +++ b/tests/Composer/Test/Package/BasePackageTest.php @@ -22,7 +22,7 @@ class BasePackageTest extends TestCase */ public function testSetSameRepository(): void { - $package = $this->getMockForAbstractClass('Composer\Package\BasePackage', array('foo')); + $package = $this->getMockForAbstractClass('Composer\Package\BasePackage', ['foo']); $repository = $this->getMockBuilder('Composer\Repository\RepositoryInterface')->getMock(); $package->setRepository($repository); @@ -37,7 +37,7 @@ class BasePackageTest extends TestCase { self::expectException('LogicException'); - $package = $this->getMockForAbstractClass('Composer\Package\BasePackage', array('foo')); + $package = $this->getMockForAbstractClass('Composer\Package\BasePackage', ['foo']); $package->setRepository($this->getMockBuilder('Composer\Repository\RepositoryInterface')->getMock()); $package->setRepository($this->getMockBuilder('Composer\Repository\RepositoryInterface')->getMock()); @@ -45,9 +45,6 @@ class BasePackageTest extends TestCase /** * @dataProvider provideFormattedVersions - * - * @param bool $truncate - * @param string $expected */ public function testFormatVersionForDevPackage(BasePackage $package, bool $truncate, string $expected): void { @@ -56,37 +53,37 @@ class BasePackageTest extends TestCase public function provideFormattedVersions(): array { - $data = array( - array( + $data = [ + [ 'sourceReference' => 'v2.1.0-RC2', 'truncate' => true, 'expected' => 'PrettyVersion v2.1.0-RC2', - ), - array( + ], + [ 'sourceReference' => 'bbf527a27356414bfa9bf520f018c5cb7af67c77', 'truncate' => true, 'expected' => 'PrettyVersion bbf527a', - ), - array( + ], + [ 'sourceReference' => 'v1.0.0', 'truncate' => false, 'expected' => 'PrettyVersion v1.0.0', - ), - array( + ], + [ 'sourceReference' => 'bbf527a27356414bfa9bf520f018c5cb7af67c77', 'truncate' => false, 'expected' => 'PrettyVersion bbf527a27356414bfa9bf520f018c5cb7af67c77', - ), - ); + ], + ]; $createPackage = function ($arr): array { - $package = $this->getMockForAbstractClass('\Composer\Package\BasePackage', array(), '', false); + $package = $this->getMockForAbstractClass('\Composer\Package\BasePackage', [], '', false); $package->expects($this->once())->method('isDev')->will($this->returnValue(true)); $package->expects($this->any())->method('getSourceType')->will($this->returnValue('git')); $package->expects($this->once())->method('getPrettyVersion')->will($this->returnValue('PrettyVersion')); $package->expects($this->any())->method('getSourceReference')->will($this->returnValue($arr['sourceReference'])); - return array($package, $arr['truncate'], $arr['expected']); + return [$package, $arr['truncate'], $arr['expected']]; }; return array_map($createPackage, $data); @@ -95,7 +92,6 @@ class BasePackageTest extends TestCase /** * @param string[] $packageNames * @param non-empty-string $wrap - * @param string $expectedRegexp * * @dataProvider dataPackageNamesToRegexp */ @@ -111,13 +107,13 @@ class BasePackageTest extends TestCase */ public function dataPackageNamesToRegexp(): array { - return array( - array( - array('ext-*', 'monolog/monolog'), '{^%s$}i', '{^ext\-.*|monolog/monolog$}i', - array('php'), '{^%s$}i', '{^php$}i', - array('*'), '{^%s$}i', '{^.*$}i', - array('foo', 'bar'), '§%s§', '§foo|bar§', - ), - ); + return [ + [ + ['ext-*', 'monolog/monolog'], '{^%s$}i', '{^ext\-.*|monolog/monolog$}i', + ['php'], '{^%s$}i', '{^php$}i', + ['*'], '{^%s$}i', '{^.*$}i', + ['foo', 'bar'], '§%s§', '§foo|bar§', + ], + ]; } } diff --git a/tests/Composer/Test/Package/CompletePackageTest.php b/tests/Composer/Test/Package/CompletePackageTest.php index a1edd1560..56ec8b156 100644 --- a/tests/Composer/Test/Package/CompletePackageTest.php +++ b/tests/Composer/Test/Package/CompletePackageTest.php @@ -25,20 +25,17 @@ class CompletePackageTest extends TestCase */ public function providerVersioningSchemes(): array { - $provider[] = array('foo', '1-beta'); - $provider[] = array('node', '0.5.6'); - $provider[] = array('li3', '0.10'); - $provider[] = array('mongodb_odm', '1.0.0BETA3'); - $provider[] = array('DoctrineCommon', '2.2.0-DEV'); + $provider[] = ['foo', '1-beta']; + $provider[] = ['node', '0.5.6']; + $provider[] = ['li3', '0.10']; + $provider[] = ['mongodb_odm', '1.0.0BETA3']; + $provider[] = ['DoctrineCommon', '2.2.0-DEV']; return $provider; } /** * @dataProvider providerVersioningSchemes - * - * @param string $name - * @param string $version */ public function testPackageHasExpectedNamingSemantics(string $name, string $version): void { @@ -50,9 +47,6 @@ class CompletePackageTest extends TestCase /** * @dataProvider providerVersioningSchemes - * - * @param string $name - * @param string $version */ public function testPackageHasExpectedVersioningSemantics(string $name, string $version): void { @@ -65,9 +59,6 @@ class CompletePackageTest extends TestCase /** * @dataProvider providerVersioningSchemes - * - * @param string $name - * @param string $version */ public function testPackageHasExpectedMarshallingSemantics(string $name, string $version): void { diff --git a/tests/Composer/Test/Package/Dumper/ArrayDumperTest.php b/tests/Composer/Test/Package/Dumper/ArrayDumperTest.php index a4b3fc0d2..df5342c5d 100644 --- a/tests/Composer/Test/Package/Dumper/ArrayDumperTest.php +++ b/tests/Composer/Test/Package/Dumper/ArrayDumperTest.php @@ -33,12 +33,12 @@ class ArrayDumperTest extends TestCase { $config = $this->dumper->dump($this->getPackage()); $this->assertEquals( - array( + [ 'name' => 'dummy/pkg', 'version' => '1.0.0', 'version_normalized' => '1.0.0.0', 'type' => 'library', - ), + ], $config ); } @@ -73,12 +73,11 @@ class ArrayDumperTest extends TestCase /** * @dataProvider provideKeys * - * @param string $key * @param mixed $value * @param string $method * @param mixed $expectedValue */ - public function testKeys(string $key, $value, string $method = null, $expectedValue = null): void + public function testKeys(string $key, $value, ?string $method = null, $expectedValue = null): void { $package = $this->getRootPackage(); @@ -92,149 +91,149 @@ class ArrayDumperTest extends TestCase public function provideKeys(): array { - return array( - array( + return [ + [ 'type', 'library', - ), - array( + ], + [ 'time', $datetime = new \DateTime('2012-02-01'), 'ReleaseDate', $datetime->format(DATE_RFC3339), - ), - array( + ], + [ 'authors', - array('Nils Adermann ', 'Jordi Boggiano '), - ), - array( + ['Nils Adermann ', 'Jordi Boggiano '], + ], + [ 'homepage', 'https://getcomposer.org', - ), - array( + ], + [ 'description', 'Dependency Manager', - ), - array( + ], + [ 'keywords', - array('package', 'dependency', 'autoload'), + ['package', 'dependency', 'autoload'], null, - array('autoload', 'dependency', 'package'), - ), - array( + ['autoload', 'dependency', 'package'], + ], + [ 'bin', - array('bin/composer'), + ['bin/composer'], 'binaries', - ), - array( + ], + [ 'license', - array('MIT'), - ), - array( + ['MIT'], + ], + [ 'autoload', - array('psr-0' => array('Composer' => 'src/')), - ), - array( + ['psr-0' => ['Composer' => 'src/']], + ], + [ 'repositories', - array('packagist' => false), - ), - array( + ['packagist' => false], + ], + [ 'scripts', - array('post-update-cmd' => 'MyVendor\\MyClass::postUpdate'), - ), - array( + ['post-update-cmd' => 'MyVendor\\MyClass::postUpdate'], + ], + [ 'extra', - array('class' => 'MyVendor\\Installer'), - ), - array( + ['class' => 'MyVendor\\Installer'], + ], + [ 'archive', - array('/foo/bar', 'baz', '!/foo/bar/baz'), + ['/foo/bar', 'baz', '!/foo/bar/baz'], 'archiveExcludes', - array( - 'exclude' => array('/foo/bar', 'baz', '!/foo/bar/baz'), - ), - ), - array( + [ + 'exclude' => ['/foo/bar', 'baz', '!/foo/bar/baz'], + ], + ], + [ 'require', - array('foo/bar' => new Link('dummy/pkg', 'foo/bar', new Constraint('=', '1.0.0.0'), Link::TYPE_REQUIRE, '1.0.0')), + ['foo/bar' => new Link('dummy/pkg', 'foo/bar', new Constraint('=', '1.0.0.0'), Link::TYPE_REQUIRE, '1.0.0')], 'requires', - array('foo/bar' => '1.0.0'), - ), - array( + ['foo/bar' => '1.0.0'], + ], + [ 'require-dev', - array('foo/bar' => new Link('dummy/pkg', 'foo/bar', new Constraint('=', '1.0.0.0'), Link::TYPE_DEV_REQUIRE, '1.0.0')), + ['foo/bar' => new Link('dummy/pkg', 'foo/bar', new Constraint('=', '1.0.0.0'), Link::TYPE_DEV_REQUIRE, '1.0.0')], 'devRequires', - array('foo/bar' => '1.0.0'), - ), - array( + ['foo/bar' => '1.0.0'], + ], + [ 'suggest', - array('foo/bar' => 'very useful package'), + ['foo/bar' => 'very useful package'], 'suggests', - ), - array( + ], + [ 'support', - array('foo' => 'bar'), - ), - array( + ['foo' => 'bar'], + ], + [ 'funding', - array('type' => 'foo', 'url' => 'https://example.com'), - ), - array( + ['type' => 'foo', 'url' => 'https://example.com'], + ], + [ 'require', - array( + [ 'foo/bar' => new Link('dummy/pkg', 'foo/bar', new Constraint('=', '1.0.0.0'), Link::TYPE_REQUIRE, '1.0.0'), 'bar/baz' => new Link('dummy/pkg', 'bar/baz', new Constraint('=', '1.0.0.0'), Link::TYPE_REQUIRE, '1.0.0'), - ), + ], 'requires', - array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0'), - ), - array( + ['bar/baz' => '1.0.0', 'foo/bar' => '1.0.0'], + ], + [ 'require-dev', - array( + [ 'foo/bar' => new Link('dummy/pkg', 'foo/bar', new Constraint('=', '1.0.0.0'), Link::TYPE_REQUIRE, '1.0.0'), 'bar/baz' => new Link('dummy/pkg', 'bar/baz', new Constraint('=', '1.0.0.0'), Link::TYPE_REQUIRE, '1.0.0'), - ), + ], 'devRequires', - array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0'), - ), - array( + ['bar/baz' => '1.0.0', 'foo/bar' => '1.0.0'], + ], + [ 'suggest', - array('foo/bar' => 'very useful package', 'bar/baz' => 'another useful package'), + ['foo/bar' => 'very useful package', 'bar/baz' => 'another useful package'], 'suggests', - array('bar/baz' => 'another useful package', 'foo/bar' => 'very useful package'), - ), - array( + ['bar/baz' => 'another useful package', 'foo/bar' => 'very useful package'], + ], + [ 'provide', - array( + [ 'foo/bar' => new Link('dummy/pkg', 'foo/bar', new Constraint('=', '1.0.0.0'), Link::TYPE_REQUIRE, '1.0.0'), 'bar/baz' => new Link('dummy/pkg', 'bar/baz', new Constraint('=', '1.0.0.0'), Link::TYPE_REQUIRE, '1.0.0'), - ), + ], 'provides', - array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0'), - ), - array( + ['bar/baz' => '1.0.0', 'foo/bar' => '1.0.0'], + ], + [ 'replace', - array( + [ 'foo/bar' => new Link('dummy/pkg', 'foo/bar', new Constraint('=', '1.0.0.0'), Link::TYPE_REQUIRE, '1.0.0'), 'bar/baz' => new Link('dummy/pkg', 'bar/baz', new Constraint('=', '1.0.0.0'), Link::TYPE_REQUIRE, '1.0.0'), - ), + ], 'replaces', - array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0'), - ), - array( + ['bar/baz' => '1.0.0', 'foo/bar' => '1.0.0'], + ], + [ 'conflict', - array( + [ 'foo/bar' => new Link('dummy/pkg', 'foo/bar', new Constraint('=', '1.0.0.0'), Link::TYPE_REQUIRE, '1.0.0'), 'bar/baz' => new Link('dummy/pkg', 'bar/baz', new Constraint('=', '1.0.0.0'), Link::TYPE_REQUIRE, '1.0.0'), - ), + ], 'conflicts', - array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0'), - ), - array( + ['bar/baz' => '1.0.0', 'foo/bar' => '1.0.0'], + ], + [ 'transport-options', - array('ssl' => array('local_cert' => '/opt/certs/test.pem')), + ['ssl' => ['local_cert' => '/opt/certs/test.pem']], 'transportOptions', - ), - ); + ], + ]; } } diff --git a/tests/Composer/Test/Package/Loader/ArrayLoaderTest.php b/tests/Composer/Test/Package/Loader/ArrayLoaderTest.php index eab43a3c6..4f73b3728 100644 --- a/tests/Composer/Test/Package/Loader/ArrayLoaderTest.php +++ b/tests/Composer/Test/Package/Loader/ArrayLoaderTest.php @@ -31,13 +31,13 @@ class ArrayLoaderTest extends TestCase public function testSelfVersion(): void { - $config = array( + $config = [ 'name' => 'A', 'version' => '1.2.3.4', - 'replace' => array( + 'replace' => [ 'foo' => 'self.version', - ), - ); + ], + ]; $package = $this->loader->load($config); $replaces = $package->getReplaces(); @@ -46,19 +46,19 @@ class ArrayLoaderTest extends TestCase public function testTypeDefault(): void { - $config = array( + $config = [ 'name' => 'A', 'version' => '1.0', - ); + ]; $package = $this->loader->load($config); $this->assertEquals('library', $package->getType()); - $config = array( + $config = [ 'name' => 'A', 'version' => '1.0', 'type' => 'foo', - ); + ]; $package = $this->loader->load($config); $this->assertEquals('foo', $package->getType()); @@ -66,19 +66,19 @@ class ArrayLoaderTest extends TestCase public function testNormalizedVersionOptimization(): void { - $config = array( + $config = [ 'name' => 'A', 'version' => '1.2.3', - ); + ]; $package = $this->loader->load($config); $this->assertEquals('1.2.3.0', $package->getVersion()); - $config = array( + $config = [ 'name' => 'A', 'version' => '1.2.3', 'version_normalized' => '1.2.3.4', - ); + ]; $package = $this->loader->load($config); $this->assertEquals('1.2.3.4', $package->getVersion()); @@ -86,52 +86,52 @@ class ArrayLoaderTest extends TestCase public function parseDumpProvider(): array { - $validConfig = array( + $validConfig = [ 'name' => 'A/B', 'version' => '1.2.3', 'version_normalized' => '1.2.3.0', 'description' => 'Foo bar', 'type' => 'library', - 'keywords' => array('a', 'b', 'c'), + 'keywords' => ['a', 'b', 'c'], 'homepage' => 'http://example.com', - 'license' => array('MIT', 'GPLv3'), - 'authors' => array( - array('name' => 'Bob', 'email' => 'bob@example.org', 'homepage' => 'example.org', 'role' => 'Developer'), - ), - 'funding' => array( - array('type' => 'example', 'url' => 'https://example.org/fund'), - ), - 'require' => array( + 'license' => ['MIT', 'GPLv3'], + 'authors' => [ + ['name' => 'Bob', 'email' => 'bob@example.org', 'homepage' => 'example.org', 'role' => 'Developer'], + ], + 'funding' => [ + ['type' => 'example', 'url' => 'https://example.org/fund'], + ], + 'require' => [ 'foo/bar' => '1.0', - ), - 'require-dev' => array( + ], + 'require-dev' => [ 'foo/baz' => '1.0', - ), - 'replace' => array( + ], + 'replace' => [ 'foo/qux' => '1.0', - ), - 'conflict' => array( + ], + 'conflict' => [ 'foo/quux' => '1.0', - ), - 'provide' => array( + ], + 'provide' => [ 'foo/quuux' => '1.0', - ), - 'autoload' => array( - 'psr-0' => array('Ns\Prefix' => 'path'), - 'classmap' => array('path', 'path2'), - ), - 'include-path' => array('path3', 'path4'), + ], + 'autoload' => [ + 'psr-0' => ['Ns\Prefix' => 'path'], + 'classmap' => ['path', 'path2'], + ], + 'include-path' => ['path3', 'path4'], 'target-dir' => 'some/prefix', - 'extra' => array('random' => array('things' => 'of', 'any' => 'shape')), - 'bin' => array('bin1', 'bin/foo'), - 'archive' => array( - 'exclude' => array('/foo/bar', 'baz', '!/foo/bar/baz'), - ), - 'transport-options' => array('ssl' => array('local_cert' => '/opt/certs/test.pem')), + 'extra' => ['random' => ['things' => 'of', 'any' => 'shape']], + 'bin' => ['bin1', 'bin/foo'], + 'archive' => [ + 'exclude' => ['/foo/bar', 'baz', '!/foo/bar/baz'], + ], + 'transport-options' => ['ssl' => ['local_cert' => '/opt/certs/test.pem']], 'abandoned' => 'foo/bar', - ); + ]; - return array(array($validConfig)); + return [[$validConfig]]; } /** @@ -193,55 +193,55 @@ class ArrayLoaderTest extends TestCase public function testPackageWithBranchAlias(): void { - $config = array( + $config = [ 'name' => 'A', 'version' => 'dev-master', - 'extra' => array('branch-alias' => array('dev-master' => '1.0.x-dev')), - ); + 'extra' => ['branch-alias' => ['dev-master' => '1.0.x-dev']], + ]; $package = $this->loader->load($config); $this->assertInstanceOf('Composer\Package\AliasPackage', $package); $this->assertEquals('1.0.x-dev', $package->getPrettyVersion()); - $config = array( + $config = [ 'name' => 'A', 'version' => 'dev-master', - 'extra' => array('branch-alias' => array('dev-master' => '1.0-dev')), - ); + 'extra' => ['branch-alias' => ['dev-master' => '1.0-dev']], + ]; $package = $this->loader->load($config); $this->assertInstanceOf('Composer\Package\AliasPackage', $package); $this->assertEquals('1.0.x-dev', $package->getPrettyVersion()); - $config = array( + $config = [ 'name' => 'B', 'version' => '4.x-dev', - 'extra' => array('branch-alias' => array('4.x-dev' => '4.0.x-dev')), - ); + 'extra' => ['branch-alias' => ['4.x-dev' => '4.0.x-dev']], + ]; $package = $this->loader->load($config); $this->assertInstanceOf('Composer\Package\AliasPackage', $package); $this->assertEquals('4.0.x-dev', $package->getPrettyVersion()); - $config = array( + $config = [ 'name' => 'B', 'version' => '4.x-dev', - 'extra' => array('branch-alias' => array('4.x-dev' => '4.0-dev')), - ); + 'extra' => ['branch-alias' => ['4.x-dev' => '4.0-dev']], + ]; $package = $this->loader->load($config); $this->assertInstanceOf('Composer\Package\AliasPackage', $package); $this->assertEquals('4.0.x-dev', $package->getPrettyVersion()); - $config = array( + $config = [ 'name' => 'C', 'version' => '4.x-dev', - 'extra' => array('branch-alias' => array('4.x-dev' => '3.4.x-dev')), - ); + 'extra' => ['branch-alias' => ['4.x-dev' => '3.4.x-dev']], + ]; $package = $this->loader->load($config); @@ -251,11 +251,11 @@ class ArrayLoaderTest extends TestCase public function testAbandoned(): void { - $config = array( + $config = [ 'name' => 'A', 'version' => '1.2.3.4', 'abandoned' => 'foo/bar', - ); + ]; $package = $this->loader->load($config); $this->assertTrue($package->isAbandoned()); @@ -264,10 +264,10 @@ class ArrayLoaderTest extends TestCase public function testNotAbandoned(): void { - $config = array( + $config = [ 'name' => 'A', 'version' => '1.2.3.4', - ); + ]; $package = $this->loader->load($config); $this->assertFalse($package->isAbandoned()); @@ -275,33 +275,31 @@ class ArrayLoaderTest extends TestCase public function providePluginApiVersions(): array { - return array( - array('1.0'), - array('1.0.0'), - array('1.0.0.0'), - array('1'), - array('=1.0.0'), - array('==1.0'), - array('~1.0.0'), - array('*'), - array('3.0.*'), - array('@stable'), - array('1.0.0@stable'), - array('^5.1'), - array('>=1.0.0 <2.5'), - array('x'), - array('1.0.0-dev'), - ); + return [ + ['1.0'], + ['1.0.0'], + ['1.0.0.0'], + ['1'], + ['=1.0.0'], + ['==1.0'], + ['~1.0.0'], + ['*'], + ['3.0.*'], + ['@stable'], + ['1.0.0@stable'], + ['^5.1'], + ['>=1.0.0 <2.5'], + ['x'], + ['1.0.0-dev'], + ]; } /** * @dataProvider providePluginApiVersions - * - * @param string $apiVersion */ public function testPluginApiVersionAreKeptAsDeclared(string $apiVersion): void { - $links = $this->loader->parseLinks('Plugin', '9.9.9', Link::TYPE_REQUIRE, array('composer-plugin-api' => $apiVersion)); + $links = $this->loader->parseLinks('Plugin', '9.9.9', Link::TYPE_REQUIRE, ['composer-plugin-api' => $apiVersion]); $this->assertArrayHasKey('composer-plugin-api', $links); $this->assertSame($apiVersion, $links['composer-plugin-api']->getConstraint()->getPrettyString()); @@ -309,7 +307,7 @@ class ArrayLoaderTest extends TestCase public function testPluginApiVersionDoesSupportSelfVersion(): void { - $links = $this->loader->parseLinks('Plugin', '6.6.6', Link::TYPE_REQUIRE, array('composer-plugin-api' => 'self.version')); + $links = $this->loader->parseLinks('Plugin', '6.6.6', Link::TYPE_REQUIRE, ['composer-plugin-api' => 'self.version']); $this->assertArrayHasKey('composer-plugin-api', $links); $this->assertSame('6.6.6', $links['composer-plugin-api']->getConstraint()->getPrettyString()); @@ -317,17 +315,17 @@ class ArrayLoaderTest extends TestCase public function testParseLinksIntegerTarget(): void { - $links = $this->loader->parseLinks('Plugin', '9.9.9', Link::TYPE_REQUIRE, array('1' => 'dev-main')); + $links = $this->loader->parseLinks('Plugin', '9.9.9', Link::TYPE_REQUIRE, ['1' => 'dev-main']); $this->assertArrayHasKey('1', $links); } public function testNoneStringVersion(): void { - $config = array( + $config = [ 'name' => 'acme/package', 'version' => 1, - ); + ]; $package = $this->loader->load($config); $this->assertSame('1', $package->getPrettyVersion()); @@ -335,7 +333,7 @@ class ArrayLoaderTest extends TestCase public function testNoneStringSourceDistReference(): void { - $config = array( + $config = [ 'name' => 'acme/package', 'version' => 'dev-main', 'source' => [ @@ -348,7 +346,7 @@ class ArrayLoaderTest extends TestCase 'url' => 'https://example.org/', 'reference' => 2019, ], - ); + ]; $package = $this->loader->load($config); $this->assertSame('2019', $package->getSourceReference()); @@ -357,7 +355,7 @@ class ArrayLoaderTest extends TestCase public function testBranchAliasIntegerIndex(): void { - $config = array( + $config = [ 'name' => 'acme/package', 'version' => 'dev-1', 'extra' => [ @@ -369,7 +367,7 @@ class ArrayLoaderTest extends TestCase 'type' => 'zip', 'url' => 'https://example.org/', ], - ); + ]; $this->assertNull($this->loader->getBranchAlias($config)); } diff --git a/tests/Composer/Test/Package/Loader/RootPackageLoaderTest.php b/tests/Composer/Test/Package/Loader/RootPackageLoaderTest.php index 6d0cc3d34..28684e56e 100644 --- a/tests/Composer/Test/Package/Loader/RootPackageLoaderTest.php +++ b/tests/Composer/Test/Package/Loader/RootPackageLoaderTest.php @@ -36,7 +36,7 @@ class RootPackageLoaderTest extends TestCase ->getMock(); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $processExecutor = new ProcessExecutor(); $processExecutor->enableAsync(); $guesser = new VersionGuesser($config, $processExecutor, new VersionParser()); @@ -48,8 +48,8 @@ class RootPackageLoaderTest extends TestCase public function testStabilityFlagsParsing(): void { - $package = $this->loadPackage(array( - 'require' => array( + $package = $this->loadPackage([ + 'require' => [ 'foo/bar' => '~2.1.0-beta2', 'bar/baz' => '1.0.x-dev as 1.2.0', 'qux/quux' => '1.0.*@rc', @@ -58,12 +58,12 @@ class RootPackageLoaderTest extends TestCase 'multi/lowest-wins' => '^2.0@rc || >=3.0@dev , ~3.5@alpha', 'or/op-without-flags' => 'dev-master || 2.0 , ~3.5-alpha', 'or/op-without-flags2' => '3.0-beta || 2.0 , ~3.5-alpha', - ), + ], 'minimum-stability' => 'alpha', - )); + ]); $this->assertEquals('alpha', $package->getMinimumStability()); - $this->assertEquals(array( + $this->assertEquals([ 'bar/baz' => BasePackage::STABILITY_DEV, 'qux/quux' => BasePackage::STABILITY_RC, 'zux/complex' => BasePackage::STABILITY_DEV, @@ -71,7 +71,7 @@ class RootPackageLoaderTest extends TestCase 'multi/lowest-wins' => BasePackage::STABILITY_DEV, 'or/op-without-flags' => BasePackage::STABILITY_DEV, 'or/op-without-flags2' => BasePackage::STABILITY_ALPHA, - ), $package->getStabilityFlags()); + ], $package->getStabilityFlags()); } public function testNoVersionIsVisibleInPrettyVersion(): void @@ -82,11 +82,11 @@ class RootPackageLoaderTest extends TestCase ; $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $loader = new RootPackageLoader($manager, $config, null, new VersionGuesser($config, $process = $this->getProcessExecutorMock(), new VersionParser())); - $process->expects(array(), false, array('return' => 1)); + $process->expects([], false, ['return' => 1]); - $package = $loader->load(array()); + $package = $loader->load([]); $this->assertEquals("1.0.0.0", $package->getVersion()); $this->assertEquals(RootPackage::DEFAULT_PRETTY_VERSION, $package->getPrettyVersion()); @@ -99,16 +99,16 @@ class RootPackageLoaderTest extends TestCase $versionGuesser = $this->getMockBuilder('Composer\\Package\\Version\\VersionGuesser')->disableOriginalConstructor()->getMock(); $versionGuesser->expects($this->atLeastOnce()) ->method('guessVersion') - ->willReturn(array( + ->willReturn([ 'name' => 'A', 'version' => '3.0.9999999.9999999-dev', 'pretty_version' => '3.0-dev', 'commit' => 'aabbccddee', - )); + ]); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $loader = new RootPackageLoader($manager, $config, null, $versionGuesser); - $package = $loader->load(array()); + $package = $loader->load([]); $this->assertEquals('3.0-dev', $package->getPrettyVersion()); } @@ -125,18 +125,18 @@ class RootPackageLoaderTest extends TestCase ; $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'stdout' => "* latest-production 38137d2f6c70e775e137b2d8a7a7d3eaebf7c7e5 Commit message\n master 4f6ed96b0bc363d2aa4404c3412de1c011f67c66 Commit message\n", - ), + ], 'git rev-list master..latest-production', - ), true); + ], true); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $loader = new RootPackageLoader($manager, $config, null, new VersionGuesser($config, $process, new VersionParser())); - $package = $loader->load(array('require' => array('foo/bar' => 'self.version'))); + $package = $loader->load(['require' => ['foo/bar' => 'self.version']]); $this->assertEquals("dev-master", $package->getPrettyVersion()); } @@ -153,17 +153,17 @@ class RootPackageLoaderTest extends TestCase ; $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'stdout' => "* latest-production 38137d2f6c70e775e137b2d8a7a7d3eaebf7c7e5 Commit message\n master 4f6ed96b0bc363d2aa4404c3412de1c011f67c66 Commit message\n", - ), - ), true); + ], + ], true); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $loader = new RootPackageLoader($manager, $config, null, new VersionGuesser($config, $process, new VersionParser())); - $package = $loader->load(array('require' => array('foo/bar' => 'self.version'), "non-feature-branches" => array("latest-.*"))); + $package = $loader->load(['require' => ['foo/bar' => 'self.version'], "non-feature-branches" => ["latest-.*"]]); $this->assertEquals("dev-latest-production", $package->getPrettyVersion()); } diff --git a/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php b/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php index 4562a2702..fc78a4411 100644 --- a/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php +++ b/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php @@ -37,35 +37,35 @@ class ValidatingArrayLoaderTest extends TestCase public function successProvider(): array { - return array( - array( // minimal - array( + return [ + [ // minimal + [ 'name' => 'foo/bar', - ), - ), - array( // complete - array( + ], + ], + [ // complete + [ 'name' => 'foo/bar', 'description' => 'Foo bar', 'version' => '1.0.0', 'type' => 'library', - 'keywords' => array('a', 'b_c', 'D E', 'éîüø', '微信'), + 'keywords' => ['a', 'b_c', 'D E', 'éîüø', '微信'], 'homepage' => 'https://foo.com', 'time' => '2010-10-10T10:10:10+00:00', 'license' => 'MIT', - 'authors' => array( - array( + 'authors' => [ + [ 'name' => 'Alice', 'email' => 'alice@example.org', 'role' => 'Lead', 'homepage' => 'http://example.org', - ), - array( + ], + [ 'name' => 'Bob', 'homepage' => '', - ), - ), - 'support' => array( + ], + ], + 'support' => [ 'email' => 'mail@example.org', 'issues' => 'http://example.org/', 'forum' => 'http://example.org/', @@ -74,136 +74,136 @@ class ValidatingArrayLoaderTest extends TestCase 'irc' => 'irc://example.org/example', 'rss' => 'http://example.org/rss', 'chat' => 'http://example.org/chat', - ), - 'funding' => array( - array( + ], + 'funding' => [ + [ 'type' => 'example', 'url' => 'https://example.org/fund', - ), - array( + ], + [ 'url' => 'https://example.org/fund', - ), - ), - 'require' => array( + ], + ], + 'require' => [ 'a/b' => '1.*', 'b/c' => '~2', 'example/pkg' => '>2.0-dev,<2.4-dev', 'composer-runtime-api' => '*', - ), - 'require-dev' => array( + ], + 'require-dev' => [ 'a/b' => '1.*', 'b/c' => '*', 'example/pkg' => '>2.0-dev,<2.4-dev', - ), - 'conflict' => array( + ], + 'conflict' => [ 'a/bx' => '1.*', 'b/cx' => '>2.7', 'example/pkgx' => '>2.0-dev,<2.4-dev', - ), - 'replace' => array( + ], + 'replace' => [ 'a/b' => '1.*', 'example/pkg' => '>2.0-dev,<2.4-dev', - ), - 'provide' => array( + ], + 'provide' => [ 'a/b' => '1.*', 'example/pkg' => '>2.0-dev,<2.4-dev', - ), - 'suggest' => array( + ], + 'suggest' => [ 'foo/bar' => 'Foo bar is very useful', - ), - 'autoload' => array( - 'psr-0' => array( + ], + 'autoload' => [ + 'psr-0' => [ 'Foo\\Bar' => 'src/', '' => 'fallback/libs/', - ), - 'classmap' => array( + ], + 'classmap' => [ 'dir/', 'dir2/file.php', - ), - 'files' => array( + ], + 'files' => [ 'functions.php', - ), - ), - 'include-path' => array( + ], + ], + 'include-path' => [ 'lib/', - ), + ], 'target-dir' => 'Foo/Bar', 'minimum-stability' => 'dev', - 'repositories' => array( - array( + 'repositories' => [ + [ 'type' => 'composer', 'url' => 'https://repo.packagist.org/', - ), - ), - 'config' => array( + ], + ], + 'config' => [ 'bin-dir' => 'bin', 'vendor-dir' => 'vendor', 'process-timeout' => 10000, - ), - 'archive' => array( - 'exclude' => array('/foo/bar', 'baz', '!/foo/bar/baz'), - ), - 'scripts' => array( + ], + 'archive' => [ + 'exclude' => ['/foo/bar', 'baz', '!/foo/bar/baz'], + ], + 'scripts' => [ 'post-update-cmd' => 'Foo\\Bar\\Baz::doSomething', - 'post-install-cmd' => array( + 'post-install-cmd' => [ 'Foo\\Bar\\Baz::doSomething', - ), - ), - 'extra' => array( - 'random' => array('stuff' => array('deeply' => 'nested')), - 'branch-alias' => array( + ], + ], + 'extra' => [ + 'random' => ['stuff' => ['deeply' => 'nested']], + 'branch-alias' => [ 'dev-master' => '2.0-dev', 'dev-old' => '1.0.x-dev', '3.x-dev' => '3.1.x-dev', - ), - ), - 'bin' => array( + ], + ], + 'bin' => [ 'bin/foo', 'bin/bar', - ), - 'transport-options' => array('ssl' => array('local_cert' => '/opt/certs/test.pem')), - ), - ), - array( // test licenses as array - array( + ], + 'transport-options' => ['ssl' => ['local_cert' => '/opt/certs/test.pem']], + ], + ], + [ // test licenses as array + [ 'name' => 'foo/bar', - 'license' => array('MIT', 'WTFPL'), - ), - ), - array( // test bin as string - array( + 'license' => ['MIT', 'WTFPL'], + ], + ], + [ // test bin as string + [ 'name' => 'foo/bar', 'bin' => 'bin1', - ), - ), - array( // package name with dashes - array( + ], + ], + [ // package name with dashes + [ 'name' => 'foo/bar-baz', - ), - ), - array( // package name with dashes - array( + ], + ], + [ // package name with dashes + [ 'name' => 'foo/bar--baz', - ), - ), - array( // package name with dashes - array( + ], + ], + [ // package name with dashes + [ 'name' => 'foo/b-ar--ba-z', - ), - ), - array( // package name with dashes - array( + ], + ], + [ // package name with dashes + [ 'name' => 'npm-asset/angular--core', - ), - ), - array( // refs as int or string - array( + ], + ], + [ // refs as int or string + [ 'name' => 'foo/bar', - 'source' => array('url' => 'https://example.org', 'reference' => 1234, 'type' => 'baz'), - 'dist' => array('url' => 'https://example.org', 'reference' => 'foobar', 'type' => 'baz'), - ), - ), - ); + 'source' => ['url' => 'https://example.org', 'reference' => 1234, 'type' => 'baz'], + 'dist' => ['url' => 'https://example.org', 'reference' => 'foobar', 'type' => 'baz'], + ], + ], + ]; } /** @@ -250,7 +250,6 @@ class ValidatingArrayLoaderTest extends TestCase * * @param array $config * @param string[] $expectedWarnings - * @param bool $mustCheck */ public function testLoadSkipsWarningDataWhenIgnoringErrors(array $config, array $expectedWarnings, bool $mustCheck = true): void { @@ -263,7 +262,7 @@ class ValidatingArrayLoaderTest extends TestCase $internalLoader ->expects($this->once()) ->method('load') - ->with(array('name' => 'a/b')); + ->with(['name' => 'a/b']); $loader = new ValidatingArrayLoader($internalLoader, true, null, ValidatingArrayLoader::CHECK_ALL); $config['name'] = 'a/b'; @@ -272,264 +271,264 @@ class ValidatingArrayLoaderTest extends TestCase public function errorProvider(): array { - $invalidNames = array( + $invalidNames = [ 'foo', 'foo/-bar-', 'foo/-bar', - ); - $invalidNaming = array(); + ]; + $invalidNaming = []; foreach ($invalidNames as $invalidName) { - $invalidNaming[] = array( - array( + $invalidNaming[] = [ + [ 'name' => $invalidName, - ), - array( + ], + [ "name : $invalidName is invalid, it should have a vendor name, a forward slash, and a package name. The vendor and package name can be words separated by -, . or _. The complete name should match \"^[a-z0-9]([_.-]?[a-z0-9]+)*/[a-z0-9](([_.]?|-{0,2})[a-z0-9]+)*$\".", - ), - ); + ], + ]; } - $invalidNames = array( + $invalidNames = [ 'fo--oo/bar', 'fo-oo/bar__baz', 'fo-oo/bar_.baz', 'foo/bar---baz', - ); + ]; foreach ($invalidNames as $invalidName) { - $invalidNaming[] = array( - array( + $invalidNaming[] = [ + [ 'name' => $invalidName, - ), - array( + ], + [ "name : $invalidName is invalid, it should have a vendor name, a forward slash, and a package name. The vendor and package name can be words separated by -, . or _. The complete name should match \"^[a-z0-9]([_.-]?[a-z0-9]+)*/[a-z0-9](([_.]?|-{0,2})[a-z0-9]+)*$\".", - ), + ], false, - ); + ]; } - return array_merge($invalidNaming, array( - array( - array( + return array_merge($invalidNaming, [ + [ + [ 'name' => 'foo/bar', 'homepage' => 43, - ), - array( + ], + [ 'homepage : should be a string, integer given', - ), - ), - array( - array( + ], + ], + [ + [ 'name' => 'foo/bar', - 'support' => array( - 'source' => array(), - ), - ), - array( + 'support' => [ + 'source' => [], + ], + ], + [ 'support.source : invalid value, must be a string', - ), - ), - array( - array( + ], + ], + [ + [ 'name' => 'foo/bar.json', - ), - array( + ], + [ 'name : foo/bar.json is invalid, package names can not end in .json, consider renaming it or perhaps using a -json suffix instead.', - ), - ), - array( - array( + ], + ], + [ + [ 'name' => 'com1/foo', - ), - array( + ], + [ 'name : com1/foo is reserved, package and vendor names can not match any of: nul, con, prn, aux, com1, com2, com3, com4, com5, com6, com7, com8, com9, lpt1, lpt2, lpt3, lpt4, lpt5, lpt6, lpt7, lpt8, lpt9.', - ), - ), - array( - array( + ], + ], + [ + [ 'name' => 'Foo/Bar', - ), - array( + ], + [ 'name : Foo/Bar is invalid, it should not contain uppercase characters. We suggest using foo/bar instead.', - ), - ), - array( - array( + ], + ], + [ + [ 'name' => 'foo/bar', 'autoload' => 'strings', - ), - array( + ], + [ 'autoload : should be an array, string given', - ), - ), - array( - array( + ], + ], + [ + [ 'name' => 'foo/bar', - 'autoload' => array( - 'psr0' => array( + 'autoload' => [ + 'psr0' => [ 'foo' => 'src', - ), - ), - ), - array( + ], + ], + ], + [ 'autoload : invalid value (psr0), must be one of psr-0, psr-4, classmap, files, exclude-from-classmap', - ), - ), - array( - array( + ], + ], + [ + [ 'name' => 'foo/bar', 'transport-options' => 'test', - ), - array( + ], + [ 'transport-options : should be an array, string given', - ), - ), - array( - array( + ], + ], + [ + [ 'name' => 'foo/bar', - 'source' => array('url' => '--foo', 'reference' => ' --bar', 'type' => 'baz'), - 'dist' => array('url' => ' --foox', 'reference' => '--barx', 'type' => 'baz'), - ), - array( + 'source' => ['url' => '--foo', 'reference' => ' --bar', 'type' => 'baz'], + 'dist' => ['url' => ' --foox', 'reference' => '--barx', 'type' => 'baz'], + ], + [ 'dist.reference : must not start with a "-", "--barx" given', 'dist.url : must not start with a "-", " --foox" given', 'source.reference : must not start with a "-", " --bar" given', 'source.url : must not start with a "-", "--foo" given', - ), - ), - array( - array( + ], + ], + [ + [ 'name' => 'foo/bar', - 'require' => array('foo/Bar' => '1.*'), - ), - array( + 'require' => ['foo/Bar' => '1.*'], + ], + [ 'require.foo/Bar : a package cannot set a require on itself', - ), - ), - array( - array( + ], + ], + [ + [ 'name' => 'foo/bar', - 'source' => array('url' => 1), - 'dist' => array('url' => null), - ), - array( + 'source' => ['url' => 1], + 'dist' => ['url' => null], + ], + [ 'source.type : must be present', 'source.url : should be a string, integer given', 'source.reference : must be present', 'dist.type : must be present', 'dist.url : must be present', - ), - ), - array( - array( + ], + ], + [ + [ 'name' => 'foo/bar', - 'replace' => array('acme/bar'), - ), - array('replace.0 : invalid version constraint (Could not parse version constraint acme/bar: Invalid version string "acme/bar")') - ), - )); + 'replace' => ['acme/bar'], + ], + ['replace.0 : invalid version constraint (Could not parse version constraint acme/bar: Invalid version string "acme/bar")'], + ], + ]); } public function warningProvider(): array { - return array( - array( - array( + return [ + [ + [ 'name' => 'foo/bar', 'homepage' => 'foo:bar', - ), - array( + ], + [ 'homepage : invalid value (foo:bar), must be an http/https URL', - ), - ), - array( - array( + ], + ], + [ + [ 'name' => 'foo/bar', - 'support' => array( + 'support' => [ 'source' => 'foo:bar', 'forum' => 'foo:bar', 'issues' => 'foo:bar', 'wiki' => 'foo:bar', 'chat' => 'foo:bar', - ), - ), - array( + ], + ], + [ 'support.source : invalid value (foo:bar), must be an http/https URL', 'support.forum : invalid value (foo:bar), must be an http/https URL', 'support.issues : invalid value (foo:bar), must be an http/https URL', 'support.wiki : invalid value (foo:bar), must be an http/https URL', 'support.chat : invalid value (foo:bar), must be an http/https URL', - ), - ), - array( - array( + ], + ], + [ + [ 'name' => 'foo/bar', - 'require' => array( + 'require' => [ 'foo/baz' => '*', 'bar/baz' => '>=1.0', 'bar/hacked' => '@stable', 'bar/woo' => '1.0.0', - ), - ), - array( + ], + ], + [ 'require.foo/baz : unbound version constraints (*) should be avoided', 'require.bar/baz : unbound version constraints (>=1.0) should be avoided', 'require.bar/hacked : unbound version constraints (@stable) should be avoided', 'require.bar/woo : exact version constraints (1.0.0) should be avoided if the package follows semantic versioning', - ), + ], false, - ), - array( - array( + ], + [ + [ 'name' => 'foo/bar', - 'require' => array( + 'require' => [ 'bar/unstable' => '0.3.0', - ), - ), - array( + ], + ], + [ // using an exact version constraint for an unstable version should not trigger a warning - ), + ], false, - ), - array( - array( + ], + [ + [ 'name' => 'foo/bar', - 'extra' => array( - 'branch-alias' => array( + 'extra' => [ + 'branch-alias' => [ '5.x-dev' => '3.1.x-dev', - ), - ), - ), - array( + ], + ], + ], + [ 'extra.branch-alias.5.x-dev : the target branch (3.1.x-dev) is not a valid numeric alias for this version', - ), + ], false, - ), - array( - array( + ], + [ + [ 'name' => 'foo/bar', - 'extra' => array( - 'branch-alias' => array( + 'extra' => [ + 'branch-alias' => [ '5.x-dev' => '3.1-dev', - ), - ), - ), - array( + ], + ], + ], + [ 'extra.branch-alias.5.x-dev : the target branch (3.1-dev) is not a valid numeric alias for this version', - ), + ], false, - ), - array( - array( + ], + [ + [ 'name' => 'foo/bar', - 'require' => array( + 'require' => [ 'Foo/Baz' => '^1.0', - ), - ), - array( + ], + ], + [ 'require.Foo/Baz is invalid, it should not contain uppercase characters. Please use foo/baz instead.', - ), + ], false, - ), - ); + ], + ]; } } diff --git a/tests/Composer/Test/Package/LockerTest.php b/tests/Composer/Test/Package/LockerTest.php index 34e8be360..5684e85ec 100644 --- a/tests/Composer/Test/Package/LockerTest.php +++ b/tests/Composer/Test/Package/LockerTest.php @@ -37,7 +37,7 @@ class LockerTest extends TestCase $json ->expects($this->any()) ->method('read') - ->will($this->returnValue(array('packages' => array()))); + ->will($this->returnValue(['packages' => []])); $this->assertTrue($locker->isLocked()); } @@ -73,12 +73,12 @@ class LockerTest extends TestCase $json ->expects($this->once()) ->method('read') - ->will($this->returnValue(array( - 'packages' => array( - array('name' => 'pkg1', 'version' => '1.0.0-beta'), - array('name' => 'pkg2', 'version' => '0.1.10'), - ), - ))); + ->will($this->returnValue([ + 'packages' => [ + ['name' => 'pkg1', 'version' => '1.0.0-beta'], + ['name' => 'pkg2', 'version' => '0.1.10'], + ], + ])); $repo = $locker->getLockedRepository(); $this->assertNotNull($repo->findPackage('pkg1', '1.0.0-beta')); @@ -101,28 +101,28 @@ class LockerTest extends TestCase $json ->expects($this->once()) ->method('write') - ->with(array( - '_readme' => array('This file locks the dependencies of your project to a known state', + ->with([ + '_readme' => ['This file locks the dependencies of your project to a known state', 'Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies', - 'This file is @gener'.'ated automatically', ), + 'This file is @gener'.'ated automatically', ], 'content-hash' => $contentHash, - 'packages' => array( - array('name' => 'pkg1', 'version' => '1.0.0-beta', 'type' => 'library'), - array('name' => 'pkg2', 'version' => '0.1.10', 'type' => 'library'), - ), - 'packages-dev' => array(), - 'aliases' => array(), + 'packages' => [ + ['name' => 'pkg1', 'version' => '1.0.0-beta', 'type' => 'library'], + ['name' => 'pkg2', 'version' => '0.1.10', 'type' => 'library'], + ], + 'packages-dev' => [], + 'aliases' => [], 'minimum-stability' => 'dev', - 'stability-flags' => array(), - 'platform' => array(), - 'platform-dev' => array(), - 'platform-overrides' => array('foo/bar' => '1.0'), + 'stability-flags' => [], + 'platform' => [], + 'platform-dev' => [], + 'platform-overrides' => ['foo/bar' => '1.0'], 'prefer-stable' => false, 'prefer-lowest' => false, 'plugin-api-version' => PluginInterface::PLUGIN_API_VERSION, - )); + ]); - $locker->setLockData(array($package1, $package2), array(), array(), array(), array(), 'dev', array(), false, false, array('foo/bar' => '1.0')); + $locker->setLockData([$package1, $package2], [], [], [], [], 'dev', [], false, false, ['foo/bar' => '1.0']); } public function testLockBadPackages(): void @@ -140,7 +140,7 @@ class LockerTest extends TestCase self::expectException('LogicException'); - $locker->setLockData(array($package1), array(), array(), array(), array(), 'dev', array(), false, false, array()); + $locker->setLockData([$package1], [], [], [], [], 'dev', [], false, false, []); } public function testIsFresh(): void @@ -154,7 +154,7 @@ class LockerTest extends TestCase $json ->expects($this->once()) ->method('read') - ->will($this->returnValue(array('hash' => md5($jsonContent)))); + ->will($this->returnValue(['hash' => md5($jsonContent)])); $this->assertTrue($locker->isFresh()); } @@ -169,7 +169,7 @@ class LockerTest extends TestCase $json ->expects($this->once()) ->method('read') - ->will($this->returnValue(array('hash' => $this->getJsonContent(array('name' => 'test2'))))); + ->will($this->returnValue(['hash' => $this->getJsonContent(['name' => 'test2'])])); $this->assertFalse($locker->isFresh()); } @@ -185,7 +185,7 @@ class LockerTest extends TestCase $json ->expects($this->once()) ->method('read') - ->will($this->returnValue(array('hash' => md5($jsonContent . ' '), 'content-hash' => md5($jsonContent)))); + ->will($this->returnValue(['hash' => md5($jsonContent . ' '), 'content-hash' => md5($jsonContent)])); $this->assertTrue($locker->isFresh()); } @@ -201,7 +201,7 @@ class LockerTest extends TestCase $json ->expects($this->once()) ->method('read') - ->will($this->returnValue(array('content-hash' => md5($jsonContent)))); + ->will($this->returnValue(['content-hash' => md5($jsonContent)])); $this->assertTrue($locker->isFresh()); } @@ -213,12 +213,12 @@ class LockerTest extends TestCase $locker = new Locker(new NullIO, $json, $inst, $this->getJsonContent()); - $differentHash = md5($this->getJsonContent(array('name' => 'test2'))); + $differentHash = md5($this->getJsonContent(['name' => 'test2'])); $json ->expects($this->once()) ->method('read') - ->will($this->returnValue(array('hash' => $differentHash, 'content-hash' => $differentHash))); + ->will($this->returnValue(['hash' => $differentHash, 'content-hash' => $differentHash])); $this->assertFalse($locker->isFresh()); } @@ -256,12 +256,12 @@ class LockerTest extends TestCase /** * @param array $customData */ - private function getJsonContent(array $customData = array()): string + private function getJsonContent(array $customData = []): string { - $data = array_merge(array( + $data = array_merge([ 'minimum-stability' => 'beta', 'name' => 'test', - ), $customData); + ], $customData); ksort($data); diff --git a/tests/Composer/Test/Package/RootAliasPackageTest.php b/tests/Composer/Test/Package/RootAliasPackageTest.php index c871cd1f5..8f71a3bd0 100644 --- a/tests/Composer/Test/Package/RootAliasPackageTest.php +++ b/tests/Composer/Test/Package/RootAliasPackageTest.php @@ -23,7 +23,7 @@ class RootAliasPackageTest extends TestCase { public function testUpdateRequires(): void { - $links = array(new Link('a', 'b', new MatchAllConstraint(), Link::TYPE_REQUIRE, 'self.version')); + $links = [new Link('a', 'b', new MatchAllConstraint(), Link::TYPE_REQUIRE, 'self.version')]; $root = $this->getMockRootPackage(); $root->expects($this->once()) @@ -38,7 +38,7 @@ class RootAliasPackageTest extends TestCase public function testUpdateDevRequires(): void { - $links = array(new Link('a', 'b', new MatchAllConstraint(), Link::TYPE_DEV_REQUIRE, 'self.version')); + $links = [new Link('a', 'b', new MatchAllConstraint(), Link::TYPE_DEV_REQUIRE, 'self.version')]; $root = $this->getMockRootPackage(); $root->expects($this->once()) @@ -53,7 +53,7 @@ class RootAliasPackageTest extends TestCase public function testUpdateConflicts(): void { - $links = array(new Link('a', 'b', new MatchAllConstraint(), Link::TYPE_CONFLICT, 'self.version')); + $links = [new Link('a', 'b', new MatchAllConstraint(), Link::TYPE_CONFLICT, 'self.version')]; $root = $this->getMockRootPackage(); $root->expects($this->once()) @@ -68,7 +68,7 @@ class RootAliasPackageTest extends TestCase public function testUpdateProvides(): void { - $links = array(new Link('a', 'b', new MatchAllConstraint(), Link::TYPE_PROVIDE, 'self.version')); + $links = [new Link('a', 'b', new MatchAllConstraint(), Link::TYPE_PROVIDE, 'self.version')]; $root = $this->getMockRootPackage(); $root->expects($this->once()) @@ -83,7 +83,7 @@ class RootAliasPackageTest extends TestCase public function testUpdateReplaces(): void { - $links = array(new Link('a', 'b', new MatchAllConstraint(), Link::TYPE_REPLACE, 'self.version')); + $links = [new Link('a', 'b', new MatchAllConstraint(), Link::TYPE_REPLACE, 'self.version')]; $root = $this->getMockRootPackage(); $root->expects($this->once()) @@ -107,19 +107,19 @@ class RootAliasPackageTest extends TestCase ->willReturn('something/something'); $root->expects($this->atLeastOnce()) ->method('getRequires') - ->willReturn(array()); + ->willReturn([]); $root->expects($this->atLeastOnce()) ->method('getDevRequires') - ->willReturn(array()); + ->willReturn([]); $root->expects($this->atLeastOnce()) ->method('getConflicts') - ->willReturn(array()); + ->willReturn([]); $root->expects($this->atLeastOnce()) ->method('getProvides') - ->willReturn(array()); + ->willReturn([]); $root->expects($this->atLeastOnce()) ->method('getReplaces') - ->willReturn(array()); + ->willReturn([]); return $root; } diff --git a/tests/Composer/Test/Package/Version/VersionBumperTest.php b/tests/Composer/Test/Package/Version/VersionBumperTest.php index 648ffa314..e08ac701a 100644 --- a/tests/Composer/Test/Package/Version/VersionBumperTest.php +++ b/tests/Composer/Test/Package/Version/VersionBumperTest.php @@ -12,13 +12,8 @@ namespace Composer\Test\Package\Version; -use Composer\Filter\PlatformRequirementFilter\PlatformRequirementFilterFactory; use Composer\Package\Version\VersionBumper; -use Composer\Package\Version\VersionSelector; use Composer\Package\Package; -use Composer\Package\Link; -use Composer\Package\AliasPackage; -use Composer\Repository\PlatformRepository; use Composer\Package\Version\VersionParser; use Composer\Test\TestCase; use Generator; @@ -36,7 +31,7 @@ class VersionBumperTest extends TestCase $package = new Package('foo/bar', $versionParser->normalize($prettyVersion), $prettyVersion); if ($branchAlias !== null) { - $package->setExtra(array('branch-alias' => array($prettyVersion => $branchAlias))); + $package->setExtra(['branch-alias' => [$prettyVersion => $branchAlias]]); } $newConstraint = $versionBumper->bumpRequirement($versionParser->parseConstraints($requirement), $package); diff --git a/tests/Composer/Test/Package/Version/VersionGuesserTest.php b/tests/Composer/Test/Package/Version/VersionGuesserTest.php index e5076862a..6bc7f03a0 100644 --- a/tests/Composer/Test/Package/Version/VersionGuesserTest.php +++ b/tests/Composer/Test/Package/Version/VersionGuesserTest.php @@ -33,21 +33,21 @@ class VersionGuesserTest extends TestCase $branch = 'default'; $process = $this->getProcessExecutorMock(); - $process->expects(array( - array('cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'return' => 128), - array('cmd' => 'git describe --exact-match --tags', 'return' => 128), - array('cmd' => 'git log --pretty="%H" -n1 HEAD'.GitUtil::getNoShowSignatureFlag($process), 'return' => 128), - array('cmd' => 'hg branch', 'return' => 0, 'stdout' => $branch), - array('cmd' => 'hg branches', 'return' => 0), - array('cmd' => 'hg bookmarks', 'return' => 0), - ), true); + $process->expects([ + ['cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'return' => 128], + ['cmd' => 'git describe --exact-match --tags', 'return' => 128], + ['cmd' => 'git log --pretty="%H" -n1 HEAD'.GitUtil::getNoShowSignatureFlag($process), 'return' => 128], + ['cmd' => 'hg branch', 'return' => 0, 'stdout' => $branch], + ['cmd' => 'hg branches', 'return' => 0], + ['cmd' => 'hg bookmarks', 'return' => 0], + ], true); GitUtil::getVersion(new ProcessExecutor); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $guesser = new VersionGuesser($config, $process, new VersionParser()); - $versionArray = $guesser->guessVersion(array(), 'dummy/path'); + $versionArray = $guesser->guessVersion([], 'dummy/path'); $this->assertEquals("dev-".$branch, $versionArray['version']); $this->assertEquals("dev-".$branch, $versionArray['pretty_version']); @@ -60,17 +60,17 @@ class VersionGuesserTest extends TestCase $anotherCommitHash = '03a15d220da53c52eddd5f32ffca64a7b3801bea'; $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'stdout' => "* master $commitHash Commit message\n(no branch) $anotherCommitHash Commit message\n", - ), - ), true); + ], + ], true); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $guesser = new VersionGuesser($config, $process, new VersionParser()); - $versionArray = $guesser->guessVersion(array(), 'dummy/path'); + $versionArray = $guesser->guessVersion([], 'dummy/path'); $this->assertEquals("dev-master", $versionArray['version']); $this->assertEquals("dev-master", $versionArray['pretty_version']); @@ -85,18 +85,18 @@ class VersionGuesserTest extends TestCase $anotherCommitHash = '13a15d220da53c52eddd5f32ffca64a7b3801bea'; $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], // Assumption here is that arbitrary would be the default branch 'stdout' => " arbitrary $commitHash Commit message\n* current $anotherCommitHash Another message\n", - ), - ), true); + ], + ], true); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $guesser = new VersionGuesser($config, $process, new VersionParser()); - $versionArray = $guesser->guessVersion(array('version' => 'self.version'), 'dummy/path'); + $versionArray = $guesser->guessVersion(['version' => 'self.version'], 'dummy/path'); $this->assertEquals("dev-current", $versionArray['version']); $this->assertEquals($anotherCommitHash, $versionArray['commit']); @@ -108,21 +108,21 @@ class VersionGuesserTest extends TestCase $anotherCommitHash = '13a15d220da53c52eddd5f32ffca64a7b3801bea'; $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'stdout' => " arbitrary $commitHash Commit message\n* feature $anotherCommitHash Another message\n", - ), - array( + ], + [ 'cmd' => 'git rev-list arbitrary..feature', 'stdout' => "$anotherCommitHash\n", - ), - ), true); + ], + ], true); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $guesser = new VersionGuesser($config, $process, new VersionParser()); - $versionArray = $guesser->guessVersion(array('version' => 'self.version', 'non-feature-branches' => array('arbitrary')), 'dummy/path'); + $versionArray = $guesser->guessVersion(['version' => 'self.version', 'non-feature-branches' => ['arbitrary']], 'dummy/path'); $this->assertEquals("dev-arbitrary", $versionArray['version']); $this->assertEquals($anotherCommitHash, $versionArray['commit']); @@ -136,21 +136,21 @@ class VersionGuesserTest extends TestCase $anotherCommitHash = '13a15d220da53c52eddd5f32ffca64a7b3801bea'; $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'stdout' => " latest-testing $commitHash Commit message\n* feature $anotherCommitHash Another message\n", - ), - array( + ], + [ 'cmd' => 'git rev-list latest-testing..feature', 'stdout' => "$anotherCommitHash\n", - ), - ), true); + ], + ], true); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $guesser = new VersionGuesser($config, $process, new VersionParser()); - $versionArray = $guesser->guessVersion(array('version' => 'self.version', 'non-feature-branches' => array('latest-.*')), 'dummy/path'); + $versionArray = $guesser->guessVersion(['version' => 'self.version', 'non-feature-branches' => ['latest-.*']], 'dummy/path'); $this->assertEquals("dev-latest-testing", $versionArray['version']); $this->assertEquals($anotherCommitHash, $versionArray['commit']); @@ -164,17 +164,17 @@ class VersionGuesserTest extends TestCase $anotherCommitHash = '13a15d220da53c52eddd5f32ffca64a7b3801bea'; $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'stdout' => "* latest-testing $commitHash Commit message\n current $anotherCommitHash Another message\n master $anotherCommitHash Another message\n", - ), - ), true); + ], + ], true); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $guesser = new VersionGuesser($config, $process, new VersionParser()); - $versionArray = $guesser->guessVersion(array('version' => 'self.version', 'non-feature-branches' => array('latest-.*')), 'dummy/path'); + $versionArray = $guesser->guessVersion(['version' => 'self.version', 'non-feature-branches' => ['latest-.*']], 'dummy/path'); $this->assertEquals("dev-latest-testing", $versionArray['version']); $this->assertEquals($commitHash, $versionArray['commit']); @@ -187,18 +187,18 @@ class VersionGuesserTest extends TestCase $commitHash = '03a15d220da53c52eddd5f32ffca64a7b3801bea'; $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'stdout' => "* (no branch) $commitHash Commit message\n", - ), + ], 'git describe --exact-match --tags', - ), true); + ], true); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $guesser = new VersionGuesser($config, $process, new VersionParser()); - $versionData = $guesser->guessVersion(array(), 'dummy/path'); + $versionData = $guesser->guessVersion([], 'dummy/path'); $this->assertEquals("dev-$commitHash", $versionData['version']); } @@ -208,18 +208,18 @@ class VersionGuesserTest extends TestCase $commitHash = '03a15d220da53c52eddd5f32ffca64a7b3801bea'; $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'stdout' => "* (HEAD detached at FETCH_HEAD) $commitHash Commit message\n", - ), + ], 'git describe --exact-match --tags', - ), true); + ], true); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $guesser = new VersionGuesser($config, $process, new VersionParser()); - $versionData = $guesser->guessVersion(array(), 'dummy/path'); + $versionData = $guesser->guessVersion([], 'dummy/path'); $this->assertEquals("dev-$commitHash", $versionData['version']); } @@ -229,18 +229,18 @@ class VersionGuesserTest extends TestCase $commitHash = '03a15d220da53c52eddd5f32ffca64a7b3801bea'; $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'stdout' => "* (HEAD detached at 03a15d220) $commitHash Commit message\n", - ), + ], 'git describe --exact-match --tags', - ), true); + ], true); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $guesser = new VersionGuesser($config, $process, new VersionParser()); - $versionData = $guesser->guessVersion(array(), 'dummy/path'); + $versionData = $guesser->guessVersion([], 'dummy/path'); $this->assertEquals("dev-$commitHash", $versionData['version']); } @@ -248,21 +248,21 @@ class VersionGuesserTest extends TestCase public function testTagBecomesVersion(): void { $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'stdout' => "* (HEAD detached at v2.0.5-alpha2) 433b98d4218c181bae01865901aac045585e8a1a Commit message\n", - ), - array( + ], + [ 'cmd' => 'git describe --exact-match --tags', 'stdout' => "v2.0.5-alpha2", - ), - ), true); + ], + ], true); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $guesser = new VersionGuesser($config, $process, new VersionParser()); - $versionData = $guesser->guessVersion(array(), 'dummy/path'); + $versionData = $guesser->guessVersion([], 'dummy/path'); $this->assertEquals("2.0.5.0-alpha2", $versionData['version']); } @@ -270,21 +270,21 @@ class VersionGuesserTest extends TestCase public function testTagBecomesPrettyVersion(): void { $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'stdout' => "* (HEAD detached at 1.0.0) c006f0c12bbbf197b5c071ffb1c0e9812bb14a4d Commit message\n", - ), - array( + ], + [ 'cmd' => 'git describe --exact-match --tags', 'stdout' => '1.0.0', - ), - ), true); + ], + ], true); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $guesser = new VersionGuesser($config, $process, new VersionParser()); - $versionData = $guesser->guessVersion(array(), 'dummy/path'); + $versionData = $guesser->guessVersion([], 'dummy/path'); $this->assertEquals('1.0.0.0', $versionData['version']); $this->assertEquals('1.0.0', $versionData['pretty_version']); @@ -293,17 +293,17 @@ class VersionGuesserTest extends TestCase public function testInvalidTagBecomesVersion(): void { $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'stdout' => "* foo 03a15d220da53c52eddd5f32ffca64a7b3801bea Commit message\n", - ), - ), true); + ], + ], true); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $guesser = new VersionGuesser($config, $process, new VersionParser()); - $versionData = $guesser->guessVersion(array(), 'dummy/path'); + $versionData = $guesser->guessVersion([], 'dummy/path'); $this->assertEquals("dev-foo", $versionData['version']); } @@ -311,17 +311,17 @@ class VersionGuesserTest extends TestCase public function testNumericBranchesShowNicely(): void { $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'stdout' => "* 1.5 03a15d220da53c52eddd5f32ffca64a7b3801bea Commit message\n", - ), - ), true); + ], + ], true); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $guesser = new VersionGuesser($config, $process, new VersionParser()); - $versionData = $guesser->guessVersion(array(), 'dummy/path'); + $versionData = $guesser->guessVersion([], 'dummy/path'); $this->assertEquals("1.5.x-dev", $versionData['pretty_version']); $this->assertEquals("1.5.9999999.9999999-dev", $versionData['version']); @@ -330,22 +330,22 @@ class VersionGuesserTest extends TestCase public function testRemoteBranchesAreSelected(): void { $process = $this->getProcessExecutorMock(); - $process->expects(array( - array( + $process->expects([ + [ 'cmd' => ['git', 'branch', '-a', '--no-color', '--no-abbrev', '-v'], 'stdout' => "* feature-branch 03a15d220da53c52eddd5f32ffca64a7b3801bea Commit message\n". "remotes/origin/1.5 03a15d220da53c52eddd5f32ffca64a7b3801bea Commit message\n", - ), - array( + ], + [ 'cmd' => 'git rev-list remotes/origin/1.5..feature-branch', 'stdout' => "\n", - ), - ), true); + ], + ], true); $config = new Config; - $config->merge(array('repositories' => array('packagist' => false))); + $config->merge(['repositories' => ['packagist' => false]]); $guesser = new VersionGuesser($config, $process, new VersionParser()); - $versionData = $guesser->guessVersion(array('version' => 'self.version'), 'dummy/path'); + $versionData = $guesser->guessVersion(['version' => 'self.version'], 'dummy/path'); $this->assertEquals("1.5.x-dev", $versionData['pretty_version']); $this->assertEquals("1.5.9999999.9999999-dev", $versionData['version']); } diff --git a/tests/Composer/Test/Package/Version/VersionParserTest.php b/tests/Composer/Test/Package/Version/VersionParserTest.php index 5f2109e8e..9ce9ad58b 100644 --- a/tests/Composer/Test/Package/Version/VersionParserTest.php +++ b/tests/Composer/Test/Package/Version/VersionParserTest.php @@ -32,21 +32,17 @@ class VersionParserTest extends TestCase public function provideParseNameVersionPairsData(): array { - return array( - array(array('php:^7.0'), array(array('name' => 'php', 'version' => '^7.0'))), - array(array('php', '^7.0'), array(array('name' => 'php', 'version' => '^7.0'))), - array(array('php', 'ext-apcu'), array(array('name' => 'php'), array('name' => 'ext-apcu'))), - array(array('foo/*', 'bar*', 'acme/baz', '*@dev'), array(array('name' => 'foo/*'), array('name' => 'bar*'), array('name' => 'acme/baz', 'version' => '*@dev'))), - array(array('php', '*'), array(array('name' => 'php', 'version' => '*'))), - ); + return [ + [['php:^7.0'], [['name' => 'php', 'version' => '^7.0']]], + [['php', '^7.0'], [['name' => 'php', 'version' => '^7.0']]], + [['php', 'ext-apcu'], [['name' => 'php'], ['name' => 'ext-apcu']]], + [['foo/*', 'bar*', 'acme/baz', '*@dev'], [['name' => 'foo/*'], ['name' => 'bar*'], ['name' => 'acme/baz', 'version' => '*@dev']]], + [['php', '*'], [['name' => 'php', 'version' => '*']]], + ]; } /** * @dataProvider provideIsUpgradeTests - * - * @param string $from - * @param string $to - * @param bool $expected */ public function testIsUpgrade(string $from, string $to, bool $expected): void { @@ -55,15 +51,15 @@ class VersionParserTest extends TestCase public function provideIsUpgradeTests(): array { - return array( - array('0.9.0.0', '1.0.0.0', true), - array('1.0.0.0', '0.9.0.0', false), - array('1.0.0.0', VersionParser::DEFAULT_BRANCH_ALIAS, true), - array(VersionParser::DEFAULT_BRANCH_ALIAS, VersionParser::DEFAULT_BRANCH_ALIAS, true), - array(VersionParser::DEFAULT_BRANCH_ALIAS, '1.0.0.0', false), - array('1.0.0.0', 'dev-foo', true), - array('dev-foo', 'dev-foo', true), - array('dev-foo', '1.0.0.0', true), - ); + return [ + ['0.9.0.0', '1.0.0.0', true], + ['1.0.0.0', '0.9.0.0', false], + ['1.0.0.0', VersionParser::DEFAULT_BRANCH_ALIAS, true], + [VersionParser::DEFAULT_BRANCH_ALIAS, VersionParser::DEFAULT_BRANCH_ALIAS, true], + [VersionParser::DEFAULT_BRANCH_ALIAS, '1.0.0.0', false], + ['1.0.0.0', 'dev-foo', true], + ['dev-foo', 'dev-foo', true], + ['dev-foo', '1.0.0.0', true], + ]; } } diff --git a/tests/Composer/Test/Package/Version/VersionSelectorTest.php b/tests/Composer/Test/Package/Version/VersionSelectorTest.php index e9204441d..dd0a5a27e 100644 --- a/tests/Composer/Test/Package/Version/VersionSelectorTest.php +++ b/tests/Composer/Test/Package/Version/VersionSelectorTest.php @@ -14,7 +14,6 @@ namespace Composer\Test\Package\Version; use Composer\Filter\PlatformRequirementFilter\PlatformRequirementFilterFactory; use Composer\IO\BufferIO; -use Composer\IO\IOInterface; use Composer\Package\Version\VersionSelector; use Composer\Package\Package; use Composer\Package\Link; @@ -37,7 +36,7 @@ class VersionSelectorTest extends TestCase $package1 = $this->getPackage('foo/bar', '1.2.1'); $package2 = $this->getPackage('foo/bar', '1.2.2'); $package3 = $this->getPackage('foo/bar', '1.2.0'); - $packages = array($package1, $package2, $package3); + $packages = [$package1, $package2, $package3]; $repositorySet = $this->createMockRepositorySet(); $repositorySet->expects($this->once()) @@ -56,20 +55,20 @@ class VersionSelectorTest extends TestCase { $packageName = 'foo/bar'; - $platform = new PlatformRepository(array(), array('php' => '5.5.0')); + $platform = new PlatformRepository([], ['php' => '5.5.0']); $repositorySet = $this->createMockRepositorySet(); $versionSelector = new VersionSelector($repositorySet, $platform); $parser = new VersionParser; $package0 = $this->getPackage('foo/bar', '0.9.0'); - $package0->setRequires(array('php' => new Link($packageName, 'php', $parser->parseConstraints('>=5.6'), Link::TYPE_REQUIRE, '>=5.6'))); + $package0->setRequires(['php' => new Link($packageName, 'php', $parser->parseConstraints('>=5.6'), Link::TYPE_REQUIRE, '>=5.6')]); $package1 = $this->getPackage('foo/bar', '1.0.0'); - $package1->setRequires(array('php' => new Link($packageName, 'php', $parser->parseConstraints('>=5.4'), Link::TYPE_REQUIRE, '>=5.4'))); + $package1->setRequires(['php' => new Link($packageName, 'php', $parser->parseConstraints('>=5.4'), Link::TYPE_REQUIRE, '>=5.4')]); $package2 = $this->getPackage('foo/bar', '2.0.0'); - $package2->setRequires(array('php' => new Link($packageName, 'php', $parser->parseConstraints('>=5.6'), Link::TYPE_REQUIRE, '>=5.6'))); + $package2->setRequires(['php' => new Link($packageName, 'php', $parser->parseConstraints('>=5.6'), Link::TYPE_REQUIRE, '>=5.6')]); $package3 = $this->getPackage('foo/bar', '2.1.0'); - $package3->setRequires(array('php' => new Link($packageName, 'php', $parser->parseConstraints('>=5.6'), Link::TYPE_REQUIRE, '>=5.6'))); - $packages = array($package0, $package1, $package2, $package3); + $package3->setRequires(['php' => new Link($packageName, 'php', $parser->parseConstraints('>=5.6'), Link::TYPE_REQUIRE, '>=5.6')]); + $packages = [$package0, $package1, $package2, $package3]; $repositorySet->expects($this->any()) ->method('findPackages') @@ -98,16 +97,16 @@ class VersionSelectorTest extends TestCase { $packageName = 'foo/bar'; - $platform = new PlatformRepository(array(), array('ext-zip' => '5.3.0')); + $platform = new PlatformRepository([], ['ext-zip' => '5.3.0']); $repositorySet = $this->createMockRepositorySet(); $versionSelector = new VersionSelector($repositorySet, $platform); $parser = new VersionParser; $package1 = $this->getPackage('foo/bar', '1.0.0'); - $package1->setRequires(array('ext-zip' => new Link($packageName, 'ext-zip', $parser->parseConstraints('^5.2'), Link::TYPE_REQUIRE, '^5.2'))); + $package1->setRequires(['ext-zip' => new Link($packageName, 'ext-zip', $parser->parseConstraints('^5.2'), Link::TYPE_REQUIRE, '^5.2')]); $package2 = $this->getPackage('foo/bar', '2.0.0'); - $package2->setRequires(array('ext-zip' => new Link($packageName, 'ext-zip', $parser->parseConstraints('^5.4'), Link::TYPE_REQUIRE, '^5.4'))); - $packages = array($package1, $package2); + $package2->setRequires(['ext-zip' => new Link($packageName, 'ext-zip', $parser->parseConstraints('^5.4'), Link::TYPE_REQUIRE, '^5.4')]); + $packages = [$package1, $package2]; $repositorySet->expects($this->any()) ->method('findPackages') @@ -131,8 +130,8 @@ class VersionSelectorTest extends TestCase $parser = new VersionParser; $package1 = $this->getPackage('foo/bar', '1.0.0'); $package2 = $this->getPackage('foo/bar', '2.0.0'); - $package2->setRequires(array('ext-barfoo' => new Link($packageName, 'ext-barfoo', $parser->parseConstraints('*'), Link::TYPE_REQUIRE, '*'))); - $packages = array($package1, $package2); + $package2->setRequires(['ext-barfoo' => new Link($packageName, 'ext-barfoo', $parser->parseConstraints('*'), Link::TYPE_REQUIRE, '*')]); + $packages = [$package1, $package2]; $repositorySet->expects($this->any()) ->method('findPackages') @@ -149,16 +148,16 @@ class VersionSelectorTest extends TestCase { $packageName = 'foo/bar'; - $platform = new PlatformRepository(array(), array('composer-runtime-api' => '1.0.0')); + $platform = new PlatformRepository([], ['composer-runtime-api' => '1.0.0']); $repositorySet = $this->createMockRepositorySet(); $versionSelector = new VersionSelector($repositorySet, $platform); $parser = new VersionParser; $package1 = $this->getPackage('foo/bar', '1.0.0'); - $package1->setRequires(array('composer-runtime-api' => new Link($packageName, 'composer-runtime-api', $parser->parseConstraints('^1.0'), Link::TYPE_REQUIRE, '^1.0'))); + $package1->setRequires(['composer-runtime-api' => new Link($packageName, 'composer-runtime-api', $parser->parseConstraints('^1.0'), Link::TYPE_REQUIRE, '^1.0')]); $package2 = $this->getPackage('foo/bar', '1.1.0'); - $package2->setRequires(array('composer-runtime-api' => new Link($packageName, 'composer-runtime-api', $parser->parseConstraints('^2.0'), Link::TYPE_REQUIRE, '^2.0'))); - $packages = array($package1, $package2); + $package2->setRequires(['composer-runtime-api' => new Link($packageName, 'composer-runtime-api', $parser->parseConstraints('^2.0'), Link::TYPE_REQUIRE, '^2.0')]); + $packages = [$package1, $package2]; $repositorySet->expects($this->any()) ->method('findPackages') @@ -177,7 +176,7 @@ class VersionSelectorTest extends TestCase $package1 = $this->getPackage('foo/bar', '1.0.0'); $package2 = $this->getPackage('foo/bar', '1.1.0-beta'); - $packages = array($package1, $package2); + $packages = [$package1, $package2]; $repositorySet = $this->createMockRepositorySet(); $repositorySet->expects($this->once()) @@ -197,7 +196,7 @@ class VersionSelectorTest extends TestCase $package1 = $this->getPackage('foo/bar', '2.x-dev'); $package2 = $this->getPackage('foo/bar', '2.0.0-beta3'); - $packages = array($package1, $package2); + $packages = [$package1, $package2]; $repositorySet = $this->createMockRepositorySet(); $repositorySet->expects($this->exactly(2)) @@ -222,7 +221,7 @@ class VersionSelectorTest extends TestCase $package1 = $this->getPackage('foo/bar', '1.0.0'); $package2 = $this->getPackage('foo/bar', '1.1.0-beta'); - $packages = array($package1, $package2); + $packages = [$package1, $package2]; $repositorySet = $this->createMockRepositorySet(); $repositorySet->expects($this->once()) @@ -243,7 +242,7 @@ class VersionSelectorTest extends TestCase $package1 = $this->getPackage('foo/bar', '1.0.0'); $package2 = $this->getPackage('foo/bar', '1.1.0-beta'); $package3 = $this->getPackage('foo/bar', '1.2.0-alpha'); - $packages = array($package1, $package2, $package3); + $packages = [$package1, $package2, $package3]; $repositorySet = $this->createMockRepositorySet(); $repositorySet->expects($this->once()) @@ -263,7 +262,7 @@ class VersionSelectorTest extends TestCase $package2 = $this->getPackage('foo/bar', '1.1.0-beta'); $package3 = $this->getPackage('foo/bar', '1.2.0-alpha'); - $packages = array($package2, $package3); + $packages = [$package2, $package3]; $repositorySet = $this->createMockRepositorySet(); $repositorySet->expects($this->once()) @@ -284,7 +283,7 @@ class VersionSelectorTest extends TestCase $package = $this->getPackage('foo/bar', '1.1.0-beta'); $package2 = $this->getPackage('foo/bar', 'dev-main'); $package2Alias = new AliasPackage($package2, VersionParser::DEFAULT_BRANCH_ALIAS, VersionParser::DEFAULT_BRANCH_ALIAS); - $packages = array($package, $package2Alias); + $packages = [$package, $package2Alias]; $repositorySet = $this->createMockRepositorySet(); $repositorySet->expects($this->once()) @@ -303,7 +302,7 @@ class VersionSelectorTest extends TestCase $repositorySet = $this->createMockRepositorySet(); $repositorySet->expects($this->once()) ->method('findPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $versionSelector = new VersionSelector($repositorySet); $best = $versionSelector->findBestCandidate('foobaz'); @@ -312,11 +311,6 @@ class VersionSelectorTest extends TestCase /** * @dataProvider provideRecommendedRequireVersionPackages - * - * @param string $prettyVersion - * @param string $expectedVersion - * @param string|null $branchAlias - * @param string $packageName */ public function testFindRecommendedRequireVersion(string $prettyVersion, string $expectedVersion, ?string $branchAlias = null, string $packageName = 'foo/bar'): void { @@ -327,7 +321,7 @@ class VersionSelectorTest extends TestCase $package = new Package($packageName, $versionParser->normalize($prettyVersion), $prettyVersion); if ($branchAlias) { - $package->setExtra(array('branch-alias' => array($prettyVersion => $branchAlias))); + $package->setExtra(['branch-alias' => [$prettyVersion => $branchAlias]]); } $recommended = $versionSelector->findRecommendedRequireVersion($package); @@ -338,42 +332,42 @@ class VersionSelectorTest extends TestCase public function provideRecommendedRequireVersionPackages(): array { - return array( + return [ // real version, expected recommendation, [branch-alias], [pkg name] - array('1.2.1', '^1.2'), - array('1.2', '^1.2'), - array('v1.2.1', '^1.2'), - array('3.1.2-pl2', '^3.1'), - array('3.1.2-patch', '^3.1'), - array('2.0-beta.1', '^2.0@beta'), - array('3.1.2-alpha5', '^3.1@alpha'), - array('3.0-RC2', '^3.0@RC'), - array('0.1.0', '^0.1.0'), - array('0.1.3', '^0.1.3'), - array('0.0.3', '^0.0.3'), - array('0.0.3-alpha', '^0.0.3@alpha'), + ['1.2.1', '^1.2'], + ['1.2', '^1.2'], + ['v1.2.1', '^1.2'], + ['3.1.2-pl2', '^3.1'], + ['3.1.2-patch', '^3.1'], + ['2.0-beta.1', '^2.0@beta'], + ['3.1.2-alpha5', '^3.1@alpha'], + ['3.0-RC2', '^3.0@RC'], + ['0.1.0', '^0.1.0'], + ['0.1.3', '^0.1.3'], + ['0.0.3', '^0.0.3'], + ['0.0.3-alpha', '^0.0.3@alpha'], // date-based versions are not touched at all - array('v20121020', 'v20121020'), - array('v20121020.2', 'v20121020.2'), + ['v20121020', 'v20121020'], + ['v20121020.2', 'v20121020.2'], // dev packages without alias are not touched at all - array('dev-master', 'dev-master'), - array('3.1.2-dev', '3.1.2-dev'), + ['dev-master', 'dev-master'], + ['3.1.2-dev', '3.1.2-dev'], // dev packages with alias inherit the alias - array('dev-master', '^2.1@dev', '2.1.x-dev'), - array('dev-master', '^2.1@dev', '2.1-dev'), - array('dev-master', '^2.1@dev', '2.1.3.x-dev'), - array('dev-master', '^2.0@dev', '2.x-dev'), - array('dev-master', '^0.3.0@dev', '0.3.x-dev'), - array('dev-master', '^0.0.3@dev', '0.0.3.x-dev'), - array('dev-master', 'dev-master', VersionParser::DEFAULT_BRANCH_ALIAS), + ['dev-master', '^2.1@dev', '2.1.x-dev'], + ['dev-master', '^2.1@dev', '2.1-dev'], + ['dev-master', '^2.1@dev', '2.1.3.x-dev'], + ['dev-master', '^2.0@dev', '2.x-dev'], + ['dev-master', '^0.3.0@dev', '0.3.x-dev'], + ['dev-master', '^0.0.3@dev', '0.0.3.x-dev'], + ['dev-master', 'dev-master', VersionParser::DEFAULT_BRANCH_ALIAS], // numeric alias - array('3.x-dev', '^3.0@dev', '3.0.x-dev'), - array('3.x-dev', '^3.0@dev', '3.0-dev'), + ['3.x-dev', '^3.0@dev', '3.0.x-dev'], + ['3.x-dev', '^3.0@dev', '3.0-dev'], // ext in sync with php - array(PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION . '.' . PHP_RELEASE_VERSION, '*', null, 'ext-filter'), + [PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION . '.' . PHP_RELEASE_VERSION, '*', null, 'ext-filter'], // ext versioned individually - array('3.0.5', '^3.0', null, 'ext-xdebug'), - ); + ['3.0.5', '^3.0', null, 'ext-xdebug'], + ]; } /** diff --git a/tests/Composer/Test/Platform/VersionTest.php b/tests/Composer/Test/Platform/VersionTest.php index d709bd1ab..39f89d0f7 100644 --- a/tests/Composer/Test/Platform/VersionTest.php +++ b/tests/Composer/Test/Platform/VersionTest.php @@ -29,59 +29,55 @@ class VersionTest extends TestCase */ public static function provideOpenSslVersions(): array { - return array( + return [ // Generated - array('1.2.3', '1.2.3.0'), - array('1.2.3-beta3', '1.2.3.0-beta3'), - array('1.2.3-beta3-dev', '1.2.3.0-beta3-dev'), - array('1.2.3-beta3-fips', '1.2.3.0-beta3', true), - array('1.2.3-beta3-fips-dev', '1.2.3.0-beta3-dev', true), - array('1.2.3-dev', '1.2.3.0-dev'), - array('1.2.3-fips', '1.2.3.0', true), - array('1.2.3-fips-beta3', '1.2.3.0-beta3', true), - array('1.2.3-fips-beta3-dev', '1.2.3.0-beta3-dev', true), - array('1.2.3-fips-dev', '1.2.3.0-dev', true), - array('1.2.3-pre2', '1.2.3.0-alpha2'), - array('1.2.3-pre2-dev', '1.2.3.0-alpha2-dev'), - array('1.2.3-pre2-fips', '1.2.3.0-alpha2', true), - array('1.2.3-pre2-fips-dev', '1.2.3.0-alpha2-dev', true), - array('1.2.3a', '1.2.3.1'), - array('1.2.3a-beta3','1.2.3.1-beta3'), - array('1.2.3a-beta3-dev', '1.2.3.1-beta3-dev'), - array('1.2.3a-dev', '1.2.3.1-dev'), - array('1.2.3a-dev-fips', '1.2.3.1-dev', true), - array('1.2.3a-fips', '1.2.3.1', true), - array('1.2.3a-fips-beta3', '1.2.3.1-beta3', true), - array('1.2.3a-fips-dev', '1.2.3.1-dev', true), - array('1.2.3beta3', '1.2.3.0-beta3'), - array('1.2.3beta3-dev', '1.2.3.0-beta3-dev'), - array('1.2.3zh', '1.2.3.34'), - array('1.2.3zh-dev', '1.2.3.34-dev'), - array('1.2.3zh-fips', '1.2.3.34',true), - array('1.2.3zh-fips-dev', '1.2.3.34-dev', true), + ['1.2.3', '1.2.3.0'], + ['1.2.3-beta3', '1.2.3.0-beta3'], + ['1.2.3-beta3-dev', '1.2.3.0-beta3-dev'], + ['1.2.3-beta3-fips', '1.2.3.0-beta3', true], + ['1.2.3-beta3-fips-dev', '1.2.3.0-beta3-dev', true], + ['1.2.3-dev', '1.2.3.0-dev'], + ['1.2.3-fips', '1.2.3.0', true], + ['1.2.3-fips-beta3', '1.2.3.0-beta3', true], + ['1.2.3-fips-beta3-dev', '1.2.3.0-beta3-dev', true], + ['1.2.3-fips-dev', '1.2.3.0-dev', true], + ['1.2.3-pre2', '1.2.3.0-alpha2'], + ['1.2.3-pre2-dev', '1.2.3.0-alpha2-dev'], + ['1.2.3-pre2-fips', '1.2.3.0-alpha2', true], + ['1.2.3-pre2-fips-dev', '1.2.3.0-alpha2-dev', true], + ['1.2.3a', '1.2.3.1'], + ['1.2.3a-beta3','1.2.3.1-beta3'], + ['1.2.3a-beta3-dev', '1.2.3.1-beta3-dev'], + ['1.2.3a-dev', '1.2.3.1-dev'], + ['1.2.3a-dev-fips', '1.2.3.1-dev', true], + ['1.2.3a-fips', '1.2.3.1', true], + ['1.2.3a-fips-beta3', '1.2.3.1-beta3', true], + ['1.2.3a-fips-dev', '1.2.3.1-dev', true], + ['1.2.3beta3', '1.2.3.0-beta3'], + ['1.2.3beta3-dev', '1.2.3.0-beta3-dev'], + ['1.2.3zh', '1.2.3.34'], + ['1.2.3zh-dev', '1.2.3.34-dev'], + ['1.2.3zh-fips', '1.2.3.34',true], + ['1.2.3zh-fips-dev', '1.2.3.34-dev', true], // Additional cases - array('1.2.3zh-fips-rc3', '1.2.3.34-rc3', true, '1.2.3.34-RC3'), - array('1.2.3zh-alpha10-fips', '1.2.3.34-alpha10', true), - array('1.1.1l (Schannel)', '1.1.1.12'), + ['1.2.3zh-fips-rc3', '1.2.3.34-rc3', true, '1.2.3.34-RC3'], + ['1.2.3zh-alpha10-fips', '1.2.3.34-alpha10', true], + ['1.1.1l (Schannel)', '1.1.1.12'], // Check that alphabetical patch levels overflow correctly - array('1.2.3', '1.2.3.0'), - array('1.2.3a', '1.2.3.1'), - array('1.2.3z', '1.2.3.26'), - array('1.2.3za', '1.2.3.27'), - array('1.2.3zy', '1.2.3.51'), - array('1.2.3zz', '1.2.3.52'), + ['1.2.3', '1.2.3.0'], + ['1.2.3a', '1.2.3.1'], + ['1.2.3z', '1.2.3.26'], + ['1.2.3za', '1.2.3.27'], + ['1.2.3zy', '1.2.3.51'], + ['1.2.3zz', '1.2.3.52'], // 3.x - array('3.0.0', '3.0.0', false, '3.0.0.0'), - array('3.2.4-dev', '3.2.4-dev', false, '3.2.4.0-dev'), - ); + ['3.0.0', '3.0.0', false, '3.0.0.0'], + ['3.2.4-dev', '3.2.4-dev', false, '3.2.4.0-dev'], + ]; } /** * @dataProvider provideOpenSslVersions - * @param string $input - * @param string $parsedVersion - * @param bool $fipsExpected - * @param string|null $normalizedVersion */ public function testParseOpensslVersions(string $input, string $parsedVersion, bool $fipsExpected = false, ?string $normalizedVersion = null): void { @@ -94,19 +90,17 @@ class VersionTest extends TestCase public function provideLibJpegVersions(): array { - return array( - array('9', '9.0'), - array('9a', '9.1'), - array('9b', '9.2'), + return [ + ['9', '9.0'], + ['9a', '9.1'], + ['9b', '9.2'], // Never seen in the wild, just for overflow correctness - array('9za', '9.27'), - ); + ['9za', '9.27'], + ]; } /** * @dataProvider provideLibJpegVersions - * @param string $input - * @param string $parsedVersion */ public function testParseLibjpegVersion(string $input, string $parsedVersion): void { @@ -115,18 +109,16 @@ class VersionTest extends TestCase public function provideZoneinfoVersions(): array { - return array( - array('2019c', '2019.3'), - array('2020a', '2020.1'), + return [ + ['2019c', '2019.3'], + ['2020a', '2020.1'], // Never happened so far but fixate overflow behavior - array('2020za', '2020.27'), - ); + ['2020za', '2020.27'], + ]; } /** * @dataProvider provideZoneinfoVersions - * @param string $input - * @param string $parsedVersion */ public function testParseZoneinfoVersion(string $input, string $parsedVersion): void { diff --git a/tests/Composer/Test/Plugin/PluginInstallerTest.php b/tests/Composer/Test/Plugin/PluginInstallerTest.php index 8215b97f1..0025794e2 100644 --- a/tests/Composer/Test/Plugin/PluginInstallerTest.php +++ b/tests/Composer/Test/Plugin/PluginInstallerTest.php @@ -75,7 +75,7 @@ class PluginInstallerTest extends TestCase protected function setUp(): void { $loader = new JsonLoader(new ArrayLoader()); - $this->packages = array(); + $this->packages = []; $this->directory = self::getUniqueTmpDirectory(); for ($i = 1; $i <= 8; $i++) { $filename = '/Fixtures/plugin-v'.$i.'/composer.json'; @@ -108,7 +108,7 @@ class PluginInstallerTest extends TestCase $im = $this->getMockBuilder('Composer\Installer\InstallationManager')->disableOriginalConstructor()->getMock(); $im->expects($this->any()) ->method('getInstallPath') - ->will($this->returnCallback(function ($package): string { + ->will($this->returnCallback(static function ($package): string { return __DIR__.'/Fixtures/'.$package->getPrettyName(); })); @@ -128,14 +128,14 @@ class PluginInstallerTest extends TestCase $this->composer->setPackage(new RootPackage('dummy/root', '1.0.0.0', '1.0.0')); $this->composer->setLocker(new Locker($this->io, new JsonFile(Platform::getDevNull()), $im, '{}')); - $config->merge(array( - 'config' => array( + $config->merge([ + 'config' => [ 'vendor-dir' => $this->directory.'/Fixtures/', 'home' => $this->directory.'/Fixtures', 'bin-dir' => $this->directory.'/Fixtures/bin', 'allow-plugins' => true, - ), - )); + ], + ]); $this->pm = new PluginManager($this->io, $this->composer); $this->composer->setPluginManager($this->pm); @@ -153,7 +153,7 @@ class PluginInstallerTest extends TestCase $this->repository ->expects($this->any()) ->method('getPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $installer = new PluginInstaller($this->io, $this->composer); $this->pm->loadInstalledPlugins(); @@ -172,13 +172,13 @@ class PluginInstallerTest extends TestCase $this->repository ->expects($this->any()) ->method('getPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $installer = new PluginInstaller($this->io, $this->composer); $this->pm->loadInstalledPlugins(); $this->autoloadGenerator->setDevMode(true); - $this->composer->getPackage()->setAutoload(array('files' => array(__DIR__ . '/Fixtures/files_autoload_which_should_not_run.php'))); - $this->composer->getPackage()->setDevAutoload(array('files' => array(__DIR__ . '/Fixtures/files_autoload_which_should_not_run.php'))); + $this->composer->getPackage()->setAutoload(['files' => [__DIR__ . '/Fixtures/files_autoload_which_should_not_run.php']]); + $this->composer->getPackage()->setDevAutoload(['files' => [__DIR__ . '/Fixtures/files_autoload_which_should_not_run.php']]); $installer->install($this->repository, $this->packages[0]); $plugins = $this->pm->getPlugins(); @@ -194,7 +194,7 @@ class PluginInstallerTest extends TestCase $this->repository ->expects($this->any()) ->method('getPackages') - ->will($this->returnValue(array($this->packages[3]))); + ->will($this->returnValue([$this->packages[3]])); $installer = new PluginInstaller($this->io, $this->composer); $this->pm->loadInstalledPlugins(); @@ -213,7 +213,7 @@ class PluginInstallerTest extends TestCase $this->repository ->expects($this->any()) ->method('getPackages') - ->will($this->returnValue(array($this->packages[0]))); + ->will($this->returnValue([$this->packages[0]])); $this->repository ->expects($this->exactly(2)) ->method('hasPackage') @@ -234,7 +234,7 @@ class PluginInstallerTest extends TestCase $this->repository ->expects($this->any()) ->method('getPackages') - ->will($this->returnValue(array($this->packages[0]))); + ->will($this->returnValue([$this->packages[0]])); $this->repository ->expects($this->exactly(1)) ->method('hasPackage') @@ -254,7 +254,7 @@ class PluginInstallerTest extends TestCase $this->repository ->expects($this->any()) ->method('getPackages') - ->will($this->returnValue(array($this->packages[1]))); + ->will($this->returnValue([$this->packages[1]])); $this->repository ->expects($this->exactly(2)) ->method('hasPackage') @@ -274,7 +274,7 @@ class PluginInstallerTest extends TestCase $this->repository ->expects($this->any()) ->method('getPackages') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $installer = new PluginInstaller($this->io, $this->composer); $this->pm->loadInstalledPlugins(); @@ -288,17 +288,14 @@ class PluginInstallerTest extends TestCase } /** - * @param string $newPluginApiVersion * @param array $plugins - * - * @return void */ - private function setPluginApiVersionWithPlugins(string $newPluginApiVersion, array $plugins = array()): void + private function setPluginApiVersionWithPlugins(string $newPluginApiVersion, array $plugins = []): void { // reset the plugin manager's installed plugins $this->pm = $this->getMockBuilder('Composer\Plugin\PluginManager') - ->onlyMethods(array('getPluginApiVersion')) - ->setConstructorArgs(array($this->io, $this->composer)) + ->onlyMethods(['getPluginApiVersion']) + ->setConstructorArgs([$this->io, $this->composer]) ->getMock(); // mock the Plugin API version @@ -316,8 +313,8 @@ class PluginInstallerTest extends TestCase $this->repository ->expects($this->any()) ->method('getPackages') - ->will($this->returnCallback(function () use ($plugApiInternalPackage, $plugins): array { - return array_merge(array($plugApiInternalPackage), $plugins); + ->will($this->returnCallback(static function () use ($plugApiInternalPackage, $plugins): array { + return array_merge([$plugApiInternalPackage], $plugins); })); $this->pm->loadInstalledPlugins(); @@ -325,7 +322,7 @@ class PluginInstallerTest extends TestCase public function testStarPluginVersionWorksWithAnyAPIVersion(): void { - $starVersionPlugin = array($this->packages[4]); + $starVersionPlugin = [$this->packages[4]]; $this->setPluginApiVersionWithPlugins('1.0.0', $starVersionPlugin); $this->assertCount(1, $this->pm->getPlugins()); @@ -342,7 +339,7 @@ class PluginInstallerTest extends TestCase public function testPluginConstraintWorksOnlyWithCertainAPIVersion(): void { - $pluginWithApiConstraint = array($this->packages[5]); + $pluginWithApiConstraint = [$this->packages[5]]; $this->setPluginApiVersionWithPlugins('1.0.0', $pluginWithApiConstraint); $this->assertCount(0, $this->pm->getPlugins()); @@ -359,7 +356,7 @@ class PluginInstallerTest extends TestCase public function testPluginRangeConstraintsWorkOnlyWithCertainAPIVersion(): void { - $pluginWithApiConstraint = array($this->packages[6]); + $pluginWithApiConstraint = [$this->packages[6]]; $this->setPluginApiVersionWithPlugins('1.0.0', $pluginWithApiConstraint); $this->assertCount(0, $this->pm->getPlugins()); @@ -376,12 +373,12 @@ class PluginInstallerTest extends TestCase $this->repository ->expects($this->any()) ->method('getPackages') - ->will($this->returnValue(array($this->packages[7]))); + ->will($this->returnValue([$this->packages[7]])); $installer = new PluginInstaller($this->io, $this->composer); $this->pm->loadInstalledPlugins(); /** @var \Composer\Plugin\Capability\CommandProvider[] $caps */ - $caps = $this->pm->getPluginCapabilities('Composer\Plugin\Capability\CommandProvider', array('composer' => $this->composer, 'io' => $this->io)); + $caps = $this->pm->getPluginCapabilities('Composer\Plugin\Capability\CommandProvider', ['composer' => $this->composer, 'io' => $this->io]); $this->assertCount(1, $caps); $this->assertInstanceOf('Composer\Plugin\Capability\CommandProvider', $caps[0]); @@ -407,31 +404,31 @@ class PluginInstallerTest extends TestCase $plugin->expects($this->once()) ->method('getCapabilities') - ->will($this->returnCallback(function () use ($capabilityImplementation, $capabilityApi): array { - return array($capabilityApi => $capabilityImplementation); + ->will($this->returnCallback(static function () use ($capabilityImplementation, $capabilityApi): array { + return [$capabilityApi => $capabilityImplementation]; })); /** @var \Composer\Test\Plugin\Mock\Capability $capability */ - $capability = $this->pm->getPluginCapability($plugin, $capabilityApi, array('a' => 1, 'b' => 2)); + $capability = $this->pm->getPluginCapability($plugin, $capabilityApi, ['a' => 1, 'b' => 2]); $this->assertInstanceOf($capabilityApi, $capability); $this->assertInstanceOf($capabilityImplementation, $capability); - $this->assertSame(array('a' => 1, 'b' => 2, 'plugin' => $plugin), $capability->args); + $this->assertSame(['a' => 1, 'b' => 2, 'plugin' => $plugin], $capability->args); } /** @return mixed[] */ public function invalidImplementationClassNames(): array { - return array( - array(null), - array(""), - array(0), - array(1000), - array(" "), - array(array(1)), - array(array()), - array(new \stdClass()), - ); + return [ + [null], + [""], + [0], + [1000], + [" "], + [[1]], + [[]], + [new \stdClass()], + ]; } /** @@ -450,8 +447,8 @@ class PluginInstallerTest extends TestCase $plugin->expects($this->once()) ->method('getCapabilities') - ->will($this->returnCallback(function () use ($invalidImplementationClassNames, $capabilityApi): array { - return array($capabilityApi => $invalidImplementationClassNames); + ->will($this->returnCallback(static function () use ($invalidImplementationClassNames, $capabilityApi): array { + return [$capabilityApi => $invalidImplementationClassNames]; })); $this->pm->getPluginCapability($plugin, $capabilityApi); @@ -466,8 +463,8 @@ class PluginInstallerTest extends TestCase $plugin->expects($this->once()) ->method('getCapabilities') - ->will($this->returnCallback(function (): array { - return array(); + ->will($this->returnCallback(static function (): array { + return []; })); $this->assertNull($this->pm->getPluginCapability($plugin, $capabilityApi)); @@ -476,10 +473,10 @@ class PluginInstallerTest extends TestCase /** @return mixed[] */ public function nonExistingOrInvalidImplementationClassTypes(): array { - return array( - array('\stdClass'), - array('NonExistentClassLikeMiddleClass'), - ); + return [ + ['\stdClass'], + ['NonExistentClassLikeMiddleClass'], + ]; } /** diff --git a/tests/Composer/Test/Question/StrictConfirmationQuestionTest.php b/tests/Composer/Test/Question/StrictConfirmationQuestionTest.php index c85f38cef..d8f38fdeb 100644 --- a/tests/Composer/Test/Question/StrictConfirmationQuestionTest.php +++ b/tests/Composer/Test/Question/StrictConfirmationQuestionTest.php @@ -32,22 +32,20 @@ class StrictConfirmationQuestionTest extends TestCase */ public function getAskConfirmationBadData(): array { - return array( - array('not correct'), - array('no more'), - array('yes please'), - array('yellow'), - ); + return [ + ['not correct'], + ['no more'], + ['yes please'], + ['yellow'], + ]; } /** * @dataProvider getAskConfirmationBadData - * - * @param string $answer */ public function testAskConfirmationBadAnswer(string $answer): void { - list($input, $dialog) = $this->createInput($answer."\n"); + [$input, $dialog] = $this->createInput($answer."\n"); self::expectException('InvalidArgumentException'); self::expectExceptionMessage('Please answer yes, y, no, or n.'); @@ -59,14 +57,10 @@ class StrictConfirmationQuestionTest extends TestCase /** * @dataProvider getAskConfirmationData - * - * @param string $question - * @param bool $expected - * @param bool $default */ public function testAskConfirmation(string $question, bool $expected, bool $default = true): void { - list($input, $dialog) = $this->createInput($question."\n"); + [$input, $dialog] = $this->createInput($question."\n"); $question = new StrictConfirmationQuestion('Do you like French fries?', $default); $this->assertEquals($expected, $dialog->ask($input, $this->createOutputInterface(), $question), 'confirmation question should '.($expected ? 'pass' : 'cancel')); @@ -79,30 +73,28 @@ class StrictConfirmationQuestionTest extends TestCase */ public function getAskConfirmationData(): array { - return array( - array('', true), - array('', false, false), - array('y', true), - array('yes', true), - array('n', false), - array('no', false), - ); + return [ + ['', true], + ['', false, false], + ['y', true], + ['yes', true], + ['n', false], + ['no', false], + ]; } public function testAskConfirmationWithCustomTrueAndFalseAnswer(): void { $question = new StrictConfirmationQuestion('Do you like French fries?', false, '/^ja$/i', '/^nein$/i'); - list($input, $dialog) = $this->createInput("ja\n"); + [$input, $dialog] = $this->createInput("ja\n"); $this->assertTrue($dialog->ask($input, $this->createOutputInterface(), $question)); - list($input, $dialog) = $this->createInput("nein\n"); + [$input, $dialog] = $this->createInput("nein\n"); $this->assertFalse($dialog->ask($input, $this->createOutputInterface(), $question)); } /** - * @param string $input - * * @return resource */ protected function getInputStream(string $input) @@ -116,28 +108,23 @@ class StrictConfirmationQuestionTest extends TestCase return $stream; } - /** - * @return StreamOutput - */ protected function createOutputInterface(): StreamOutput { return new StreamOutput(fopen('php://memory', 'r+', false)); } /** - * @param string $entry - * * @return object[] * * @phpstan-return array{ArrayInput, QuestionHelper} */ protected function createInput(string $entry): array { - $input = new ArrayInput(array('--no-interaction')); + $input = new ArrayInput(['--no-interaction']); $input->setStream($this->getInputStream($entry)); $dialog = new QuestionHelper(); - return array($input, $dialog); + return [$input, $dialog]; } } diff --git a/tests/Composer/Test/Repository/ArrayRepositoryTest.php b/tests/Composer/Test/Repository/ArrayRepositoryTest.php index 04c45959f..2a9500058 100644 --- a/tests/Composer/Test/Repository/ArrayRepositoryTest.php +++ b/tests/Composer/Test/Repository/ArrayRepositoryTest.php @@ -39,7 +39,7 @@ class ArrayRepositoryTest extends TestCase $repo->removePackage($this->getPackage('foo', '1')); $this->assertCount(1, $repo); - $this->assertEquals(array($package), $repo->getPackages()); + $this->assertEquals([$package], $repo->getPackages()); } public function testHasPackage(): void @@ -94,12 +94,12 @@ class ArrayRepositoryTest extends TestCase $repo->addPackage($this->getPackage('bar', '1')); $this->assertSame( - array(array('name' => 'foo', 'description' => null)), + [['name' => 'foo', 'description' => null]], $repo->search('foo', RepositoryInterface::SEARCH_FULLTEXT) ); $this->assertSame( - array(array('name' => 'bar', 'description' => null)), + [['name' => 'bar', 'description' => null]], $repo->search('bar') ); @@ -120,14 +120,14 @@ class ArrayRepositoryTest extends TestCase $repo->addPackage($package); $this->assertSame( - array(array('name' => 'foo', 'description' => null)), + [['name' => 'foo', 'description' => null]], $repo->search('foo', RepositoryInterface::SEARCH_FULLTEXT, 'library') ); $this->assertEmpty($repo->search('bar', RepositoryInterface::SEARCH_FULLTEXT, 'package')); $this->assertSame( - array(array('name' => 'foobar', 'description' => null)), + [['name' => 'foobar', 'description' => null]], $repo->search('foo', 0, 'composer-plugin') ); } @@ -144,10 +144,10 @@ class ArrayRepositoryTest extends TestCase $repo->addPackage($package2); $this->assertSame( - array( - array('name' => 'foo1', 'description' => null, 'abandoned' => true), - array('name' => 'foo2', 'description' => null, 'abandoned' => 'bar'), - ), + [ + ['name' => 'foo1', 'description' => null, 'abandoned' => true], + ['name' => 'foo2', 'description' => null, 'abandoned' => 'bar'], + ], $repo->search('foo') ); } diff --git a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php index c038dfc2f..52b2b568c 100644 --- a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php +++ b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php @@ -29,7 +29,7 @@ class ArtifactRepositoryTest extends TestCase public function testExtractsConfigsFromZipArchives(): void { - $expectedPackages = array( + $expectedPackages = [ 'vendor0/package0-0.0.1', 'composer/composer-1.0.0-alpha6', 'vendor1/package2-4.3.2', @@ -39,12 +39,12 @@ class ArtifactRepositoryTest extends TestCase 'test/jsonInFirstLevel-1.0.0', //The files not-an-artifact.zip and jsonSecondLevel are not valid //artifacts and do not get detected. - ); + ]; - $coordinates = array('type' => 'artifact', 'url' => __DIR__ . '/Fixtures/artifacts'); + $coordinates = ['type' => 'artifact', 'url' => __DIR__ . '/Fixtures/artifacts']; $repo = new ArtifactRepository($coordinates, new NullIO()); - $foundPackages = array_map(function (BasePackage $package) { + $foundPackages = array_map(static function (BasePackage $package) { return "{$package->getPrettyName()}-{$package->getPrettyVersion()}"; }, $repo->getPackages()); @@ -53,7 +53,7 @@ class ArtifactRepositoryTest extends TestCase $this->assertSame($expectedPackages, $foundPackages); - $tarPackage = array_filter($repo->getPackages(), function (BasePackage $package): bool { + $tarPackage = array_filter($repo->getPackages(), static function (BasePackage $package): bool { return $package->getPrettyName() === 'test/jsonInRootTarFile'; }); $this->assertCount(1, $tarPackage); @@ -64,7 +64,7 @@ class ArtifactRepositoryTest extends TestCase public function testAbsoluteRepoUrlCreatesAbsoluteUrlPackages(): void { $absolutePath = __DIR__ . '/Fixtures/artifacts'; - $coordinates = array('type' => 'artifact', 'url' => $absolutePath); + $coordinates = ['type' => 'artifact', 'url' => $absolutePath]; $repo = new ArtifactRepository($coordinates, new NullIO()); foreach ($repo->getPackages() as $package) { @@ -75,7 +75,7 @@ class ArtifactRepositoryTest extends TestCase public function testRelativeRepoUrlCreatesRelativeUrlPackages(): void { $relativePath = 'tests/Composer/Test/Repository/Fixtures/artifacts'; - $coordinates = array('type' => 'artifact', 'url' => $relativePath); + $coordinates = ['type' => 'artifact', 'url' => $relativePath]; $repo = new ArtifactRepository($coordinates, new NullIO()); foreach ($repo->getPackages() as $package) { diff --git a/tests/Composer/Test/Repository/ComposerRepositoryTest.php b/tests/Composer/Test/Repository/ComposerRepositoryTest.php index 854a388ec..52fd99cda 100644 --- a/tests/Composer/Test/Repository/ComposerRepositoryTest.php +++ b/tests/Composer/Test/Repository/ComposerRepositoryTest.php @@ -30,19 +30,19 @@ class ComposerRepositoryTest extends TestCase */ public function testLoadData(array $expected, array $repoPackages): void { - $repoConfig = array( + $repoConfig = [ 'url' => 'http://example.org', - ); + ]; $repository = $this->getMockBuilder('Composer\Repository\ComposerRepository') - ->onlyMethods(array('loadRootServerFile')) - ->setConstructorArgs(array( + ->onlyMethods(['loadRootServerFile']) + ->setConstructorArgs([ $repoConfig, new NullIO, FactoryMock::createConfig(), $this->getMockBuilder('Composer\Util\HttpDownloader')->disableOriginalConstructor()->getMock(), $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher')->disableOriginalConstructor()->getMock(), - )) + ]) ->getMock(); $repository @@ -63,46 +63,46 @@ class ComposerRepositoryTest extends TestCase public function loadDataProvider(): array { - return array( + return [ // Old repository format - array( - array( - array('name' => 'foo/bar', 'version' => '1.0.0'), - ), - array('foo/bar' => array( + [ + [ + ['name' => 'foo/bar', 'version' => '1.0.0'], + ], + ['foo/bar' => [ 'name' => 'foo/bar', - 'versions' => array( - '1.0.0' => array('name' => 'foo/bar', 'version' => '1.0.0'), - ), - )), - ), + 'versions' => [ + '1.0.0' => ['name' => 'foo/bar', 'version' => '1.0.0'], + ], + ]], + ], // New repository format - array( - array( - array('name' => 'bar/foo', 'version' => '3.14'), - array('name' => 'bar/foo', 'version' => '3.145'), - ), - array('packages' => array( - 'bar/foo' => array( - '3.14' => array('name' => 'bar/foo', 'version' => '3.14'), - '3.145' => array('name' => 'bar/foo', 'version' => '3.145'), - ), - )), - ), - ); + [ + [ + ['name' => 'bar/foo', 'version' => '3.14'], + ['name' => 'bar/foo', 'version' => '3.145'], + ], + ['packages' => [ + 'bar/foo' => [ + '3.14' => ['name' => 'bar/foo', 'version' => '3.14'], + '3.145' => ['name' => 'bar/foo', 'version' => '3.145'], + ], + ]], + ], + ]; } public function testWhatProvides(): void { $repo = $this->getMockBuilder('Composer\Repository\ComposerRepository') - ->setConstructorArgs(array( - array('url' => 'https://dummy.test.link'), + ->setConstructorArgs([ + ['url' => 'https://dummy.test.link'], new NullIO, FactoryMock::createConfig(), $this->getMockBuilder('Composer\Util\HttpDownloader')->disableOriginalConstructor()->getMock(), $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher')->disableOriginalConstructor()->getMock(), - )) - ->onlyMethods(array('fetchFile')) + ]) + ->onlyMethods(['fetchFile']) ->getMock(); $cache = $this->getMockBuilder('Composer\Cache')->disableOriginalConstructor()->getMock(); @@ -110,12 +110,12 @@ class ComposerRepositoryTest extends TestCase ->method('sha256') ->will($this->returnValue(false)); - $properties = array( + $properties = [ 'cache' => $cache, 'loader' => new ArrayLoader(), - 'providerListing' => array('a' => array('sha256' => 'xxx')), + 'providerListing' => ['a' => ['sha256' => 'xxx']], 'providersUrl' => 'https://dummy.test.link/to/%package%/file', - ); + ]; foreach ($properties as $property => $value) { $ref = new \ReflectionProperty($repo, $property); @@ -125,58 +125,58 @@ class ComposerRepositoryTest extends TestCase $repo->expects($this->any()) ->method('fetchFile') - ->will($this->returnValue(array( - 'packages' => array( - array(array( + ->will($this->returnValue([ + 'packages' => [ + [[ 'uid' => 1, 'name' => 'a', 'version' => 'dev-master', - 'extra' => array('branch-alias' => array('dev-master' => '1.0.x-dev')), - )), - array(array( + 'extra' => ['branch-alias' => ['dev-master' => '1.0.x-dev']], + ]], + [[ 'uid' => 2, 'name' => 'a', 'version' => 'dev-develop', - 'extra' => array('branch-alias' => array('dev-develop' => '1.1.x-dev')), - )), - array(array( + 'extra' => ['branch-alias' => ['dev-develop' => '1.1.x-dev']], + ]], + [[ 'uid' => 3, 'name' => 'a', 'version' => '0.6', - )), - ), - ))); + ]], + ], + ])); $reflMethod = new \ReflectionMethod($repo, 'whatProvides'); $reflMethod->setAccessible(true); $packages = $reflMethod->invoke($repo, 'a'); $this->assertCount(5, $packages); - $this->assertEquals(array('1', '1-alias', '2', '2-alias', '3'), array_keys($packages)); + $this->assertEquals(['1', '1-alias', '2', '2-alias', '3'], array_keys($packages)); $this->assertSame($packages['2'], $packages['2-alias']->getAliasOf()); } public function testSearchWithType(): void { - $repoConfig = array( + $repoConfig = [ 'url' => 'http://example.org', - ); + ]; - $result = array( - 'results' => array( - array( + $result = [ + 'results' => [ + [ 'name' => 'foo', 'description' => null, - ), - ), - ); + ], + ], + ]; $httpDownloader = $this->getHttpDownloaderMock(); $httpDownloader->expects( [ - ['url' => 'http://example.org/packages.json', 'body' => JsonFile::encode(array('search' => '/search.json?q=%query%&type=%type%'))], + ['url' => 'http://example.org/packages.json', 'body' => JsonFile::encode(['search' => '/search.json?q=%query%&type=%type%'])], ['url' => 'http://example.org/search.json?q=foo&type=composer-plugin', 'body' => JsonFile::encode($result)], - ['url' => 'http://example.org/search.json?q=foo&type=library', 'body' => JsonFile::encode(array())], + ['url' => 'http://example.org/search.json?q=foo&type=library', 'body' => JsonFile::encode([])], ], true ); @@ -189,7 +189,7 @@ class ComposerRepositoryTest extends TestCase $repository = new ComposerRepository($repoConfig, new NullIO, $config, $httpDownloader, $eventDispatcher); $this->assertSame( - array(array('name' => 'foo', 'description' => null)), + [['name' => 'foo', 'description' => null]], $repository->search('foo', RepositoryInterface::SEARCH_FULLTEXT, 'composer-plugin') ); @@ -200,15 +200,15 @@ class ComposerRepositoryTest extends TestCase public function testSearchWithSpecialChars(): void { - $repoConfig = array( + $repoConfig = [ 'url' => 'http://example.org', - ); + ]; $httpDownloader = $this->getHttpDownloaderMock(); $httpDownloader->expects( [ - ['url' => 'http://example.org/packages.json', 'body' => JsonFile::encode(array('search' => '/search.json?q=%query%&type=%type%'))], - ['url' => 'http://example.org/search.json?q=foo+bar&type=', 'body' => JsonFile::encode(array())], + ['url' => 'http://example.org/packages.json', 'body' => JsonFile::encode(['search' => '/search.json?q=%query%&type=%type%'])], + ['url' => 'http://example.org/search.json?q=foo+bar&type=', 'body' => JsonFile::encode([])], ], true ); @@ -227,29 +227,29 @@ class ComposerRepositoryTest extends TestCase public function testSearchWithAbandonedPackages(): void { - $repoConfig = array( + $repoConfig = [ 'url' => 'http://example.org', - ); + ]; - $result = array( - 'results' => array( - array( + $result = [ + 'results' => [ + [ 'name' => 'foo1', 'description' => null, 'abandoned' => true, - ), - array( + ], + [ 'name' => 'foo2', 'description' => null, 'abandoned' => 'bar', - ), - ), - ); + ], + ], + ]; $httpDownloader = $this->getHttpDownloaderMock(); $httpDownloader->expects( [ - ['url' => 'http://example.org/packages.json', 'body' => JsonFile::encode(array('search' => '/search.json?q=%query%'))], + ['url' => 'http://example.org/packages.json', 'body' => JsonFile::encode(['search' => '/search.json?q=%query%'])], ['url' => 'http://example.org/search.json?q=foo', 'body' => JsonFile::encode($result)], ], true @@ -264,25 +264,21 @@ class ComposerRepositoryTest extends TestCase $repository = new ComposerRepository($repoConfig, new NullIO, $config, $httpDownloader, $eventDispatcher); $this->assertSame( - array( - array('name' => 'foo1', 'description' => null, 'abandoned' => true), - array('name' => 'foo2', 'description' => null, 'abandoned' => 'bar'), - ), + [ + ['name' => 'foo1', 'description' => null, 'abandoned' => true], + ['name' => 'foo2', 'description' => null, 'abandoned' => 'bar'], + ], $repository->search('foo') ); } /** * @dataProvider provideCanonicalizeUrlTestCases - * - * @param string $expected - * @param string $url - * @param string $repositoryUrl */ public function testCanonicalizeUrl(string $expected, string $url, string $repositoryUrl): void { $repository = new ComposerRepository( - array('url' => $repositoryUrl), + ['url' => $repositoryUrl], new NullIO(), FactoryMock::createConfig(), $this->getMockBuilder('Composer\Util\HttpDownloader')->disableOriginalConstructor()->getMock(), @@ -305,31 +301,31 @@ class ComposerRepositoryTest extends TestCase public function provideCanonicalizeUrlTestCases(): array { - return array( - array( + return [ + [ 'https://example.org/path/to/file', '/path/to/file', 'https://example.org', - ), - array( + ], + [ 'https://example.org/canonic_url', 'https://example.org/canonic_url', 'https://should-not-see-me.test', - ), - array( + ], + [ 'file:///path/to/repository/file', '/path/to/repository/file', 'file:///path/to/repository', - ), - array( + ], + [ // Assert that the repository URL is returned unchanged if it is // not a URL. // (Backward compatibility test) 'invalid_repo_url', '/path/to/file', 'invalid_repo_url', - ), - array( + ], + [ // Assert that URLs can contain sequences resembling pattern // references as understood by preg_replace() without messing up // the result. @@ -337,8 +333,8 @@ class ComposerRepositoryTest extends TestCase 'https://example.org/path/to/unusual_$0_filename', '/path/to/unusual_$0_filename', 'https://example.org', - ), - ); + ], + ]; } public function testGetProviderNamesWillReturnPartialPackageNames(): void @@ -348,25 +344,25 @@ class ComposerRepositoryTest extends TestCase [ [ 'url' => 'http://example.org/packages.json', - 'body' => JsonFile::encode(array( + 'body' => JsonFile::encode([ 'providers-lazy-url' => '/foo/p/%package%.json', - 'packages' => array('foo/bar' => array( - 'dev-branch' => array('name' => 'foo/bar'), - 'v1.0.0' => array('name' => 'foo/bar'), - )), - )), + 'packages' => ['foo/bar' => [ + 'dev-branch' => ['name' => 'foo/bar'], + 'v1.0.0' => ['name' => 'foo/bar'], + ]], + ]), ], ], true ); $repository = new ComposerRepository( - array('url' => 'http://example.org/packages.json'), + ['url' => 'http://example.org/packages.json'], new NullIO(), FactoryMock::createConfig(), $httpDownloader ); - $this->assertEquals(array('foo/bar'), $repository->getPackageNames()); + $this->assertEquals(['foo/bar'], $repository->getPackageNames()); } } diff --git a/tests/Composer/Test/Repository/CompositeRepositoryTest.php b/tests/Composer/Test/Repository/CompositeRepositoryTest.php index 949a9234e..17d1d95b6 100644 --- a/tests/Composer/Test/Repository/CompositeRepositoryTest.php +++ b/tests/Composer/Test/Repository/CompositeRepositoryTest.php @@ -26,7 +26,7 @@ class CompositeRepositoryTest extends TestCase $arrayRepoTwo = new ArrayRepository; $arrayRepoTwo->addPackage($this->getPackage('bar', '1')); - $repo = new CompositeRepository(array($arrayRepoOne, $arrayRepoTwo)); + $repo = new CompositeRepository([$arrayRepoOne, $arrayRepoTwo]); $this->assertTrue($repo->hasPackage($this->getPackage('foo', '1')), "Should have package 'foo/1'"); $this->assertTrue($repo->hasPackage($this->getPackage('bar', '1')), "Should have package 'bar/1'"); @@ -43,7 +43,7 @@ class CompositeRepositoryTest extends TestCase $arrayRepoTwo = new ArrayRepository; $arrayRepoTwo->addPackage($this->getPackage('bar', '1')); - $repo = new CompositeRepository(array($arrayRepoOne, $arrayRepoTwo)); + $repo = new CompositeRepository([$arrayRepoOne, $arrayRepoTwo]); $this->assertEquals('foo', $repo->findPackage('foo', '1')->getName(), "Should find package 'foo/1' and get name of 'foo'"); $this->assertEquals('1', $repo->findPackage('foo', '1')->getPrettyVersion(), "Should find package 'foo/1' and get pretty version of '1'"); @@ -64,7 +64,7 @@ class CompositeRepositoryTest extends TestCase $arrayRepoTwo->addPackage($this->getPackage('bar', '2')); $arrayRepoTwo->addPackage($this->getPackage('foo', '3')); - $repo = new CompositeRepository(array($arrayRepoOne, $arrayRepoTwo)); + $repo = new CompositeRepository([$arrayRepoOne, $arrayRepoTwo]); $bats = $repo->findPackages('bat'); $this->assertCount(1, $bats, "Should find one instance of 'bats' (defined in just one repository)"); @@ -87,7 +87,7 @@ class CompositeRepositoryTest extends TestCase $arrayRepoTwo = new ArrayRepository; $arrayRepoTwo->addPackage($this->getPackage('bar', '1')); - $repo = new CompositeRepository(array($arrayRepoOne, $arrayRepoTwo)); + $repo = new CompositeRepository([$arrayRepoOne, $arrayRepoTwo]); $packages = $repo->getPackages(); $this->assertCount(2, $packages, "Should get two packages"); @@ -107,7 +107,7 @@ class CompositeRepositoryTest extends TestCase $arrayRepoTwo->addPackage($this->getPackage('bar', '2')); $arrayRepoTwo->addPackage($this->getPackage('bar', '3')); - $repo = new CompositeRepository(array($arrayRepoOne)); + $repo = new CompositeRepository([$arrayRepoOne]); $this->assertCount(1, $repo, "Composite repository should have just one package before addRepository() is called"); $repo->addRepository($arrayRepoTwo); $this->assertCount(4, $repo, "Composite repository should have four packages after addRepository() is called"); @@ -121,7 +121,7 @@ class CompositeRepositoryTest extends TestCase $arrayRepoTwo = new ArrayRepository; $arrayRepoTwo->addPackage($this->getPackage('bar', '1')); - $repo = new CompositeRepository(array($arrayRepoOne, $arrayRepoTwo)); + $repo = new CompositeRepository([$arrayRepoOne, $arrayRepoTwo]); $this->assertCount(2, $repo, "Should return '2' for count(\$repo)"); } @@ -129,21 +129,20 @@ class CompositeRepositoryTest extends TestCase /** * @dataProvider provideMethodCalls * - * @param string $method * @param mixed[] $args */ public function testNoRepositories(string $method, array $args): void { - $repo = new CompositeRepository(array()); - $this->assertEquals(array(), call_user_func_array(array($repo, $method), $args)); + $repo = new CompositeRepository([]); + $this->assertEquals([], call_user_func_array([$repo, $method], $args)); } public function provideMethodCalls(): array { - return array( - array('findPackages', array('foo')), - array('search', array('foo')), - array('getPackages', array()), - ); + return [ + ['findPackages', ['foo']], + ['search', ['foo']], + ['getPackages', []], + ]; } } diff --git a/tests/Composer/Test/Repository/FilesystemRepositoryTest.php b/tests/Composer/Test/Repository/FilesystemRepositoryTest.php index 8d02e573c..466dcd1c6 100644 --- a/tests/Composer/Test/Repository/FilesystemRepositoryTest.php +++ b/tests/Composer/Test/Repository/FilesystemRepositoryTest.php @@ -13,7 +13,6 @@ namespace Composer\Test\Repository; use Composer\Package\RootPackageInterface; -use Composer\Package\RootAliasPackage; use Composer\Repository\FilesystemRepository; use Composer\Test\TestCase; use Composer\Json\JsonFile; @@ -30,9 +29,9 @@ class FilesystemRepositoryTest extends TestCase $json ->expects($this->once()) ->method('read') - ->will($this->returnValue(array( - array('name' => 'package1', 'version' => '1.0.0-beta', 'type' => 'vendor'), - ))); + ->will($this->returnValue([ + ['name' => 'package1', 'version' => '1.0.0-beta', 'type' => 'vendor'], + ])); $json ->expects($this->once()) ->method('exists') @@ -76,7 +75,7 @@ class FilesystemRepositoryTest extends TestCase ->method('exists') ->will($this->returnValue(false)); - $this->assertEquals(array(), $repository->getPackages()); + $this->assertEquals([], $repository->getPackages()); } public function testRepositoryWrite(): void @@ -98,7 +97,7 @@ class FilesystemRepositoryTest extends TestCase $json ->expects($this->once()) ->method('read') - ->will($this->returnValue(array())); + ->will($this->returnValue([])); $json ->expects($this->once()) ->method('getPath') @@ -110,16 +109,16 @@ class FilesystemRepositoryTest extends TestCase $json ->expects($this->once()) ->method('write') - ->with(array( - 'packages' => array( - array('name' => 'mypkg', 'type' => 'library', 'version' => '0.1.10', 'version_normalized' => '0.1.10.0', 'install-path' => '../woop/woop'), - array('name' => 'mypkg2', 'type' => 'library', 'version' => '1.2.3', 'version_normalized' => '1.2.3.0', 'install-path' => '../woop/woop'), - ), + ->with([ + 'packages' => [ + ['name' => 'mypkg', 'type' => 'library', 'version' => '0.1.10', 'version_normalized' => '0.1.10.0', 'install-path' => '../woop/woop'], + ['name' => 'mypkg2', 'type' => 'library', 'version' => '1.2.3', 'version_normalized' => '1.2.3.0', 'install-path' => '../woop/woop'], + ], 'dev' => true, - 'dev-package-names' => array('mypkg2'), - )); + 'dev-package-names' => ['mypkg2'], + ]); - $repository->setDevPackageNames(array('mypkg2')); + $repository->setDevPackageNames(['mypkg2']); $repository->addPackage($this->getPackage('mypkg2', '1.2.3')); $repository->addPackage($this->getPackage('mypkg', '0.1.10')); $repository->write(true, $im); @@ -135,18 +134,18 @@ class FilesystemRepositoryTest extends TestCase $rootPackage = $this->getRootPackage('__root__', 'dev-master'); $rootPackage->setSourceReference('sourceref-by-default'); $rootPackage->setDistReference('distref'); - $this->configureLinks($rootPackage, array('provide' => array('foo/impl' => '2.0'))); + $this->configureLinks($rootPackage, ['provide' => ['foo/impl' => '2.0']]); $rootPackage = $this->getAliasPackage($rootPackage, '1.10.x-dev'); $repository = new FilesystemRepository($json, true, $rootPackage); - $repository->setDevPackageNames(array('c/c')); + $repository->setDevPackageNames(['c/c']); $pkg = $this->getPackage('a/provider', '1.1'); - $this->configureLinks($pkg, array('provide' => array('foo/impl' => '^1.1', 'foo/impl2' => '2.0'))); + $this->configureLinks($pkg, ['provide' => ['foo/impl' => '^1.1', 'foo/impl2' => '2.0']]); $pkg->setDistReference('distref-as-no-source'); $repository->addPackage($pkg); $pkg = $this->getPackage('a/provider2', '1.2'); - $this->configureLinks($pkg, array('provide' => array('foo/impl' => 'self.version', 'foo/impl2' => '2.0'))); + $this->configureLinks($pkg, ['provide' => ['foo/impl' => 'self.version', 'foo/impl2' => '2.0']]); $pkg->setSourceReference('sourceref'); $pkg->setDistReference('distref-as-installed-from-dist'); $pkg->setInstallationSource('dist'); @@ -155,7 +154,7 @@ class FilesystemRepositoryTest extends TestCase $repository->addPackage($this->getAliasPackage($pkg, '1.4')); $pkg = $this->getPackage('b/replacer', '2.2'); - $this->configureLinks($pkg, array('replace' => array('foo/impl2' => 'self.version', 'foo/replaced' => '^3.0'))); + $this->configureLinks($pkg, ['replace' => ['foo/impl2' => 'self.version', 'foo/replaced' => '^3.0']]); $repository->addPackage($pkg); $pkg = $this->getPackage('c/c', '3.0'); @@ -170,7 +169,7 @@ class FilesystemRepositoryTest extends TestCase ->getMock(); $im->expects($this->any()) ->method('getInstallPath') - ->will($this->returnCallback(function ($package) use ($dir): string { + ->will($this->returnCallback(static function ($package) use ($dir): string { // check for empty paths handling if ($package->getType() === 'metapackage') { return ''; diff --git a/tests/Composer/Test/Repository/FilterRepositoryTest.php b/tests/Composer/Test/Repository/FilterRepositoryTest.php index 7fa24236a..1d5405fa7 100644 --- a/tests/Composer/Test/Repository/FilterRepositoryTest.php +++ b/tests/Composer/Test/Repository/FilterRepositoryTest.php @@ -45,35 +45,35 @@ class FilterRepositoryTest extends TestCase $repo = new FilterRepository($this->arrayRepo, $config); $packages = $repo->getPackages(); - $this->assertSame($expected, array_map(function ($p): string { + $this->assertSame($expected, array_map(static function ($p): string { return $p->getName(); }, $packages)); } public static function provideRepoMatchingTestCases(): array { - return array( - array(array('foo/aaa', 'foo/bbb'), array('only' => array('foo/*'))), - array(array('foo/aaa', 'baz/yyy'), array('only' => array('foo/aaa', 'baz/yyy'))), - array(array('bar/xxx'), array('exclude' => array('foo/*', 'baz/yyy'))), + return [ + [['foo/aaa', 'foo/bbb'], ['only' => ['foo/*']]], + [['foo/aaa', 'baz/yyy'], ['only' => ['foo/aaa', 'baz/yyy']]], + [['bar/xxx'], ['exclude' => ['foo/*', 'baz/yyy']]], // make sure sub-patterns are not matched without wildcard - array(array('foo/aaa', 'foo/bbb', 'bar/xxx', 'baz/yyy'), array('exclude' => array('foo/aa', 'az/yyy'))), - array(array(), array('only' => array('foo/aa', 'az/yyy'))), - ); + [['foo/aaa', 'foo/bbb', 'bar/xxx', 'baz/yyy'], ['exclude' => ['foo/aa', 'az/yyy']]], + [[], ['only' => ['foo/aa', 'az/yyy']]], + ]; } public function testCanonicalDefaultTrue(): void { - $repo = new FilterRepository($this->arrayRepo, array()); - $result = $repo->loadPackages(array('foo/aaa' => new MatchAllConstraint), BasePackage::$stabilities, array()); + $repo = new FilterRepository($this->arrayRepo, []); + $result = $repo->loadPackages(['foo/aaa' => new MatchAllConstraint], BasePackage::$stabilities, []); $this->assertCount(1, $result['packages']); $this->assertCount(1, $result['namesFound']); } public function testNonCanonical(): void { - $repo = new FilterRepository($this->arrayRepo, array('canonical' => false)); - $result = $repo->loadPackages(array('foo/aaa' => new MatchAllConstraint), BasePackage::$stabilities, array()); + $repo = new FilterRepository($this->arrayRepo, ['canonical' => false]); + $result = $repo->loadPackages(['foo/aaa' => new MatchAllConstraint], BasePackage::$stabilities, []); $this->assertCount(1, $result['packages']); $this->assertCount(0, $result['namesFound']); } diff --git a/tests/Composer/Test/Repository/InstalledRepositoryTest.php b/tests/Composer/Test/Repository/InstalledRepositoryTest.php index e9efc04ff..5b9aebcca 100644 --- a/tests/Composer/Test/Repository/InstalledRepositoryTest.php +++ b/tests/Composer/Test/Repository/InstalledRepositoryTest.php @@ -31,14 +31,14 @@ class InstalledRepositoryTest extends TestCase $arrayRepoTwo->addPackage($bar = $this->getPackage('bar', '1')); $arrayRepoTwo->addPackage($bar2 = $this->getPackage('bar', '2')); - $foo->setReplaces(array('provided' => new Link('foo', 'provided', new MatchAllConstraint()))); - $bar2->setProvides(array('provided' => new Link('bar', 'provided', new MatchAllConstraint()))); + $foo->setReplaces(['provided' => new Link('foo', 'provided', new MatchAllConstraint())]); + $bar2->setProvides(['provided' => new Link('bar', 'provided', new MatchAllConstraint())]); - $repo = new InstalledRepository(array($arrayRepoOne, $arrayRepoTwo)); + $repo = new InstalledRepository([$arrayRepoOne, $arrayRepoTwo]); - $this->assertEquals(array($foo2), $repo->findPackagesWithReplacersAndProviders('foo', '2')); - $this->assertEquals(array($bar), $repo->findPackagesWithReplacersAndProviders('bar', '1')); - $this->assertEquals(array($foo, $bar2), $repo->findPackagesWithReplacersAndProviders('provided')); + $this->assertEquals([$foo2], $repo->findPackagesWithReplacersAndProviders('foo', '2')); + $this->assertEquals([$bar], $repo->findPackagesWithReplacersAndProviders('bar', '1')); + $this->assertEquals([$foo, $bar2], $repo->findPackagesWithReplacersAndProviders('provided')); } public function testAddRepository(): void @@ -47,6 +47,6 @@ class InstalledRepositoryTest extends TestCase self::expectException('LogicException'); - new InstalledRepository(array($arrayRepoOne)); + new InstalledRepository([$arrayRepoOne]); } } diff --git a/tests/Composer/Test/Repository/PathRepositoryTest.php b/tests/Composer/Test/Repository/PathRepositoryTest.php index 5c30aa339..2c98d37f2 100644 --- a/tests/Composer/Test/Repository/PathRepositoryTest.php +++ b/tests/Composer/Test/Repository/PathRepositoryTest.php @@ -25,15 +25,15 @@ class PathRepositoryTest extends TestCase { self::expectException('RuntimeException'); - $repositoryUrl = implode(DIRECTORY_SEPARATOR, array(__DIR__, 'Fixtures', 'path', 'missing')); - $repository = $this->createPathRepo(array('url' => $repositoryUrl)); + $repositoryUrl = implode(DIRECTORY_SEPARATOR, [__DIR__, 'Fixtures', 'path', 'missing']); + $repository = $this->createPathRepo(['url' => $repositoryUrl]); $repository->getPackages(); } public function testLoadPackageFromFileSystemWithVersion(): void { - $repositoryUrl = implode(DIRECTORY_SEPARATOR, array(__DIR__, 'Fixtures', 'path', 'with-version')); - $repository = $this->createPathRepo(array('url' => $repositoryUrl)); + $repositoryUrl = implode(DIRECTORY_SEPARATOR, [__DIR__, 'Fixtures', 'path', 'with-version']); + $repository = $this->createPathRepo(['url' => $repositoryUrl]); $repository->getPackages(); $this->assertSame(1, $repository->count()); @@ -42,8 +42,8 @@ class PathRepositoryTest extends TestCase public function testLoadPackageFromFileSystemWithoutVersion(): void { - $repositoryUrl = implode(DIRECTORY_SEPARATOR, array(__DIR__, 'Fixtures', 'path', 'without-version')); - $repository = $this->createPathRepo(array('url' => $repositoryUrl)); + $repositoryUrl = implode(DIRECTORY_SEPARATOR, [__DIR__, 'Fixtures', 'path', 'without-version']); + $repository = $this->createPathRepo(['url' => $repositoryUrl]); $packages = $repository->getPackages(); $this->assertGreaterThanOrEqual(1, $repository->count()); @@ -57,10 +57,10 @@ class PathRepositoryTest extends TestCase public function testLoadPackageFromFileSystemWithWildcard(): void { - $repositoryUrl = implode(DIRECTORY_SEPARATOR, array(__DIR__, 'Fixtures', 'path', '*')); - $repository = $this->createPathRepo(array('url' => $repositoryUrl)); + $repositoryUrl = implode(DIRECTORY_SEPARATOR, [__DIR__, 'Fixtures', 'path', '*']); + $repository = $this->createPathRepo(['url' => $repositoryUrl]); $packages = $repository->getPackages(); - $names = array(); + $names = []; $this->assertGreaterThanOrEqual(2, $repository->count()); @@ -71,22 +71,22 @@ class PathRepositoryTest extends TestCase $names[] = $package->getName(); sort($names); - $this->assertEquals(array('test/path-unversioned', 'test/path-versioned'), $names); + $this->assertEquals(['test/path-unversioned', 'test/path-versioned'], $names); } public function testLoadPackageWithExplicitVersions(): void { - $options = array( - 'versions' => array( + $options = [ + 'versions' => [ 'test/path-unversioned' => '4.3.2.1', 'test/path-versioned' => '3.2.1.0', - ), - ); - $repositoryUrl = implode(DIRECTORY_SEPARATOR, array(__DIR__, 'Fixtures', 'path', '*')); - $repository = $this->createPathRepo(array('url' => $repositoryUrl, 'options' => $options)); + ], + ]; + $repositoryUrl = implode(DIRECTORY_SEPARATOR, [__DIR__, 'Fixtures', 'path', '*']); + $repository = $this->createPathRepo(['url' => $repositoryUrl, 'options' => $options]); $packages = $repository->getPackages(); - $versions = array(); + $versions = []; $this->assertEquals(2, $repository->count()); @@ -97,7 +97,7 @@ class PathRepositoryTest extends TestCase $versions[$package->getName()] = $package->getVersion(); ksort($versions); - $this->assertSame(array('test/path-unversioned' => '4.3.2.1', 'test/path-versioned' => '3.2.1.0'), $versions); + $this->assertSame(['test/path-unversioned' => '4.3.2.1', 'test/path-versioned' => '3.2.1.0'], $versions); } /** @@ -107,12 +107,12 @@ class PathRepositoryTest extends TestCase { // realpath() does not fully expand the paths // PHP Bug https://bugs.php.net/bug.php?id=72642 - $repositoryUrl = implode(DIRECTORY_SEPARATOR, array(realpath(realpath(__DIR__)), 'Fixtures', 'path', 'with-version')); + $repositoryUrl = implode(DIRECTORY_SEPARATOR, [realpath(realpath(__DIR__)), 'Fixtures', 'path', 'with-version']); // getcwd() not necessarily match __DIR__ // PHP Bug https://bugs.php.net/bug.php?id=73797 $relativeUrl = ltrim(substr($repositoryUrl, strlen(realpath(realpath(Platform::getCwd())))), DIRECTORY_SEPARATOR); - $repository = $this->createPathRepo(array('url' => $relativeUrl)); + $repository = $this->createPathRepo(['url' => $relativeUrl]); $packages = $repository->getPackages(); $this->assertSame(1, $repository->count()); @@ -127,11 +127,11 @@ class PathRepositoryTest extends TestCase public function testReferenceNone(): void { - $options = array( + $options = [ 'reference' => 'none', - ); - $repositoryUrl = implode(DIRECTORY_SEPARATOR, array(__DIR__, 'Fixtures', 'path', '*')); - $repository = $this->createPathRepo(array('url' => $repositoryUrl, 'options' => $options)); + ]; + $repositoryUrl = implode(DIRECTORY_SEPARATOR, [__DIR__, 'Fixtures', 'path', '*']); + $repository = $this->createPathRepo(['url' => $repositoryUrl, 'options' => $options]); $packages = $repository->getPackages(); $this->assertGreaterThanOrEqual(2, $repository->count()); @@ -143,12 +143,12 @@ class PathRepositoryTest extends TestCase public function testReferenceConfig(): void { - $options = array( + $options = [ 'reference' => 'config', 'relative' => true, - ); - $repositoryUrl = implode(DIRECTORY_SEPARATOR, array(__DIR__, 'Fixtures', 'path', '*')); - $repository = $this->createPathRepo(array('url' => $repositoryUrl, 'options' => $options)); + ]; + $repositoryUrl = implode(DIRECTORY_SEPARATOR, [__DIR__, 'Fixtures', 'path', '*']); + $repository = $this->createPathRepo(['url' => $repositoryUrl, 'options' => $options]); $packages = $repository->getPackages(); $this->assertGreaterThanOrEqual(2, $repository->count()); @@ -172,7 +172,6 @@ class PathRepositoryTest extends TestCase $proc = new ProcessExecutor(); $loop = new Loop(new HttpDownloader($io, $config), $proc); - return new PathRepository($options, $io, $config, null, null, $proc); } } diff --git a/tests/Composer/Test/Repository/PlatformRepositoryTest.php b/tests/Composer/Test/Repository/PlatformRepositoryTest.php index 960ea25c8..a33ccd931 100644 --- a/tests/Composer/Test/Repository/PlatformRepositoryTest.php +++ b/tests/Composer/Test/Repository/PlatformRepositoryTest.php @@ -24,7 +24,7 @@ class PlatformRepositoryTest extends TestCase public function testHhvmPackage(): void { $hhvmDetector = $this->getMockBuilder('Composer\Platform\HhvmDetector')->getMock(); - $platformRepository = new PlatformRepository(array(), array(), null, $hhvmDetector); + $platformRepository = new PlatformRepository([], [], null, $hhvmDetector); $hhvmDetector ->method('getVersion') @@ -38,79 +38,79 @@ class PlatformRepositoryTest extends TestCase public function providePhpFlavorTestCases(): array { - return array( - array( - array( + return [ + [ + [ 'PHP_VERSION' => '7.1.33', - ), - array( + ], + [ 'php' => '7.1.33', - ), - ), - array( - array( + ], + ], + [ + [ 'PHP_VERSION' => '7.2.31-1+ubuntu16.04.1+deb.sury.org+1', 'PHP_DEBUG' => true, - ), - array( + ], + [ 'php' => '7.2.31', 'php-debug' => '7.2.31', - ), - ), - array( - array( + ], + ], + [ + [ 'PHP_VERSION' => '7.2.31-1+ubuntu16.04.1+deb.sury.org+1', 'PHP_ZTS' => true, - ), - array( + ], + [ 'php' => '7.2.31', 'php-zts' => '7.2.31', - ), - ), - array( - array( + ], + ], + [ + [ 'PHP_VERSION' => '7.2.31-1+ubuntu16.04.1+deb.sury.org+1', 'PHP_INT_SIZE' => 8, - ), - array( + ], + [ 'php' => '7.2.31', 'php-64bit' => '7.2.31', - ), - ), - array( - array( + ], + ], + [ + [ 'PHP_VERSION' => '7.2.31-1+ubuntu16.04.1+deb.sury.org+1', 'AF_INET6' => 30, - ), - array( + ], + [ 'php' => '7.2.31', 'php-ipv6' => '7.2.31', - ), - ), - array( - array( + ], + ], + [ + [ 'PHP_VERSION' => '7.2.31-1+ubuntu16.04.1+deb.sury.org+1', - ), - array( + ], + [ 'php' => '7.2.31', 'php-ipv6' => '7.2.31', - ), - array( - array('inet_pton', array('::'), ''), - ), - ), - array( - array( + ], + [ + ['inet_pton', ['::'], ''], + ], + ], + [ + [ 'PHP_VERSION' => '7.2.31-1+ubuntu16.04.1+deb.sury.org+1', - ), - array( + ], + [ 'php' => '7.2.31', - ), - array( - array('inet_pton', array('::'), false), - ), - ), - ); + ], + [ + ['inet_pton', ['::'], false], + ], + ], + ]; } /** @@ -120,27 +120,27 @@ class PlatformRepositoryTest extends TestCase * @param array $packages * @param list, string|bool}> $functions */ - public function testPhpVersion(array $constants, array $packages, array $functions = array()): void + public function testPhpVersion(array $constants, array $packages, array $functions = []): void { $runtime = $this->getMockBuilder('Composer\Platform\Runtime')->getMock(); $runtime ->method('getExtensions') - ->willReturn(array()); + ->willReturn([]); $runtime ->method('hasConstant') - ->willReturnCallback(function ($constant, $class = null) use ($constants): bool { + ->willReturnCallback(static function ($constant, $class = null) use ($constants): bool { return isset($constants[ltrim($class.'::'.$constant, ':')]); }); $runtime ->method('getConstant') - ->willReturnCallback(function ($constant, $class = null) use ($constants) { + ->willReturnCallback(static function ($constant, $class = null) use ($constants) { return $constants[ltrim($class.'::'.$constant, ':')] ?? null; }); $runtime ->method('invoke') ->willReturnMap($functions); - $repository = new PlatformRepository(array(), array(), $runtime); + $repository = new PlatformRepository([], [], $runtime); foreach ($packages as $packageName => $version) { $package = $repository->findPackage($packageName, '*'); self::assertNotNull($package, sprintf('Expected to find package "%s"', $packageName)); @@ -155,7 +155,7 @@ class PlatformRepositoryTest extends TestCase $runtime ->expects(self::once()) ->method('invoke') - ->with('inet_pton', array('::')) + ->with('inet_pton', ['::']) ->willReturn(false); $runtime ->method('hasConstant') @@ -167,21 +167,21 @@ class PlatformRepositoryTest extends TestCase ]; $runtime ->method('getConstant') - ->willReturnCallback(function ($constant, $class = null) use ($constants) { + ->willReturnCallback(static function ($constant, $class = null) use ($constants) { return $constants[ltrim($class.'::'.$constant, ':')] ?? null; }); $runtime ->method('getExtensions') - ->willReturn(array()); - $repository = new PlatformRepository(array(), array(), $runtime); + ->willReturn([]); + $repository = new PlatformRepository([], [], $runtime); $package = $repository->findPackage('php-ipv6', '*'); self::assertNull($package); } public static function provideLibraryTestCases(): array { - return array( - 'amqp' => array( + return [ + 'amqp' => [ 'amqp', ' @@ -195,12 +195,12 @@ librabbitmq version => 0.9.0 Default max channels per connection => 256 Default max frame size => 131072 Default heartbeats interval => 0', - array( + [ 'lib-amqp-protocol' => '0.9.1', 'lib-amqp-librabbitmq' => '0.9.0', - ), - ), - 'bz2' => array( + ], + ], + 'bz2' => [ 'bz2', ' bz2 @@ -209,9 +209,9 @@ BZip2 Support => Enabled Stream Wrapper support => compress.bzip2:// Stream Filter support => bzip2.decompress, bzip2.compress BZip2 Version => 1.0.5, 6-Sept-2010', - array('lib-bz2' => '1.0.5'), - ), - 'curl' => array( + ['lib-bz2' => '1.0.5'], + ], + 'curl' => [ 'curl', ' curl @@ -245,16 +245,16 @@ libSSH Version => libssh2/1.4.3 Directive => Local Value => Master Value curl.cainfo => no value => no value', - array( + [ 'lib-curl' => '2.0.0', 'lib-curl-openssl' => '1.0.1.20', 'lib-curl-zlib' => '1.2.8', 'lib-curl-libssh2' => '1.4.3', - ), - array(array('curl_version', array(), array('version' => '2.0.0'))), - ), + ], + [['curl_version', [], ['version' => '2.0.0']]], + ], - 'curl: OpenSSL fips version' => array( + 'curl: OpenSSL fips version' => [ 'curl', ' curl @@ -288,15 +288,15 @@ libSSH Version => libssh2/1.4.3 Directive => Local Value => Master Value curl.cainfo => no value => no value', - array( + [ 'lib-curl' => '2.0.0', - 'lib-curl-openssl-fips' => array('1.0.1.20', array(), array('lib-curl-openssl')), + 'lib-curl-openssl-fips' => ['1.0.1.20', [], ['lib-curl-openssl']], 'lib-curl-zlib' => '1.2.8', 'lib-curl-libssh2' => '1.4.3', - ), - array(array('curl_version', array(), array('version' => '2.0.0'))), - ), - 'curl: gnutls' => array( + ], + [['curl_version', [], ['version' => '2.0.0']]], + ], + 'curl: gnutls' => [ 'curl', ' curl @@ -324,14 +324,14 @@ Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, pop3 Host => x86_64-pc-linux-gnu SSL Version => GnuTLS/2.12.14 ZLib Version => 1.2.3.4', - array( + [ 'lib-curl' => '7.22.0', 'lib-curl-zlib' => '1.2.3.4', - 'lib-curl-gnutls' => array('2.12.14', array('lib-curl-openssl')), - ), - array(array('curl_version', array(), array('version' => '7.22.0'))), - ), - 'curl: NSS' => array( + 'lib-curl-gnutls' => ['2.12.14', ['lib-curl-openssl']], + ], + [['curl_version', [], ['version' => '7.22.0']]], + ], + 'curl: NSS' => [ 'curl', ' curl @@ -358,15 +358,15 @@ Host => x86_64-redhat-linux-gnu SSL Version => NSS/3.13.3.0 ZLib Version => 1.2.5 libSSH Version => libssh2/1.4.1', - array( + [ 'lib-curl' => '7.24.0', - 'lib-curl-nss' => array('3.13.3.0', array('lib-curl-openssl')), + 'lib-curl-nss' => ['3.13.3.0', ['lib-curl-openssl']], 'lib-curl-zlib' => '1.2.5', 'lib-curl-libssh2' => '1.4.1', - ), - array(array('curl_version', array(), array('version' => '7.24.0'))), - ), - 'curl: libssh not libssh2' => array( + ], + [['curl_version', [], ['version' => '7.24.0']]], + ], + 'curl: libssh not libssh2' => [ 'curl', ' @@ -404,15 +404,15 @@ Host => x86_64-pc-linux-gnu SSL Version => OpenSSL/1.1.1g ZLib Version => 1.2.11 libSSH Version => libssh/0.9.3/openssl/zlib', - array( + [ 'lib-curl' => '7.68.0', 'lib-curl-openssl' => '1.1.1.7', 'lib-curl-zlib' => '1.2.11', 'lib-curl-libssh' => '0.9.3', - ), - array(array('curl_version', array(), array('version' => '7.68.0'))), - ), - 'date' => array( + ], + [['curl_version', [], ['version' => '7.68.0']]], + ], + 'date' => [ 'date', ' date @@ -422,12 +422,12 @@ timelib version => 2018.03 "Olson" Timezone Database Version => 2020.1 Timezone Database => external Default timezone => Europe/Berlin', - array( + [ 'lib-date-timelib' => '2018.03', 'lib-date-zoneinfo' => '2020.1', - ), - ), - 'date: before timelib was extracted' => array( + ], + ], + 'date: before timelib was extracted' => [ 'date', ' date @@ -436,13 +436,13 @@ date/time support => enabled "Olson" Timezone Database Version => 2013.2 Timezone Database => internal Default timezone => Europe/Amsterdam', - array( + [ 'lib-date-zoneinfo' => '2013.2', 'lib-date-timelib' => false, - ), - ), - 'date: internal zoneinfo' => array( - array('date', 'timezonedb'), + ], + ], + 'date: internal zoneinfo' => [ + ['date', 'timezonedb'], ' date @@ -450,10 +450,10 @@ date/time support => enabled "Olson" Timezone Database Version => 2020.1 Timezone Database => internal Default timezone => UTC', - array('lib-date-zoneinfo' => '2020.1'), - ), - 'date: external zoneinfo' => array( - array('date', 'timezonedb'), + ['lib-date-zoneinfo' => '2020.1'], + ], + 'date: external zoneinfo' => [ + ['date', 'timezonedb'], ' date @@ -461,9 +461,9 @@ date/time support => enabled "Olson" Timezone Database Version => 2020.1 Timezone Database => external Default timezone => UTC', - array('lib-timezonedb-zoneinfo' => array('2020.1', array('lib-date-zoneinfo'))), - ), - 'date: zoneinfo 0.system' => array( + ['lib-timezonedb-zoneinfo' => ['2020.1', ['lib-date-zoneinfo']]], + ], + 'date: zoneinfo 0.system' => [ 'date', ' @@ -480,21 +480,21 @@ date.default_latitude => 31.7667 => 31.7667 date.default_longitude => 35.2333 => 35.2333 date.sunset_zenith => 90.583333 => 90.583333 date.sunrise_zenith => 90.583333 => 90.583333', - array( + [ 'lib-date-zoneinfo' => '0', 'lib-date-timelib' => '2018.03', - ), - ), - 'fileinfo' => array( + ], + ], + 'fileinfo' => [ 'fileinfo', ' fileinfo fileinfo support => enabled libmagic => 537', - array('lib-fileinfo-libmagic' => '537'), - ), - 'gd' => array( + ['lib-fileinfo-libmagic' => '537'], + ], + 'gd' => [ 'gd', ' gd @@ -516,16 +516,16 @@ WebP Support => enabled Directive => Local Value => Master Value gd.jpeg_ignore_warning => 1 => 1', - array( + [ 'lib-gd' => '1.2.3', 'lib-gd-freetype' => '2.10.0', 'lib-gd-libjpeg' => '9.0', 'lib-gd-libpng' => '1.6.34', - ), - array(), - array(array('GD_VERSION', null, '1.2.3')), - ), - 'gd: libjpeg version variation' => array( + ], + [], + [['GD_VERSION', null, '1.2.3']], + ], + 'gd: libjpeg version variation' => [ 'gd', ' gd @@ -547,16 +547,16 @@ WebP Support => enabled Directive => Local Value => Master Value gd.jpeg_ignore_warning => 1 => 1', - array( + [ 'lib-gd' => '1.2.3', 'lib-gd-freetype' => '2.9.1', 'lib-gd-libjpeg' => '6.2', 'lib-gd-libpng' => '1.6.35', - ), - array(), - array(array('GD_VERSION', null, '1.2.3')), - ), - 'gd: libxpm' => array( + ], + [], + [['GD_VERSION', null, '1.2.3']], + ], + 'gd: libxpm' => [ 'gd', ' gd @@ -581,31 +581,31 @@ WebP Support => enabled Directive => Local Value => Master Value gd.jpeg_ignore_warning => 1 => 1', - array( + [ 'lib-gd' => '2.2.5', 'lib-gd-freetype' => '2.6.3', 'lib-gd-libjpeg' => '6.2', 'lib-gd-libpng' => '1.6.28', 'lib-gd-libxpm' => '3.4.11', - ), - array(), - array(array('GD_VERSION', null, '2.2.5')), - ), - 'iconv' => array( + ], + [], + [['GD_VERSION', null, '2.2.5']], + ], + 'iconv' => [ 'iconv', null, - array('lib-iconv' => '1.2.4'), - array(), - array(array('ICONV_VERSION', null, '1.2.4')), - ), - 'gmp' => array( + ['lib-iconv' => '1.2.4'], + [], + [['ICONV_VERSION', null, '1.2.4']], + ], + 'gmp' => [ 'gmp', null, - array('lib-gmp' => '6.1.0'), - array(), - array(array('GMP_VERSION', null, '6.1.0')), - ), - 'intl' => array( + ['lib-gmp' => '6.1.0'], + [], + [['GMP_VERSION', null, '6.1.0']], + ], + 'intl' => [ 'intl', ' intl @@ -620,23 +620,23 @@ Directive => Local Value => Master Value intl.default_locale => no value => no value intl.error_level => 0 => 0 intl.use_exceptions => 0 => 0', - array( + [ 'lib-icu' => '100', 'lib-icu-cldr' => ResourceBundleStub::STUB_VERSION, 'lib-icu-unicode' => '7.0.0', 'lib-icu-zoneinfo' => '2016.2', - ), - array( - array(array('ResourceBundle', 'create'), array('root', 'ICUDATA', false), new ResourceBundleStub()), - array(array('IntlChar', 'getUnicodeVersion'), array(), array(7, 0, 0, 0)), - ), - array(array('INTL_ICU_VERSION', null, '100')), - array( - array('ResourceBundle'), - array('IntlChar'), - ), - ), - 'intl: INTL_ICU_VERSION not defined' => array( + ], + [ + [['ResourceBundle', 'create'], ['root', 'ICUDATA', false], new ResourceBundleStub()], + [['IntlChar', 'getUnicodeVersion'], [], [7, 0, 0, 0]], + ], + [['INTL_ICU_VERSION', null, '100']], + [ + ['ResourceBundle'], + ['IntlChar'], + ], + ], + 'intl: INTL_ICU_VERSION not defined' => [ 'intl', ' intl @@ -645,25 +645,25 @@ Internationalization support => enabled version => 1.1.0 ICU version => 57.1 ICU Data version => 57.1', - array('lib-icu' => '57.1'), - ), - 'imagick: 6.x' => array( + ['lib-icu' => '57.1'], + ], + 'imagick: 6.x' => [ 'imagick', null, - array('lib-imagick-imagemagick' => array('6.2.9', array('lib-imagick'))), - array(), - array(), - array(array('Imagick', array(), new ImagickStub('ImageMagick 6.2.9 Q16 x86_64 2018-05-18 http://www.imagemagick.org'))), - ), - 'imagick: 7.x' => array( + ['lib-imagick-imagemagick' => ['6.2.9', ['lib-imagick']]], + [], + [], + [['Imagick', [], new ImagickStub('ImageMagick 6.2.9 Q16 x86_64 2018-05-18 http://www.imagemagick.org')]], + ], + 'imagick: 7.x' => [ 'imagick', null, - array('lib-imagick-imagemagick' => array('7.0.8.34', array('lib-imagick'))), - array(), - array(), - array(array('Imagick', array(), new ImagickStub('ImageMagick 7.0.8-34 Q16 x86_64 2019-03-23 https://imagemagick.org'))), - ), - 'ldap' => array( + ['lib-imagick-imagemagick' => ['7.0.8.34', ['lib-imagick']]], + [], + [], + [['Imagick', [], new ImagickStub('ImageMagick 7.0.8-34 Q16 x86_64 2019-03-23 https://imagemagick.org')]], + ], + 'ldap' => [ 'ldap', ' ldap @@ -678,23 +678,23 @@ SASL Support => Enabled Directive => Local Value => Master Value ldap.max_links => Unlimited => Unlimited', - array('lib-ldap-openldap' => '2.4.50'), - ), - 'libxml' => array( + ['lib-ldap-openldap' => '2.4.50'], + ], + 'libxml' => [ 'libxml', null, - array('lib-libxml' => '2.1.5'), - array(), - array(array('LIBXML_DOTTED_VERSION', null, '2.1.5')), - ), - 'libxml: related extensions' => array( - array('libxml', 'dom', 'simplexml', 'xml', 'xmlreader', 'xmlwriter'), + ['lib-libxml' => '2.1.5'], + [], + [['LIBXML_DOTTED_VERSION', null, '2.1.5']], + ], + 'libxml: related extensions' => [ + ['libxml', 'dom', 'simplexml', 'xml', 'xmlreader', 'xmlwriter'], null, - array('lib-libxml' => array('2.1.5', array(), array('lib-dom-libxml', 'lib-simplexml-libxml', 'lib-xml-libxml', 'lib-xmlreader-libxml', 'lib-xmlwriter-libxml'))), - array(), - array(array('LIBXML_DOTTED_VERSION', null, '2.1.5')), - ), - 'mbstring' => array( + ['lib-libxml' => ['2.1.5', [], ['lib-dom-libxml', 'lib-simplexml-libxml', 'lib-xml-libxml', 'lib-xmlreader-libxml', 'lib-xmlwriter-libxml']]], + [], + [['LIBXML_DOTTED_VERSION', null, '2.1.5']], + ], + 'mbstring' => [ 'mbstring', ' mbstring @@ -708,14 +708,14 @@ mbstring extension makes use of "streamable kanji code filter and converter", wh Multibyte (japanese) regex support => enabled Multibyte regex (oniguruma) version => 6.1.3', - array( + [ 'lib-mbstring-libmbfl' => '1.3.2', 'lib-mbstring-oniguruma' => '7.0.0', - ), - array(), - array(array('MB_ONIGURUMA_VERSION', null, '7.0.0')), - ), - 'mbstring: no MB_ONIGURUMA constant' => array( + ], + [], + [['MB_ONIGURUMA_VERSION', null, '7.0.0']], + ], + 'mbstring: no MB_ONIGURUMA constant' => [ 'mbstring', ' mbstring @@ -729,12 +729,12 @@ mbstring extension makes use of "streamable kanji code filter and converter", wh Multibyte (japanese) regex support => enabled Multibyte regex (oniguruma) version => 6.1.3', - array( + [ 'lib-mbstring-libmbfl' => '1.3.2', 'lib-mbstring-oniguruma' => '6.1.3', - ), - ), - 'mbstring: no MB_ONIGURUMA constant <7.40' => array( + ], + ], + 'mbstring: no MB_ONIGURUMA constant <7.40' => [ 'mbstring', ' mbstring @@ -749,12 +749,12 @@ mbstring extension makes use of "streamable kanji code filter and converter", wh Multibyte (japanese) regex support => enabled Multibyte regex (oniguruma) backtrack check => On', - array( + [ 'lib-mbstring-libmbfl' => '1.3.2', 'lib-mbstring-oniguruma' => '6.9.4', - ), - ), - 'memcached' => array( + ], + ], + 'memcached' => [ 'memcached', ' memcached @@ -767,72 +767,72 @@ Session support => yes igbinary support => yes json support => yes msgpack support => yes', - array('lib-memcached-libmemcached' => '1.0.18'), - ), - 'openssl' => array( + ['lib-memcached-libmemcached' => '1.0.18'], + ], + 'openssl' => [ 'openssl', null, - array('lib-openssl' => '1.1.1.7'), - array(), - array(array('OPENSSL_VERSION_TEXT', null, 'OpenSSL 1.1.1g 21 Apr 2020')), - ), - 'openssl: distro peculiarities' => array( + ['lib-openssl' => '1.1.1.7'], + [], + [['OPENSSL_VERSION_TEXT', null, 'OpenSSL 1.1.1g 21 Apr 2020']], + ], + 'openssl: distro peculiarities' => [ 'openssl', null, - array('lib-openssl' => '1.1.1.7'), - array(), - array(array('OPENSSL_VERSION_TEXT', null, 'OpenSSL 1.1.1g-freebsd 21 Apr 2020')), - ), - 'openssl: two letters suffix' => array( + ['lib-openssl' => '1.1.1.7'], + [], + [['OPENSSL_VERSION_TEXT', null, 'OpenSSL 1.1.1g-freebsd 21 Apr 2020']], + ], + 'openssl: two letters suffix' => [ 'openssl', null, - array('lib-openssl' => '0.9.8.33'), - array(), - array(array('OPENSSL_VERSION_TEXT', null, 'OpenSSL 0.9.8zg 21 Apr 2020')), - ), - 'openssl: pre release is treated as alpha' => array( + ['lib-openssl' => '0.9.8.33'], + [], + [['OPENSSL_VERSION_TEXT', null, 'OpenSSL 0.9.8zg 21 Apr 2020']], + ], + 'openssl: pre release is treated as alpha' => [ 'openssl', null, - array('lib-openssl' => '1.1.1.7-alpha1'), - array(), - array(array('OPENSSL_VERSION_TEXT', null, 'OpenSSL 1.1.1g-pre1 21 Apr 2020')), - ), - 'openssl: beta release' => array( + ['lib-openssl' => '1.1.1.7-alpha1'], + [], + [['OPENSSL_VERSION_TEXT', null, 'OpenSSL 1.1.1g-pre1 21 Apr 2020']], + ], + 'openssl: beta release' => [ 'openssl', null, - array('lib-openssl' => '1.1.1.7-beta2'), - array(), - array(array('OPENSSL_VERSION_TEXT', null, 'OpenSSL 1.1.1g-beta2 21 Apr 2020')), - ), - 'openssl: alpha release' => array( + ['lib-openssl' => '1.1.1.7-beta2'], + [], + [['OPENSSL_VERSION_TEXT', null, 'OpenSSL 1.1.1g-beta2 21 Apr 2020']], + ], + 'openssl: alpha release' => [ 'openssl', null, - array('lib-openssl' => '1.1.1.7-alpha4'), - array(), - array(array('OPENSSL_VERSION_TEXT', null, 'OpenSSL 1.1.1g-alpha4 21 Apr 2020')), - ), - 'openssl: rc release' => array( + ['lib-openssl' => '1.1.1.7-alpha4'], + [], + [['OPENSSL_VERSION_TEXT', null, 'OpenSSL 1.1.1g-alpha4 21 Apr 2020']], + ], + 'openssl: rc release' => [ 'openssl', null, - array('lib-openssl' => '1.1.1.7-rc2'), - array(), - array(array('OPENSSL_VERSION_TEXT', null, 'OpenSSL 1.1.1g-rc2 21 Apr 2020')), - ), - 'openssl: fips' => array( + ['lib-openssl' => '1.1.1.7-rc2'], + [], + [['OPENSSL_VERSION_TEXT', null, 'OpenSSL 1.1.1g-rc2 21 Apr 2020']], + ], + 'openssl: fips' => [ 'openssl', null, - array('lib-openssl-fips' => array('1.1.1.7', array(), array('lib-openssl'))), - array(), - array(array('OPENSSL_VERSION_TEXT', null, 'OpenSSL 1.1.1g-fips 21 Apr 2020')), - ), - 'openssl: LibreSSL' => array( + ['lib-openssl-fips' => ['1.1.1.7', [], ['lib-openssl']]], + [], + [['OPENSSL_VERSION_TEXT', null, 'OpenSSL 1.1.1g-fips 21 Apr 2020']], + ], + 'openssl: LibreSSL' => [ 'openssl', null, - array('lib-openssl' => '2.0.1.0'), - array(), - array(array('OPENSSL_VERSION_TEXT', null, 'LibreSSL 2.0.1')), - ), - 'mysqlnd' => array( + ['lib-openssl' => '2.0.1.0'], + [], + [['OPENSSL_VERSION_TEXT', null, 'LibreSSL 2.0.1']], + ], + 'mysqlnd' => [ 'mysqlnd', ' mysqlnd @@ -850,9 +850,9 @@ Collecting memory statistics => Yes Tracing => n/a Loaded plugins => mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_sha256_password API Extensions => pdo_mysql,mysqli', - array('lib-mysqlnd-mysqlnd' => '5.0.11-dev'), - ), - 'pdo_mysql' => array( + ['lib-mysqlnd-mysqlnd' => '5.0.11-dev'], + ], + 'pdo_mysql' => [ 'pdo_mysql', ' pdo_mysql @@ -862,9 +862,9 @@ Client API version => mysqlnd 5.0.10-dev - 20150407 - $Id: 38fea24f2847fa7519001 Directive => Local Value => Master Value pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock', - array('lib-pdo_mysql-mysqlnd' => '5.0.10-dev'), - ), - 'mongodb' => array( + ['lib-pdo_mysql-mysqlnd' => '5.0.10-dev'], + ], + 'mongodb' => [ 'mongodb', ' mongodb @@ -887,12 +887,12 @@ libmongoc compression zlib => enabled Directive => Local Value => Master Value mongodb.debug => no value => no value', - array( + [ 'lib-mongodb-libmongoc' => '1.15.2', 'lib-mongodb-libbson' => '1.15.2', - ), - ), - 'pcre' => array( + ], + ], + 'pcre' => [ 'pcre', ' pcre @@ -902,14 +902,14 @@ PCRE Library Version => 10.33 2019-04-16 PCRE Unicode Version => 11.0.0 PCRE JIT Support => enabled PCRE JIT Target => x86 64bit (little endian + unaligned)', - array( + [ 'lib-pcre' => '10.33', 'lib-pcre-unicode' => '11.0.0', - ), - array(), - array(array('PCRE_VERSION', null, '10.33 2019-04-16')), - ), - 'pcre: no unicode version included' => array( + ], + [], + [['PCRE_VERSION', null, '10.33 2019-04-16']], + ], + 'pcre: no unicode version included' => [ 'pcre', ' pcre @@ -921,13 +921,13 @@ Directive => Local Value => Master Value pcre.backtrack_limit => 1000000 => 1000000 pcre.recursion_limit => 100000 => 100000 ', - array( + [ 'lib-pcre' => '8.38', - ), - array(), - array(array('PCRE_VERSION', null, '8.38 2015-11-23')), - ), - 'pgsql' => array( + ], + [], + [['PCRE_VERSION', null, '8.38 2015-11-23']], + ], + 'pgsql' => [ 'pgsql', ' pgsql @@ -947,9 +947,9 @@ pgsql.max_links => Unlimited => Unlimited pgsql.auto_reset_persistent => Off => Off pgsql.ignore_notice => Off => Off pgsql.log_notice => Off => Off', - array('lib-pgsql-libpq' => '12.2'), - ), - 'pdo_pgsql' => array( + ['lib-pgsql-libpq' => '12.2'], + ], + 'pdo_pgsql' => [ 'pdo_pgsql', ' pdo_pgsql @@ -958,23 +958,23 @@ PDO Driver for PostgreSQL => enabled PostgreSQL(libpq) Version => 12.1 Module version => 7.1.33 Revision => $Id: 9c5f356c77143981d2e905e276e439501fe0f419 $', - array('lib-pdo_pgsql-libpq' => '12.1'), - ), - 'libsodium' => array( + ['lib-pdo_pgsql-libpq' => '12.1'], + ], + 'libsodium' => [ 'libsodium', null, - array('lib-libsodium' => '1.0.17'), - array(), - array(array('SODIUM_LIBRARY_VERSION', null, '1.0.17')), - ), - 'libsodium: different extension name' => array( + ['lib-libsodium' => '1.0.17'], + [], + [['SODIUM_LIBRARY_VERSION', null, '1.0.17']], + ], + 'libsodium: different extension name' => [ 'sodium', null, - array('lib-libsodium' => '1.0.15'), - array(), - array(array('SODIUM_LIBRARY_VERSION', null, '1.0.15')), - ), - 'pdo_sqlite' => array( + ['lib-libsodium' => '1.0.15'], + [], + [['SODIUM_LIBRARY_VERSION', null, '1.0.15']], + ], + 'pdo_sqlite' => [ 'pdo_sqlite', ' pdo_sqlite @@ -982,9 +982,9 @@ pdo_sqlite PDO Driver for SQLite 3.x => enabled SQLite Library => 3.32.3 ', - array('lib-pdo_sqlite-sqlite' => '3.32.3'), - ), - 'sqlite3' => array( + ['lib-pdo_sqlite-sqlite' => '3.32.3'], + ], + 'sqlite3' => [ 'sqlite3', ' sqlite3 @@ -996,9 +996,9 @@ SQLite Library => 3.31.0 Directive => Local Value => Master Value sqlite3.extension_dir => no value => no value sqlite3.defensive => 1 => 1', - array('lib-sqlite3-sqlite' => '3.31.0'), - ), - 'ssh2' => array( + ['lib-sqlite3-sqlite' => '3.31.0'], + ], + 'ssh2' => [ 'ssh2', ' ssh2 @@ -1007,9 +1007,9 @@ SSH2 support => enabled extension version => 1.2 libssh2 version => 1.8.0 banner => SSH-2.0-libssh2_1.8.0', - array('lib-ssh2-libssh2' => '1.8.0'), - ), - 'yaml' => array( + ['lib-ssh2-libssh2' => '1.8.0'], + ], + 'yaml' => [ 'yaml', ' yaml @@ -1025,9 +1025,9 @@ yaml.decode_php => 0 => 0 yaml.output_canonical => 0 => 0 yaml.output_indent => 2 => 2 yaml.output_width => 80 => 80', - array('lib-yaml-libyaml' => '0.2.2'), - ), - 'xsl' => array( + ['lib-yaml-libyaml' => '0.2.2'], + ], + 'xsl' => [ 'xsl', ' xsl @@ -1037,28 +1037,28 @@ libxslt Version => 1.1.33 libxslt compiled against libxml Version => 2.9.8 EXSLT => enabled libexslt Version => 1.1.29', - array( - 'lib-libxslt' => array('1.1.29', array('lib-xsl')), + [ + 'lib-libxslt' => ['1.1.29', ['lib-xsl']], 'lib-libxslt-libxml' => '2.9.8', - ), - array(), - array(array('LIBXSLT_DOTTED_VERSION', null, '1.1.29')), - ), - 'zip' => array( + ], + [], + [['LIBXSLT_DOTTED_VERSION', null, '1.1.29']], + ], + 'zip' => [ 'zip', null, - array('lib-zip-libzip' => array('1.5.0', array('lib-zip'))), - array(), - array(array('LIBZIP_VERSION', 'ZipArchive', '1.5.0')), - ), - 'zlib' => array( + ['lib-zip-libzip' => ['1.5.0', ['lib-zip']]], + [], + [['LIBZIP_VERSION', 'ZipArchive', '1.5.0']], + ], + 'zlib' => [ 'zlib', null, - array('lib-zlib' => '1.2.10'), - array(), - array(array('ZLIB_VERSION', null, '1.2.10')), - ), - 'zlib: no constant present' => array( + ['lib-zlib' => '1.2.10'], + [], + [['ZLIB_VERSION', null, '1.2.10']], + ], + 'zlib: no constant present' => [ 'zlib', ' zlib @@ -1068,16 +1068,15 @@ Stream Wrapper => compress.zlib:// Stream Filter => zlib.inflate, zlib.deflate Compiled Version => 1.2.8 Linked Version => 1.2.11', - array('lib-zlib' => '1.2.11'), - ), - ); + ['lib-zlib' => '1.2.11'], + ], + ]; } /** * @dataProvider provideLibraryTestCases * * @param string|string[] $extensions - * @param string|null $info * @param array $expectations array of packageName => expected version (or false if expected to be msising), or packageName => array(expected version, expected replaced names, expected provided names) * @param list $functions * @param list $constants @@ -1087,9 +1086,9 @@ Linked Version => 1.2.11', $extensions, ?string $info, array $expectations, - array $functions = array(), - array $constants = array(), - array $classDefinitions = array() + array $functions = [], + array $constants = [], + array $classDefinitions = [] ): void { $extensions = (array) $extensions; @@ -1103,16 +1102,16 @@ Linked Version => 1.2.11', $runtime ->method('getExtensionVersion') ->willReturnMap( - array_map(function ($extension) use ($extensionVersion): array { - return array($extension, $extensionVersion); + array_map(static function ($extension) use ($extensionVersion): array { + return [$extension, $extensionVersion]; }, $extensions) ); $runtime ->method('getExtensionInfo') ->willReturnMap( - array_map(function ($extension) use ($info): array { - return array($extension, $info); + array_map(static function ($extension) use ($info): array { + return [$extension, $info]; }, $extensions) ); @@ -1120,10 +1119,10 @@ Linked Version => 1.2.11', ->method('invoke') ->willReturnMap($functions); - $constants[] = array('PHP_VERSION', null, '7.1.0'); + $constants[] = ['PHP_VERSION', null, '7.1.0']; $runtime ->method('hasConstant') - ->willReturnCallback(function ($constant, $class = null) use ($constants): bool { + ->willReturnCallback(static function ($constant, $class = null) use ($constants): bool { foreach ($constants as $definition) { if ($definition[0] === $constant && $definition[1] === $class) { return true; @@ -1138,7 +1137,7 @@ Linked Version => 1.2.11', $runtime ->method('hasClass') - ->willReturnCallback(function ($class) use ($classDefinitions): bool { + ->willReturnCallback(static function ($class) use ($classDefinitions): bool { foreach ($classDefinitions as $definition) { if ($definition[0] === $class) { return true; @@ -1151,20 +1150,20 @@ Linked Version => 1.2.11', ->method('construct') ->willReturnMap($classDefinitions); - $platformRepository = new PlatformRepository(array(), array(), $runtime); + $platformRepository = new PlatformRepository([], [], $runtime); $libraries = array_map( - function ($package): string { + static function ($package): string { return $package['name']; }, array_filter( $platformRepository->search('lib', PlatformRepository::SEARCH_NAME), - function ($package): bool { + static function ($package): bool { return strpos($package['name'], 'lib-') === 0; } ) ); - $expectedLibraries = array_keys(array_filter($expectations, function ($expectation): bool { + $expectedLibraries = array_keys(array_filter($expectations, static function ($expectation): bool { return $expectation !== false; })); self::assertCount(count(array_filter($expectedLibraries)), $libraries, sprintf('Expected: %s, got %s', var_export($expectedLibraries, true), var_export($libraries, true))); @@ -1178,7 +1177,7 @@ Linked Version => 1.2.11', if (!is_array($expectation)) { $expectation = [$expectation, [], []]; } - list($expectedVersion, $expectedReplaces, $expectedProvides) = array_pad($expectation, 3, []); + [$expectedVersion, $expectedReplaces, $expectedProvides] = array_pad($expectation, 3, []); $package = $platformRepository->findPackage($packageName, '*'); if ($expectedVersion === false) { @@ -1193,11 +1192,8 @@ Linked Version => 1.2.11', } /** - * @param string $context * @param string[] $expectedLinks * @param Link[] $links - * - * @return void */ private function assertPackageLinks(string $context, array $expectedLinks, PackageInterface $sourcePackage, array $links): void { @@ -1215,17 +1211,17 @@ Linked Version => 1.2.11', $runtime = $this->getMockBuilder('Composer\Platform\Runtime')->getMock(); $runtime ->method('getExtensions') - ->willReturn(array()); + ->willReturn([]); $runtime ->method('getConstant') ->willReturnMap( - array( - array('PHP_VERSION', null, '7.0.0'), - array('PHP_DEBUG', null, false), - ) + [ + ['PHP_VERSION', null, '7.0.0'], + ['PHP_DEBUG', null, false], + ] ); - $platformRepository = new PlatformRepository(array(), array(), $runtime); + $platformRepository = new PlatformRepository([], [], $runtime); $package = $platformRepository->findPackage('composer', '='.Composer::getVersion()); self::assertNotNull($package, 'Composer package exists'); @@ -1233,34 +1229,32 @@ Linked Version => 1.2.11', public static function providePlatformPackages(): array { - return array( - array('php', true), - array('php-debug', true), - array('php-ipv6', true), - array('php-64bit', true), - array('php-zts', true), - array('hhvm', true), - array('hhvm-foo', false), - array('ext-foo', true), - array('ext-123', true), - array('extfoo', false), - array('ext', false), - array('lib-foo', true), - array('lib-123', true), - array('libfoo', false), - array('lib', false), - array('composer', true), - array('composer-foo', false), - array('composer-plugin-api', true), - array('composer-plugin', false), - array('composer-runtime-api', true), - array('composer-runtime', false), - ); + return [ + ['php', true], + ['php-debug', true], + ['php-ipv6', true], + ['php-64bit', true], + ['php-zts', true], + ['hhvm', true], + ['hhvm-foo', false], + ['ext-foo', true], + ['ext-123', true], + ['extfoo', false], + ['ext', false], + ['lib-foo', true], + ['lib-123', true], + ['libfoo', false], + ['lib', false], + ['composer', true], + ['composer-foo', false], + ['composer-plugin-api', true], + ['composer-plugin', false], + ['composer-runtime-api', true], + ['composer-runtime', false], + ]; } /** - * @param string $packageName - * @param bool $expectation * @dataProvider providePlatformPackages */ public function testValidPlatformPackages(string $packageName, bool $expectation): void @@ -1273,13 +1267,6 @@ class ResourceBundleStub { public const STUB_VERSION = '32.0.1'; - /** - * @param string $locale - * @param string $bundleName - * @param bool $fallback - * - * @return ResourceBundleStub - */ public static function create(string $locale, string $bundleName, bool $fallback): ResourceBundleStub { Assert::assertSame(3, func_num_args()); @@ -1292,8 +1279,6 @@ class ResourceBundleStub /** * @param string|int $field - * - * @return string */ public function get($field): string { @@ -1311,9 +1296,6 @@ class ImagickStub */ private $versionString; - /** - * @param string $versionString - */ public function __construct(string $versionString) { $this->versionString = $versionString; @@ -1327,6 +1309,6 @@ class ImagickStub { Assert::assertSame(0, func_num_args()); - return array('versionString' => $this->versionString); + return ['versionString' => $this->versionString]; } } diff --git a/tests/Composer/Test/Repository/RepositoryFactoryTest.php b/tests/Composer/Test/Repository/RepositoryFactoryTest.php index beb8be483..635784639 100644 --- a/tests/Composer/Test/Repository/RepositoryFactoryTest.php +++ b/tests/Composer/Test/Repository/RepositoryFactoryTest.php @@ -30,7 +30,7 @@ class RepositoryFactoryTest extends TestCase $ref->setAccessible(true); $repositoryClasses = $ref->getValue($manager); - $this->assertEquals(array( + $this->assertEquals([ 'composer', 'vcs', 'package', @@ -46,7 +46,7 @@ class RepositoryFactoryTest extends TestCase 'hg', 'artifact', 'path', - ), array_keys($repositoryClasses)); + ], array_keys($repositoryClasses)); } /** @@ -65,13 +65,13 @@ class RepositoryFactoryTest extends TestCase public function generateRepositoryNameProvider(): array { - return array( - array(0, array(), array(), '0'), - array(0, array(), array(array()), '02'), - array(0, array('url' => 'https://example.org'), array(), 'example.org'), - array(0, array('url' => 'https://example.org'), array('example.org' => array()), 'example.org2'), - array('example.org', array('url' => 'https://example.org/repository'), array(), 'example.org'), - array('example.org', array('url' => 'https://example.org/repository'), array('example.org' => array()), 'example.org2'), - ); + return [ + [0, [], [], '0'], + [0, [], [[]], '02'], + [0, ['url' => 'https://example.org'], [], 'example.org'], + [0, ['url' => 'https://example.org'], ['example.org' => []], 'example.org2'], + ['example.org', ['url' => 'https://example.org/repository'], [], 'example.org'], + ['example.org', ['url' => 'https://example.org/repository'], ['example.org' => []], 'example.org2'], + ]; } } diff --git a/tests/Composer/Test/Repository/RepositoryManagerTest.php b/tests/Composer/Test/Repository/RepositoryManagerTest.php index 898540775..7722469b0 100644 --- a/tests/Composer/Test/Repository/RepositoryManagerTest.php +++ b/tests/Composer/Test/Repository/RepositoryManagerTest.php @@ -50,13 +50,12 @@ class RepositoryManagerTest extends TestCase $rm->addRepository($repository1); $rm->prependRepository($repository2); - $this->assertEquals(array($repository2, $repository1), $rm->getRepositories()); + $this->assertEquals([$repository2, $repository1], $rm->getRepositories()); } /** * @dataProvider provideRepoCreationTestCases * - * @param string $type * @param array $options * @param class-string<\Throwable>|null $exception */ @@ -86,25 +85,25 @@ class RepositoryManagerTest extends TestCase $rm->setRepositoryClass('hg', 'Composer\Repository\VcsRepository'); $rm->setRepositoryClass('artifact', 'Composer\Repository\ArtifactRepository'); - $rm->createRepository('composer', array('url' => 'http://example.org')); + $rm->createRepository('composer', ['url' => 'http://example.org']); $this->assertInstanceOf('Composer\Repository\RepositoryInterface', $rm->createRepository($type, $options)); } public function provideRepoCreationTestCases(): array { - $cases = array( - array('composer', array('url' => 'http://example.org')), - array('vcs', array('url' => 'http://github.com/foo/bar')), - array('git', array('url' => 'http://github.com/foo/bar')), - array('git', array('url' => 'git@example.org:foo/bar.git')), - array('svn', array('url' => 'svn://example.org/foo/bar')), - array('pear', array('url' => 'http://pear.example.org/foo'), 'InvalidArgumentException'), - array('package', array('package' => array())), - array('invalid', array(), 'InvalidArgumentException'), - ); + $cases = [ + ['composer', ['url' => 'http://example.org']], + ['vcs', ['url' => 'http://github.com/foo/bar']], + ['git', ['url' => 'http://github.com/foo/bar']], + ['git', ['url' => 'git@example.org:foo/bar.git']], + ['svn', ['url' => 'svn://example.org/foo/bar']], + ['pear', ['url' => 'http://pear.example.org/foo'], 'InvalidArgumentException'], + ['package', ['package' => []]], + ['invalid', [], 'InvalidArgumentException'], + ]; if (class_exists('ZipArchive')) { - $cases[] = array('artifact', array('url' => '/path/to/zips')); + $cases[] = ['artifact', ['url' => '/path/to/zips']]; } return $cases; @@ -114,14 +113,14 @@ class RepositoryManagerTest extends TestCase { $rm = new RepositoryManager( $this->getMockBuilder('Composer\IO\IOInterface')->getMock(), - $config = $this->getMockBuilder('Composer\Config')->onlyMethods(array('get'))->getMock(), + $config = $this->getMockBuilder('Composer\Config')->onlyMethods(['get'])->getMock(), $this->getMockBuilder('Composer\Util\HttpDownloader')->disableOriginalConstructor()->getMock(), $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher')->disableOriginalConstructor()->getMock() ); $rm->setRepositoryClass('path', 'Composer\Repository\PathRepository'); /** @var \Composer\Repository\FilterRepository $repo */ - $repo = $rm->createRepository('path', array('type' => 'path', 'url' => __DIR__, 'only' => array('foo/bar'))); + $repo = $rm->createRepository('path', ['type' => 'path', 'url' => __DIR__, 'only' => ['foo/bar']]); $this->assertInstanceOf('Composer\Repository\FilterRepository', $repo); $this->assertInstanceOf('Composer\Repository\PathRepository', $repo->getRepository()); diff --git a/tests/Composer/Test/Repository/RepositoryUtilsTest.php b/tests/Composer/Test/Repository/RepositoryUtilsTest.php index 035320650..c57b4fa04 100644 --- a/tests/Composer/Test/Repository/RepositoryUtilsTest.php +++ b/tests/Composer/Test/Repository/RepositoryUtilsTest.php @@ -22,7 +22,6 @@ class RepositoryUtilsTest extends TestCase /** * @dataProvider provideFilterRequireTests * @param PackageInterface[] $pkgs - * @param PackageInterface $requirer * @param string[] $expected */ public function testFilterRequiredPackages(array $pkgs, PackageInterface $requirer, array $expected): void diff --git a/tests/Composer/Test/Repository/Vcs/FossilDriverTest.php b/tests/Composer/Test/Repository/Vcs/FossilDriverTest.php index ba15e3090..06ec3d177 100644 --- a/tests/Composer/Test/Repository/Vcs/FossilDriverTest.php +++ b/tests/Composer/Test/Repository/Vcs/FossilDriverTest.php @@ -32,11 +32,11 @@ class FossilDriverTest extends TestCase { $this->home = self::getUniqueTmpDirectory(); $this->config = new Config(); - $this->config->merge(array( - 'config' => array( + $this->config->merge([ + 'config' => [ 'home' => $this->home, - ), - )); + ], + ]); } protected function tearDown(): void @@ -48,18 +48,15 @@ class FossilDriverTest extends TestCase public static function supportProvider(): array { - return array( - array('http://fossil.kd2.org/kd2fw/', true), - array('https://chiselapp.com/user/rkeene/repository/flint/index', true), - array('ssh://fossil.kd2.org/kd2fw.fossil', true), - ); + return [ + ['http://fossil.kd2.org/kd2fw/', true], + ['https://chiselapp.com/user/rkeene/repository/flint/index', true], + ['ssh://fossil.kd2.org/kd2fw.fossil', true], + ]; } /** * @dataProvider supportProvider - * - * @param string $url - * @param bool $assertion */ public function testSupport(string $url, bool $assertion): void { diff --git a/tests/Composer/Test/Repository/Vcs/GitBitbucketDriverTest.php b/tests/Composer/Test/Repository/Vcs/GitBitbucketDriverTest.php index ff55e90a0..3a35cd28e 100644 --- a/tests/Composer/Test/Repository/Vcs/GitBitbucketDriverTest.php +++ b/tests/Composer/Test/Repository/Vcs/GitBitbucketDriverTest.php @@ -40,11 +40,11 @@ class GitBitbucketDriverTest extends TestCase $this->home = self::getUniqueTmpDirectory(); $this->config = new Config(); - $this->config->merge(array( - 'config' => array( + $this->config->merge([ + 'config' => [ 'home' => $this->home, - ), - )); + ], + ]); $this->httpDownloader = $this->getMockBuilder('Composer\Util\HttpDownloader') ->disableOriginalConstructor() @@ -60,7 +60,6 @@ class GitBitbucketDriverTest extends TestCase /** * @param array $repoConfig - * @return GitBitbucketDriver * * @phpstan-param array{url: string}&array $repoConfig */ @@ -88,53 +87,53 @@ class GitBitbucketDriverTest extends TestCase ->method('get') ->with( $url = 'https://api.bitbucket.org/2.0/repositories/user/repo?fields=-project%2C-owner', - array() + [] ) ->willReturn( - new Response(array('url' => $url), 200, array(), '{"scm":"hg","website":"","has_wiki":false,"name":"repo","links":{"branches":{"href":"https:\/\/api.bitbucket.org\/2.0\/repositories\/user\/repo\/refs\/branches"},"tags":{"href":"https:\/\/api.bitbucket.org\/2.0\/repositories\/user\/repo\/refs\/tags"},"clone":[{"href":"https:\/\/user@bitbucket.org\/user\/repo","name":"https"},{"href":"ssh:\/\/hg@bitbucket.org\/user\/repo","name":"ssh"}],"html":{"href":"https:\/\/bitbucket.org\/user\/repo"}},"language":"php","created_on":"2015-02-18T16:22:24.688+00:00","updated_on":"2016-05-17T13:20:21.993+00:00","is_private":true,"has_issues":false}') + new Response(['url' => $url], 200, [], '{"scm":"hg","website":"","has_wiki":false,"name":"repo","links":{"branches":{"href":"https:\/\/api.bitbucket.org\/2.0\/repositories\/user\/repo\/refs\/branches"},"tags":{"href":"https:\/\/api.bitbucket.org\/2.0\/repositories\/user\/repo\/refs\/tags"},"clone":[{"href":"https:\/\/user@bitbucket.org\/user\/repo","name":"https"},{"href":"ssh:\/\/hg@bitbucket.org\/user\/repo","name":"ssh"}],"html":{"href":"https:\/\/bitbucket.org\/user\/repo"}},"language":"php","created_on":"2015-02-18T16:22:24.688+00:00","updated_on":"2016-05-17T13:20:21.993+00:00","is_private":true,"has_issues":false}') ); - $driver = $this->getDriver(array('url' => 'https://bitbucket.org/user/repo.git')); + $driver = $this->getDriver(['url' => 'https://bitbucket.org/user/repo.git']); $driver->getRootIdentifier(); } public function testDriver(): GitBitbucketDriver { - $driver = $this->getDriver(array('url' => 'https://bitbucket.org/user/repo.git')); + $driver = $this->getDriver(['url' => 'https://bitbucket.org/user/repo.git']); - $urls = array( + $urls = [ 'https://api.bitbucket.org/2.0/repositories/user/repo?fields=-project%2C-owner', 'https://api.bitbucket.org/2.0/repositories/user/repo/refs/tags?pagelen=100&fields=values.name%2Cvalues.target.hash%2Cnext&sort=-target.date', 'https://api.bitbucket.org/2.0/repositories/user/repo/refs/branches?pagelen=100&fields=values.name%2Cvalues.target.hash%2Cvalues.heads%2Cnext&sort=-target.date', 'https://api.bitbucket.org/2.0/repositories/user/repo/src/main/composer.json', 'https://api.bitbucket.org/2.0/repositories/user/repo/commit/main?fields=date', - ); + ]; $this->httpDownloader->expects($this->any()) ->method('get') ->withConsecutive( - array( - $urls[0], array(), - ), - array( - $urls[1], array(), - ), - array( - $urls[2], array(), - ), - array( - $urls[3], array(), - ), - array( - $urls[4], array(), - ) + [ + $urls[0], [], + ], + [ + $urls[1], [], + ], + [ + $urls[2], [], + ], + [ + $urls[3], [], + ], + [ + $urls[4], [], + ] ) ->willReturnOnConsecutiveCalls( - new Response(array('url' => $urls[0]), 200, array(), '{"mainbranch": {"name": "main"}, "scm":"git","website":"","has_wiki":false,"name":"repo","links":{"branches":{"href":"https:\/\/api.bitbucket.org\/2.0\/repositories\/user\/repo\/refs\/branches"},"tags":{"href":"https:\/\/api.bitbucket.org\/2.0\/repositories\/user\/repo\/refs\/tags"},"clone":[{"href":"https:\/\/user@bitbucket.org\/user\/repo.git","name":"https"},{"href":"ssh:\/\/git@bitbucket.org\/user\/repo.git","name":"ssh"}],"html":{"href":"https:\/\/bitbucket.org\/user\/repo"}},"language":"php","created_on":"2015-02-18T16:22:24.688+00:00","updated_on":"2016-05-17T13:20:21.993+00:00","is_private":true,"has_issues":false}'), - new Response(array('url' => $urls[1]), 200, array(), '{"values":[{"name":"1.0.1","target":{"hash":"9b78a3932143497c519e49b8241083838c8ff8a1"}},{"name":"1.0.0","target":{"hash":"d3393d514318a9267d2f8ebbf463a9aaa389f8eb"}}]}'), - new Response(array('url' => $urls[2]), 200, array(), '{"values":[{"name":"main","target":{"hash":"937992d19d72b5116c3e8c4a04f960e5fa270b22"}}]}'), - new Response(array('url' => $urls[3]), 200, array(), '{"name": "user/repo","description": "test repo","license": "GPL","authors": [{"name": "Name","email": "local@domain.tld"}],"require": {"creator/package": "^1.0"},"require-dev": {"phpunit/phpunit": "~4.8"}}'), - new Response(array('url' => $urls[4]), 200, array(), '{"date": "2016-05-17T13:19:52+00:00"}') + new Response(['url' => $urls[0]], 200, [], '{"mainbranch": {"name": "main"}, "scm":"git","website":"","has_wiki":false,"name":"repo","links":{"branches":{"href":"https:\/\/api.bitbucket.org\/2.0\/repositories\/user\/repo\/refs\/branches"},"tags":{"href":"https:\/\/api.bitbucket.org\/2.0\/repositories\/user\/repo\/refs\/tags"},"clone":[{"href":"https:\/\/user@bitbucket.org\/user\/repo.git","name":"https"},{"href":"ssh:\/\/git@bitbucket.org\/user\/repo.git","name":"ssh"}],"html":{"href":"https:\/\/bitbucket.org\/user\/repo"}},"language":"php","created_on":"2015-02-18T16:22:24.688+00:00","updated_on":"2016-05-17T13:20:21.993+00:00","is_private":true,"has_issues":false}'), + new Response(['url' => $urls[1]], 200, [], '{"values":[{"name":"1.0.1","target":{"hash":"9b78a3932143497c519e49b8241083838c8ff8a1"}},{"name":"1.0.0","target":{"hash":"d3393d514318a9267d2f8ebbf463a9aaa389f8eb"}}]}'), + new Response(['url' => $urls[2]], 200, [], '{"values":[{"name":"main","target":{"hash":"937992d19d72b5116c3e8c4a04f960e5fa270b22"}}]}'), + new Response(['url' => $urls[3]], 200, [], '{"name": "user/repo","description": "test repo","license": "GPL","authors": [{"name": "Name","email": "local@domain.tld"}],"require": {"creator/package": "^1.0"},"require-dev": {"phpunit/phpunit": "~4.8"}}'), + new Response(['url' => $urls[4]], 200, [], '{"date": "2016-05-17T13:19:52+00:00"}') ); $this->assertEquals( @@ -143,43 +142,43 @@ class GitBitbucketDriverTest extends TestCase ); $this->assertEquals( - array( + [ '1.0.1' => '9b78a3932143497c519e49b8241083838c8ff8a1', '1.0.0' => 'd3393d514318a9267d2f8ebbf463a9aaa389f8eb', - ), + ], $driver->getTags() ); $this->assertEquals( - array( + [ 'main' => '937992d19d72b5116c3e8c4a04f960e5fa270b22', - ), + ], $driver->getBranches() ); $this->assertEquals( - array( + [ 'name' => 'user/repo', 'description' => 'test repo', 'license' => 'GPL', - 'authors' => array( - array( + 'authors' => [ + [ 'name' => 'Name', 'email' => 'local@domain.tld', - ), - ), - 'require' => array( + ], + ], + 'require' => [ 'creator/package' => '^1.0', - ), - 'require-dev' => array( + ], + 'require-dev' => [ 'phpunit/phpunit' => '~4.8', - ), + ], 'time' => '2016-05-17T13:19:52+00:00', - 'support' => array( + 'support' => [ 'source' => 'https://bitbucket.org/user/repo/src/937992d19d72b5116c3e8c4a04f960e5fa270b22/?at=main', - ), + ], 'homepage' => 'https://bitbucket.org/user/repo', - ), + ], $driver->getComposerInformation('main') ); @@ -188,7 +187,6 @@ class GitBitbucketDriverTest extends TestCase /** * @depends testDriver - * @param \Composer\Repository\Vcs\VcsDriverInterface $driver */ public function testGetParams(\Composer\Repository\Vcs\VcsDriverInterface $driver): void { @@ -197,17 +195,17 @@ class GitBitbucketDriverTest extends TestCase $this->assertEquals($url, $driver->getUrl()); $this->assertEquals( - array( + [ 'type' => 'zip', 'url' => 'https://bitbucket.org/user/repo/get/reference.zip', 'reference' => 'reference', 'shasum' => '', - ), + ], $driver->getDist('reference') ); $this->assertEquals( - array('type' => 'git', 'url' => $url, 'reference' => 'reference'), + ['type' => 'git', 'url' => $url, 'reference' => 'reference'], $driver->getSource('reference') ); } @@ -216,7 +214,7 @@ class GitBitbucketDriverTest extends TestCase { $this->expectException('\InvalidArgumentException'); - $driver = $this->getDriver(array('url' => 'https://bitbucket.org/acme')); + $driver = $this->getDriver(['url' => 'https://bitbucket.org/acme']); $driver->initialize(); } diff --git a/tests/Composer/Test/Repository/Vcs/GitDriverTest.php b/tests/Composer/Test/Repository/Vcs/GitDriverTest.php index 229ef130d..5dd57dead 100644 --- a/tests/Composer/Test/Repository/Vcs/GitDriverTest.php +++ b/tests/Composer/Test/Repository/Vcs/GitDriverTest.php @@ -1,5 +1,15 @@ + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Composer\Test\Repository\Vcs; use Composer\Config; @@ -8,7 +18,6 @@ use Composer\Repository\Vcs\GitDriver; use Composer\Test\TestCase; use Composer\Util\Filesystem; use Composer\Util\Platform; -use Composer\Test\Mock\ProcessExecutorMock; class GitDriverTest extends TestCase { @@ -135,7 +144,7 @@ GIT; $process = $this->getProcessExecutorMock(); $io = $this->getMockBuilder('Composer\IO\IOInterface')->getMock(); - $driver = new GitDriver(array('url' => 'https://example.org/acme.git'), $io, $this->config, $this->getMockBuilder('Composer\Util\HttpDownloader')->disableOriginalConstructor()->getMock(), $process); + $driver = new GitDriver(['url' => 'https://example.org/acme.git'], $io, $this->config, $this->getMockBuilder('Composer\Util\HttpDownloader')->disableOriginalConstructor()->getMock(), $process); $this->setRepoDir($driver, $this->home); // Branches starting with a - character are not valid git branches names @@ -147,16 +156,16 @@ GIT; GIT; $process - ->expects(array(array( + ->expects([[ 'cmd' => 'git branch --no-color --no-abbrev -v', 'stdout' => $stdout, - ))); + ]]); $branches = $driver->getBranches(); - $this->assertSame(array( + $this->assertSame([ 'main' => '089681446ba44d6d9004350192486f2ceb4eaa06', '2.2' => '12681446ba44d6d9004350192486f2ceb4eaa06', - ), $branches); + ], $branches); } public function testFileGetContentInvalidIdentifier(): void @@ -165,7 +174,7 @@ GIT; $process = $this->getProcessExecutorMock(); $io = $this->getMockBuilder('Composer\IO\IOInterface')->getMock(); - $driver = new GitDriver(array('url' => 'https://example.org/acme.git'), $io, $this->config, $this->getMockBuilder('Composer\Util\HttpDownloader')->disableOriginalConstructor()->getMock(), $process); + $driver = new GitDriver(['url' => 'https://example.org/acme.git'], $io, $this->config, $this->getMockBuilder('Composer\Util\HttpDownloader')->disableOriginalConstructor()->getMock(), $process); $this->assertNull($driver->getFileContent('file.txt', 'h')); diff --git a/tests/Composer/Test/Repository/Vcs/GitHubDriverTest.php b/tests/Composer/Test/Repository/Vcs/GitHubDriverTest.php index d8efcc24c..707ae7e5e 100644 --- a/tests/Composer/Test/Repository/Vcs/GitHubDriverTest.php +++ b/tests/Composer/Test/Repository/Vcs/GitHubDriverTest.php @@ -13,7 +13,6 @@ namespace Composer\Test\Repository\Vcs; use Composer\Repository\Vcs\GitHubDriver; -use Composer\Test\Mock\ProcessExecutorMock; use Composer\Test\TestCase; use Composer\Util\Filesystem; use Composer\Config; @@ -30,11 +29,11 @@ class GitHubDriverTest extends TestCase { $this->home = self::getUniqueTmpDirectory(); $this->config = new Config(); - $this->config->merge(array( - 'config' => array( + $this->config->merge([ + 'config' => [ 'home' => $this->home, - ), - )); + ], + ]); } protected function tearDown(): void @@ -68,7 +67,7 @@ class GitHubDriverTest extends TestCase ); $process = $this->getProcessExecutorMock(); - $process->expects(array(), false, array('return' => 1)); + $process->expects([], false, ['return' => 1]); $io->expects($this->once()) ->method('askAndHideAnswer') @@ -84,13 +83,13 @@ class GitHubDriverTest extends TestCase $this->config->setConfigSource($configSource); $this->config->setAuthConfigSource($authConfigSource); - $repoConfig = array( + $repoConfig = [ 'url' => $repoUrl, - ); + ]; $gitHubDriver = new GitHubDriver($repoConfig, $io, $this->config, $httpDownloader, $process); $gitHubDriver->initialize(); - $this->setAttribute($gitHubDriver, 'tags', array($identifier => $sha)); + $this->setAttribute($gitHubDriver, 'tags', [$identifier => $sha]); $this->assertEquals('test_master', $gitHubDriver->getRootIdentifier()); @@ -125,14 +124,14 @@ class GitHubDriverTest extends TestCase true ); - $repoConfig = array( + $repoConfig = [ 'url' => $repoUrl, - ); + ]; $repoUrl = 'https://github.com/composer/packagist.git'; $gitHubDriver = new GitHubDriver($repoConfig, $io, $this->config, $httpDownloader, $this->getProcessExecutorMock()); $gitHubDriver->initialize(); - $this->setAttribute($gitHubDriver, 'tags', array($identifier => $sha)); + $this->setAttribute($gitHubDriver, 'tags', [$identifier => $sha]); $this->assertEquals('test_master', $gitHubDriver->getRootIdentifier()); @@ -170,14 +169,14 @@ class GitHubDriverTest extends TestCase true ); - $repoConfig = array( + $repoConfig = [ 'url' => $repoUrl, - ); + ]; $repoUrl = 'https://github.com/composer/packagist.git'; $gitHubDriver = new GitHubDriver($repoConfig, $io, $this->config, $httpDownloader, $this->getProcessExecutorMock()); $gitHubDriver->initialize(); - $this->setAttribute($gitHubDriver, 'tags', array($identifier => $sha)); + $this->setAttribute($gitHubDriver, 'tags', [$identifier => $sha]); $this->assertEquals('test_master', $gitHubDriver->getRootIdentifier()); @@ -221,13 +220,13 @@ class GitHubDriverTest extends TestCase true ); - $repoConfig = array( + $repoConfig = [ 'url' => $repoUrl, - ); + ]; $gitHubDriver = new GitHubDriver($repoConfig, $io, $this->config, $httpDownloader, $this->getProcessExecutorMock()); $gitHubDriver->initialize(); - $this->setAttribute($gitHubDriver, 'tags', array($identifier => $sha)); + $this->setAttribute($gitHubDriver, 'tags', [$identifier => $sha]); $data = $gitHubDriver->getComposerInformation($sha); @@ -262,26 +261,26 @@ class GitHubDriverTest extends TestCase $this->config->merge(['config' => ['cache-vcs-dir' => sys_get_temp_dir() . '/composer-test/cache']]); $process = $this->getProcessExecutorMock(); - $process->expects(array( - array('cmd' => 'git config github.accesstoken', 'return' => 1), + $process->expects([ + ['cmd' => 'git config github.accesstoken', 'return' => 1], 'git clone --mirror -- '.ProcessExecutor::escape($repoSshUrl).' '.ProcessExecutor::escape($this->config->get('cache-vcs-dir').'/git-github.com-composer-packagist.git/'), - array( + [ 'cmd' => 'git show-ref --tags --dereference', 'stdout' => $sha.' refs/tags/'.$identifier, - ), - array( + ], + [ 'cmd' => 'git branch --no-color --no-abbrev -v', 'stdout' => ' test_master edf93f1fccaebd8764383dc12016d0a1a9672d89 Fix test & behavior', - ), - array( + ], + [ 'cmd' => 'git branch --no-color', 'stdout' => '* test_master', - ), - ), true); + ], + ], true); - $repoConfig = array( + $repoConfig = [ 'url' => $repoUrl, - ); + ]; $gitHubDriver = new GitHubDriver($repoConfig, $io, $this->config, $httpDownloader, $process); $gitHubDriver->initialize(); @@ -306,20 +305,18 @@ class GitHubDriverTest extends TestCase /** * @dataProvider invalidUrlProvider - * @param string $url - * @return void */ - public function testInitializeInvalidRepoUrl($url): void + public function testInitializeInvalidRepoUrl(string $url): void { $this->expectException('\InvalidArgumentException'); - $repoConfig = array( + $repoConfig = [ 'url' => $url, - ); + ]; $io = $this->getMockBuilder('Composer\IO\IOInterface')->getMock(); $httpDownloader = $this->getMockBuilder('Composer\Util\HttpDownloader') - ->setConstructorArgs(array($io, $this->config)) + ->setConstructorArgs([$io, $this->config]) ->getMock(); $gitHubDriver = new GitHubDriver($repoConfig, $io, $this->config, $httpDownloader, $this->getProcessExecutorMock()); @@ -331,17 +328,15 @@ class GitHubDriverTest extends TestCase */ public function invalidUrlProvider() { - return array( - array('https://github.com/acme'), - array('https://github.com/acme/repository/releases'), - array('https://github.com/acme/repository/pulls'), - ); + return [ + ['https://github.com/acme'], + ['https://github.com/acme/repository/releases'], + ['https://github.com/acme/repository/pulls'], + ]; } /** * @dataProvider supportsProvider - * @param bool $expected - * @param string $repoUrl */ public function testSupports(bool $expected, string $repoUrl): void { @@ -355,21 +350,18 @@ class GitHubDriverTest extends TestCase */ public function supportsProvider(): array { - return array( - array(false, 'https://github.com/acme'), - array(true, 'https://github.com/acme/repository'), - array(true, 'git@github.com:acme/repository.git'), - array(false, 'https://github.com/acme/repository/releases'), - array(false, 'https://github.com/acme/repository/pulls'), - ); + return [ + [false, 'https://github.com/acme'], + [true, 'https://github.com/acme/repository'], + [true, 'git@github.com:acme/repository.git'], + [false, 'https://github.com/acme/repository/releases'], + [false, 'https://github.com/acme/repository/pulls'], + ]; } /** * @param string|object $object - * @param string $attribute * @param mixed $value - * - * @return void */ protected function setAttribute($object, string $attribute, $value): void { diff --git a/tests/Composer/Test/Repository/Vcs/GitLabDriverTest.php b/tests/Composer/Test/Repository/Vcs/GitLabDriverTest.php index c38ef1556..4f5f0d637 100644 --- a/tests/Composer/Test/Repository/Vcs/GitLabDriverTest.php +++ b/tests/Composer/Test/Repository/Vcs/GitLabDriverTest.php @@ -54,13 +54,13 @@ class GitLabDriverTest extends TestCase $this->home = self::getUniqueTmpDirectory(); $this->config = $this->getConfig([ 'home' => $this->home, - 'gitlab-domains' => array( + 'gitlab-domains' => [ 'mycompany.com/gitlab', 'gitlab.mycompany.com', 'othercompany.com/nested/gitlab', 'gitlab.com', 'gitlab.mycompany.local', - ), + ], ]); $this->io = $this->getMockBuilder('Composer\IO\IOInterface')->disableOriginalConstructor()->getMock(); @@ -77,18 +77,15 @@ class GitLabDriverTest extends TestCase public function provideInitializeUrls(): array { - return array( - array('https://gitlab.com/mygroup/myproject', 'https://gitlab.com/api/v4/projects/mygroup%2Fmyproject'), - array('http://gitlab.com/mygroup/myproject', 'http://gitlab.com/api/v4/projects/mygroup%2Fmyproject'), - array('git@gitlab.com:mygroup/myproject', 'https://gitlab.com/api/v4/projects/mygroup%2Fmyproject'), - ); + return [ + ['https://gitlab.com/mygroup/myproject', 'https://gitlab.com/api/v4/projects/mygroup%2Fmyproject'], + ['http://gitlab.com/mygroup/myproject', 'http://gitlab.com/api/v4/projects/mygroup%2Fmyproject'], + ['git@gitlab.com:mygroup/myproject', 'https://gitlab.com/api/v4/projects/mygroup%2Fmyproject'], + ]; } /** * @dataProvider provideInitializeUrls - * - * @param string $url - * @param string $apiUrl */ public function testInitialize(string $url, string $apiUrl): GitLabDriver { @@ -116,7 +113,7 @@ JSON; true ); - $driver = new GitLabDriver(array('url' => $url), $this->io, $this->config, $this->httpDownloader, $this->process); + $driver = new GitLabDriver(['url' => $url], $this->io, $this->config, $this->httpDownloader, $this->process); $driver->initialize(); $this->assertEquals($apiUrl, $driver->getApiUrl(), 'API URL is derived from the repository URL'); @@ -129,9 +126,6 @@ JSON; /** * @dataProvider provideInitializeUrls - * - * @param string $url - * @param string $apiUrl */ public function testInitializePublicProject(string $url, string $apiUrl): GitLabDriver { @@ -157,7 +151,7 @@ JSON; true ); - $driver = new GitLabDriver(array('url' => $url), $this->io, $this->config, $this->httpDownloader, $this->process); + $driver = new GitLabDriver(['url' => $url], $this->io, $this->config, $this->httpDownloader, $this->process); $driver->initialize(); $this->assertEquals($apiUrl, $driver->getApiUrl(), 'API URL is derived from the repository URL'); @@ -170,9 +164,6 @@ JSON; /** * @dataProvider provideInitializeUrls - * - * @param string $url - * @param string $apiUrl */ public function testInitializePublicProjectAsAnonymous(string $url, string $apiUrl): GitLabDriver { @@ -197,7 +188,7 @@ JSON; true ); - $driver = new GitLabDriver(array('url' => $url), $this->io, $this->config, $this->httpDownloader, $this->process); + $driver = new GitLabDriver(['url' => $url], $this->io, $this->config, $this->httpDownloader, $this->process); $driver->initialize(); $this->assertEquals($apiUrl, $driver->getApiUrl(), 'API URL is derived from the repository URL'); @@ -238,7 +229,7 @@ JSON; true ); - $driver = new GitLabDriver(array('url' => $url), $this->io, $this->config, $this->httpDownloader, $this->process); + $driver = new GitLabDriver(['url' => $url], $this->io, $this->config, $this->httpDownloader, $this->process); $driver->initialize(); $this->assertEquals($apiUrl, $driver->getApiUrl(), 'API URL is derived from the repository URL'); @@ -252,12 +243,12 @@ JSON; $driver = $this->testInitialize('https://gitlab.com/mygroup/myproject', 'https://gitlab.com/api/v4/projects/mygroup%2Fmyproject'); $reference = 'c3ebdbf9cceddb82cd2089aaef8c7b992e536363'; - $expected = array( + $expected = [ 'type' => 'zip', 'url' => 'https://gitlab.com/api/v4/projects/mygroup%2Fmyproject/repository/archive.zip?sha='.$reference, 'reference' => $reference, 'shasum' => '', - ); + ]; $this->assertEquals($expected, $driver->getDist($reference)); } @@ -267,11 +258,11 @@ JSON; $driver = $this->testInitialize('https://gitlab.com/mygroup/myproject', 'https://gitlab.com/api/v4/projects/mygroup%2Fmyproject'); $reference = 'c3ebdbf9cceddb82cd2089aaef8c7b992e536363'; - $expected = array( + $expected = [ 'type' => 'git', 'url' => 'git@gitlab.com:mygroup/myproject.git', 'reference' => $reference, - ); + ]; $this->assertEquals($expected, $driver->getSource($reference)); } @@ -281,11 +272,11 @@ JSON; $driver = $this->testInitializePublicProject('https://gitlab.com/mygroup/myproject', 'https://gitlab.com/api/v4/projects/mygroup%2Fmyproject'); $reference = 'c3ebdbf9cceddb82cd2089aaef8c7b992e536363'; - $expected = array( + $expected = [ 'type' => 'git', 'url' => 'https://gitlab.com/mygroup/myproject.git', 'reference' => $reference, - ); + ]; $this->assertEquals($expected, $driver->getSource($reference)); } @@ -322,10 +313,10 @@ JSON; ); $driver->setHttpDownloader($this->httpDownloader); - $expected = array( + $expected = [ 'v1.0.0' => '092ed2c762bbae331e3f51d4a17f67310bf99a81', 'v2.0.0' => '8e8f60b3ec86d63733db3bd6371117a758027ec6', - ); + ]; $this->assertEquals($expected, $driver->getTags()); $this->assertEquals($expected, $driver->getTags(), 'Tags are cached'); @@ -336,31 +327,31 @@ JSON; $driver = $this->testInitialize('https://gitlab.com/mygroup/myproject', 'https://gitlab.com/api/v4/projects/mygroup%2Fmyproject'); // @link http://doc.gitlab.com/ce/api/repositories.html#list-project-repository-branches - $branchData = array( - array( + $branchData = [ + [ "name" => "mymaster", - "commit" => array( + "commit" => [ "id" => "97eda36b5c1dd953a3792865c222d4e85e5f302e", "committed_date" => "2013-01-03T21:04:07.000+01:00", - ), - ), - array( + ], + ], + [ "name" => "staging", - "commit" => array( + "commit" => [ "id" => "502cffe49f136443f2059803f2e7192d1ac066cd", "committed_date" => "2013-03-09T16:35:23.000+01:00", - ), - ), - ); + ], + ], + ]; for ($i = 0; $i < 98; $i++) { - $branchData[] = array( + $branchData[] = [ "name" => "stagingdupe", - "commit" => array( + "commit" => [ "id" => "502cffe49f136443f2059803f2e7192d1ac066cd", "committed_date" => "2013-03-09T16:35:23.000+01:00", - ), - ); + ], + ]; } $branchData = JsonFile::encode($branchData); @@ -370,12 +361,12 @@ JSON; [ 'url' => 'https://gitlab.com/api/v4/projects/mygroup%2Fmyproject/repository/branches?per_page=100', 'body' => $branchData, - 'headers' => array('Link: ; rel="next", ; rel="first", ; rel="last"'), + 'headers' => ['Link: ; rel="next", ; rel="first", ; rel="last"'], ], [ 'url' => "http://gitlab.com/api/v4/projects/mygroup%2Fmyproject/repository/tags?id=mygroup%2Fmyproject&page=2&per_page=20", 'body' => $branchData, - 'headers' => array('Link: ; rel="prev", ; rel="first", ; rel="last"'), + 'headers' => ['Link: ; rel="prev", ; rel="first", ; rel="last"'], ], ], true @@ -383,11 +374,11 @@ JSON; $driver->setHttpDownloader($this->httpDownloader); - $expected = array( + $expected = [ 'mymaster' => '97eda36b5c1dd953a3792865c222d4e85e5f302e', 'staging' => '502cffe49f136443f2059803f2e7192d1ac066cd', 'stagingdupe' => '502cffe49f136443f2059803f2e7192d1ac066cd', - ); + ]; $this->assertEquals($expected, $driver->getBranches()); $this->assertEquals($expected, $driver->getBranches(), 'Branches are cached'); @@ -426,10 +417,10 @@ JSON; $driver->setHttpDownloader($this->httpDownloader); - $expected = array( + $expected = [ 'mymaster' => '97eda36b5c1dd953a3792865c222d4e85e5f302e', 'staging' => '502cffe49f136443f2059803f2e7192d1ac066cd', - ); + ]; $this->assertEquals($expected, $driver->getBranches()); $this->assertEquals($expected, $driver->getBranches(), 'Branches are cached'); @@ -438,9 +429,6 @@ JSON; /** * @group gitlabHttpPort * @dataProvider dataForTestSupports - * - * @param string $url - * @param bool $expected */ public function testSupports(string $url, bool $expected): void { @@ -449,26 +437,26 @@ JSON; public function dataForTestSupports(): array { - return array( - array('http://gitlab.com/foo/bar', true), - array('http://gitlab.mycompany.com:5443/foo/bar', true), - array('http://gitlab.com/foo/bar/', true), - array('http://gitlab.com/foo/bar/', true), - array('http://gitlab.com/foo/bar.git', true), - array('http://gitlab.com/foo/bar.git', true), - array('http://gitlab.com/foo/bar.baz.git', true), - array('https://gitlab.com/foo/bar', extension_loaded('openssl')), // Platform requirement - array('https://gitlab.mycompany.com:5443/foo/bar', extension_loaded('openssl')), // Platform requirement - array('git@gitlab.com:foo/bar.git', extension_loaded('openssl')), - array('git@example.com:foo/bar.git', false), - array('http://example.com/foo/bar', false), - array('http://mycompany.com/gitlab/mygroup/myproject', true), - array('https://mycompany.com/gitlab/mygroup/myproject', extension_loaded('openssl')), - array('http://othercompany.com/nested/gitlab/mygroup/myproject', true), - array('https://othercompany.com/nested/gitlab/mygroup/myproject', extension_loaded('openssl')), - array('http://gitlab.com/mygroup/mysubgroup/mysubsubgroup/myproject', true), - array('https://gitlab.com/mygroup/mysubgroup/mysubsubgroup/myproject', extension_loaded('openssl')), - ); + return [ + ['http://gitlab.com/foo/bar', true], + ['http://gitlab.mycompany.com:5443/foo/bar', true], + ['http://gitlab.com/foo/bar/', true], + ['http://gitlab.com/foo/bar/', true], + ['http://gitlab.com/foo/bar.git', true], + ['http://gitlab.com/foo/bar.git', true], + ['http://gitlab.com/foo/bar.baz.git', true], + ['https://gitlab.com/foo/bar', extension_loaded('openssl')], // Platform requirement + ['https://gitlab.mycompany.com:5443/foo/bar', extension_loaded('openssl')], // Platform requirement + ['git@gitlab.com:foo/bar.git', extension_loaded('openssl')], + ['git@example.com:foo/bar.git', false], + ['http://example.com/foo/bar', false], + ['http://mycompany.com/gitlab/mygroup/myproject', true], + ['https://mycompany.com/gitlab/mygroup/myproject', extension_loaded('openssl')], + ['http://othercompany.com/nested/gitlab/mygroup/myproject', true], + ['https://othercompany.com/nested/gitlab/mygroup/myproject', extension_loaded('openssl')], + ['http://gitlab.com/mygroup/mysubgroup/mysubsubgroup/myproject', true], + ['https://gitlab.com/mygroup/mysubgroup/mysubsubgroup/myproject', extension_loaded('openssl')], + ]; } public function testGitlabSubDirectory(): void @@ -497,7 +485,7 @@ JSON; true ); - $driver = new GitLabDriver(array('url' => $url), $this->io, $this->config, $this->httpDownloader, $this->process); + $driver = new GitLabDriver(['url' => $url], $this->io, $this->config, $this->httpDownloader, $this->process); $driver->initialize(); $this->assertEquals($apiUrl, $driver->getApiUrl(), 'API URL is derived from the repository URL'); @@ -529,7 +517,7 @@ JSON; true ); - $driver = new GitLabDriver(array('url' => $url), $this->io, $this->config, $this->httpDownloader, $this->process); + $driver = new GitLabDriver(['url' => $url], $this->io, $this->config, $this->httpDownloader, $this->process); $driver->initialize(); $this->assertEquals($apiUrl, $driver->getApiUrl(), 'API URL is derived from the repository URL'); @@ -561,7 +549,7 @@ JSON; true ); - $driver = new GitLabDriver(array('url' => $url), $this->io, $this->config, $this->httpDownloader, $this->process); + $driver = new GitLabDriver(['url' => $url], $this->io, $this->config, $this->httpDownloader, $this->process); $driver->initialize(); $this->assertEquals($apiUrl, $driver->getApiUrl(), 'API URL is derived from the repository URL'); @@ -569,11 +557,11 @@ JSON; public function testForwardsOptions(): void { - $options = array( - 'ssl' => array( + $options = [ + 'ssl' => [ 'verify_peer' => false, - ), - ); + ], + ]; $projectData = << 'https://gitlab.mycompany.local/mygroup/myproject', 'options' => $options), + ['url' => 'https://gitlab.mycompany.local/mygroup/myproject', 'options' => $options], $this->io, $this->config, $this->httpDownloader, @@ -632,8 +620,8 @@ JSON; ); $config = clone $this->config; - $config->merge(array('config' => array('gitlab-protocol' => 'http'))); - $driver = new GitLabDriver(array('url' => $url), $this->io, $config, $this->httpDownloader, $this->process); + $config->merge(['config' => ['gitlab-protocol' => 'http']]); + $driver = new GitLabDriver(['url' => $url], $this->io, $config, $this->httpDownloader, $this->process); $driver->initialize(); $this->assertEquals('https://gitlab.com/mygroup/myproject.git', $driver->getRepositoryUrl(), 'Repository URL matches config request for http not git'); } diff --git a/tests/Composer/Test/Repository/Vcs/HgDriverTest.php b/tests/Composer/Test/Repository/Vcs/HgDriverTest.php index 57c1677cf..6ab384872 100644 --- a/tests/Composer/Test/Repository/Vcs/HgDriverTest.php +++ b/tests/Composer/Test/Repository/Vcs/HgDriverTest.php @@ -13,7 +13,6 @@ namespace Composer\Test\Repository\Vcs; use Composer\Repository\Vcs\HgDriver; -use Composer\Test\Mock\ProcessExecutorMock; use Composer\Test\TestCase; use Composer\Util\Filesystem; use Composer\Config; @@ -32,11 +31,11 @@ class HgDriverTest extends TestCase $this->io = $this->getMockBuilder('Composer\IO\IOInterface')->getMock(); $this->home = self::getUniqueTmpDirectory(); $this->config = new Config(); - $this->config->merge(array( - 'config' => array( + $this->config->merge([ + 'config' => [ 'home' => $this->home, - ), - )); + ], + ]); } protected function tearDown(): void @@ -48,8 +47,6 @@ class HgDriverTest extends TestCase /** * @dataProvider supportsDataProvider - * - * @param string $repositoryUrl */ public function testSupports(string $repositoryUrl): void { @@ -60,20 +57,20 @@ class HgDriverTest extends TestCase public function supportsDataProvider(): array { - return array( - array('ssh://bitbucket.org/user/repo'), - array('ssh://hg@bitbucket.org/user/repo'), - array('ssh://user@bitbucket.org/user/repo'), - array('https://bitbucket.org/user/repo'), - array('https://user@bitbucket.org/user/repo'), - ); + return [ + ['ssh://bitbucket.org/user/repo'], + ['ssh://hg@bitbucket.org/user/repo'], + ['ssh://user@bitbucket.org/user/repo'], + ['https://bitbucket.org/user/repo'], + ['https://user@bitbucket.org/user/repo'], + ]; } public function testGetBranchesFilterInvalidBranchNames(): void { $process = $this->getProcessExecutorMock(); - $driver = new HgDriver(array('url' => 'https://example.org/acme.git'), $this->io, $this->config, $this->getMockBuilder('Composer\Util\HttpDownloader')->disableOriginalConstructor()->getMock(), $process); + $driver = new HgDriver(['url' => 'https://example.org/acme.git'], $this->io, $this->config, $this->getMockBuilder('Composer\Util\HttpDownloader')->disableOriginalConstructor()->getMock(), $process); $stdout = <<expects(array(array( + ->expects([[ 'cmd' => 'hg branches', 'stdout' => $stdout, - ), array( + ], [ 'cmd' => 'hg bookmarks', 'stdout' => $stdout1, - ))); + ]]); $branches = $driver->getBranches(); - $this->assertSame(array( + $this->assertSame([ 'help' => 'dbf6c8acb641', 'default' => 'dbf6c8acb640', - ), $branches); + ], $branches); } public function testFileGetContentInvalidIdentifier(): void @@ -107,7 +104,7 @@ HG_BOOKMARKS; self::expectException('\RuntimeException'); $process = $this->getProcessExecutorMock(); - $driver = new HgDriver(array('url' => 'https://example.org/acme.git'), $this->io, $this->config, $this->getMockBuilder('Composer\Util\HttpDownloader')->disableOriginalConstructor()->getMock(), $process); + $driver = new HgDriver(['url' => 'https://example.org/acme.git'], $this->io, $this->config, $this->getMockBuilder('Composer\Util\HttpDownloader')->disableOriginalConstructor()->getMock(), $process); $this->assertNull($driver->getFileContent('file.txt', 'h')); diff --git a/tests/Composer/Test/Repository/Vcs/PerforceDriverTest.php b/tests/Composer/Test/Repository/Vcs/PerforceDriverTest.php index fef713a77..b6165ebab 100644 --- a/tests/Composer/Test/Repository/Vcs/PerforceDriverTest.php +++ b/tests/Composer/Test/Repository/Vcs/PerforceDriverTest.php @@ -65,11 +65,11 @@ class PerforceDriverTest extends TestCase { $this->testPath = self::getUniqueTmpDirectory(); $this->config = $this->getTestConfig($this->testPath); - $this->repoConfig = array( + $this->repoConfig = [ 'url' => self::TEST_URL, 'depot' => self::TEST_DEPOT, 'branch' => self::TEST_BRANCH, - ); + ]; $this->io = $this->getMockIOInterface(); $this->process = $this->getProcessExecutorMock(); $this->httpDownloader = $this->getMockHttpDownloader(); @@ -86,9 +86,6 @@ class PerforceDriverTest extends TestCase $fs->removeDirectory($this->testPath); } - /** - * @return void - */ protected function overrideDriverInternalPerforce(Perforce $perforce): void { $reflectionClass = new \ReflectionClass($this->driver); @@ -97,15 +94,10 @@ class PerforceDriverTest extends TestCase $property->setValue($this->driver, $perforce); } - /** - * @param string $testPath - * - * @return Config - */ protected function getTestConfig(string $testPath): Config { $config = new Config(); - $config->merge(array('config' => array('home' => $testPath))); + $config->merge(['config' => ['home' => $testPath]]); return $config; } @@ -131,7 +123,7 @@ class PerforceDriverTest extends TestCase */ protected function getMockPerforce() { - $methods = array('p4login', 'checkStream', 'writeP4ClientSpec', 'connectClient', 'getComposerInformation', 'cleanupClientSpec'); + $methods = ['p4login', 'checkStream', 'writeP4ClientSpec', 'connectClient', 'getComposerInformation', 'cleanupClientSpec']; return $this->getMockBuilder('Composer\Util\Perforce')->disableOriginalConstructor()->getMock(); } @@ -162,7 +154,7 @@ class PerforceDriverTest extends TestCase { $identifier = 'TEST_IDENTIFIER'; $formatted_depot_path = '//' . self::TEST_DEPOT . '/' . $identifier; - $this->perforce->expects($this->any())->method('getComposerInformation')->with($this->equalTo($formatted_depot_path))->will($this->returnValue(array())); + $this->perforce->expects($this->any())->method('getComposerInformation')->with($this->equalTo($formatted_depot_path))->will($this->returnValue([])); $this->driver->initialize(); $result = $this->driver->hasComposerFile($identifier); $this->assertFalse($result); @@ -176,7 +168,7 @@ class PerforceDriverTest extends TestCase { $identifier = 'TEST_IDENTIFIER'; $formatted_depot_path = '//' . self::TEST_DEPOT . '/' . $identifier; - $this->perforce->expects($this->any())->method('getComposerInformation')->with($this->equalTo($formatted_depot_path))->will($this->returnValue(array(''))); + $this->perforce->expects($this->any())->method('getComposerInformation')->with($this->equalTo($formatted_depot_path))->will($this->returnValue([''])); $this->driver->initialize(); $result = $this->driver->hasComposerFile($identifier); $this->assertTrue($result); @@ -186,8 +178,6 @@ class PerforceDriverTest extends TestCase * Test that supports() simply return false. * * @covers \Composer\Repository\Vcs\PerforceDriver::supports - * - * @return void */ public function testSupportsReturnsFalseNoDeepCheck(): void { diff --git a/tests/Composer/Test/Repository/Vcs/SvnDriverTest.php b/tests/Composer/Test/Repository/Vcs/SvnDriverTest.php index 8edb3266c..3232f2d4e 100644 --- a/tests/Composer/Test/Repository/Vcs/SvnDriverTest.php +++ b/tests/Composer/Test/Repository/Vcs/SvnDriverTest.php @@ -33,11 +33,11 @@ class SvnDriverTest extends TestCase { $this->home = self::getUniqueTmpDirectory(); $this->config = new Config(); - $this->config->merge(array( - 'config' => array( + $this->config->merge([ + 'config' => [ 'home' => $this->home, - ), - )); + ], + ]); } protected function tearDown(): void @@ -66,19 +66,19 @@ class SvnDriverTest extends TestCase ProcessExecutor::escape('secret'), ProcessExecutor::escape('https://till:secret@corp.svn.local/repo/trunk') ); - $process->expects(array( - array('cmd' => $authedCommand, 'return' => 1, 'stderr' => $output), - array('cmd' => $authedCommand, 'return' => 1, 'stderr' => $output), - array('cmd' => $authedCommand, 'return' => 1, 'stderr' => $output), - array('cmd' => $authedCommand, 'return' => 1, 'stderr' => $output), - array('cmd' => $authedCommand, 'return' => 1, 'stderr' => $output), - array('cmd' => $authedCommand, 'return' => 1, 'stderr' => $output), - array('cmd' => 'svn --version', 'return' => 0, 'stdout' => '1.2.3'), - ), true); + $process->expects([ + ['cmd' => $authedCommand, 'return' => 1, 'stderr' => $output], + ['cmd' => $authedCommand, 'return' => 1, 'stderr' => $output], + ['cmd' => $authedCommand, 'return' => 1, 'stderr' => $output], + ['cmd' => $authedCommand, 'return' => 1, 'stderr' => $output], + ['cmd' => $authedCommand, 'return' => 1, 'stderr' => $output], + ['cmd' => $authedCommand, 'return' => 1, 'stderr' => $output], + ['cmd' => 'svn --version', 'return' => 0, 'stdout' => '1.2.3'], + ], true); - $repoConfig = array( + $repoConfig = [ 'url' => 'https://till:secret@corp.svn.local/repo', - ); + ]; $svn = new SvnDriver($repoConfig, $console, $this->config, $httpDownloader, $process); $svn->initialize(); @@ -86,19 +86,16 @@ class SvnDriverTest extends TestCase public static function supportProvider(): array { - return array( - array('http://svn.apache.org', true), - array('https://svn.sf.net', true), - array('svn://example.org', true), - array('svn+ssh://example.org', true), - ); + return [ + ['http://svn.apache.org', true], + ['https://svn.sf.net', true], + ['svn://example.org', true], + ['svn+ssh://example.org', true], + ]; } /** * @dataProvider supportProvider - * - * @param string $url - * @param bool $assertion */ public function testSupport(string $url, bool $assertion): void { diff --git a/tests/Composer/Test/Repository/VcsRepositoryTest.php b/tests/Composer/Test/Repository/VcsRepositoryTest.php index 71a40e42c..dc219371c 100644 --- a/tests/Composer/Test/Repository/VcsRepositoryTest.php +++ b/tests/Composer/Test/Repository/VcsRepositoryTest.php @@ -40,9 +40,6 @@ class VcsRepositoryTest extends TestCase */ private $skipped = null; - /** - * @return void - */ protected function initialize(): void { $locator = new ExecutableFinder(); @@ -64,7 +61,7 @@ class VcsRepositoryTest extends TestCase // init $process = new ProcessExecutor; - $exec = function ($command) use ($process): void { + $exec = static function ($command) use ($process): void { $cwd = Platform::getCwd(); if ($process->execute($command, $output, $cwd) !== 0) { throw new \RuntimeException('Failed to execute '.$command.': '.$process->getErrorOutput()); @@ -85,7 +82,7 @@ class VcsRepositoryTest extends TestCase $exec('git branch oldbranch'); // add composed tag & master branch - $composer = array('name' => 'a/b'); + $composer = ['name' => 'a/b']; file_put_contents('composer.json', json_encode($composer)); $exec('git add composer.json'); $exec('git commit -m addcomposer'); @@ -150,7 +147,7 @@ class VcsRepositoryTest extends TestCase public function testLoadVersions(): void { - $expected = array( + $expected = [ '0.6.0' => true, '1.0.0' => true, '1.0.x-dev' => true, @@ -159,16 +156,16 @@ class VcsRepositoryTest extends TestCase 'dev-feature/a-1.0-B' => true, 'dev-master' => true, '9999999-dev' => true, // alias of dev-master - ); + ]; $config = new Config(); - $config->merge(array( - 'config' => array( + $config->merge([ + 'config' => [ 'home' => self::$composerHome, - ), - )); + ], + ]); $httpDownloader = $this->getMockBuilder('Composer\Util\HttpDownloader')->disableOriginalConstructor()->getMock(); - $repo = new VcsRepository(array('url' => self::$gitRepo, 'type' => 'vcs'), new NullIO, $config, $httpDownloader); + $repo = new VcsRepository(['url' => self::$gitRepo, 'type' => 'vcs'], new NullIO, $config, $httpDownloader); $packages = $repo->getPackages(); $dumper = new ArrayDumper(); diff --git a/tests/Composer/Test/Script/EventTest.php b/tests/Composer/Test/Script/EventTest.php index 102d6e5f5..c085ad110 100644 --- a/tests/Composer/Test/Script/EventTest.php +++ b/tests/Composer/Test/Script/EventTest.php @@ -68,9 +68,6 @@ class EventTest extends TestCase ); } - /** - * @return Composer - */ private function createComposerInstance(): Composer { $composer = new Composer; diff --git a/tests/Composer/Test/TestCase.php b/tests/Composer/Test/TestCase.php index 567a72596..0b2121114 100644 --- a/tests/Composer/Test/TestCase.php +++ b/tests/Composer/Test/TestCase.php @@ -49,7 +49,7 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase /** * @var array */ - private static $executableCache = array(); + private static $executableCache = []; /** * @var list @@ -88,9 +88,6 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase } } - /** - * @return string - */ public static function getUniqueTmpDirectory(): string { $attempts = 5; @@ -158,7 +155,9 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase { mkdir('vendor/composer', 0777, true); $repo = new InstalledFilesystemRepository(new JsonFile('vendor/composer/installed.json')); - $repo->setDevPackageNames(array_map(function (PackageInterface $pkg) { return $pkg->getPrettyName(); }, $devPackages)); + $repo->setDevPackageNames(array_map(static function (PackageInterface $pkg) { + return $pkg->getPrettyName(); + }, $devPackages)); foreach ($packages as $pkg) { $repo->addPackage($pkg); mkdir('vendor/'.$pkg->getName(), 0777, true); @@ -195,9 +194,6 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase return new ApplicationTester($application); } - /** - * @return VersionParser - */ protected static function getVersionParser(): VersionParser { if (!self::$parser) { @@ -209,8 +205,6 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase /** * @param Constraint::STR_OP_* $operator - * @param string $version - * @return Constraint */ protected function getVersionConstraint($operator, string $version): Constraint { @@ -228,8 +222,6 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase * @template PackageClass of CompletePackage|CompleteAliasPackage * * @param string $class FQCN to be instantiated - * @param string $name - * @param string $version * * @return CompletePackage|CompleteAliasPackage|RootPackage|RootAliasPackage * @@ -251,7 +243,6 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase } /** - * @param string $version * @return ($package is RootPackage ? RootAliasPackage : ($package is CompletePackage ? CompleteAliasPackage : AliasPackage)) */ protected function getAliasPackage(Package $package, string $version): AliasPackage @@ -270,7 +261,6 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase /** * @param array> $config - * @return void */ protected function configureLinks(PackageInterface $package, array $config): void { @@ -302,10 +292,6 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase return $config; } - /** - * @param string $directory - * @return void - */ protected static function ensureDirectoryExistsAndClear(string $directory): void { $fs = new Filesystem(); @@ -322,7 +308,6 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase * * @param string $executableName The name of the binary to test. * - * @return void * * @throws \PHPUnit\Framework\SkippedTestError */ @@ -341,14 +326,13 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase /** * Transforms an escaped non-Windows command to match Windows escaping. * - * @param string $cmd * * @return string The transformed command */ protected function getCmd(string $cmd): string { if (Platform::isWindows()) { - $cmd = Preg::replaceCallback("/('[^']*')/", function ($m) { + $cmd = Preg::replaceCallback("/('[^']*')/", static function ($m) { // Double-quotes are used only when needed $char = (strpbrk($m[1], " \t^&|<>()") !== false || $m[1] === "''") ? '"' : ''; @@ -359,7 +343,7 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase return $cmd; } - protected function getHttpDownloaderMock(IOInterface $io = null, Config $config = null): HttpDownloaderMock + protected function getHttpDownloaderMock(?IOInterface $io = null, ?Config $config = null): HttpDownloaderMock { $this->httpDownloaderMocks[] = $mock = new HttpDownloaderMock($io, $config); diff --git a/tests/Composer/Test/Util/AuthHelperTest.php b/tests/Composer/Test/Util/AuthHelperTest.php index f80ae65ea..a23e985a8 100644 --- a/tests/Composer/Test/Util/AuthHelperTest.php +++ b/tests/Composer/Test/Util/AuthHelperTest.php @@ -12,7 +12,6 @@ namespace Composer\Test\Util; -use Composer\Downloader\TransportException; use Composer\IO\IOInterface; use Composer\Test\TestCase; use Composer\Util\AuthHelper; @@ -46,10 +45,10 @@ class AuthHelperTest extends TestCase public function testAddAuthenticationHeaderWithoutAuthCredentials(): void { - $headers = array( + $headers = [ 'Accept-Encoding: gzip', 'Connection: close', - ); + ]; $origin = 'http://example.org'; $url = 'file://' . __FILE__; @@ -66,20 +65,20 @@ class AuthHelperTest extends TestCase public function testAddAuthenticationHeaderWithBearerPassword(): void { - $headers = array( + $headers = [ 'Accept-Encoding: gzip', 'Connection: close', - ); + ]; $origin = 'http://example.org'; $url = 'file://' . __FILE__; - $auth = array( + $auth = [ 'username' => 'my_username', 'password' => 'bearer', - ); + ]; $this->expectsAuthentication($origin, $auth); - $expectedHeaders = array_merge($headers, array('Authorization: Bearer ' . $auth['username'])); + $expectedHeaders = array_merge($headers, ['Authorization: Bearer ' . $auth['username']]); $this->assertSame( $expectedHeaders, @@ -89,16 +88,16 @@ class AuthHelperTest extends TestCase public function testAddAuthenticationHeaderWithGithubToken(): void { - $headers = array( + $headers = [ 'Accept-Encoding: gzip', 'Connection: close', - ); + ]; $origin = 'github.com'; $url = 'https://api.github.com/'; - $auth = array( + $auth = [ 'username' => 'my_username', 'password' => 'x-oauth-basic', - ); + ]; $this->expectsAuthentication($origin, $auth); @@ -106,7 +105,7 @@ class AuthHelperTest extends TestCase ->method('writeError') ->with('Using GitHub token authentication', true, IOInterface::DEBUG); - $expectedHeaders = array_merge($headers, array('Authorization: token ' . $auth['username'])); + $expectedHeaders = array_merge($headers, ['Authorization: token ' . $auth['username']]); $this->assertSame( $expectedHeaders, @@ -116,29 +115,29 @@ class AuthHelperTest extends TestCase public function testAddAuthenticationHeaderWithGitlabOathToken(): void { - $headers = array( + $headers = [ 'Accept-Encoding: gzip', 'Connection: close', - ); + ]; $origin = 'gitlab.com'; $url = 'https://api.gitlab.com/'; - $auth = array( + $auth = [ 'username' => 'my_username', 'password' => 'oauth2', - ); + ]; $this->expectsAuthentication($origin, $auth); $this->config->expects($this->once()) ->method('get') ->with('gitlab-domains') - ->willReturn(array($origin)); + ->willReturn([$origin]); $this->io->expects($this->once()) ->method('writeError') ->with('Using GitLab OAuth token authentication', true, IOInterface::DEBUG); - $expectedHeaders = array_merge($headers, array('Authorization: Bearer ' . $auth['username'])); + $expectedHeaders = array_merge($headers, ['Authorization: Bearer ' . $auth['username']]); $this->assertSame( $expectedHeaders, @@ -148,42 +147,40 @@ class AuthHelperTest extends TestCase public function gitlabPrivateTokenProvider(): array { - return array( - array('private-token'), - array('gitlab-ci-token'), - ); + return [ + ['private-token'], + ['gitlab-ci-token'], + ]; } /** * @dataProvider gitlabPrivateTokenProvider - * - * @param string $password */ public function testAddAuthenticationHeaderWithGitlabPrivateToken(string $password): void { - $headers = array( + $headers = [ 'Accept-Encoding: gzip', 'Connection: close', - ); + ]; $origin = 'gitlab.com'; $url = 'https://api.gitlab.com/'; - $auth = array( + $auth = [ 'username' => 'my_username', 'password' => $password, - ); + ]; $this->expectsAuthentication($origin, $auth); $this->config->expects($this->once()) ->method('get') ->with('gitlab-domains') - ->willReturn(array($origin)); + ->willReturn([$origin]); $this->io->expects($this->once()) ->method('writeError') ->with('Using GitLab private token authentication', true, IOInterface::DEBUG); - $expectedHeaders = array_merge($headers, array('PRIVATE-TOKEN: ' . $auth['username'])); + $expectedHeaders = array_merge($headers, ['PRIVATE-TOKEN: ' . $auth['username']]); $this->assertSame( $expectedHeaders, @@ -193,29 +190,29 @@ class AuthHelperTest extends TestCase public function testAddAuthenticationHeaderWithBitbucketOathToken(): void { - $headers = array( + $headers = [ 'Accept-Encoding: gzip', 'Connection: close', - ); + ]; $origin = 'bitbucket.org'; $url = 'https://bitbucket.org/site/oauth2/authorize'; - $auth = array( + $auth = [ 'username' => 'x-token-auth', 'password' => 'my_password', - ); + ]; $this->expectsAuthentication($origin, $auth); $this->config->expects($this->once()) ->method('get') ->with('gitlab-domains') - ->willReturn(array()); + ->willReturn([]); $this->io->expects($this->once()) ->method('writeError') ->with('Using Bitbucket OAuth token authentication', true, IOInterface::DEBUG); - $expectedHeaders = array_merge($headers, array('Authorization: Bearer ' . $auth['password'])); + $expectedHeaders = array_merge($headers, ['Authorization: Bearer ' . $auth['password']]); $this->assertSame( $expectedHeaders, @@ -225,35 +222,33 @@ class AuthHelperTest extends TestCase public function bitbucketPublicUrlProvider(): array { - return array( - array('https://bitbucket.org/user/repo/downloads/whatever'), - array('https://bbuseruploads.s3.amazonaws.com/9421ee72-638e-43a9-82ea-39cfaae2bfaa/downloads/b87c59d9-54f3-4922-b711-d89059ec3bcf'), - ); + return [ + ['https://bitbucket.org/user/repo/downloads/whatever'], + ['https://bbuseruploads.s3.amazonaws.com/9421ee72-638e-43a9-82ea-39cfaae2bfaa/downloads/b87c59d9-54f3-4922-b711-d89059ec3bcf'], + ]; } /** * @dataProvider bitbucketPublicUrlProvider - * - * @param string $url */ public function testAddAuthenticationHeaderWithBitbucketPublicUrl(string $url): void { - $headers = array( + $headers = [ 'Accept-Encoding: gzip', 'Connection: close', - ); + ]; $origin = 'bitbucket.org'; - $auth = array( + $auth = [ 'username' => 'x-token-auth', 'password' => 'my_password', - ); + ]; $this->expectsAuthentication($origin, $auth); $this->config->expects($this->once()) ->method('get') ->with('gitlab-domains') - ->willReturn(array()); + ->willReturn([]); $this->assertSame( $headers, @@ -263,56 +258,54 @@ class AuthHelperTest extends TestCase public function basicHttpAuthenticationProvider(): array { - return array( - array( + return [ + [ Bitbucket::OAUTH2_ACCESS_TOKEN_URL, 'bitbucket.org', - array( + [ 'username' => 'x-token-auth', 'password' => 'my_password', - ), - ), - array( + ], + ], + [ 'https://some-api.url.com', 'some-api.url.com', - array( + [ 'username' => 'my_username', 'password' => 'my_password', - ), - ), - array( + ], + ], + [ 'https://gitlab.com', 'gitlab.com', - array( + [ 'username' => 'my_username', 'password' => 'my_password', - ), - ), - ); + ], + ], + ]; } /** * @dataProvider basicHttpAuthenticationProvider * - * @param string $url - * @param string $origin * @param array $auth * * @phpstan-param array{username: string|null, password: string|null} $auth */ public function testAddAuthenticationHeaderWithBasicHttpAuthentication(string $url, string $origin, array $auth): void { - $headers = array( + $headers = [ 'Accept-Encoding: gzip', 'Connection: close', - ); + ]; $this->expectsAuthentication($origin, $auth); $this->config->expects($this->once()) ->method('get') ->with('gitlab-domains') - ->willReturn(array($origin)); + ->willReturn([$origin]); $this->io->expects($this->once()) ->method('writeError') @@ -324,7 +317,7 @@ class AuthHelperTest extends TestCase $expectedHeaders = array_merge( $headers, - array('Authorization: Basic ' . base64_encode($auth['username'] . ':' . $auth['password'])) + ['Authorization: Basic ' . base64_encode($auth['username'] . ':' . $auth['password'])] ); $this->assertSame( @@ -335,8 +328,6 @@ class AuthHelperTest extends TestCase /** * @dataProvider bitbucketPublicUrlProvider - * - * @param string $url */ public function testIsPublicBitBucketDownloadWithBitbucketPublicUrl(string $url): void { @@ -356,10 +347,10 @@ class AuthHelperTest extends TestCase { $origin = 'github.com'; $storeAuth = true; - $auth = array( + $auth = [ 'username' => 'my_username', 'password' => 'my_password', - ); + ]; /** @var \Composer\Config\ConfigSourceInterface&\PHPUnit\Framework\MockObject\MockObject $configSource */ $configSource = $this @@ -387,10 +378,10 @@ class AuthHelperTest extends TestCase { $origin = 'github.com'; $storeAuth = 'prompt'; - $auth = array( + $auth = [ 'username' => 'my_username', 'password' => 'my_password', - ); + ]; $answer = 'y'; $configSourceName = 'https://api.gitlab.com/source'; @@ -416,7 +407,7 @@ class AuthHelperTest extends TestCase null, 'y' ) - ->willReturnCallback(function ($question, $validator, $attempts, $default) use ($answer): string { + ->willReturnCallback(static function ($question, $validator, $attempts, $default) use ($answer): string { $validator($answer); return $answer; @@ -463,7 +454,7 @@ class AuthHelperTest extends TestCase null, 'y' ) - ->willReturnCallback(function ($question, $validator, $attempts, $default) use ($answer): string { + ->willReturnCallback(static function ($question, $validator, $attempts, $default) use ($answer): string { $validator($answer); return $answer; @@ -503,7 +494,7 @@ class AuthHelperTest extends TestCase null, 'y' ) - ->willReturnCallback(function ($question, $validator, $attempts, $default) use ($answer): string { + ->willReturnCallback(static function ($question, $validator, $attempts, $default) use ($answer): string { $validator($answer); return $answer; @@ -526,10 +517,10 @@ class AuthHelperTest extends TestCase $this->io ->method('getAuthentication') ->with($origin) - ->willReturn(array( + ->willReturn([ 'username' => 'gitlab-user', 'password' => 'gitlab-password', - )); + ]); $this->io ->expects($this->once()) @@ -538,20 +529,18 @@ class AuthHelperTest extends TestCase $this->config ->method('get') - ->willReturnMap(array( - array('github-domains', 0, array()), - array('gitlab-domains', 0, array('gitlab.com')), - array('gitlab-token', 0, array('gitlab.com' => array('username' => 'gitlab-user', 'token' => 'gitlab-password'))), - )); + ->willReturnMap([ + ['github-domains', 0, []], + ['gitlab-domains', 0, ['gitlab.com']], + ['gitlab-token', 0, ['gitlab.com' => ['username' => 'gitlab-user', 'token' => 'gitlab-password']]], + ]); $this->authHelper->promptAuthIfNeeded('https://gitlab.com/acme/archive.zip', $origin, 404, 'GitLab requires authentication and it was not provided'); } /** - * @param string $origin * @param array $auth * - * @return void * * @phpstan-param array{username: string|null, password: string|null} $auth */ diff --git a/tests/Composer/Test/Util/BitbucketTest.php b/tests/Composer/Test/Util/BitbucketTest.php index 9a1b39cf6..bd380b87b 100644 --- a/tests/Composer/Test/Util/BitbucketTest.php +++ b/tests/Composer/Test/Util/BitbucketTest.php @@ -78,19 +78,19 @@ class BitbucketTest extends TestCase ->method('get') ->with( Bitbucket::OAUTH2_ACCESS_TOKEN_URL, - array( + [ 'retry-auth-failure' => false, - 'http' => array( + 'http' => [ 'method' => 'POST', 'content' => 'grant_type=client_credentials', - ), - ) + ], + ] ) ->willReturn( new Response( - array('url' => Bitbucket::OAUTH2_ACCESS_TOKEN_URL), + ['url' => Bitbucket::OAUTH2_ACCESS_TOKEN_URL], 200, - array(), + [], sprintf( '{"access_token": "%s", "scopes": "repository", "expires_in": 3600, "refresh_token": "refreshtoken", "token_type": "bearer"}', $this->token @@ -117,14 +117,14 @@ class BitbucketTest extends TestCase ->method('get') ->with('bitbucket-oauth') ->willReturn( - array( - $this->origin => array( + [ + $this->origin => [ 'access-token' => $this->token, 'access-token-expiration' => $this->time + 1800, 'consumer-key' => $this->consumer_key, 'consumer-secret' => $this->consumer_secret, - ), - ) + ], + ] ); $this->assertEquals( @@ -141,14 +141,14 @@ class BitbucketTest extends TestCase ->method('get') ->with('bitbucket-oauth') ->willReturn( - array( - $this->origin => array( + [ + $this->origin => [ 'access-token' => 'randomExpiredToken', 'access-token-expiration' => $this->time - 400, 'consumer-key' => $this->consumer_key, 'consumer-secret' => $this->consumer_secret, - ), - ) + ], + ] ); $this->io->expects($this->once()) @@ -159,19 +159,19 @@ class BitbucketTest extends TestCase ->method('get') ->with( Bitbucket::OAUTH2_ACCESS_TOKEN_URL, - array( + [ 'retry-auth-failure' => false, - 'http' => array( + 'http' => [ 'method' => 'POST', 'content' => 'grant_type=client_credentials', - ), - ) + ], + ] ) ->willReturn( new Response( - array('url' => Bitbucket::OAUTH2_ACCESS_TOKEN_URL), + ['url' => Bitbucket::OAUTH2_ACCESS_TOKEN_URL], 200, - array(), + [], sprintf( '{"access_token": "%s", "scopes": "repository", "expires_in": 3600, "refresh_token": "refreshtoken", "token_type": "bearer"}', $this->token @@ -196,24 +196,24 @@ class BitbucketTest extends TestCase $this->io->expects($this->any()) ->method('writeError') ->withConsecutive( - array('Invalid OAuth consumer provided.'), - array('This can have three reasons:'), - array('1. You are authenticating with a bitbucket username/password combination'), - array('2. You are using an OAuth consumer, but didn\'t configure a (dummy) callback url'), - array('3. You are using an OAuth consumer, but didn\'t configure it as private consumer') + ['Invalid OAuth consumer provided.'], + ['This can have three reasons:'], + ['1. You are authenticating with a bitbucket username/password combination'], + ['2. You are using an OAuth consumer, but didn\'t configure a (dummy) callback url'], + ['3. You are using an OAuth consumer, but didn\'t configure it as private consumer'] ); $this->httpDownloader->expects($this->once()) ->method('get') ->with( Bitbucket::OAUTH2_ACCESS_TOKEN_URL, - array( + [ 'retry-auth-failure' => false, - 'http' => array( + 'http' => [ 'method' => 'POST', 'content' => 'grant_type=client_credentials', - ), - ) + ], + ] ) ->willThrowException( new \Composer\Downloader\TransportException( @@ -247,21 +247,21 @@ class BitbucketTest extends TestCase $this->io->expects($this->any()) ->method('writeError') ->withConsecutive( - array('Invalid OAuth consumer provided.'), - array('You can also add it manually later by using "composer config --global --auth bitbucket-oauth.bitbucket.org "') + ['Invalid OAuth consumer provided.'], + ['You can also add it manually later by using "composer config --global --auth bitbucket-oauth.bitbucket.org "'] ); $this->httpDownloader->expects($this->once()) ->method('get') ->with( Bitbucket::OAUTH2_ACCESS_TOKEN_URL, - array( + [ 'retry-auth-failure' => false, - 'http' => array( + 'http' => [ 'method' => 'POST', 'content' => 'grant_type=client_credentials', - ), - ) + ], + ] ) ->willThrowException(new \Composer\Downloader\TransportException('HTTP/1.1 401 UNAUTHORIZED', 401)); @@ -285,13 +285,13 @@ class BitbucketTest extends TestCase ->method('get') ->with( Bitbucket::OAUTH2_ACCESS_TOKEN_URL, - array( + [ 'retry-auth-failure' => false, - 'http' => array( + 'http' => [ 'method' => 'POST', 'content' => 'grant_type=client_credentials', - ), - ) + ], + ] ) ->willThrowException($exception); @@ -309,8 +309,8 @@ class BitbucketTest extends TestCase $this->io->expects($this->exactly(2)) ->method('askAndHideAnswer') ->withConsecutive( - array('Consumer Key (hidden): '), - array('Consumer Secret (hidden): ') + ['Consumer Key (hidden): '], + ['Consumer Secret (hidden): '] ) ->willReturnOnConsecutiveCalls($this->consumer_key, $this->consumer_secret); @@ -323,9 +323,9 @@ class BitbucketTest extends TestCase ) ->willReturn( new Response( - array('url' => $url), + ['url' => $url], 200, - array(), + [], sprintf( '{"access_token": "%s", "scopes": "repository", "expires_in": 3600, "refresh_token": "refresh_token", "token_type": "bearer"}', $this->token @@ -364,8 +364,8 @@ class BitbucketTest extends TestCase $this->io->expects($this->exactly(2)) ->method('askAndHideAnswer') ->withConsecutive( - array('Consumer Key (hidden): '), - array('Consumer Secret (hidden): ') + ['Consumer Key (hidden): '], + ['Consumer Secret (hidden): '] ) ->willReturnOnConsecutiveCalls($this->consumer_key, null); @@ -382,8 +382,8 @@ class BitbucketTest extends TestCase $this->io->expects($this->exactly(2)) ->method('askAndHideAnswer') ->withConsecutive( - array('Consumer Key (hidden): '), - array('Consumer Secret (hidden): ') + ['Consumer Key (hidden): '], + ['Consumer Secret (hidden): '] ) ->willReturnOnConsecutiveCalls($this->consumer_key, $this->consumer_secret); @@ -407,11 +407,6 @@ class BitbucketTest extends TestCase $this->assertFalse($this->bitbucket->authorizeOAuthInteractively($this->origin, $this->message)); } - /** - * @param bool $removeBasicAuth - * - * @return void - */ private function setExpectationsForStoringAccessToken(bool $removeBasicAuth = false): void { $configSourceMock = $this->getMockBuilder('Composer\Config\ConfigSourceInterface')->getMock(); @@ -432,12 +427,12 @@ class BitbucketTest extends TestCase ->method('addConfigSetting') ->with( 'bitbucket-oauth.' . $this->origin, - array( + [ "consumer-key" => $this->consumer_key, "consumer-secret" => $this->consumer_secret, "access-token" => $this->token, "access-token-expiration" => $this->time + 3600, - ) + ] ); if ($removeBasicAuth) { @@ -454,8 +449,6 @@ class BitbucketTest extends TestCase /** * @depends testRequestAccessTokenWithValidOAuthConsumerAndValidStoredAccessToken - * - * @param Bitbucket $bitbucket */ public function testGetTokenWithAccessToken(Bitbucket $bitbucket): void { @@ -470,7 +463,7 @@ class BitbucketTest extends TestCase public function testAuthorizeOAuthWithoutAvailableGitConfigToken(): void { $process = $this->getProcessExecutorMock(); - $process->expects(array(), false, array('return' => -1)); + $process->expects([], false, ['return' => -1]); $bitbucket = new Bitbucket($this->io, $this->config, $process, $this->httpDownloader, $this->time); diff --git a/tests/Composer/Test/Util/ConfigValidatorTest.php b/tests/Composer/Test/Util/ConfigValidatorTest.php index cdbb87851..a43fc6358 100644 --- a/tests/Composer/Test/Util/ConfigValidatorTest.php +++ b/tests/Composer/Test/Util/ConfigValidatorTest.php @@ -27,7 +27,7 @@ class ConfigValidatorTest extends TestCase public function testConfigValidatorCommitRefWarning(): void { $configValidator = new ConfigValidator(new NullIO()); - list(, , $warnings) = $configValidator->validate(__DIR__ . '/Fixtures/composer_commit-ref.json'); + [, , $warnings] = $configValidator->validate(__DIR__ . '/Fixtures/composer_commit-ref.json'); $this->assertContains( 'The package "some/package" is pointing to a commit-ref, this is bad practice and can cause unforeseen issues.', @@ -38,7 +38,7 @@ class ConfigValidatorTest extends TestCase public function testConfigValidatorWarnsOnScriptDescriptionForNonexistentScript(): void { $configValidator = new ConfigValidator(new NullIO()); - list(, , $warnings) = $configValidator->validate(__DIR__ . '/Fixtures/composer_scripts-descriptions.json'); + [, , $warnings] = $configValidator->validate(__DIR__ . '/Fixtures/composer_scripts-descriptions.json'); $this->assertContains( 'Description for non-existent script "phpcsxxx" found in "scripts-descriptions"', @@ -49,7 +49,7 @@ class ConfigValidatorTest extends TestCase public function testConfigValidatorWarnsOnUnnecessaryProvideReplace(): void { $configValidator = new ConfigValidator(new NullIO()); - list(, , $warnings) = $configValidator->validate(__DIR__ . '/Fixtures/composer_provide-replace-requirements.json'); + [, , $warnings] = $configValidator->validate(__DIR__ . '/Fixtures/composer_provide-replace-requirements.json'); $this->assertContains( 'The package a/a in require is also listed in provide which satisfies the requirement. Remove it from provide if you wish to install it.', diff --git a/tests/Composer/Test/Util/ErrorHandlerTest.php b/tests/Composer/Test/Util/ErrorHandlerTest.php index 7d48d8963..a177f6fe0 100644 --- a/tests/Composer/Test/Util/ErrorHandlerTest.php +++ b/tests/Composer/Test/Util/ErrorHandlerTest.php @@ -44,7 +44,7 @@ class ErrorHandlerTest extends TestCase self::expectExceptionMessage('Undefined index: baz'); } - $array = array('foo' => 'bar'); + $array = ['foo' => 'bar']; // @phpstan-ignore-next-line $array['baz']; } @@ -63,7 +63,7 @@ class ErrorHandlerTest extends TestCase } // @phpstan-ignore-next-line - array_merge(array(), 'string'); + array_merge([], 'string'); } /** diff --git a/tests/Composer/Test/Util/FilesystemTest.php b/tests/Composer/Test/Util/FilesystemTest.php index dc34eccae..c738c8e68 100644 --- a/tests/Composer/Test/Util/FilesystemTest.php +++ b/tests/Composer/Test/Util/FilesystemTest.php @@ -52,12 +52,6 @@ class FilesystemTest extends TestCase /** * @dataProvider providePathCouplesAsCode - * - * @param string $a - * @param string $b - * @param bool $directory - * @param string $expected - * @param bool $static */ public function testFindShortestPathCode(string $a, string $b, bool $directory, string $expected, bool $static = false): void { @@ -67,60 +61,55 @@ class FilesystemTest extends TestCase public function providePathCouplesAsCode(): array { - return array( - array('/foo/bar', '/foo/bar', false, "__FILE__"), - array('/foo/bar', '/foo/baz', false, "__DIR__.'/baz'"), - array('/foo/bin/run', '/foo/vendor/acme/bin/run', false, "dirname(__DIR__).'/vendor/acme/bin/run'"), - array('/foo/bin/run', '/bar/bin/run', false, "'/bar/bin/run'"), - array('c:/bin/run', 'c:/vendor/acme/bin/run', false, "dirname(__DIR__).'/vendor/acme/bin/run'"), - array('c:\\bin\\run', 'c:/vendor/acme/bin/run', false, "dirname(__DIR__).'/vendor/acme/bin/run'"), - array('c:/bin/run', 'D:/vendor/acme/bin/run', false, "'D:/vendor/acme/bin/run'"), - array('c:\\bin\\run', 'd:/vendor/acme/bin/run', false, "'D:/vendor/acme/bin/run'"), - array('/foo/bar', '/foo/bar', true, "__DIR__"), - array('/foo/bar/', '/foo/bar', true, "__DIR__"), - array('/foo/bar', '/foo/baz', true, "dirname(__DIR__).'/baz'"), - array('/foo/bin/run', '/foo/vendor/acme/bin/run', true, "dirname(dirname(__DIR__)).'/vendor/acme/bin/run'"), - array('/foo/bin/run', '/bar/bin/run', true, "'/bar/bin/run'"), - array('/bin/run', '/bin/run', true, "__DIR__"), - array('c:/bin/run', 'C:\\bin/run', true, "__DIR__"), - array('c:/bin/run', 'c:/vendor/acme/bin/run', true, "dirname(dirname(__DIR__)).'/vendor/acme/bin/run'"), - array('c:\\bin\\run', 'c:/vendor/acme/bin/run', true, "dirname(dirname(__DIR__)).'/vendor/acme/bin/run'"), - array('c:/bin/run', 'd:/vendor/acme/bin/run', true, "'D:/vendor/acme/bin/run'"), - array('c:\\bin\\run', 'd:/vendor/acme/bin/run', true, "'D:/vendor/acme/bin/run'"), - array('C:/Temp/test', 'C:\Temp', true, "dirname(__DIR__)"), - array('C:/Temp', 'C:\Temp\test', true, "__DIR__ . '/test'"), - array('/tmp/test', '/tmp', true, "dirname(__DIR__)"), - array('/tmp', '/tmp/test', true, "__DIR__ . '/test'"), - array('C:/Temp', 'c:\Temp\test', true, "__DIR__ . '/test'"), - array('/tmp/test/./', '/tmp/test/', true, '__DIR__'), - array('/tmp/test/../vendor', '/tmp/test', true, "dirname(__DIR__).'/test'"), - array('/tmp/test/.././vendor', '/tmp/test', true, "dirname(__DIR__).'/test'"), - array('C:/Temp', 'c:\Temp\..\..\test', true, "dirname(__DIR__).'/test'"), - array('C:/Temp/../..', 'd:\Temp\..\..\test', true, "'D:/test'"), - array('/foo/bar', '/foo/bar_vendor', true, "dirname(__DIR__).'/bar_vendor'"), - array('/foo/bar_vendor', '/foo/bar', true, "dirname(__DIR__).'/bar'"), - array('/foo/bar_vendor', '/foo/bar/src', true, "dirname(__DIR__).'/bar/src'"), - array('/foo/bar_vendor/src2', '/foo/bar/src/lib', true, "dirname(dirname(__DIR__)).'/bar/src/lib'"), + return [ + ['/foo/bar', '/foo/bar', false, "__FILE__"], + ['/foo/bar', '/foo/baz', false, "__DIR__.'/baz'"], + ['/foo/bin/run', '/foo/vendor/acme/bin/run', false, "dirname(__DIR__).'/vendor/acme/bin/run'"], + ['/foo/bin/run', '/bar/bin/run', false, "'/bar/bin/run'"], + ['c:/bin/run', 'c:/vendor/acme/bin/run', false, "dirname(__DIR__).'/vendor/acme/bin/run'"], + ['c:\\bin\\run', 'c:/vendor/acme/bin/run', false, "dirname(__DIR__).'/vendor/acme/bin/run'"], + ['c:/bin/run', 'D:/vendor/acme/bin/run', false, "'D:/vendor/acme/bin/run'"], + ['c:\\bin\\run', 'd:/vendor/acme/bin/run', false, "'D:/vendor/acme/bin/run'"], + ['/foo/bar', '/foo/bar', true, "__DIR__"], + ['/foo/bar/', '/foo/bar', true, "__DIR__"], + ['/foo/bar', '/foo/baz', true, "dirname(__DIR__).'/baz'"], + ['/foo/bin/run', '/foo/vendor/acme/bin/run', true, "dirname(dirname(__DIR__)).'/vendor/acme/bin/run'"], + ['/foo/bin/run', '/bar/bin/run', true, "'/bar/bin/run'"], + ['/bin/run', '/bin/run', true, "__DIR__"], + ['c:/bin/run', 'C:\\bin/run', true, "__DIR__"], + ['c:/bin/run', 'c:/vendor/acme/bin/run', true, "dirname(dirname(__DIR__)).'/vendor/acme/bin/run'"], + ['c:\\bin\\run', 'c:/vendor/acme/bin/run', true, "dirname(dirname(__DIR__)).'/vendor/acme/bin/run'"], + ['c:/bin/run', 'd:/vendor/acme/bin/run', true, "'D:/vendor/acme/bin/run'"], + ['c:\\bin\\run', 'd:/vendor/acme/bin/run', true, "'D:/vendor/acme/bin/run'"], + ['C:/Temp/test', 'C:\Temp', true, "dirname(__DIR__)"], + ['C:/Temp', 'C:\Temp\test', true, "__DIR__ . '/test'"], + ['/tmp/test', '/tmp', true, "dirname(__DIR__)"], + ['/tmp', '/tmp/test', true, "__DIR__ . '/test'"], + ['C:/Temp', 'c:\Temp\test', true, "__DIR__ . '/test'"], + ['/tmp/test/./', '/tmp/test/', true, '__DIR__'], + ['/tmp/test/../vendor', '/tmp/test', true, "dirname(__DIR__).'/test'"], + ['/tmp/test/.././vendor', '/tmp/test', true, "dirname(__DIR__).'/test'"], + ['C:/Temp', 'c:\Temp\..\..\test', true, "dirname(__DIR__).'/test'"], + ['C:/Temp/../..', 'd:\Temp\..\..\test', true, "'D:/test'"], + ['/foo/bar', '/foo/bar_vendor', true, "dirname(__DIR__).'/bar_vendor'"], + ['/foo/bar_vendor', '/foo/bar', true, "dirname(__DIR__).'/bar'"], + ['/foo/bar_vendor', '/foo/bar/src', true, "dirname(__DIR__).'/bar/src'"], + ['/foo/bar_vendor/src2', '/foo/bar/src/lib', true, "dirname(dirname(__DIR__)).'/bar/src/lib'"], // static use case - array('/tmp/test/../vendor', '/tmp/test', true, "__DIR__ . '/..'.'/test'", true), - array('/tmp/test/.././vendor', '/tmp/test', true, "__DIR__ . '/..'.'/test'", true), - array('C:/Temp', 'c:\Temp\..\..\test', true, "__DIR__ . '/..'.'/test'", true), - array('C:/Temp/../..', 'd:\Temp\..\..\test', true, "'D:/test'", true), - array('/foo/bar', '/foo/bar_vendor', true, "__DIR__ . '/..'.'/bar_vendor'", true), - array('/foo/bar_vendor', '/foo/bar', true, "__DIR__ . '/..'.'/bar'", true), - array('/foo/bar_vendor', '/foo/bar/src', true, "__DIR__ . '/..'.'/bar/src'", true), - array('/foo/bar_vendor/src2', '/foo/bar/src/lib', true, "__DIR__ . '/../..'.'/bar/src/lib'", true), - ); + ['/tmp/test/../vendor', '/tmp/test', true, "__DIR__ . '/..'.'/test'", true], + ['/tmp/test/.././vendor', '/tmp/test', true, "__DIR__ . '/..'.'/test'", true], + ['C:/Temp', 'c:\Temp\..\..\test', true, "__DIR__ . '/..'.'/test'", true], + ['C:/Temp/../..', 'd:\Temp\..\..\test', true, "'D:/test'", true], + ['/foo/bar', '/foo/bar_vendor', true, "__DIR__ . '/..'.'/bar_vendor'", true], + ['/foo/bar_vendor', '/foo/bar', true, "__DIR__ . '/..'.'/bar'", true], + ['/foo/bar_vendor', '/foo/bar/src', true, "__DIR__ . '/..'.'/bar/src'", true], + ['/foo/bar_vendor/src2', '/foo/bar/src/lib', true, "__DIR__ . '/../..'.'/bar/src/lib'", true], + ]; } /** * @dataProvider providePathCouples - * - * @param string $a - * @param string $b - * @param string $expected - * @param bool $directory */ public function testFindShortestPath(string $a, string $b, string $expected, bool $directory = false): void { @@ -130,44 +119,44 @@ class FilesystemTest extends TestCase public function providePathCouples(): array { - return array( - array('/foo/bar', '/foo/bar', "./bar"), - array('/foo/bar', '/foo/baz', "./baz"), - array('/foo/bar/', '/foo/baz', "./baz"), - array('/foo/bar', '/foo/bar', "./", true), - array('/foo/bar', '/foo/baz', "../baz", true), - array('/foo/bar/', '/foo/baz', "../baz", true), - array('C:/foo/bar/', 'c:/foo/baz', "../baz", true), - array('/foo/bin/run', '/foo/vendor/acme/bin/run', "../vendor/acme/bin/run"), - array('/foo/bin/run', '/bar/bin/run', "/bar/bin/run"), - array('/foo/bin/run', '/bar/bin/run', "/bar/bin/run", true), - array('c:/foo/bin/run', 'd:/bar/bin/run', "D:/bar/bin/run", true), - array('c:/bin/run', 'c:/vendor/acme/bin/run', "../vendor/acme/bin/run"), - array('c:\\bin\\run', 'c:/vendor/acme/bin/run', "../vendor/acme/bin/run"), - array('c:/bin/run', 'd:/vendor/acme/bin/run', "D:/vendor/acme/bin/run"), - array('c:\\bin\\run', 'd:/vendor/acme/bin/run', "D:/vendor/acme/bin/run"), - array('C:/Temp/test', 'C:\Temp', "./"), - array('/tmp/test', '/tmp', "./"), - array('C:/Temp/test/sub', 'C:\Temp', "../"), - array('/tmp/test/sub', '/tmp', "../"), - array('/tmp/test/sub', '/tmp', "../../", true), - array('c:/tmp/test/sub', 'c:/tmp', "../../", true), - array('/tmp', '/tmp/test', "test"), - array('C:/Temp', 'C:\Temp\test', "test"), - array('C:/Temp', 'c:\Temp\test', "test"), - array('/tmp/test/./', '/tmp/test', './', true), - array('/tmp/test/../vendor', '/tmp/test', '../test', true), - array('/tmp/test/.././vendor', '/tmp/test', '../test', true), - array('C:/Temp', 'c:\Temp\..\..\test', "../test", true), - array('C:/Temp/../..', 'c:\Temp\..\..\test', "./test", true), - array('C:/Temp/../..', 'D:\Temp\..\..\test', "D:/test", true), - array('/tmp', '/tmp/../../test', '/test', true), - array('/foo/bar', '/foo/bar_vendor', '../bar_vendor', true), - array('/foo/bar_vendor', '/foo/bar', '../bar', true), - array('/foo/bar_vendor', '/foo/bar/src', '../bar/src', true), - array('/foo/bar_vendor/src2', '/foo/bar/src/lib', '../../bar/src/lib', true), - array('C:/', 'C:/foo/bar/', "foo/bar", true), - ); + return [ + ['/foo/bar', '/foo/bar', "./bar"], + ['/foo/bar', '/foo/baz', "./baz"], + ['/foo/bar/', '/foo/baz', "./baz"], + ['/foo/bar', '/foo/bar', "./", true], + ['/foo/bar', '/foo/baz', "../baz", true], + ['/foo/bar/', '/foo/baz', "../baz", true], + ['C:/foo/bar/', 'c:/foo/baz', "../baz", true], + ['/foo/bin/run', '/foo/vendor/acme/bin/run', "../vendor/acme/bin/run"], + ['/foo/bin/run', '/bar/bin/run', "/bar/bin/run"], + ['/foo/bin/run', '/bar/bin/run', "/bar/bin/run", true], + ['c:/foo/bin/run', 'd:/bar/bin/run', "D:/bar/bin/run", true], + ['c:/bin/run', 'c:/vendor/acme/bin/run', "../vendor/acme/bin/run"], + ['c:\\bin\\run', 'c:/vendor/acme/bin/run', "../vendor/acme/bin/run"], + ['c:/bin/run', 'd:/vendor/acme/bin/run', "D:/vendor/acme/bin/run"], + ['c:\\bin\\run', 'd:/vendor/acme/bin/run', "D:/vendor/acme/bin/run"], + ['C:/Temp/test', 'C:\Temp', "./"], + ['/tmp/test', '/tmp', "./"], + ['C:/Temp/test/sub', 'C:\Temp', "../"], + ['/tmp/test/sub', '/tmp', "../"], + ['/tmp/test/sub', '/tmp', "../../", true], + ['c:/tmp/test/sub', 'c:/tmp', "../../", true], + ['/tmp', '/tmp/test', "test"], + ['C:/Temp', 'C:\Temp\test', "test"], + ['C:/Temp', 'c:\Temp\test', "test"], + ['/tmp/test/./', '/tmp/test', './', true], + ['/tmp/test/../vendor', '/tmp/test', '../test', true], + ['/tmp/test/.././vendor', '/tmp/test', '../test', true], + ['C:/Temp', 'c:\Temp\..\..\test', "../test", true], + ['C:/Temp/../..', 'c:\Temp\..\..\test', "./test", true], + ['C:/Temp/../..', 'D:\Temp\..\..\test', "D:/test", true], + ['/tmp', '/tmp/../../test', '/test', true], + ['/foo/bar', '/foo/bar_vendor', '../bar_vendor', true], + ['/foo/bar_vendor', '/foo/bar', '../bar', true], + ['/foo/bar_vendor', '/foo/bar/src', '../bar/src', true], + ['/foo/bar_vendor/src2', '/foo/bar/src/lib', '../../bar/src/lib', true], + ['C:/', 'C:/foo/bar/', "foo/bar", true], + ]; } /** @@ -203,9 +192,6 @@ class FilesystemTest extends TestCase /** * @dataProvider provideNormalizedPaths - * - * @param string $expected - * @param string $actual */ public function testNormalizePath(string $expected, string $actual): void { @@ -215,28 +201,28 @@ class FilesystemTest extends TestCase public function provideNormalizedPaths(): array { - return array( - array('../foo', '../foo'), - array('C:/foo/bar', 'c:/foo//bar'), - array('C:/foo/bar', 'C:/foo/./bar'), - array('C:/foo/bar', 'C://foo//bar'), - array('C:/foo/bar', 'C:///foo//bar'), - array('C:/bar', 'C:/foo/../bar'), - array('/bar', '/foo/../bar/'), - array('phar://C:/Foo', 'phar://c:/Foo/Bar/..'), - array('phar://C:/Foo', 'phar://c:///Foo/Bar/..'), - array('phar://C:/', 'phar://c:/Foo/Bar/../../../..'), - array('/', '/Foo/Bar/../../../..'), - array('/', '/'), - array('/', '//'), - array('/', '///'), - array('/Foo', '///Foo'), - array('C:/', 'c:\\'), - array('../src', 'Foo/Bar/../../../src'), - array('C:../b', 'c:.\\..\\a\\..\\b'), - array('phar://C:../Foo', 'phar://c:../Foo'), - array('//foo/bar', '\\\\foo\\bar'), - ); + return [ + ['../foo', '../foo'], + ['C:/foo/bar', 'c:/foo//bar'], + ['C:/foo/bar', 'C:/foo/./bar'], + ['C:/foo/bar', 'C://foo//bar'], + ['C:/foo/bar', 'C:///foo//bar'], + ['C:/bar', 'C:/foo/../bar'], + ['/bar', '/foo/../bar/'], + ['phar://C:/Foo', 'phar://c:/Foo/Bar/..'], + ['phar://C:/Foo', 'phar://c:///Foo/Bar/..'], + ['phar://C:/', 'phar://c:/Foo/Bar/../../../..'], + ['/', '/Foo/Bar/../../../..'], + ['/', '/'], + ['/', '//'], + ['/', '///'], + ['/Foo', '///Foo'], + ['C:/', 'c:\\'], + ['../src', 'Foo/Bar/../../../src'], + ['C:../b', 'c:.\\..\\a\\..\\b'], + ['phar://C:../Foo', 'phar://c:../Foo'], + ['//foo/bar', '\\\\foo\\bar'], + ]; } /** diff --git a/tests/Composer/Test/Util/GitTest.php b/tests/Composer/Test/Util/GitTest.php index 41602aa0b..f066ac1cc 100644 --- a/tests/Composer/Test/Util/GitTest.php +++ b/tests/Composer/Test/Util/GitTest.php @@ -43,9 +43,6 @@ class GitTest extends TestCase /** * @dataProvider publicGithubNoCredentialsProvider - * - * @param string $protocol - * @param string $expectedUrl */ public function testRunCommandPublicGitHubRepositoryNotInitialClone(string $protocol, string $expectedUrl): void { @@ -57,17 +54,17 @@ class GitTest extends TestCase $this->mockConfig($protocol); - $this->process->expects(array('git command'), true); + $this->process->expects(['git command'], true); $this->git->runCommand($commandCallable, 'https://github.com/acme/repo', null, true); } public function publicGithubNoCredentialsProvider(): array { - return array( - array('ssh', 'git@github.com:acme/repo'), - array('https', 'https://github.com/acme/repo'), - ); + return [ + ['ssh', 'git@github.com:acme/repo'], + ['https', 'https://github.com/acme/repo'], + ]; } public function testRunCommandPrivateGitHubRepositoryNotInitialCloneNotInteractiveWithoutAuthentication(): void @@ -82,26 +79,20 @@ class GitTest extends TestCase $this->mockConfig('https'); - $this->process->expects(array( - array('cmd' => 'git command', 'return' => 1), - array('cmd' => 'git --version', 'return' => 0), - ), true); + $this->process->expects([ + ['cmd' => 'git command', 'return' => 1], + ['cmd' => 'git --version', 'return' => 0], + ], true); $this->git->runCommand($commandCallable, 'https://github.com/acme/repo', null, true); } /** * @dataProvider privateGithubWithCredentialsProvider - * - * @param string $gitUrl - * @param string $protocol - * @param string $gitHubToken - * @param string $expectedUrl - * @param int $expectedFailuresBeforeSuccess */ public function testRunCommandPrivateGitHubRepositoryNotInitialCloneNotInteractiveWithAuthentication(string $gitUrl, string $protocol, string $gitHubToken, string $expectedUrl, int $expectedFailuresBeforeSuccess): void { - $commandCallable = function ($url) use ($expectedUrl): string { + $commandCallable = static function ($url) use ($expectedUrl): string { if ($url !== $expectedUrl) { return 'git command failing'; } @@ -111,8 +102,8 @@ class GitTest extends TestCase $this->mockConfig($protocol); - $expectedCalls = array_fill(0, $expectedFailuresBeforeSuccess, array('cmd' => 'git command failing', 'return' => 1)); - $expectedCalls[] = array('cmd' => 'git command ok', 'return' => 0); + $expectedCalls = array_fill(0, $expectedFailuresBeforeSuccess, ['cmd' => 'git command failing', 'return' => 1]); + $expectedCalls[] = ['cmd' => 'git command ok', 'return' => 0]; $this->process->expects($expectedCalls, true); @@ -130,31 +121,26 @@ class GitTest extends TestCase ->expects($this->atLeastOnce()) ->method('getAuthentication') ->with($this->equalTo('github.com')) - ->willReturn(array('username' => 'token', 'password' => $gitHubToken)); + ->willReturn(['username' => 'token', 'password' => $gitHubToken]); $this->git->runCommand($commandCallable, $gitUrl, null, true); } public function privateGithubWithCredentialsProvider(): array { - return array( - array('git@github.com:acme/repo.git', 'ssh', 'MY_GITHUB_TOKEN', 'https://token:MY_GITHUB_TOKEN@github.com/acme/repo.git', 1), - array('https://github.com/acme/repo', 'https', 'MY_GITHUB_TOKEN', 'https://token:MY_GITHUB_TOKEN@github.com/acme/repo.git', 2), - ); + return [ + ['git@github.com:acme/repo.git', 'ssh', 'MY_GITHUB_TOKEN', 'https://token:MY_GITHUB_TOKEN@github.com/acme/repo.git', 1], + ['https://github.com/acme/repo', 'https', 'MY_GITHUB_TOKEN', 'https://token:MY_GITHUB_TOKEN@github.com/acme/repo.git', 2], + ]; } - /** - * @param string $protocol - * - * @return void - */ private function mockConfig(string $protocol): void { $this->config ->method('get') - ->willReturnMap(array( - array('github-domains', 0, array('github.com')), - array('github-protocols', 0, array($protocol)), - )); + ->willReturnMap([ + ['github-domains', 0, ['github.com']], + ['github-protocols', 0, [$protocol]], + ]); } } diff --git a/tests/Composer/Test/Util/Http/ProxyHelperTest.php b/tests/Composer/Test/Util/Http/ProxyHelperTest.php index c70dd746d..0ff8374d8 100644 --- a/tests/Composer/Test/Util/Http/ProxyHelperTest.php +++ b/tests/Composer/Test/Util/Http/ProxyHelperTest.php @@ -46,8 +46,6 @@ class ProxyHelperTest extends TestCase /** * @dataProvider dataMalformed - * - * @param string $url */ public function testThrowsOnMalformedUrl(string $url): void { @@ -59,42 +57,37 @@ class ProxyHelperTest extends TestCase public function dataMalformed(): array { - return array( - 'no-host' => array('localhost'), - 'no-port' => array('scheme://localhost'), - ); + return [ + 'no-host' => ['localhost'], + 'no-port' => ['scheme://localhost'], + ]; } /** * @dataProvider dataFormatting - * - * @param string $url - * @param string $expected */ public function testUrlFormatting(string $url, string $expected): void { $_SERVER['http_proxy'] = $url; - list($httpProxy, $httpsProxy, $noProxy) = ProxyHelper::getProxyData(); + [$httpProxy, $httpsProxy, $noProxy] = ProxyHelper::getProxyData(); $this->assertSame($expected, $httpProxy); } public function dataFormatting(): array { // url, expected - return array( - 'lowercases-scheme' => array('HTTP://proxy.com:8888', 'http://proxy.com:8888'), - 'adds-http-port' => array('http://proxy.com', 'http://proxy.com:80'), - 'adds-https-port' => array('https://proxy.com', 'https://proxy.com:443'), - ); + return [ + 'lowercases-scheme' => ['HTTP://proxy.com:8888', 'http://proxy.com:8888'], + 'adds-http-port' => ['http://proxy.com', 'http://proxy.com:80'], + 'adds-https-port' => ['https://proxy.com', 'https://proxy.com:443'], + ]; } /** * @dataProvider dataCaseOverrides * * @param array $server - * @param string $expected - * @param int $index */ public function testLowercaseOverridesUppercase(array $server, string $expected, int $index): void { @@ -107,19 +100,17 @@ class ProxyHelperTest extends TestCase public function dataCaseOverrides(): array { // server, expected, list index - return array( - array(array('HTTP_PROXY' => 'http://upper.com', 'http_proxy' => 'http://lower.com'), 'http://lower.com:80', 0), - array(array('HTTPS_PROXY' => 'http://upper.com', 'https_proxy' => 'http://lower.com'), 'http://lower.com:80', 1), - array(array('NO_PROXY' => 'upper.com', 'no_proxy' => 'lower.com'), 'lower.com', 2), - ); + return [ + [['HTTP_PROXY' => 'http://upper.com', 'http_proxy' => 'http://lower.com'], 'http://lower.com:80', 0], + [['HTTPS_PROXY' => 'http://upper.com', 'https_proxy' => 'http://lower.com'], 'http://lower.com:80', 1], + [['NO_PROXY' => 'upper.com', 'no_proxy' => 'lower.com'], 'lower.com', 2], + ]; } /** * @dataProvider dataCGIOverrides * * @param array $server - * @param string $expected - * @param int $index */ public function testCGIUpperCaseOverridesHttp(array $server, string $expected, int $index): void { @@ -132,17 +123,17 @@ class ProxyHelperTest extends TestCase public function dataCGIOverrides(): array { // server, expected, list index - return array( - array(array('http_proxy' => 'http://http.com', 'CGI_HTTP_PROXY' => 'http://cgi.com'), 'http://cgi.com:80', 0), - array(array('http_proxy' => 'http://http.com', 'cgi_http_proxy' => 'http://cgi.com'), 'http://http.com:80', 0), - ); + return [ + [['http_proxy' => 'http://http.com', 'CGI_HTTP_PROXY' => 'http://cgi.com'], 'http://cgi.com:80', 0], + [['http_proxy' => 'http://http.com', 'cgi_http_proxy' => 'http://cgi.com'], 'http://http.com:80', 0], + ]; } public function testNoHttpsProxyUsesHttpProxy(): void { $_SERVER['http_proxy'] = 'http://http.com'; - list($httpProxy, $httpsProxy, $noProxy) = ProxyHelper::getProxyData(); + [$httpProxy, $httpsProxy, $noProxy] = ProxyHelper::getProxyData(); $this->assertSame('http://http.com:80', $httpsProxy); } @@ -150,14 +141,13 @@ class ProxyHelperTest extends TestCase { $_SERVER['https_proxy'] = 'http://https.com'; - list($httpProxy, $httpsProxy, $noProxy) = ProxyHelper::getProxyData(); + [$httpProxy, $httpsProxy, $noProxy] = ProxyHelper::getProxyData(); $this->assertSame(null, $httpProxy); } /** * @dataProvider dataContextOptions * - * @param string $url * @param array $expected * * @phpstan-param array{http: array{proxy: string, header?: string}} $expected @@ -170,29 +160,28 @@ class ProxyHelperTest extends TestCase public function dataContextOptions(): array { // url, expected - return array( - array('http://proxy.com', array('http' => array( + return [ + ['http://proxy.com', ['http' => [ 'proxy' => 'tcp://proxy.com:80', - ))), - array('https://proxy.com', array('http' => array( + ]]], + ['https://proxy.com', ['http' => [ 'proxy' => 'ssl://proxy.com:443', - ))), - array('http://user:p%40ss@proxy.com', array('http' => array( + ]]], + ['http://user:p%40ss@proxy.com', ['http' => [ 'proxy' => 'tcp://proxy.com:80', 'header' => 'Proxy-Authorization: Basic dXNlcjpwQHNz', - ))), - ); + ]]], + ]; } /** * @dataProvider dataRequestFullUri * - * @param string $requestUrl * @param mixed[] $expected */ public function testSetRequestFullUri(string $requestUrl, array $expected): void { - $options = array(); + $options = []; ProxyHelper::setRequestFullUri($requestUrl, $options); $this->assertEquals($expected, $options); @@ -200,13 +189,13 @@ class ProxyHelperTest extends TestCase public function dataRequestFullUri(): array { - $options = array('http' => array('request_fulluri' => true)); + $options = ['http' => ['request_fulluri' => true]]; // $requestUrl, expected - return array( - 'http' => array('http://repo.org', $options), - 'https' => array('https://repo.org', array()), - 'no-scheme' => array('repo.org', array()), - ); + return [ + 'http' => ['http://repo.org', $options], + 'https' => ['https://repo.org', []], + 'no-scheme' => ['repo.org', []], + ]; } } diff --git a/tests/Composer/Test/Util/Http/ProxyManagerTest.php b/tests/Composer/Test/Util/Http/ProxyManagerTest.php index ebdc4d290..8602ab0c0 100644 --- a/tests/Composer/Test/Util/Http/ProxyManagerTest.php +++ b/tests/Composer/Test/Util/Http/ProxyManagerTest.php @@ -71,11 +71,7 @@ class ProxyManagerTest extends TestCase * @dataProvider dataRequest * * @param array $server - * @param string $url - * @param string $expectedUrl * @param mixed[] $expectedOptions - * @param bool $expectedSecure - * @param string $expectedMessage */ public function testGetProxyForRequest(array $server, string $url, string $expectedUrl, array $expectedOptions, bool $expectedSecure, string $expectedMessage): void { @@ -102,34 +98,34 @@ class ProxyManagerTest extends TestCase public function dataRequest(): array { - $server = array( + $server = [ 'http_proxy' => 'http://user:p%40ss@proxy.com', 'https_proxy' => 'https://proxy.com:443', 'no_proxy' => 'other.repo.org', - ); + ]; // server, url, expectedUrl, expectedOptions, expectedSecure, expectedMessage - return array( - array(array(), 'http://repo.org', '', array(), false, ''), - array($server, 'http://repo.org', 'http://user:p%40ss@proxy.com:80', - array('http' => array( + return [ + [[], 'http://repo.org', '', [], false, ''], + [$server, 'http://repo.org', 'http://user:p%40ss@proxy.com:80', + ['http' => [ 'proxy' => 'tcp://proxy.com:80', 'header' => 'Proxy-Authorization: Basic dXNlcjpwQHNz', 'request_fulluri' => true, - )), + ]], false, 'http://user:***@proxy.com:80', - ), - array( + ], + [ $server, 'https://repo.org', 'https://proxy.com:443', - array('http' => array( + ['http' => [ 'proxy' => 'ssl://proxy.com:443', - )), + ]], true, 'https://proxy.com:443', - ), - array($server, 'https://other.repo.org', '', array(), false, 'no_proxy'), - ); + ], + [$server, 'https://other.repo.org', '', [], false, 'no_proxy'], + ]; } /** @@ -157,19 +153,19 @@ class ProxyManagerTest extends TestCase public function dataStatus(): array { // server, expectedStatus, expectedMessage - return array( - array(array(), false, null), - array(array('http_proxy' => 'localhost'), false, 'malformed'), - array( - array('http_proxy' => 'http://user:p%40ss@proxy.com:80'), + return [ + [[], false, null], + [['http_proxy' => 'localhost'], false, 'malformed'], + [ + ['http_proxy' => 'http://user:p%40ss@proxy.com:80'], true, 'http=http://user:***@proxy.com:80', - ), - array( - array('http_proxy' => 'proxy.com:80', 'https_proxy' => 'proxy.com:80'), + ], + [ + ['http_proxy' => 'proxy.com:80', 'https_proxy' => 'proxy.com:80'], true, 'http=proxy.com:80, https=proxy.com:80', - ), - ); + ], + ]; } } diff --git a/tests/Composer/Test/Util/Http/RequestProxyTest.php b/tests/Composer/Test/Util/Http/RequestProxyTest.php index 2073d70bf..24cf881e0 100644 --- a/tests/Composer/Test/Util/Http/RequestProxyTest.php +++ b/tests/Composer/Test/Util/Http/RequestProxyTest.php @@ -19,13 +19,10 @@ class RequestProxyTest extends TestCase { /** * @dataProvider dataSecure - * - * @param string $url - * @param bool $expectedSecure */ public function testIsSecure(string $url, bool $expectedSecure): void { - $proxy = new RequestProxy($url, array(), ''); + $proxy = new RequestProxy($url, [], ''); $this->assertSame($expectedSecure, $proxy->isSecure()); } @@ -33,23 +30,19 @@ class RequestProxyTest extends TestCase public function dataSecure(): array { // url, secure - return array( - 'basic' => array('http://proxy.com:80', false), - 'secure' => array('https://proxy.com:443', true), - 'none' => array('', false), - ); + return [ + 'basic' => ['http://proxy.com:80', false], + 'secure' => ['https://proxy.com:443', true], + 'none' => ['', false], + ]; } /** * @dataProvider dataProxyUrl - * - * @param string $url - * @param string $format - * @param string $expected */ public function testGetFormattedUrlFormat(string $url, string $format, string $expected): void { - $proxy = new RequestProxy($url, array(), $url); + $proxy = new RequestProxy($url, [], $url); $message = $proxy->getFormattedUrl($format); $this->assertSame($expected, $message); @@ -60,9 +53,9 @@ class RequestProxyTest extends TestCase $format = 'proxy (%s)'; // url, format, expected - return array( - array('', $format, ''), - array('http://proxy.com:80', $format, 'proxy (http://proxy.com:80)'), - ); + return [ + ['', $format, ''], + ['http://proxy.com:80', $format, 'proxy (http://proxy.com:80)'], + ]; } } diff --git a/tests/Composer/Test/Util/HttpDownloaderTest.php b/tests/Composer/Test/Util/HttpDownloaderTest.php index 26e778764..294063902 100644 --- a/tests/Composer/Test/Util/HttpDownloaderTest.php +++ b/tests/Composer/Test/Util/HttpDownloaderTest.php @@ -26,9 +26,9 @@ class HttpDownloaderTest extends TestCase $config = $this->getMockBuilder('Composer\Config')->getMock(); $config->expects($this->any()) ->method('get') - ->will($this->returnCallback(function ($key) { + ->will($this->returnCallback(static function ($key) { if ($key === 'github-domains' || $key === 'gitlab-domains') { - return array(); + return []; } })); @@ -56,22 +56,22 @@ class HttpDownloaderTest extends TestCase public function testOutputWarnings(): void { $io = new BufferIO(); - HttpDownloader::outputWarnings($io, '$URL', array()); + HttpDownloader::outputWarnings($io, '$URL', []); $this->assertSame('', $io->getOutput()); - HttpDownloader::outputWarnings($io, '$URL', array( + HttpDownloader::outputWarnings($io, '$URL', [ 'warning' => 'old warning msg', 'warning-versions' => '>=2.0', 'info' => 'old info msg', 'info-versions' => '>=2.0', - 'warnings' => array( - array('message' => 'should not appear', 'versions' => '<2.2'), - array('message' => 'visible warning', 'versions' => '>=2.2-dev'), - ), - 'infos' => array( - array('message' => 'should not appear', 'versions' => '<2.2'), - array('message' => 'visible info', 'versions' => '>=2.2-dev'), - ), - )); + 'warnings' => [ + ['message' => 'should not appear', 'versions' => '<2.2'], + ['message' => 'visible warning', 'versions' => '>=2.2-dev'], + ], + 'infos' => [ + ['message' => 'should not appear', 'versions' => '<2.2'], + ['message' => 'visible info', 'versions' => '>=2.2-dev'], + ], + ]); // the tag are consumed by the OutputFormatter, but not as that is not a default output format $this->assertSame( diff --git a/tests/Composer/Test/Util/IniHelperTest.php b/tests/Composer/Test/Util/IniHelperTest.php index 753efcee0..fbfde3a3d 100644 --- a/tests/Composer/Test/Util/IniHelperTest.php +++ b/tests/Composer/Test/Util/IniHelperTest.php @@ -28,9 +28,9 @@ class IniHelperTest extends TestCase public function testWithNoIni(): void { - $paths = array( + $paths = [ '', - ); + ]; $this->setEnv($paths); $this->assertStringContainsString('does not exist', IniHelper::getMessage()); @@ -39,9 +39,9 @@ class IniHelperTest extends TestCase public function testWithLoadedIniOnly(): void { - $paths = array( + $paths = [ 'loaded.ini', - ); + ]; $this->setEnv($paths); $this->assertStringContainsString('loaded.ini', IniHelper::getMessage()); @@ -49,11 +49,11 @@ class IniHelperTest extends TestCase public function testWithLoadedIniAndAdditional(): void { - $paths = array( + $paths = [ 'loaded.ini', 'one.ini', 'two.ini', - ); + ]; $this->setEnv($paths); $this->assertStringContainsString('multiple ini files', IniHelper::getMessage()); @@ -62,11 +62,11 @@ class IniHelperTest extends TestCase public function testWithoutLoadedIniAndAdditional(): void { - $paths = array( + $paths = [ '', 'one.ini', 'two.ini', - ); + ]; $this->setEnv($paths); $this->assertStringContainsString('multiple ini files', IniHelper::getMessage()); @@ -93,8 +93,6 @@ class IniHelperTest extends TestCase /** * @param string[] $paths - * - * @return void */ protected function setEnv(array $paths): void { diff --git a/tests/Composer/Test/Util/MetadataMinifierTest.php b/tests/Composer/Test/Util/MetadataMinifierTest.php index 99f61c0b6..d0961d5fd 100644 --- a/tests/Composer/Test/Util/MetadataMinifierTest.php +++ b/tests/Composer/Test/Util/MetadataMinifierTest.php @@ -22,22 +22,22 @@ class MetadataMinifierTest extends TestCase public function testMinifyExpand(): void { $package1 = new CompletePackage('foo/bar', '2.0.0.0', '2.0.0'); - $package1->setScripts(array('foo' => array('bar'))); - $package1->setLicense(array('MIT')); + $package1->setScripts(['foo' => ['bar']]); + $package1->setLicense(['MIT']); $package2 = new CompletePackage('foo/bar', '1.2.0.0', '1.2.0'); - $package2->setLicense(array('GPL')); + $package2->setLicense(['GPL']); $package2->setHomepage('https://example.org'); $package3 = new CompletePackage('foo/bar', '1.0.0.0', '1.0.0'); - $package3->setLicense(array('GPL')); + $package3->setLicense(['GPL']); $dumper = new ArrayDumper(); - $minified = array( - array('name' => 'foo/bar', 'version' => '2.0.0', 'version_normalized' => '2.0.0.0', 'type' => 'library', 'scripts' => array('foo' => array('bar')), 'license' => array('MIT')), - array('version' => '1.2.0', 'version_normalized' => '1.2.0.0', 'license' => array('GPL'), 'homepage' => 'https://example.org', 'scripts' => '__unset'), - array('version' => '1.0.0', 'version_normalized' => '1.0.0.0', 'homepage' => '__unset'), - ); + $minified = [ + ['name' => 'foo/bar', 'version' => '2.0.0', 'version_normalized' => '2.0.0.0', 'type' => 'library', 'scripts' => ['foo' => ['bar']], 'license' => ['MIT']], + ['version' => '1.2.0', 'version_normalized' => '1.2.0.0', 'license' => ['GPL'], 'homepage' => 'https://example.org', 'scripts' => '__unset'], + ['version' => '1.0.0', 'version_normalized' => '1.0.0.0', 'homepage' => '__unset'], + ]; - $source = array($dumper->dump($package1), $dumper->dump($package2), $dumper->dump($package3)); + $source = [$dumper->dump($package1), $dumper->dump($package2), $dumper->dump($package3)]; $this->assertSame($minified, MetadataMinifier::minify($source)); $this->assertSame($source, MetadataMinifier::expand($minified)); diff --git a/tests/Composer/Test/Util/NoProxyPatternTest.php b/tests/Composer/Test/Util/NoProxyPatternTest.php index 559875375..627956683 100644 --- a/tests/Composer/Test/Util/NoProxyPatternTest.php +++ b/tests/Composer/Test/Util/NoProxyPatternTest.php @@ -19,10 +19,6 @@ class NoProxyPatternTest extends TestCase { /** * @dataProvider dataHostName - * - * @param string $noproxy - * @param string $url - * @param bool $expected */ public function testHostName(string $noproxy, string $url, bool $expected): void { @@ -36,24 +32,20 @@ class NoProxyPatternTest extends TestCase $noproxy = 'foobar.com, .barbaz.net'; // noproxy, url, expected - return array( - 'match as foobar.com' => array($noproxy, 'foobar.com', true), - 'match foobar.com' => array($noproxy, 'www.foobar.com', true), - 'no match foobar.com' => array($noproxy, 'foofoobar.com', false), - 'match .barbaz.net 1' => array($noproxy, 'barbaz.net', true), - 'match .barbaz.net 2' => array($noproxy, 'www.barbaz.net', true), - 'no match .barbaz.net' => array($noproxy, 'barbarbaz.net', false), - 'no match wrong domain' => array($noproxy, 'barbaz.com', false), - 'no match FQDN' => array($noproxy, 'foobar.com.', false), - ); + return [ + 'match as foobar.com' => [$noproxy, 'foobar.com', true], + 'match foobar.com' => [$noproxy, 'www.foobar.com', true], + 'no match foobar.com' => [$noproxy, 'foofoobar.com', false], + 'match .barbaz.net 1' => [$noproxy, 'barbaz.net', true], + 'match .barbaz.net 2' => [$noproxy, 'www.barbaz.net', true], + 'no match .barbaz.net' => [$noproxy, 'barbarbaz.net', false], + 'no match wrong domain' => [$noproxy, 'barbaz.com', false], + 'no match FQDN' => [$noproxy, 'foobar.com.', false], + ]; } /** * @dataProvider dataIpAddress - * - * @param string $noproxy - * @param string $url - * @param bool $expected */ public function testIpAddress(string $noproxy, string $url, bool $expected): void { @@ -67,22 +59,18 @@ class NoProxyPatternTest extends TestCase $noproxy = '192.168.1.1, 2001:db8::52:0:1'; // noproxy, url, expected - return array( - 'match exact IPv4' => array($noproxy, '192.168.1.1', true), - 'no match IPv4' => array($noproxy, '192.168.1.4', false), - 'match exact IPv6' => array($noproxy, '[2001:db8:0:0:0:52:0:1]', true), - 'no match IPv6' => array($noproxy, '[2001:db8:0:0:0:52:0:2]', false), - 'match mapped IPv4' => array($noproxy, '[::FFFF:C0A8:0101]', true), - 'no match mapped IPv4' => array($noproxy, '[::FFFF:C0A8:0104]', false), - ); + return [ + 'match exact IPv4' => [$noproxy, '192.168.1.1', true], + 'no match IPv4' => [$noproxy, '192.168.1.4', false], + 'match exact IPv6' => [$noproxy, '[2001:db8:0:0:0:52:0:1]', true], + 'no match IPv6' => [$noproxy, '[2001:db8:0:0:0:52:0:2]', false], + 'match mapped IPv4' => [$noproxy, '[::FFFF:C0A8:0101]', true], + 'no match mapped IPv4' => [$noproxy, '[::FFFF:C0A8:0104]', false], + ]; } /** * @dataProvider dataIpRange - * - * @param string $noproxy - * @param string $url - * @param bool $expected */ public function testIpRange(string $noproxy, string $url, bool $expected): void { @@ -96,22 +84,18 @@ class NoProxyPatternTest extends TestCase $noproxy = '10.0.0.0/30, 2002:db8:a::45/121'; // noproxy, url, expected - return array( - 'match IPv4/CIDR' => array($noproxy, '10.0.0.2', true), - 'no match IPv4/CIDR' => array($noproxy, '10.0.0.4', false), - 'match IPv6/CIDR' => array($noproxy, '[2002:db8:a:0:0:0:0:7f]', true), - 'no match IPv6' => array($noproxy, '[2002:db8:a:0:0:0:0:ff]', false), - 'match mapped IPv4' => array($noproxy, '[::FFFF:0A00:0002]', true), - 'no match mapped IPv4' => array($noproxy, '[::FFFF:0A00:0004]', false), - ); + return [ + 'match IPv4/CIDR' => [$noproxy, '10.0.0.2', true], + 'no match IPv4/CIDR' => [$noproxy, '10.0.0.4', false], + 'match IPv6/CIDR' => [$noproxy, '[2002:db8:a:0:0:0:0:7f]', true], + 'no match IPv6' => [$noproxy, '[2002:db8:a:0:0:0:0:ff]', false], + 'match mapped IPv4' => [$noproxy, '[::FFFF:0A00:0002]', true], + 'no match mapped IPv4' => [$noproxy, '[::FFFF:0A00:0004]', false], + ]; } /** * @dataProvider dataPort - * - * @param string $noproxy - * @param string $url - * @param bool $expected */ public function testPort(string $noproxy, string $url, bool $expected): void { @@ -125,20 +109,16 @@ class NoProxyPatternTest extends TestCase $noproxy = '192.168.1.2:81, 192.168.1.3:80, [2001:db8::52:0:2]:443, [2001:db8::52:0:3]:80'; // noproxy, url, expected - return array( - 'match IPv4 port' => array($noproxy, '192.168.1.3', true), - 'no match IPv4 port' => array($noproxy, '192.168.1.2', false), - 'match IPv6 port' => array($noproxy, '[2001:db8::52:0:3]', true), - 'no match IPv6 port' => array($noproxy, '[2001:db8::52:0:2]', false), - ); + return [ + 'match IPv4 port' => [$noproxy, '192.168.1.3', true], + 'no match IPv4 port' => [$noproxy, '192.168.1.2', false], + 'match IPv6 port' => [$noproxy, '[2001:db8::52:0:3]', true], + 'no match IPv6 port' => [$noproxy, '[2001:db8::52:0:2]', false], + ]; } /** * Appends a scheme to the test url if it is missing - * - * @param string $url - * - * @return string */ private function getUrl(string $url): string { @@ -149,7 +129,7 @@ class NoProxyPatternTest extends TestCase $scheme = 'http'; if (strpos($url, '[') !== 0 && strrpos($url, ':') !== false) { - list(, $port) = explode(':', $url); + [, $port] = explode(':', $url); if ($port === '443') { $scheme = 'https'; diff --git a/tests/Composer/Test/Util/PackageSorterTest.php b/tests/Composer/Test/Util/PackageSorterTest.php index 0a2563854..ea8267211 100644 --- a/tests/Composer/Test/Util/PackageSorterTest.php +++ b/tests/Composer/Test/Util/PackageSorterTest.php @@ -22,10 +22,10 @@ class PackageSorterTest extends TestCase { public function testSortingDoesNothingWithNoDependencies(): void { - $packages[] = $this->createPackage('foo/bar1', array()); - $packages[] = $this->createPackage('foo/bar2', array()); - $packages[] = $this->createPackage('foo/bar3', array()); - $packages[] = $this->createPackage('foo/bar4', array()); + $packages[] = $this->createPackage('foo/bar1', []); + $packages[] = $this->createPackage('foo/bar2', []); + $packages[] = $this->createPackage('foo/bar3', []); + $packages[] = $this->createPackage('foo/bar4', []); $sortedPackages = PackageSorter::sortPackages($packages); @@ -34,117 +34,117 @@ class PackageSorterTest extends TestCase public function sortingOrdersDependenciesHigherThanPackageDataProvider(): array { - return array( - 'one package is dep' => array( - array( - $this->createPackage('foo/bar1', array('foo/bar4')), - $this->createPackage('foo/bar2', array('foo/bar4')), - $this->createPackage('foo/bar3', array('foo/bar4')), - $this->createPackage('foo/bar4', array()), - ), - array( + return [ + 'one package is dep' => [ + [ + $this->createPackage('foo/bar1', ['foo/bar4']), + $this->createPackage('foo/bar2', ['foo/bar4']), + $this->createPackage('foo/bar3', ['foo/bar4']), + $this->createPackage('foo/bar4', []), + ], + [ 'foo/bar4', 'foo/bar1', 'foo/bar2', 'foo/bar3', - ), - ), - 'one package has more deps' => array( - array( - $this->createPackage('foo/bar1', array('foo/bar2')), - $this->createPackage('foo/bar2', array('foo/bar4')), - $this->createPackage('foo/bar3', array('foo/bar4')), - $this->createPackage('foo/bar4', array()), - ), - array( + ], + ], + 'one package has more deps' => [ + [ + $this->createPackage('foo/bar1', ['foo/bar2']), + $this->createPackage('foo/bar2', ['foo/bar4']), + $this->createPackage('foo/bar3', ['foo/bar4']), + $this->createPackage('foo/bar4', []), + ], + [ 'foo/bar4', 'foo/bar2', 'foo/bar1', 'foo/bar3', - ), - ), - 'package is required by many, but requires one other' => array( - array( - $this->createPackage('foo/bar1', array('foo/bar3')), - $this->createPackage('foo/bar2', array('foo/bar3')), - $this->createPackage('foo/bar3', array('foo/bar4')), - $this->createPackage('foo/bar4', array()), - $this->createPackage('foo/bar5', array('foo/bar3')), - $this->createPackage('foo/bar6', array('foo/bar3')), - ), - array( + ], + ], + 'package is required by many, but requires one other' => [ + [ + $this->createPackage('foo/bar1', ['foo/bar3']), + $this->createPackage('foo/bar2', ['foo/bar3']), + $this->createPackage('foo/bar3', ['foo/bar4']), + $this->createPackage('foo/bar4', []), + $this->createPackage('foo/bar5', ['foo/bar3']), + $this->createPackage('foo/bar6', ['foo/bar3']), + ], + [ 'foo/bar4', 'foo/bar3', 'foo/bar1', 'foo/bar2', 'foo/bar5', 'foo/bar6', - ), - ), - 'one package has many requires' => array( - array( - $this->createPackage('foo/bar1', array('foo/bar2')), - $this->createPackage('foo/bar2', array()), - $this->createPackage('foo/bar3', array('foo/bar4')), - $this->createPackage('foo/bar4', array()), - $this->createPackage('foo/bar5', array('foo/bar2')), - $this->createPackage('foo/bar6', array('foo/bar2')), - ), - array( + ], + ], + 'one package has many requires' => [ + [ + $this->createPackage('foo/bar1', ['foo/bar2']), + $this->createPackage('foo/bar2', []), + $this->createPackage('foo/bar3', ['foo/bar4']), + $this->createPackage('foo/bar4', []), + $this->createPackage('foo/bar5', ['foo/bar2']), + $this->createPackage('foo/bar6', ['foo/bar2']), + ], + [ 'foo/bar2', 'foo/bar4', 'foo/bar1', 'foo/bar3', 'foo/bar5', 'foo/bar6', - ), - ), - 'circular deps sorted alphabetically if weighted equally' => array( - array( - $this->createPackage('foo/bar1', array('circular/part1')), - $this->createPackage('foo/bar2', array('circular/part2')), - $this->createPackage('circular/part1', array('circular/part2')), - $this->createPackage('circular/part2', array('circular/part1')), - ), - array( + ], + ], + 'circular deps sorted alphabetically if weighted equally' => [ + [ + $this->createPackage('foo/bar1', ['circular/part1']), + $this->createPackage('foo/bar2', ['circular/part2']), + $this->createPackage('circular/part1', ['circular/part2']), + $this->createPackage('circular/part2', ['circular/part1']), + ], + [ 'circular/part1', 'circular/part2', 'foo/bar1', 'foo/bar2', - ), - ), - 'equal weight sorted alphabetically' => array( - array( - $this->createPackage('foo/bar10', array('foo/dep')), - $this->createPackage('foo/bar2', array('foo/dep')), - $this->createPackage('foo/baz', array('foo/dep')), - $this->createPackage('foo/dep', array()), - ), - array( + ], + ], + 'equal weight sorted alphabetically' => [ + [ + $this->createPackage('foo/bar10', ['foo/dep']), + $this->createPackage('foo/bar2', ['foo/dep']), + $this->createPackage('foo/baz', ['foo/dep']), + $this->createPackage('foo/dep', []), + ], + [ 'foo/dep', 'foo/bar2', 'foo/bar10', 'foo/baz', - ), - ), - 'pre-weighted packages bumped to top incl their deps' => array( - array( - $this->createPackage('foo/bar', array('foo/dep')), - $this->createPackage('foo/bar2', array('foo/dep2')), - $this->createPackage('foo/dep', array()), - $this->createPackage('foo/dep2', array()), - ), - array( + ], + ], + 'pre-weighted packages bumped to top incl their deps' => [ + [ + $this->createPackage('foo/bar', ['foo/dep']), + $this->createPackage('foo/bar2', ['foo/dep2']), + $this->createPackage('foo/dep', []), + $this->createPackage('foo/dep2', []), + ], + [ 'foo/dep', 'foo/bar', 'foo/dep2', 'foo/bar2', - ), - array( - 'foo/bar' => -1000 - ) - ), - ); + ], + [ + 'foo/bar' => -1000, + ], + ], + ]; } /** @@ -157,7 +157,7 @@ class PackageSorterTest extends TestCase public function testSortingOrdersDependenciesHigherThanPackage(array $packages, array $expectedOrderedList, array $weights = []): void { $sortedPackages = PackageSorter::sortPackages($packages, $weights); - $sortedPackageNames = array_map(function ($package): string { + $sortedPackageNames = array_map(static function ($package): string { return $package->getName(); }, $sortedPackages); @@ -165,16 +165,13 @@ class PackageSorterTest extends TestCase } /** - * @param string $name * @param string[] $requires - * - * @return Package */ private function createPackage(string $name, array $requires): Package { $package = new Package($name, '1.0.0.0', '1.0.0'); - $links = array(); + $links = []; foreach ($requires as $requireName) { $links[$requireName] = new Link($package->getName(), $requireName, new MatchAllConstraint); } diff --git a/tests/Composer/Test/Util/PerforceTest.php b/tests/Composer/Test/Util/PerforceTest.php index 44617633a..6fd37e559 100644 --- a/tests/Composer/Test/Util/PerforceTest.php +++ b/tests/Composer/Test/Util/PerforceTest.php @@ -52,12 +52,12 @@ class PerforceTest extends TestCase */ public function getTestRepoConfig(): array { - return array( + return [ 'depot' => self::TEST_DEPOT, 'branch' => self::TEST_BRANCH, 'p4user' => self::TEST_P4USER, 'unique_perforce_client_name' => self::TEST_CLIENT_NAME, - ); + ]; } /** @@ -68,11 +68,6 @@ class PerforceTest extends TestCase return $this->getMockBuilder('Composer\IO\IOInterface')->getMock(); } - /** - * @param bool $flag - * - * @return void - */ protected function createNewPerforceWithWindowsFlag(bool $flag): void { $this->perforce = new Perforce($this->repoConfig, self::TEST_PORT, self::TEST_PATH, $this->processExecutor, $flag, $this->io); @@ -225,12 +220,12 @@ class PerforceTest extends TestCase public function testQueryP4PasswordWithPasswordAlreadySet(): void { - $repoConfig = array( + $repoConfig = [ 'depot' => 'depot', 'branch' => 'branch', 'p4user' => 'user', 'p4password' => 'TEST_PASSWORD', - ); + ]; $this->perforce = new Perforce($repoConfig, 'port', 'path', $this->processExecutor, false, $this->getMockIOInterface()); $password = $this->perforce->queryP4Password(); $this->assertEquals('TEST_PASSWORD', $password); @@ -451,12 +446,12 @@ class PerforceTest extends TestCase ); $result = $this->perforce->getComposerInformation('//depot'); - $expected = array( + $expected = [ 'name' => 'test/perforce', 'description' => 'Basic project for testing', 'minimum-stability' => 'dev', - 'autoload' => array('psr-0' => array()), - ); + 'autoload' => ['psr-0' => []], + ]; $this->assertEquals($expected, $result); } @@ -478,12 +473,12 @@ class PerforceTest extends TestCase $result = $this->perforce->getComposerInformation('//depot@0.0.1'); - $expected = array( + $expected = [ 'name' => 'test/perforce', 'description' => 'Basic project for testing', 'minimum-stability' => 'dev', - 'autoload' => array('psr-0' => array()), - ); + 'autoload' => ['psr-0' => []], + ]; $this->assertEquals($expected, $result); } @@ -503,12 +498,12 @@ class PerforceTest extends TestCase $result = $this->perforce->getComposerInformation('//depot/branch'); - $expected = array( + $expected = [ 'name' => 'test/perforce', 'description' => 'Basic project for testing', 'minimum-stability' => 'dev', - 'autoload' => array('psr-0' => array()), - ); + 'autoload' => ['psr-0' => []], + ]; $this->assertEquals($expected, $result); } @@ -532,12 +527,12 @@ class PerforceTest extends TestCase $result = $this->perforce->getComposerInformation('//depot/branch@0.0.1'); - $expected = array( + $expected = [ 'name' => 'test/perforce', 'description' => 'Basic project for testing', 'minimum-stability' => 'dev', - 'autoload' => array('psr-0' => array()), - ); + 'autoload' => ['psr-0' => []], + ]; $this->assertEquals($expected, $result); } @@ -578,8 +573,6 @@ class PerforceTest extends TestCase * Test if "p4" command is missing. * * @covers \Composer\Util\Perforce::checkServerExists - * - * @return void */ public function testCheckServerClientError(): void { @@ -595,9 +588,6 @@ class PerforceTest extends TestCase $this->assertFalse($result); } - /** - * @return string - */ public static function getComposerJson(): string { return JsonFile::encode([ @@ -611,13 +601,11 @@ class PerforceTest extends TestCase } /** - * @param bool $withStream - * * @return string[] */ private function getExpectedClientSpec(bool $withStream): array { - $expectedArray = array( + $expectedArray = [ 'Client: composer_perforce_TEST_depot', PHP_EOL, 'Update:', @@ -636,7 +624,7 @@ class PerforceTest extends TestCase PHP_EOL, 'LineEnd: local', PHP_EOL, - ); + ]; if ($withStream) { $expectedArray[] = 'Stream:'; $expectedArray[] = ' //depot/branch'; @@ -647,9 +635,6 @@ class PerforceTest extends TestCase return $expectedArray; } - /** - * @return void - */ private function setPerforceToStream(): void { $this->perforce->setStream('//depot/branch'); diff --git a/tests/Composer/Test/Util/ProcessExecutorTest.php b/tests/Composer/Test/Util/ProcessExecutorTest.php index 8af418d4d..72a73652a 100644 --- a/tests/Composer/Test/Util/ProcessExecutorTest.php +++ b/tests/Composer/Test/Util/ProcessExecutorTest.php @@ -69,9 +69,6 @@ class ProcessExecutorTest extends TestCase /** * @dataProvider hidePasswordProvider - * - * @param string $command - * @param string $expectedCommandOutput */ public function testHidePasswords(string $command, string $expectedCommandOutput): void { @@ -82,13 +79,13 @@ class ProcessExecutorTest extends TestCase public function hidePasswordProvider(): array { - return array( - array('echo https://foo:bar@example.org/', 'echo https://foo:***@example.org/'), - array('echo http://foo@example.org', 'echo http://foo@example.org'), - array('echo http://abcdef1234567890234578:x-oauth-token@github.com/', 'echo http://***:***@github.com/'), - array("svn ls --verbose --non-interactive --username 'foo' --password 'bar' 'https://foo.example.org/svn/'", "svn ls --verbose --non-interactive --username 'foo' --password '***' 'https://foo.example.org/svn/'"), - array("svn ls --verbose --non-interactive --username 'foo' --password 'bar \'bar' 'https://foo.example.org/svn/'", "svn ls --verbose --non-interactive --username 'foo' --password '***' 'https://foo.example.org/svn/'"), - ); + return [ + ['echo https://foo:bar@example.org/', 'echo https://foo:***@example.org/'], + ['echo http://foo@example.org', 'echo http://foo@example.org'], + ['echo http://abcdef1234567890234578:x-oauth-token@github.com/', 'echo http://***:***@github.com/'], + ["svn ls --verbose --non-interactive --username 'foo' --password 'bar' 'https://foo.example.org/svn/'", "svn ls --verbose --non-interactive --username 'foo' --password '***' 'https://foo.example.org/svn/'"], + ["svn ls --verbose --non-interactive --username 'foo' --password 'bar \'bar' 'https://foo.example.org/svn/'", "svn ls --verbose --non-interactive --username 'foo' --password '***' 'https://foo.example.org/svn/'"], + ]; } public function testDoesntHidePorts(): void @@ -101,18 +98,18 @@ class ProcessExecutorTest extends TestCase public function testSplitLines(): void { $process = new ProcessExecutor; - $this->assertEquals(array(), $process->splitLines('')); - $this->assertEquals(array(), $process->splitLines(null)); - $this->assertEquals(array('foo'), $process->splitLines('foo')); - $this->assertEquals(array('foo', 'bar'), $process->splitLines("foo\nbar")); - $this->assertEquals(array('foo', 'bar'), $process->splitLines("foo\r\nbar")); - $this->assertEquals(array('foo', 'bar'), $process->splitLines("foo\r\nbar\n")); + $this->assertEquals([], $process->splitLines('')); + $this->assertEquals([], $process->splitLines(null)); + $this->assertEquals(['foo'], $process->splitLines('foo')); + $this->assertEquals(['foo', 'bar'], $process->splitLines("foo\nbar")); + $this->assertEquals(['foo', 'bar'], $process->splitLines("foo\r\nbar")); + $this->assertEquals(['foo', 'bar'], $process->splitLines("foo\r\nbar\n")); } public function testConsoleIODoesNotFormatSymfonyConsoleStyle(): void { $output = new BufferedOutput(OutputInterface::VERBOSITY_NORMAL, true); - $process = new ProcessExecutor(new ConsoleIO(new ArrayInput(array()), $output, new HelperSet(array()))); + $process = new ProcessExecutor(new ConsoleIO(new ArrayInput([]), $output, new HelperSet([]))); $process->execute('php -ddisplay_errors=0 -derror_reporting=0 -r "echo \'foo\'.PHP_EOL;"'); $this->assertSame('foo'.PHP_EOL, $output->fetch()); @@ -139,8 +136,6 @@ class ProcessExecutorTest extends TestCase * @dataProvider dataEscapeArguments * * @param string|false|null $argument - * @param string $win - * @param string $unix */ public function testEscapeArgument($argument, string $win, string $unix): void { @@ -154,75 +149,75 @@ class ProcessExecutorTest extends TestCase */ public function dataEscapeArguments(): array { - return array( + return [ // empty argument - must be quoted - 'empty' => array('', '""', "''"), + 'empty' => ['', '""', "''"], // null argument - must be quoted - 'empty null' => array(null, '""', "''"), + 'empty null' => [null, '""', "''"], // false argument - must be quoted - 'empty false' => array(false, '""', "''"), + 'empty false' => [false, '""', "''"], // unix single-quote must be escaped - 'unix-sq' => array("a'bc", "a'bc", "'a'\\''bc'"), + 'unix-sq' => ["a'bc", "a'bc", "'a'\\''bc'"], // new lines must be replaced - 'new lines' => array("a\nb\nc", '"a b c"', "'a\nb\nc'"), + 'new lines' => ["a\nb\nc", '"a b c"', "'a\nb\nc'"], // whitespace must be quoted - 'ws space' => array('a b c', '"a b c"', "'a b c'"), + 'ws space' => ['a b c', '"a b c"', "'a b c'"], // whitespace must be quoted - 'ws tab' => array("a\tb\tc", "\"a\tb\tc\"", "'a\tb\tc'"), + 'ws tab' => ["a\tb\tc", "\"a\tb\tc\"", "'a\tb\tc'"], // no whitespace must not be quoted - 'no-ws' => array('abc', 'abc', "'abc'"), + 'no-ws' => ['abc', 'abc', "'abc'"], // commas must be quoted - 'comma' => array('a,bc', '"a,bc"', "'a,bc'"), + 'comma' => ['a,bc', '"a,bc"', "'a,bc'"], // double-quotes must be backslash-escaped - 'dq' => array('a"bc', 'a\^"bc', "'a\"bc'"), + 'dq' => ['a"bc', 'a\^"bc', "'a\"bc'"], // double-quotes must be backslash-escaped with preceeding backslashes doubled - 'dq-bslash' => array('a\\"bc', 'a\\\\\^"bc', "'a\\\"bc'"), + 'dq-bslash' => ['a\\"bc', 'a\\\\\^"bc', "'a\\\"bc'"], // backslashes not preceeding a double-quote are treated as literal - 'bslash' => array('ab\\\\c\\', 'ab\\\\c\\', "'ab\\\\c\\'"), + 'bslash' => ['ab\\\\c\\', 'ab\\\\c\\', "'ab\\\\c\\'"], // trailing backslashes must be doubled up when the argument is quoted - 'bslash dq' => array('a b c\\\\', '"a b c\\\\\\\\"', "'a b c\\\\'"), + 'bslash dq' => ['a b c\\\\', '"a b c\\\\\\\\"', "'a b c\\\\'"], // meta: outer double-quotes must be caret-escaped as well - 'meta dq' => array('a "b" c', '^"a \^"b\^" c^"', "'a \"b\" c'"), + 'meta dq' => ['a "b" c', '^"a \^"b\^" c^"', "'a \"b\" c'"], // meta: percent expansion must be caret-escaped - 'meta-pc1' => array('%path%', '^%path^%', "'%path%'"), + 'meta-pc1' => ['%path%', '^%path^%', "'%path%'"], // meta: expansion must have two percent characters - 'meta-pc2' => array('%path', '%path', "'%path'"), + 'meta-pc2' => ['%path', '%path', "'%path'"], // meta: expansion must have have two surrounding percent characters - 'meta-pc3' => array('%%path', '%%path', "'%%path'"), + 'meta-pc3' => ['%%path', '%%path', "'%%path'"], // meta: bang expansion must be double caret-escaped - 'meta-bang1' => array('!path!', '^^!path^^!', "'!path!'"), + 'meta-bang1' => ['!path!', '^^!path^^!', "'!path!'"], // meta: bang expansion must have two bang characters - 'meta-bang2' => array('!path', '!path', "'!path'"), + 'meta-bang2' => ['!path', '!path', "'!path'"], // meta: bang expansion must have two surrounding ang characters - 'meta-bang3' => array('!!path', '!!path', "'!!path'"), + 'meta-bang3' => ['!!path', '!!path', "'!!path'"], // meta: caret-escaping must escape all other meta chars (triggered by double-quote) - 'meta-all-dq' => array('<>"&|()^', '^<^>\^"^&^|^(^)^^', "'<>\"&|()^'"), + 'meta-all-dq' => ['<>"&|()^', '^<^>\^"^&^|^(^)^^', "'<>\"&|()^'"], // other meta: no caret-escaping when whitespace in argument - 'other meta' => array('<> &| ()^', '"<> &| ()^"', "'<> &| ()^'"), + 'other meta' => ['<> &| ()^', '"<> &| ()^"', "'<> &| ()^'"], // other meta: quote escape chars when no whitespace in argument - 'other-meta' => array('<>&|()^', '"<>&|()^"', "'<>&|()^'"), - ); + 'other-meta' => ['<>&|()^', '"<>&|()^"', "'<>&|()^'"], + ]; } } diff --git a/tests/Composer/Test/Util/RemoteFilesystemTest.php b/tests/Composer/Test/Util/RemoteFilesystemTest.php index 4fc7c7454..d7326b149 100644 --- a/tests/Composer/Test/Util/RemoteFilesystemTest.php +++ b/tests/Composer/Test/Util/RemoteFilesystemTest.php @@ -33,7 +33,7 @@ class RemoteFilesystemTest extends TestCase ->willReturn(false) ; - $res = $this->callGetOptionsForUrl($io, array('http://example.org', array())); + $res = $this->callGetOptionsForUrl($io, ['http://example.org', []]); $this->assertTrue(isset($res['http']['header']) && is_array($res['http']['header']), 'getOptions must return an array with headers'); } @@ -48,10 +48,10 @@ class RemoteFilesystemTest extends TestCase $io ->expects($this->once()) ->method('getAuthentication') - ->willReturn(array('username' => 'login', 'password' => 'password')) + ->willReturn(['username' => 'login', 'password' => 'password']) ; - $options = $this->callGetOptionsForUrl($io, array('http://example.org', array())); + $options = $this->callGetOptionsForUrl($io, ['http://example.org', []]); $found = false; foreach ($options['http']['header'] as $header) { @@ -74,14 +74,14 @@ class RemoteFilesystemTest extends TestCase $io ->expects($this->once()) ->method('getAuthentication') - ->willReturn(array('username' => null, 'password' => null)) + ->willReturn(['username' => null, 'password' => null]) ; - $streamOptions = array('ssl' => array( + $streamOptions = ['ssl' => [ 'allow_self_signed' => true, - )); + ]]; - $res = $this->callGetOptionsForUrl($io, array('https://example.org', array()), $streamOptions); + $res = $this->callGetOptionsForUrl($io, ['https://example.org', []], $streamOptions); $this->assertTrue( isset($res['ssl'], $res['ssl']['allow_self_signed']) && true === $res['ssl']['allow_self_signed'], 'getOptions must return an array with a allow_self_signed set to true' @@ -100,14 +100,14 @@ class RemoteFilesystemTest extends TestCase $io ->expects($this->once()) ->method('getAuthentication') - ->willReturn(array('username' => null, 'password' => null)) + ->willReturn(['username' => null, 'password' => null]) ; - $streamOptions = array('http' => array( + $streamOptions = ['http' => [ 'header' => 'Foo: bar', - )); + ]]; - $res = $this->callGetOptionsForUrl($io, array('https://example.org', $streamOptions)); + $res = $this->callGetOptionsForUrl($io, ['https://example.org', $streamOptions]); $this->assertTrue(isset($res['http']['header']), 'getOptions must return an array with a http.header key'); $found = false; @@ -173,11 +173,11 @@ class RemoteFilesystemTest extends TestCase public function testCopyWithNoRetryOnFailure(): void { self::expectException('Composer\Downloader\TransportException'); - $fs = $this->getRemoteFilesystemWithMockedMethods(array('getRemoteContents')); + $fs = $this->getRemoteFilesystemWithMockedMethods(['getRemoteContents']); $fs->expects($this->once())->method('getRemoteContents') - ->willReturnCallback(function ($originUrl, $fileUrl, $ctx, &$http_response_header): string { - $http_response_header = array('http/1.1 401 unauthorized'); + ->willReturnCallback(static function ($originUrl, $fileUrl, $ctx, &$http_response_header): string { + $http_response_header = ['http/1.1 401 unauthorized']; return ''; }); @@ -190,32 +190,32 @@ class RemoteFilesystemTest extends TestCase 'file://' . __FILE__, $file, true, - array('retry-auth-failure' => false) + ['retry-auth-failure' => false] ); } public function testCopyWithSuccessOnRetry(): void { - $authHelper = $this->getAuthHelperWithMockedMethods(array('promptAuthIfNeeded')); - $fs = $this->getRemoteFilesystemWithMockedMethods(array('getRemoteContents'), $authHelper); + $authHelper = $this->getAuthHelperWithMockedMethods(['promptAuthIfNeeded']); + $fs = $this->getRemoteFilesystemWithMockedMethods(['getRemoteContents'], $authHelper); $authHelper->expects($this->once()) ->method('promptAuthIfNeeded') - ->willReturn(array( + ->willReturn([ 'storeAuth' => true, 'retry' => true, - )); + ]); $counter = 0; $fs->expects($this->exactly(2)) ->method('getRemoteContents') - ->willReturnCallback(function ($originUrl, $fileUrl, $ctx, &$http_response_header) use (&$counter) { + ->willReturnCallback(static function ($originUrl, $fileUrl, $ctx, &$http_response_header) use (&$counter) { if ($counter++ === 0) { - $http_response_header = array('http/1.1 401 unauthorized'); + $http_response_header = ['http/1.1 401 unauthorized']; return ''; } else { - $http_response_header = array('http/1.1 200 OK'); + $http_response_header = ['http/1.1 200 OK']; return ' true) + ['retry-auth-failure' => true] ); $this->assertTrue($copyResult); @@ -245,7 +245,7 @@ class RemoteFilesystemTest extends TestCase { $io = $this->getIOInterfaceMock(); - $res = $this->callGetOptionsForUrl($io, array('example.org', array('ssl' => array('cafile' => '/some/path/file.crt'))), array(), 'http://www.example.org'); + $res = $this->callGetOptionsForUrl($io, ['example.org', ['ssl' => ['cafile' => '/some/path/file.crt']]], [], 'http://www.example.org'); $this->assertTrue(isset($res['ssl']['ciphers'])); $this->assertMatchesRegularExpression('|!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA|', $res['ssl']['ciphers']); @@ -267,16 +267,14 @@ class RemoteFilesystemTest extends TestCase */ public function provideBitbucketPublicDownloadUrls(): array { - return array( - array('https://bitbucket.org/seldaek/composer-live-test-repo/downloads/composer-unit-test-download-me.txt', '1234'), - ); + return [ + ['https://bitbucket.org/seldaek/composer-live-test-repo/downloads/composer-unit-test-download-me.txt', '1234'], + ]; } /** * Tests that a BitBucket public download is correctly retrieved. * - * @param string $url - * @param string $contents * @dataProvider provideBitbucketPublicDownloadUrls */ public function testBitBucketPublicDownload(string $url, string $contents): void @@ -298,8 +296,6 @@ class RemoteFilesystemTest extends TestCase /** * Tests that a BitBucket public download is correctly retrieved when `bitbucket-oauth` is configured. * - * @param string $url - * @param string $contents * @dataProvider provideBitbucketPublicDownloadUrls */ public function testBitBucketPublicDownloadWithAuthConfigured(string $url, string $contents): void @@ -310,10 +306,10 @@ class RemoteFilesystemTest extends TestCase ->disableOriginalConstructor() ->getMock(); - $domains = array(); + $domains = []; $io ->method('hasAuthentication') - ->willReturnCallback(function ($arg) use (&$domains): bool { + ->willReturnCallback(static function ($arg) use (&$domains): bool { $domains[] = $arg; // first time is called with bitbucket.org, then it redirects to bbuseruploads.s3.amazonaws.com so next time we have no auth configured return $arg === 'bitbucket.org'; @@ -321,11 +317,11 @@ class RemoteFilesystemTest extends TestCase $io ->method('getAuthentication') ->with('bitbucket.org') - ->willReturn(array( + ->willReturn([ 'username' => 'x-token-auth', // This token is fake, but it matches a valid token's pattern. 'password' => '1A0yeK5Po3ZEeiiRiMWLivS0jirLdoGuaSGq9NvESFx1Fsdn493wUDXC8rz_1iKVRTl1GINHEUCsDxGh5lZ=', - )); + ]); $rfs = new RemoteFilesystem($io, $this->getConfigMock()); $hostname = parse_url($url, PHP_URL_HOST); @@ -333,17 +329,16 @@ class RemoteFilesystemTest extends TestCase $result = $rfs->getContents($hostname, $url, false); $this->assertEquals($contents, $result); - $this->assertEquals(array('bitbucket.org', 'bbuseruploads.s3.amazonaws.com'), $domains); + $this->assertEquals(['bitbucket.org', 'bbuseruploads.s3.amazonaws.com'], $domains); } /** * @param mixed[] $args * @param mixed[] $options - * @param string $fileUrl * * @return mixed[] */ - private function callGetOptionsForUrl(IOInterface $io, array $args = array(), array $options = array(), string $fileUrl = ''): array + private function callGetOptionsForUrl(IOInterface $io, array $args = [], array $options = [], string $fileUrl = ''): array { $fs = new RemoteFilesystem($io, $this->getConfigMock(), $options); $ref = new ReflectionMethod($fs, 'getOptionsForUrl'); @@ -364,9 +359,9 @@ class RemoteFilesystemTest extends TestCase $config = $this->getMockBuilder('Composer\Config')->getMock(); $config ->method('get') - ->willReturnCallback(function ($key) { + ->willReturnCallback(static function ($key) { if ($key === 'github-domains' || $key === 'gitlab-domains') { - return array(); + return []; } return null; @@ -375,16 +370,6 @@ class RemoteFilesystemTest extends TestCase return $config; } - /** - * @param int $notificationCode - * @param int $severity - * @param string $message - * @param int $messageCode - * @param int $bytesTransferred - * @param int $bytesMax - * - * @return void - */ private function callCallbackGet(RemoteFilesystem $fs, int $notificationCode, int $severity, string $message, int $messageCode, int $bytesTransferred, int $bytesMax): void { $ref = new ReflectionMethod($fs, 'callbackGet'); @@ -394,10 +379,7 @@ class RemoteFilesystemTest extends TestCase /** * @param object|string $object - * @param string $attribute * @param mixed $value - * - * @return void */ private function setAttribute($object, string $attribute, $value): void { @@ -408,10 +390,7 @@ class RemoteFilesystemTest extends TestCase /** * @param mixed $value - * @param string $attribute * @param object|string $object - * - * @return void */ private function assertAttributeEqualsCustom($value, string $attribute, $object): void { @@ -433,16 +412,16 @@ class RemoteFilesystemTest extends TestCase * * @return RemoteFilesystem|MockObject */ - private function getRemoteFilesystemWithMockedMethods(array $mockedMethods, AuthHelper $authHelper = null) + private function getRemoteFilesystemWithMockedMethods(array $mockedMethods, ?AuthHelper $authHelper = null) { return $this->getMockBuilder('Composer\Util\RemoteFilesystem') - ->setConstructorArgs(array( + ->setConstructorArgs([ $this->getIOInterfaceMock(), $this->getConfigMock(), - array(), + [], false, $authHelper, - )) + ]) ->onlyMethods($mockedMethods) ->getMock(); } @@ -455,10 +434,10 @@ class RemoteFilesystemTest extends TestCase private function getAuthHelperWithMockedMethods(array $mockedMethods) { return $this->getMockBuilder('Composer\Util\AuthHelper') - ->setConstructorArgs(array( + ->setConstructorArgs([ $this->getIOInterfaceMock(), $this->getConfigMock(), - )) + ]) ->onlyMethods($mockedMethods) ->getMock(); } diff --git a/tests/Composer/Test/Util/SilencerTest.php b/tests/Composer/Test/Util/SilencerTest.php index 0c9ad5777..9161dae60 100644 --- a/tests/Composer/Test/Util/SilencerTest.php +++ b/tests/Composer/Test/Util/SilencerTest.php @@ -35,7 +35,7 @@ class SilencerTest extends TestCase Silencer::restore(); // Check all parameters and return values are passed correctly in a silenced call. - $result = Silencer::call(function ($a, $b, $c) { + $result = Silencer::call(static function ($a, $b, $c) { @trigger_error('Test', E_USER_WARNING); return $a * $b * $c; @@ -54,7 +54,7 @@ class SilencerTest extends TestCase $verification = microtime(); self::expectException('RuntimeException'); self::expectExceptionMessage($verification); - Silencer::call(function () use ($verification): void { + Silencer::call(static function () use ($verification): void { throw new \RuntimeException($verification); }); } diff --git a/tests/Composer/Test/Util/StreamContextFactoryTest.php b/tests/Composer/Test/Util/StreamContextFactoryTest.php index e16d9ad79..363247934 100644 --- a/tests/Composer/Test/Util/StreamContextFactoryTest.php +++ b/tests/Composer/Test/Util/StreamContextFactoryTest.php @@ -51,17 +51,17 @@ class StreamContextFactoryTest extends TestCase public function dataGetContext(): array { - return array( - array( - $a = array('http' => array('follow_location' => 1, 'max_redirects' => 20, 'header' => array('User-Agent: foo'))), array('http' => array('header' => 'User-Agent: foo')), - array('options' => $a), array(), - ), - array( - $a = array('http' => array('method' => 'GET', 'max_redirects' => 20, 'follow_location' => 1, 'header' => array('User-Agent: foo'))), array('http' => array('method' => 'GET', 'header' => 'User-Agent: foo')), - array('options' => $a, 'notification' => $f = function (): void { - }), array('notification' => $f), - ), - ); + return [ + [ + $a = ['http' => ['follow_location' => 1, 'max_redirects' => 20, 'header' => ['User-Agent: foo']]], ['http' => ['header' => 'User-Agent: foo']], + ['options' => $a], [], + ], + [ + $a = ['http' => ['method' => 'GET', 'max_redirects' => 20, 'follow_location' => 1, 'header' => ['User-Agent: foo']]], ['http' => ['method' => 'GET', 'header' => 'User-Agent: foo']], + ['options' => $a, 'notification' => $f = static function (): void { + }], ['notification' => $f], + ], + ]; } public function testHttpProxy(): void @@ -69,17 +69,17 @@ class StreamContextFactoryTest extends TestCase $_SERVER['http_proxy'] = 'http://username:p%40ssword@proxyserver.net:3128/'; $_SERVER['HTTP_PROXY'] = 'http://proxyserver/'; - $context = StreamContextFactory::getContext('http://example.org', array('http' => array('method' => 'GET', 'header' => 'User-Agent: foo'))); + $context = StreamContextFactory::getContext('http://example.org', ['http' => ['method' => 'GET', 'header' => 'User-Agent: foo']]); $options = stream_context_get_options($context); - $this->assertEquals(array('http' => array( + $this->assertEquals(['http' => [ 'proxy' => 'tcp://proxyserver.net:3128', 'request_fulluri' => true, 'method' => 'GET', - 'header' => array('User-Agent: foo', "Proxy-Authorization: Basic " . base64_encode('username:p@ssword')), + 'header' => ['User-Agent: foo', "Proxy-Authorization: Basic " . base64_encode('username:p@ssword')], 'max_redirects' => 20, 'follow_location' => 1, - )), $options); + ]], $options); } public function testHttpProxyWithNoProxy(): void @@ -87,15 +87,15 @@ class StreamContextFactoryTest extends TestCase $_SERVER['http_proxy'] = 'http://username:password@proxyserver.net:3128/'; $_SERVER['no_proxy'] = 'foo,example.org'; - $context = StreamContextFactory::getContext('http://example.org', array('http' => array('method' => 'GET', 'header' => 'User-Agent: foo'))); + $context = StreamContextFactory::getContext('http://example.org', ['http' => ['method' => 'GET', 'header' => 'User-Agent: foo']]); $options = stream_context_get_options($context); - $this->assertEquals(array('http' => array( + $this->assertEquals(['http' => [ 'method' => 'GET', 'max_redirects' => 20, 'follow_location' => 1, - 'header' => array('User-Agent: foo'), - )), $options); + 'header' => ['User-Agent: foo'], + ]], $options); } public function testHttpProxyWithNoProxyWildcard(): void @@ -103,48 +103,48 @@ class StreamContextFactoryTest extends TestCase $_SERVER['http_proxy'] = 'http://username:password@proxyserver.net:3128/'; $_SERVER['no_proxy'] = '*'; - $context = StreamContextFactory::getContext('http://example.org', array('http' => array('method' => 'GET', 'header' => 'User-Agent: foo'))); + $context = StreamContextFactory::getContext('http://example.org', ['http' => ['method' => 'GET', 'header' => 'User-Agent: foo']]); $options = stream_context_get_options($context); - $this->assertEquals(array('http' => array( + $this->assertEquals(['http' => [ 'method' => 'GET', 'max_redirects' => 20, 'follow_location' => 1, - 'header' => array('User-Agent: foo'), - )), $options); + 'header' => ['User-Agent: foo'], + ]], $options); } public function testOptionsArePreserved(): void { $_SERVER['http_proxy'] = 'http://username:password@proxyserver.net:3128/'; - $context = StreamContextFactory::getContext('http://example.org', array('http' => array('method' => 'GET', 'header' => array('User-Agent: foo', "X-Foo: bar"), 'request_fulluri' => false))); + $context = StreamContextFactory::getContext('http://example.org', ['http' => ['method' => 'GET', 'header' => ['User-Agent: foo', "X-Foo: bar"], 'request_fulluri' => false]]); $options = stream_context_get_options($context); - $this->assertEquals(array('http' => array( + $this->assertEquals(['http' => [ 'proxy' => 'tcp://proxyserver.net:3128', 'request_fulluri' => false, 'method' => 'GET', - 'header' => array('User-Agent: foo', "X-Foo: bar", "Proxy-Authorization: Basic " . base64_encode('username:password')), + 'header' => ['User-Agent: foo', "X-Foo: bar", "Proxy-Authorization: Basic " . base64_encode('username:password')], 'max_redirects' => 20, 'follow_location' => 1, - )), $options); + ]], $options); } public function testHttpProxyWithoutPort(): void { $_SERVER['http_proxy'] = 'http://username:password@proxyserver.net'; - $context = StreamContextFactory::getContext('https://example.org', array('http' => array('method' => 'GET', 'header' => 'User-Agent: foo'))); + $context = StreamContextFactory::getContext('https://example.org', ['http' => ['method' => 'GET', 'header' => 'User-Agent: foo']]); $options = stream_context_get_options($context); - $this->assertEquals(array('http' => array( + $this->assertEquals(['http' => [ 'proxy' => 'tcp://proxyserver.net:80', 'method' => 'GET', - 'header' => array('User-Agent: foo', "Proxy-Authorization: Basic " . base64_encode('username:password')), + 'header' => ['User-Agent: foo', "Proxy-Authorization: Basic " . base64_encode('username:password')], 'max_redirects' => 20, 'follow_location' => 1, - )), $options); + ]], $options); } public function testHttpsProxyOverride(): void @@ -158,30 +158,27 @@ class StreamContextFactoryTest extends TestCase // Pointless test replaced by ProxyHelperTest.php self::expectException('Composer\Downloader\TransportException'); - $context = StreamContextFactory::getContext('https://example.org', array('http' => array('method' => 'GET', 'header' => 'User-Agent: foo'))); + $context = StreamContextFactory::getContext('https://example.org', ['http' => ['method' => 'GET', 'header' => 'User-Agent: foo']]); } /** * @dataProvider dataSSLProxy - * - * @param string $expected - * @param string $proxy */ public function testSSLProxy(string $expected, string $proxy): void { $_SERVER['http_proxy'] = $proxy; if (extension_loaded('openssl')) { - $context = StreamContextFactory::getContext('http://example.org', array('http' => array('header' => 'User-Agent: foo'))); + $context = StreamContextFactory::getContext('http://example.org', ['http' => ['header' => 'User-Agent: foo']]); $options = stream_context_get_options($context); - $this->assertEquals(array('http' => array( + $this->assertEquals(['http' => [ 'proxy' => $expected, 'request_fulluri' => true, 'max_redirects' => 20, 'follow_location' => 1, - 'header' => array('User-Agent: foo'), - )), $options); + 'header' => ['User-Agent: foo'], + ]], $options); } else { try { StreamContextFactory::getContext('http://example.org'); @@ -194,29 +191,29 @@ class StreamContextFactoryTest extends TestCase public function dataSSLProxy(): array { - return array( - array('ssl://proxyserver:443', 'https://proxyserver/'), - array('ssl://proxyserver:8443', 'https://proxyserver:8443'), - ); + return [ + ['ssl://proxyserver:443', 'https://proxyserver/'], + ['ssl://proxyserver:8443', 'https://proxyserver:8443'], + ]; } public function testEnsureThatfixHttpHeaderFieldMovesContentTypeToEndOfOptions(): void { - $options = array( - 'http' => array( + $options = [ + 'http' => [ 'header' => "User-agent: foo\r\nX-Foo: bar\r\nContent-Type: application/json\r\nAuthorization: Basic aW52YWxpZA==", - ), - ); - $expectedOptions = array( - 'http' => array( - 'header' => array( + ], + ]; + $expectedOptions = [ + 'http' => [ + 'header' => [ "User-agent: foo", "X-Foo: bar", "Authorization: Basic aW52YWxpZA==", "Content-Type: application/json", - ), - ), - ); + ], + ], + ]; $context = StreamContextFactory::getContext('http://example.org', $options); $ctxoptions = stream_context_get_options($context); $this->assertEquals(end($expectedOptions['http']['header']), end($ctxoptions['http']['header'])); @@ -226,7 +223,7 @@ class StreamContextFactoryTest extends TestCase { $_SERVER['http_proxy'] = 'http://username:password@proxyserver.net:3128/'; - $options = array(); + $options = []; $options = StreamContextFactory::initOptions('https://example.org', $options); $headers = implode(' ', $options['http']['header']); @@ -241,7 +238,7 @@ class StreamContextFactoryTest extends TestCase $_SERVER['http_proxy'] = 'http://username:password@proxyserver.net:3128/'; - $options = array(); + $options = []; $options = StreamContextFactory::initOptions('https://example.org', $options, true); $headers = implode(' ', $options['http']['header']); diff --git a/tests/Composer/Test/Util/SvnTest.php b/tests/Composer/Test/Util/SvnTest.php index 4f5d2eaec..3b2509200 100644 --- a/tests/Composer/Test/Util/SvnTest.php +++ b/tests/Composer/Test/Util/SvnTest.php @@ -38,11 +38,11 @@ class SvnTest extends TestCase public function urlProvider(): array { - return array( - array('http://till:test@svn.example.org/', $this->getCmd(" --username 'till' --password 'test' ")), - array('http://svn.apache.org/', ''), - array('svn://johndoe@example.org', $this->getCmd(" --username 'johndoe' --password '' ")), - ); + return [ + ['http://till:test@svn.example.org/', $this->getCmd(" --username 'till' --password 'test' ")], + ['http://svn.apache.org/', ''], + ['svn://johndoe@example.org', $this->getCmd(" --username 'johndoe' --password '' ")], + ]; } public function testInteractiveString(): void @@ -55,7 +55,7 @@ class SvnTest extends TestCase $this->assertEquals( $this->getCmd("svn ls --non-interactive -- 'http://svn.example.org'"), - $reflMethod->invokeArgs($svn, array('svn ls', $url)) + $reflMethod->invokeArgs($svn, ['svn ls', $url]) ); } @@ -64,13 +64,13 @@ class SvnTest extends TestCase $url = 'http://svn.apache.org'; $config = new Config(); - $config->merge(array( - 'config' => array( - 'http-basic' => array( - 'svn.apache.org' => array('username' => 'foo', 'password' => 'bar'), - ), - ), - )); + $config->merge([ + 'config' => [ + 'http-basic' => [ + 'svn.apache.org' => ['username' => 'foo', 'password' => 'bar'], + ], + ], + ]); $svn = new Svn($url, new NullIO, $config); $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCredentialString'); @@ -85,13 +85,13 @@ class SvnTest extends TestCase $config = new Config(); $config->merge( - array( - 'config' => array( - 'http-basic' => array( - 'svn.apache.org' => array('username' => 'foo', 'password' => 'bar'), - ), - ), - ) + [ + 'config' => [ + 'http-basic' => [ + 'svn.apache.org' => ['username' => 'foo', 'password' => 'bar'], + ], + ], + ] ); $svn = new Svn($url, new NullIO, $config); @@ -108,13 +108,13 @@ class SvnTest extends TestCase $config = new Config(); $config->merge( - array( - 'config' => array( - 'http-basic' => array( - 'svn.apache.org' => array('username' => 'foo', 'password' => 'bar'), - ), - ), - ) + [ + 'config' => [ + 'http-basic' => [ + 'svn.apache.org' => ['username' => 'foo', 'password' => 'bar'], + ], + ], + ] ); $svn = new Svn($url, new NullIO, $config); diff --git a/tests/Composer/Test/Util/TlsHelperTest.php b/tests/Composer/Test/Util/TlsHelperTest.php index b2692d473..58c4cd374 100644 --- a/tests/Composer/Test/Util/TlsHelperTest.php +++ b/tests/Composer/Test/Util/TlsHelperTest.php @@ -20,8 +20,6 @@ class TlsHelperTest extends TestCase /** * @dataProvider dataCheckCertificateHost * - * @param bool $expectedResult - * @param string $hostname * @param string[] $certNames */ public function testCheckCertificateHost(bool $expectedResult, string $hostname, array $certNames): void @@ -43,28 +41,28 @@ class TlsHelperTest extends TestCase public function dataCheckCertificateHost(): array { - return array( - array(true, 'getcomposer.org', array('getcomposer.org')), - array(true, 'getcomposer.org', array('getcomposer.org', 'packagist.org')), - array(true, 'getcomposer.org', array('packagist.org', 'getcomposer.org')), - array(true, 'foo.getcomposer.org', array('*.getcomposer.org')), - array(false, 'xyz.foo.getcomposer.org', array('*.getcomposer.org')), - array(true, 'foo.getcomposer.org', array('getcomposer.org', '*.getcomposer.org')), - array(true, 'foo.getcomposer.org', array('foo.getcomposer.org', 'foo*.getcomposer.org')), - array(true, 'foo1.getcomposer.org', array('foo.getcomposer.org', 'foo*.getcomposer.org')), - array(true, 'foo2.getcomposer.org', array('foo.getcomposer.org', 'foo*.getcomposer.org')), - array(false, 'foo2.another.getcomposer.org', array('foo.getcomposer.org', 'foo*.getcomposer.org')), - array(false, 'test.example.net', array('**.example.net', '**.example.net')), - array(false, 'test.example.net', array('t*t.example.net', 't*t.example.net')), - array(false, 'xyz.example.org', array('*z.example.org', '*z.example.org')), - array(false, 'foo.bar.example.com', array('foo.*.example.com', 'foo.*.example.com')), - array(false, 'example.com', array('example.*', 'example.*')), - array(true, 'localhost', array('localhost')), - array(false, 'localhost', array('*')), - array(false, 'localhost', array('local*')), - array(false, 'example.net', array('*.net', '*.org', 'ex*.net')), - array(true, 'example.net', array('*.net', '*.org', 'example.net')), - ); + return [ + [true, 'getcomposer.org', ['getcomposer.org']], + [true, 'getcomposer.org', ['getcomposer.org', 'packagist.org']], + [true, 'getcomposer.org', ['packagist.org', 'getcomposer.org']], + [true, 'foo.getcomposer.org', ['*.getcomposer.org']], + [false, 'xyz.foo.getcomposer.org', ['*.getcomposer.org']], + [true, 'foo.getcomposer.org', ['getcomposer.org', '*.getcomposer.org']], + [true, 'foo.getcomposer.org', ['foo.getcomposer.org', 'foo*.getcomposer.org']], + [true, 'foo1.getcomposer.org', ['foo.getcomposer.org', 'foo*.getcomposer.org']], + [true, 'foo2.getcomposer.org', ['foo.getcomposer.org', 'foo*.getcomposer.org']], + [false, 'foo2.another.getcomposer.org', ['foo.getcomposer.org', 'foo*.getcomposer.org']], + [false, 'test.example.net', ['**.example.net', '**.example.net']], + [false, 'test.example.net', ['t*t.example.net', 't*t.example.net']], + [false, 'xyz.example.org', ['*z.example.org', '*z.example.org']], + [false, 'foo.bar.example.com', ['foo.*.example.com', 'foo.*.example.com']], + [false, 'example.com', ['example.*', 'example.*']], + [true, 'localhost', ['localhost']], + [false, 'localhost', ['*']], + [false, 'localhost', ['local*']], + [false, 'example.net', ['*.net', '*.org', 'ex*.net']], + [true, 'example.net', ['*.net', '*.org', 'example.net']], + ]; } public function testGetCertificateNames(): void @@ -76,10 +74,10 @@ class TlsHelperTest extends TestCase $names = TlsHelper::getCertificateNames($certificate); $this->assertSame('example.net', $names['cn']); - $this->assertSame(array( + $this->assertSame([ 'example.com', 'getcomposer.org', 'composer.example.org', - ), $names['san']); + ], $names['san']); } } diff --git a/tests/Composer/Test/Util/UrlTest.php b/tests/Composer/Test/Util/UrlTest.php index 1d26967e2..d2c4e59a6 100644 --- a/tests/Composer/Test/Util/UrlTest.php +++ b/tests/Composer/Test/Util/UrlTest.php @@ -21,54 +21,48 @@ class UrlTest extends TestCase /** * @dataProvider distRefsProvider * - * @param string $url - * @param string $expectedUrl * @param array $conf - * @param string $ref */ - public function testUpdateDistReference(string $url, string $expectedUrl, array $conf = array(), string $ref = 'newref'): void + public function testUpdateDistReference(string $url, string $expectedUrl, array $conf = [], string $ref = 'newref'): void { $config = new Config(); - $config->merge(array('config' => $conf)); + $config->merge(['config' => $conf]); $this->assertSame($expectedUrl, Url::updateDistReference($config, $url, $ref)); } public static function distRefsProvider(): array { - return array( + return [ // github - array('https://github.com/foo/bar/zipball/abcd', 'https://api.github.com/repos/foo/bar/zipball/newref'), - array('https://www.github.com/foo/bar/zipball/abcd', 'https://api.github.com/repos/foo/bar/zipball/newref'), - array('https://github.com/foo/bar/archive/abcd.zip', 'https://api.github.com/repos/foo/bar/zipball/newref'), - array('https://github.com/foo/bar/archive/abcd.tar.gz', 'https://api.github.com/repos/foo/bar/tarball/newref'), - array('https://api.github.com/repos/foo/bar/tarball', 'https://api.github.com/repos/foo/bar/tarball/newref'), - array('https://api.github.com/repos/foo/bar/tarball/abcd', 'https://api.github.com/repos/foo/bar/tarball/newref'), + ['https://github.com/foo/bar/zipball/abcd', 'https://api.github.com/repos/foo/bar/zipball/newref'], + ['https://www.github.com/foo/bar/zipball/abcd', 'https://api.github.com/repos/foo/bar/zipball/newref'], + ['https://github.com/foo/bar/archive/abcd.zip', 'https://api.github.com/repos/foo/bar/zipball/newref'], + ['https://github.com/foo/bar/archive/abcd.tar.gz', 'https://api.github.com/repos/foo/bar/tarball/newref'], + ['https://api.github.com/repos/foo/bar/tarball', 'https://api.github.com/repos/foo/bar/tarball/newref'], + ['https://api.github.com/repos/foo/bar/tarball/abcd', 'https://api.github.com/repos/foo/bar/tarball/newref'], // github enterprise - array('https://mygithub.com/api/v3/repos/foo/bar/tarball/abcd', 'https://mygithub.com/api/v3/repos/foo/bar/tarball/newref', array('github-domains' => array('mygithub.com'))), + ['https://mygithub.com/api/v3/repos/foo/bar/tarball/abcd', 'https://mygithub.com/api/v3/repos/foo/bar/tarball/newref', ['github-domains' => ['mygithub.com']]], // bitbucket - array('https://bitbucket.org/foo/bar/get/abcd.zip', 'https://bitbucket.org/foo/bar/get/newref.zip'), - array('https://www.bitbucket.org/foo/bar/get/abcd.tar.bz2', 'https://bitbucket.org/foo/bar/get/newref.tar.bz2'), + ['https://bitbucket.org/foo/bar/get/abcd.zip', 'https://bitbucket.org/foo/bar/get/newref.zip'], + ['https://www.bitbucket.org/foo/bar/get/abcd.tar.bz2', 'https://bitbucket.org/foo/bar/get/newref.tar.bz2'], // gitlab - array('https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=abcd', 'https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=newref'), - array('https://www.gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=abcd', 'https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=newref'), - array('https://gitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.gz?sha=abcd', 'https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.tar.gz?sha=newref'), + ['https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=abcd', 'https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=newref'], + ['https://www.gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=abcd', 'https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=newref'], + ['https://gitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.gz?sha=abcd', 'https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.tar.gz?sha=newref'], // gitlab enterprise - array('https://mygitlab.com/api/v4/projects/foo%2Fbar/repository/archive.tar.gz?sha=abcd', 'https://mygitlab.com/api/v4/projects/foo%2Fbar/repository/archive.tar.gz?sha=newref', array('gitlab-domains' => array('mygitlab.com'))), - array('https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=abcd', 'https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=newref', array('gitlab-domains' => array('mygitlab.com'))), - array('https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=abcd', 'https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=65', array('gitlab-domains' => array('mygitlab.com')), '65'), - ); + ['https://mygitlab.com/api/v4/projects/foo%2Fbar/repository/archive.tar.gz?sha=abcd', 'https://mygitlab.com/api/v4/projects/foo%2Fbar/repository/archive.tar.gz?sha=newref', ['gitlab-domains' => ['mygitlab.com']]], + ['https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=abcd', 'https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=newref', ['gitlab-domains' => ['mygitlab.com']]], + ['https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=abcd', 'https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=65', ['gitlab-domains' => ['mygitlab.com']], '65'], + ]; } /** * @dataProvider sanitizeProvider - * - * @param string $expected - * @param string $url */ public function testSanitize(string $expected, string $url): void { @@ -77,24 +71,24 @@ class UrlTest extends TestCase public static function sanitizeProvider(): array { - return array( + return [ // with scheme - array('https://foo:***@example.org/', 'https://foo:bar@example.org/'), - array('https://foo@example.org/', 'https://foo@example.org/'), - array('https://example.org/', 'https://example.org/'), - array('http://***:***@example.org', 'http://10a8f08e8d7b7b9:foo@example.org'), - array('https://foo:***@example.org:123/', 'https://foo:bar@example.org:123/'), - array('https://example.org/foo/bar?access_token=***', 'https://example.org/foo/bar?access_token=abcdef'), - array('https://example.org/foo/bar?foo=bar&access_token=***', 'https://example.org/foo/bar?foo=bar&access_token=abcdef'), - array('https://***:***@github.com/acme/repo', 'https://ghp_1234567890abcdefghijklmnopqrstuvwxyzAB:x-oauth-basic@github.com/acme/repo'), + ['https://foo:***@example.org/', 'https://foo:bar@example.org/'], + ['https://foo@example.org/', 'https://foo@example.org/'], + ['https://example.org/', 'https://example.org/'], + ['http://***:***@example.org', 'http://10a8f08e8d7b7b9:foo@example.org'], + ['https://foo:***@example.org:123/', 'https://foo:bar@example.org:123/'], + ['https://example.org/foo/bar?access_token=***', 'https://example.org/foo/bar?access_token=abcdef'], + ['https://example.org/foo/bar?foo=bar&access_token=***', 'https://example.org/foo/bar?foo=bar&access_token=abcdef'], + ['https://***:***@github.com/acme/repo', 'https://ghp_1234567890abcdefghijklmnopqrstuvwxyzAB:x-oauth-basic@github.com/acme/repo'], // without scheme - array('foo:***@example.org/', 'foo:bar@example.org/'), - array('foo@example.org/', 'foo@example.org/'), - array('example.org/', 'example.org/'), - array('***:***@example.org', '10a8f08e8d7b7b9:foo@example.org'), - array('foo:***@example.org:123/', 'foo:bar@example.org:123/'), - array('example.org/foo/bar?access_token=***', 'example.org/foo/bar?access_token=abcdef'), - array('example.org/foo/bar?foo=bar&access_token=***', 'example.org/foo/bar?foo=bar&access_token=abcdef'), - ); + ['foo:***@example.org/', 'foo:bar@example.org/'], + ['foo@example.org/', 'foo@example.org/'], + ['example.org/', 'example.org/'], + ['***:***@example.org', '10a8f08e8d7b7b9:foo@example.org'], + ['foo:***@example.org:123/', 'foo:bar@example.org:123/'], + ['example.org/foo/bar?access_token=***', 'example.org/foo/bar?access_token=abcdef'], + ['example.org/foo/bar?foo=bar&access_token=***', 'example.org/foo/bar?foo=bar&access_token=abcdef'], + ]; } }