mirror of
https://github.com/danog/psalm.git
synced 2025-01-22 05:41:20 +01:00
052d4f6217
* add ability to load plugins by class names - Plugins need to implement `__invoke(PluginFacade $psalm):void` method - Plugins are enabled by adding `<pluginClass class="Qualified\Class\Name"/>` - `PluginFacade` provides a single point of contact with Psalm, so that plugins cannot become coupled to Psalm internals * added `psalm-plugin` cli tool to manage plugins Available commands: `psalm-plugin list` - lists available and enabled plugins `psalm-plugin enable 'Plugin\Class\Name'` - enables plugin (modifies `psalm.xml`) `psalm-plugin disable 'Plugin\Class\Name'` - disables plugin (modifies `psalm.xml`) Plugin installation: `composer install plugin-vendor/plugin-package-name` Plugin authoring: Plugins are identified by package `type` field, which should contain `psalm-plugin` string. `extra.pluginClass` should refer to the name of the class implementing `__invoke(PluginFacade $psalm):void` function Todo: - better config file search - better output for `psalm-plugin` - better formatting for modified xml file - composer skeleton project for plugins - ability to refer to plugins by package name (cli only) - composer plugin to (optionally) enable plugin upon installation - documentation on plugin installation and authoring - interfaces for plugin dependencies - interface for plugin entry point - migration path for legacy plugins * documented previously undocumented plugin methods * split legacy plugin registration into a wrapper class also added `PluginApi` namespace and `RegistrationInterface` * reuse psalm's config search algorithm * enable/disable plugins by composer package name * allow specifying alternative config file name * whitelist PluginApi namespace three times, but well, it works now * interface for plugin entry points * psalm-plugin as a symfony console app * fixed errors found by psalm * suppressed false positive UnusedMethods * cs fix * better psalm-plugin output * don't leave empty `plugins` node to avoid old schema violation * removed junk file that shouldn't be there * cs fix * fixed phpunit failure (constant redefinition) * work around missing docblock in on symfony console * php 7.0 compatibility * allow `pluginClass` child elements as plugin configuration * decouple console commands from undelying implementation - introduce PluginListFactory - add `PluginList::enable(string $class)` and `PluginList::disable(string $class)` * PluginList tests * ComposerLock test * droppped debugging statement * added part of console command tests * added tests for EnableCommand * added DisableCommand tests * ignore unused args * ConfigFile test * disable travis cache in attempt to fix builds * nah, that didn't work * update for upstream changes * rebase fixes * namespaced `extra` entry for entry point * s/PluginFacade/PluginRegistrationSocket/g * Added $config parameter to PluginEntryPointInterface::__invoke() * cs fixes * entry point interface php7.0 compatibility * cleaned up old cruft - dropped todos I'm not going to pursues - locked entry point to be a class implementing entry point interface * fixed legacy plugins docs * Added RegistrationInterface::registerHooksFromClass() It mimics the way old plugins were registered in Psalm\Config, so handler classes extending Psalm\Plugin should be fully compatible with it. Since Psalm\Plugin-style plugin registration was moved to RegistrationSocket, LegacyPlugin now only load file-based plugins, so it was renamed to FileBasedPluginAdapter. * Converted EchoChecker plugin to composer-based format - Its subfolder is registered as a local composer package in the root composer.json, so it's directly installable with ``` composer require psalm/echo-checker-plugin ``` - Migration is trivial: drop the plugin into a separate folder, then add simple composer.json and the entry point class. * Updated docs * Don't reject hook handlers that inherit handling methods * strip void return type in stub file
83 lines
2.1 KiB
JSON
83 lines
2.1 KiB
JSON
{
|
|
"name": "vimeo/psalm",
|
|
"description": "A static analysis tool for finding errors in PHP applications",
|
|
"keywords": ["php", "code", "inspection"],
|
|
"type": "library",
|
|
"license": "MIT",
|
|
"authors": [
|
|
{
|
|
"name": "Matthew Brown"
|
|
}
|
|
],
|
|
"require": {
|
|
"php": "^7.0",
|
|
"nikic/PHP-Parser": "^4.0.2 || ^4.1",
|
|
"openlss/lib-array2xml": "^0.0.10||^0.5.1",
|
|
"muglug/package-versions-56": "1.2.4",
|
|
"php-cs-fixer/diff": "^1.2",
|
|
"composer/xdebug-handler": "^1.1",
|
|
"felixfbecker/language-server-protocol": "^1.2",
|
|
"felixfbecker/advanced-json-rpc": "^3.0.3",
|
|
"netresearch/jsonmapper": "^1.0",
|
|
"sabre/event": "^5.0.1",
|
|
"sabre/uri": "^2.0",
|
|
"webmozart/glob": "^4.1",
|
|
"webmozart/path-util": "^2.3",
|
|
"symfony/console": "^3.0||^4.0"
|
|
},
|
|
"bin": ["psalm", "psalter", "psalm-language-server"],
|
|
"autoload": {
|
|
"psr-4": {
|
|
"Psalm\\PluginApi\\": "src/Psalm/PluginApi",
|
|
"Psalm\\": "src/Psalm"
|
|
}
|
|
},
|
|
"autoload-dev": {
|
|
"psr-4": {
|
|
"Psalm\\Tests\\": "tests"
|
|
}
|
|
},
|
|
"config": {
|
|
"optimize-autoloader": true
|
|
},
|
|
"minimum-stability": "dev",
|
|
"prefer-stable": true,
|
|
"require-dev": {
|
|
"phpunit/phpunit": "^6.0 || ^7.0",
|
|
"squizlabs/php_codesniffer": "^3.0",
|
|
"php-coveralls/php-coveralls": "^2.0",
|
|
"bamarni/composer-bin-plugin": "^1.2"
|
|
},
|
|
"suggest": {
|
|
"ext-igbinary": "^2.0.5"
|
|
},
|
|
"scripts": {
|
|
"psalm": "./psalm --find-dead-code",
|
|
"standards": "phpcs",
|
|
"tests": [
|
|
"phpcs",
|
|
"phpunit"
|
|
],
|
|
"all-tests": [
|
|
"phpcs",
|
|
"./psalm --find-dead-code",
|
|
"phpunit"
|
|
]
|
|
},
|
|
"extra": {
|
|
"branch-alias": {
|
|
"dev-master": "2.x-dev",
|
|
"dev-1.x": "1.x-dev"
|
|
}
|
|
},
|
|
"provide": {
|
|
"psalm/psalm": "self.version"
|
|
},
|
|
"repositories": [
|
|
{
|
|
"type": "path",
|
|
"url": "examples/composer-based/echo-checker"
|
|
}
|
|
]
|
|
}
|