-
-
Couldn't load subscription status.
- Fork 37
Description
Problem/Motivation
Globally installing a WP-CLI package, Doctor, results in a Type Error within dealerdirect/phpcodesniffer-composer-installer.
At the very least, this fatal error could probably be checked for and handled more gracefully.
cc @schlessera @swissspidy in case the issue lies in Doctor / WP-CLI.
Expected behaviour
Running wp package install wp-cli/doctor-command:@stable should install cleanly. Inside my local dev environment, where there's no PHPCS-related packages installed, it works fine.
Actual behaviour
On my local host machine, where there's also a global Composer install of PHPCS packages, I get a fatal error.
Full stack trace:
$ wp package install wp-cli/doctor-command:@stable
Installing package wp-cli/doctor-command (@stable)
Updating /Users/gary/.wp-cli/packages/composer.json to require the package...
PHP Deprecated: Return type of Symfony\Component\Finder\Finder::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in phar:///usr/local/bin/wp/vendor/symfony/finder/Finder.php on line 566
{snip of multiple deprecation warnings like the above - https://github.com/wp-cli/package-command/issues/192}
Using Composer to install the package...
---
Loading composer repositories with package information
Found 332 package versions referenced in your dependency graph. 193 (58%) were optimized away.
Updating dependencies
Generating rules
Resolving dependencies through SAT
Looking at all rules.
Something's changed, looking at all rules again (pass #1)
Dependency resolution completed in 0.000 seconds
Analyzed 139 packages to resolve dependencies
Analyzed 179 rules to resolve dependencies
Nothing to modify in lock file
Installing dependencies from lock file
Nothing to install, update or remove
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more!
PHP Fatal error: Uncaught TypeError: Composer\Installer\InstallationManager::getInstallPath(): Argument #1 ($package) must be of type Composer\Package\PackageInterface, null given, called in /Users/gary/.composer/vendor/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php on line 558 and defined in phar:///usr/local/bin/wp/vendor/composer/composer/src/Composer/Installer/InstallationManager.php:614
Stack trace:
#0 /Users/gary/.composer/vendor/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php(558): Composer\Installer\InstallationManager->getInstallPath(NULL)
#1 /Users/gary/.composer/vendor/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php(358): PHPCSStandards\Composer\Plugin\Installers\PHPCodeSniffer\Plugin->getPHPCodeSnifferInstallPath()
#2 /Users/gary/.composer/vendor/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php(238): PHPCSStandards\Composer\Plugin\Installers\PHPCodeSniffer\Plugin->getPhpcsCommand()
#3 /Users/gary/.composer/vendor/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php(193): PHPCSStandards\Composer\Plugin\Installers\PHPCodeSniffer\Plugin->loadInstalledPaths()
#4 [internal function]: PHPCSStandards\Composer\Plugin\Installers\PHPCodeSniffer\Plugin->onDependenciesChangedEvent(Object(Composer\Script\Event))
#5 phar:///usr/local/bin/wp/vendor/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php(192): call_user_func(Array, Object(Composer\Script\Event))
#6 phar:///usr/local/bin/wp/vendor/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php(119): Composer\EventDispatcher\EventDispatcher->doDispatch(Object(Composer\Script\Event))
#7 phar:///usr/local/bin/wp/vendor/composer/composer/src/Composer/Installer.php(372): Composer\EventDispatcher\EventDispatcher->dispatchScript('post-update-cmd', false)
#8 phar:///usr/local/bin/wp/vendor/wp-cli/package-command/src/Package_Command.php(398): Composer\Installer->run()
#9 [internal function]: Package_Command->install(Array, Array)
#10 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandFactory.php(100): call_user_func(Array, Array, Array)
#11 [internal function]: WP_CLI\Dispatcher\CommandFactory::WP_CLI\Dispatcher\{closure}(Array, Array)
#12 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/Subcommand.php(497): call_user_func(Object(Closure), Array, Array)
#13 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(470): WP_CLI\Dispatcher\Subcommand->invoke(Array, Array, Array)
#14 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(493): WP_CLI\Runner->run_command(Array, Array)
#15 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(136): WP_CLI\Runner->run_command_and_exit()
#16 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(1228): WP_CLI\Runner->do_early_invoke('before_wp_load')
#17 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LaunchRunner.php(28): WP_CLI\Runner->start()
#18 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/bootstrap.php(84): WP_CLI\Bootstrap\LaunchRunner->process(Object(WP_CLI\Bootstrap\BootstrapState))
#19 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/wp-cli.php(35): WP_CLI\bootstrap()
#20 phar:///usr/local/bin/wp/php/boot-phar.php(20): include('phar:///usr/loc...')
#21 /usr/local/bin/wp(4): include('phar:///usr/loc...')
#22 {main}
thrown in phar:///usr/local/bin/wp/vendor/composer/composer/src/Composer/Installer/InstallationManager.php on line 614
Fatal error: Uncaught TypeError: Composer\Installer\InstallationManager::getInstallPath(): Argument #1 ($package) must be of type Composer\Package\PackageInterface, null given, called in /Users/gary/.composer/vendor/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php on line 558 and defined in phar:///usr/local/bin/wp/vendor/composer/composer/src/Composer/Installer/InstallationManager.php:614
Stack trace:
#0 /Users/gary/.composer/vendor/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php(558): Composer\Installer\InstallationManager->getInstallPath(NULL)
#1 /Users/gary/.composer/vendor/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php(358): PHPCSStandards\Composer\Plugin\Installers\PHPCodeSniffer\Plugin->getPHPCodeSnifferInstallPath()
#2 /Users/gary/.composer/vendor/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php(238): PHPCSStandards\Composer\Plugin\Installers\PHPCodeSniffer\Plugin->getPhpcsCommand()
#3 /Users/gary/.composer/vendor/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php(193): PHPCSStandards\Composer\Plugin\Installers\PHPCodeSniffer\Plugin->loadInstalledPaths()
#4 [internal function]: PHPCSStandards\Composer\Plugin\Installers\PHPCodeSniffer\Plugin->onDependenciesChangedEvent(Object(Composer\Script\Event))
#5 phar:///usr/local/bin/wp/vendor/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php(192): call_user_func(Array, Object(Composer\Script\Event))
#6 phar:///usr/local/bin/wp/vendor/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php(119): Composer\EventDispatcher\EventDispatcher->doDispatch(Object(Composer\Script\Event))
#7 phar:///usr/local/bin/wp/vendor/composer/composer/src/Composer/Installer.php(372): Composer\EventDispatcher\EventDispatcher->dispatchScript('post-update-cmd', false)
#8 phar:///usr/local/bin/wp/vendor/wp-cli/package-command/src/Package_Command.php(398): Composer\Installer->run()
#9 [internal function]: Package_Command->install(Array, Array)
#10 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandFactory.php(100): call_user_func(Array, Array, Array)
#11 [internal function]: WP_CLI\Dispatcher\CommandFactory::WP_CLI\Dispatcher\{closure}(Array, Array)
#12 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/Subcommand.php(497): call_user_func(Object(Closure), Array, Array)
#13 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(470): WP_CLI\Dispatcher\Subcommand->invoke(Array, Array, Array)
#14 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(493): WP_CLI\Runner->run_command(Array, Array)
#15 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(136): WP_CLI\Runner->run_command_and_exit()
#16 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(1228): WP_CLI\Runner->do_early_invoke('before_wp_load')
#17 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LaunchRunner.php(28): WP_CLI\Runner->start()
#18 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/bootstrap.php(84): WP_CLI\Bootstrap\LaunchRunner->process(Object(WP_CLI\Bootstrap\BootstrapState))
#19 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/wp-cli.php(35): WP_CLI\bootstrap()
#20 phar:///usr/local/bin/wp/php/boot-phar.php(20): include('phar:///usr/loc...')
#21 /usr/local/bin/wp(4): include('phar:///usr/loc...')
#22 {main}
thrown in phar:///usr/local/bin/wp/vendor/composer/composer/src/Composer/Installer/InstallationManager.php on line 614
Reverted composer.json.
The first fatal error points to this line.
Steps to reproduce
Here's my global composer (`~/.composer/composer.json`):
{
"name": "gamajo/global",
"description": "Local globally installed Composer packages.",
"license": "MIT",
"require": {
"automattic/vipwpcs": "^3",
"clue/graph-composer": "^1.1",
"ergebnis/composer-normalize": "^2.43",
"icanhazstring/composer-unused": "^0.8",
"phpcompatibility/php-compatibility": "dev-develop as 9.99.99",
"phpcompatibility/phpcompatibility-wp": "^2.1",
"phpcsstandards/phpcsdevtools": "^1.0",
"phpunit/phpunit": "^9.6",
"psy/psysh": "@stable"
},
"require-dev": {
"shipmonk/composer-dependency-analyser": "^1.5",
"tomasvotruba/lines": "^0.5.0"
},
"minimum-stability": "dev",
"prefer-stable": false,
"config": {
"allow-plugins": {
"dealerdirect/phpcodesniffer-composer-installer": true,
"ergebnis/composer-normalize": true,
"icanhazstring/composer-unused": true
}
}
}- Add the above
composer.jsonto ~/.composer/composer.json` - Run
composer g install/composer g update - Run
wp package install wp-cli/doctor-command:@stable
Environment
| Question | Answer |
|---|---|
| OS | Windows/Linux/Mac (preferably with some version info) |
| PHP version | 8.3.22 (same for older versions) |
| Composer version | 2.8.7 |
| PHP_CodeSniffer version | 3.13.2 |
| Composer PHPCS plugin version | 1.1.1 |
| Install type | Composer global |
| WP-CLI | 2.12.0 (same for 2.11.0 - no other WP-CLI packages installed) |
Output of ~/.composer/vendor/bin/phpcs --config-show:
Using config file: /Users/gary/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer.conf
installed_paths: /Users/gary/.composer/vendor/automattic/vipwpcs,/Users/gary/.composer/vendor/phpcompatibility/php-compatibility,/Users/gary/.composer/vendor/phpcompatibility/phpcompatibility-paragonie,/Users/gary/.composer/vendor/phpcompatibility/phpcompatibility-wp,/Users/gary/.composer/vendor/phpcsstandards/phpcsdevtools,/Users/gary/.composer/vendor/phpcsstandards/phpcsextra,/Users/gary/.composer/vendor/phpcsstandards/phpcsutils,/Users/gary/.composer/vendor/sirbrillig/phpcs-variable-analysis,/Users/gary/.composer/vendor/wp-coding-standards/wpcs
Tested against main branch?
- I have verified the issue still exists in the
mainbranch.