1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-13 09:47:29 +01:00
Commit Graph

176 Commits

Author SHA1 Message Date
Brown
46cbd0de8d Add phpunit psalm plugin 2018-11-14 13:19:38 -05:00
Bruce Weirdan
3fb0a2f336 reinstate extra.psalm "namespace"
Existing plugins have been updated as well (skeleton, doctrine-collections)

Also fixed path to echo-checker plugin so that it's once again directly
installable from the psalm distribution.
2018-11-14 08:31:02 -05:00
Bruce Weirdan
563eb3183b Mark psalm-plugin as a cli binary
So that it's available in `vendor/bin`
2018-11-12 17:43:58 -05:00
Bruce Weirdan
a338e76ef6 Plugin interface segregation (#1076)
* Split Plugin into PluginApi\Hook\* interfaces

* dropped Psalm\Plugin

* updated docs

* s/PluginApi/Plugin/g
2018-11-12 11:20:59 -05:00
Bruce Weirdan
052d4f6217 Plugin loading (#855)
* 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
2018-11-10 23:23:36 -05:00
Matthew Brown
fe25530cad Fix #1073 - relax constraints around missing reflected methods and PHP Parser version 2018-11-10 20:56:31 -05:00
Brown
4da1fd0e40 Change psalm --server to psalm-language-server 2018-10-18 14:34:46 -04:00
Brown
adb26ceea0 Fix #1028 - downgrade php-parser requirement 2018-10-18 12:32:26 -04:00
Brown
54fdda651b Add server mode support with error reporting only 2018-10-17 15:54:31 -04:00
Matt Brown
ebe9452511 Bump XDebugHandler version 2018-07-17 15:24:20 -04:00
Bruce Weirdan
c1e21fcf5d Update PHPUnit (#888)
* upgrade phpunit, test with low and high deps

* work around possibly-anonymous test cases introduced by newer PHPUnit

* Alternative TestCase::getName() nullability workaround

Previous workaround was failing due to PHP warnings on 7.1 or 7.2
(depending on specific signature). There's just no signature that would
be working for all 4 variants of (ver / dep) matrix.

* don't disable xdebug if it's not enabled

* allowed 7.0/high to fail until PHPUnit 6.5.10 is released

see sebastianbergmann/phpunit#3209
2018-07-13 17:44:50 -04:00
Matt Brown
a5f3e20980 Remove friendsofphp/php-cs-fixer as it’s not necessary for dev build 2018-07-12 17:56:21 -04:00
Matt Brown
ecf4ed65e3 Fix self.version ref 2018-07-10 11:39:38 -04:00
Matt Brown
0ae68733af Provide a psalm/psalm package 2018-07-10 11:01:05 -04:00
Alexey Kopytko
60d8977739 Simplify installation of a development version (#877) 2018-07-09 23:14:28 -04:00
Théo FIDRY
59d32566d2 Simplify the PHAR build script 2018-05-15 14:30:14 -04:00
Matt Brown
6afaf5aae9 Make Psalm compatible with PHP Parser 4 2018-04-17 13:06:02 -04:00
Matthew Brown
f604ed99d5 Bump composer version of package-versions 2018-03-26 23:43:54 -04:00
Matthew Brown
0ac526fecd Use v1 composer/xdebug-handler 2018-03-08 16:42:53 -05:00
Bruce Weirdan
9a27583253 replace composer/composer with composer/xdebug-handler
Fixes vimeo/psalm#349

Note: there's no stable release at the moment, so it's using dev-master
for now.
2018-03-08 16:42:53 -05:00
Matthew Brown
1982d08573 Undo prepend-autoloader change 2018-03-03 13:47:09 -05:00
Matthew Brown
33827d4eeb Don’t prepend autoloader 2018-03-03 13:40:02 -05:00
Tyson Andre
7c4683784f Add a script to run the same tests as jenkins locally
Make `composer tests` use only phpcs

Also add `composer all-tests`, which also runs the self-check.

php-cs-fixer was removed from .travis.yml earlier.
I'm guessing that composer was overlooked?

The goal is to make it easy to create PRs passing travis checks.
2018-02-19 15:34:26 -05:00
Matthew Brown
58be09d36b Bump suggested igbinary version 2018-02-19 11:16:13 -05:00
Matthew Brown
634375ae94 Make igbinary the default serializer
Fix #484 and fix #527
2018-02-19 11:14:07 -05:00
Nicky Robinson
8e77ff1ce9 Throw error if magic getter or setter called for undefined property or invalid type specified with annotations (#500)
* Fix path to psalm

* If a magic getter or setter is used to access a property on a class
that is not defined but a `@property` annotation for the property
exists, throw an error. If no `@property` annotation exists, it's not
an error because you're allowed to make magic getters and setters do
crazy things.

Fixes #480

* Move logic to a better place to avoid duplicate checks

* Move logic into function

* Remove some nesting

* Check psalm-seal-properties and property type correctly
2018-02-09 19:37:09 -05:00
Matthew Brown
456a2ebaaa Add --dry-run option 2018-01-07 17:25:23 -05:00
Matthew Brown
5bae869dc6 Break file manipulation out into Psalter 2018-01-07 17:25:23 -05:00
Matthew Brown
30754bcd52 Allow more versions for php-cs-fixer 2018-01-02 20:47:11 -05:00
Matthew Brown
236fa893a8 Update PackageVersions version to one that doesn’t replace other similar packages 2018-01-01 09:53:21 -05:00
Matthew Brown
a26aecd45b Use non-clashing name for package versions 2018-01-01 09:25:32 -05:00
Matthew Brown
8efc939a5f Move Psalm execution code into PHP file that Psalm can analyse 2017-12-29 17:02:56 -05:00
Matt Brown
6fedeb647c Bump composer/composer version 2017-12-18 16:11:49 -05:00
Matthew Brown
e4f0dcaae3 Update php-parser 2017-12-14 09:14:23 -05:00
Matthew Brown
6c735b7699 Make coverage work proper good 2017-12-14 01:10:20 -05:00
Matthew Brown
a151fe5d3e
Add code coverage checks by @SignpostMarv (#388)
* Add code coverage checks

* Add coveralls badge
2017-12-14 00:40:22 -05:00
Matt Brown
d6960f526c Remove testing support for 7.2 2017-11-30 19:11:06 -05:00
Matt Brown
062d46c132 Update to latest php-cs-fixer 2017-11-30 19:00:09 -05:00
Matthew Brown
d21cb08e31 Bump package-versions version 2017-11-13 22:09:12 -05:00
Matthew Brown
7f3f30c0ab Use different package-versions module 2017-11-13 21:46:11 -05:00
Jon Ursenbach
fe514b6a9f Adding a --version argument to the Psalm executable. (#226)
* Adding a `--version` argument to the Psalm executable.

* Using ocramius/package-versions instead of hardcoding a version.

* Backporting PackageVersions to a PHP 5.6+ compatible fork.
2017-11-11 12:11:11 -05:00
Matthew Brown
92ec985ac0 Allow different versions of lib-array2xml 2017-09-13 22:07:44 -04:00
Matthew Brown
93cff78101 Do not require latest lib2xml 2017-09-13 21:53:41 -04:00
MacFJA
c4ce8bede9 Add XML as possible output format + add report generation (#206)
* Add XML as possible output format + add report generation

* Add missing xml root node

* Change XML generator (previous one don't escape '<' and '>')

* Change option (only one option) + unit test
2017-09-08 11:18:48 -04:00
SignpostMarv
07bab52aca adding editorconfig that seems to match the php files (#163)
* adding editorconfig that seems to match the php files

* adding additional check covered by travis

* trailing line
2017-06-26 00:22:05 -04:00
Sergei Morozov
a3bedb4045 Moved dependencies friendsofphp/php-cs-fixer and squizlabs/php_codesniffer to "require-dev" (#170) 2017-06-18 14:39:06 -04:00
SignpostMarv
adef59629a scrutinizer-ci (#152)
* swapping phpcs for php-cs-fixer

* workaround for php-cs-fixer treating parenthesis following echo as the function call variant

* amending rules

* blank_line_before_return

* majority of files pass with these disabled, could remove later

* combine_consecutive_unsets

* concat_space

* placeholder for if vimeo/psalm ever goes php:^7.0

* function_to_constant

* disabling include

* linebreak_after_opening_tag, lowercase_cast, magic_constant_casing

* mb_str_functions disabled

* method_separation

* native_function_casing

* native_function_invocations

* new_with_braces disabled to match usage

* no_alias_functions

* no_blank_lines_after_class_opening

* no_blank_lines_after_phpdoc

* no_blank_lines_before_namespace

* no_empty_comment

* no_empty_phpdoc

* no_empty_statement

* no_extra_consecutive_blank_lines

* no_leading_import_slash to discuss

* no_leading_namespace_whitespace

* no_mixed_echo_print

* no_multiline_whitespace_around_double_arrow

* no_multiline_whitespace_before_semicolons

* no_php4_constructor

* no_short_bool_cast

* no_short_echo_tag

* no_singleline_whitespace_before_semicolons

* no_spaces_around_offset

* no_trailing_comma_in_list_call

* no_trailing_comma_in_singleline_array

* no_unneeded_control_parentheses to discuss

* no_unreachable_default_argument_value

* no_unused_imports to discuss

* no_useless_else to discuss

* no_useless_return

* no_whitespace_before_comma_in_array

* no_whitespace_in_blank_line

* non_printable_character

* normalize_index_brace

* ordered_class_elements to discuss

* ordered_imports to discss

* php_unit_construct

* php_unit_dedicate_assert

* php_unit_fqcn_annotation

* php_unit_strict to discuss

* php_unit_test_class_requires_covers to discuss

* phpdoc_add_missing_param_annotation

* phpdoc_align to discuss

* phpdoc_annotation_without_dot to discuss

* phpdoc_indent to discuss

* phpdoc_inline_tag

* phpdoc_no_access

* phpdoc_no_alias_tag

* phpdoc_no_empty_return

* phpdoc_no_package

* phpdoc_no_useless_inheritdoc

* phpdoc_order to discuss

* phpdoc_return_self_reference

* phpdoc_scalar to discuss

* phpdoc_separation to discuss

* phpdoc_single_line_var_spacing

* phpdoc_summary to discuss

* phpdoc_to_comment to discuss

* phpdoc_trim to discuss

* phpdoc_types

* phpdoc_var_without_name

* pow_to_exponentiation

* pre_increment to discuss

* protected_to_private

* psr0 turned off

* psr4 turned on

* random_api_migration

* return_type_declaration to discuss

* self_accessor to discuss

* semicolon_after_instruction

* short_scalar_cast

* silenced_deprecation_error turned off

* simplified_null_return to discuss

* single_quote

* space_after_semicolon

* standardize_not_equals

* strict_comparison to discuss

* strict_param to discuss

* ternary_operator_spaces

* ternary_to_null_coalescing should be set to true if vimeo/psalm ever goes php:^7.0

* trailing_comma_in_multiline_array to discuss

* trim_array_spaces

* unary_operator_spaces

* whitespace_after_comma_in_array to discuss

* multi-version scrutinizer to match travis

* binary_operator_space

* not the best solution, but it works to exclude the call map from php-cs-fixer

* reducing verbosity of config where defaults were used

* dry run php-cs-fixer as part of tests

* disabling rule pending FriendsOfPHP/PHP-CS-Fixer#2739

* enabling no_unused_imports

* enabling ordered_imports

* ignoring user-defined .php_cs

* using $TRAVIS_COMMIT_RANGE to only test modified files

* enabling no_leading_import_slash

* conditionally testing everything

* filter output then perform exact match

* restoring phpcs via partial cherry pick of f65c618
2017-05-26 18:26:14 -04:00
Tomáš Votruba
a84e70c3d0 composer: bump to PHP 5.6, as in travis (#141) 2017-04-26 14:53:39 -04:00
Matthew Brown
13d84367d9 Restart with xdebug turned off 2017-02-18 17:49:05 -05:00
Matthew Brown
3c3224591a Update to latest PHP-Parser 2017-02-10 20:46:38 -05:00
Matthew Brown
11859e9cc0 Bump PhpParser version 2017-02-03 20:14:48 -05:00
Richard Fussenegger
f7c309d8f6
Fixed dependency bounds
Current definition of dependencies would result in **any** version being installed that is greater than the one specified. This is problematic since new major releases imply breaking changes and nothing ensures that psalm will be compatible with those updated dependencies. Using an operator that instructs Composer to ensure that this does not happen is therefore inalienable.
2017-01-19 21:18:46 +01:00
Matthew Brown
35e3b17545 Add phpcs as a dev dep cc @erunion 2016-12-23 23:50:57 +00:00
Matthew Brown
ea74388c7d Update PHPUnit to version without count bug 2016-12-23 21:50:31 +00:00
Matthew Brown
562f71b21f Add TypeDoesNotContainType issue and fix those issues in Psalm code 2016-12-11 13:48:11 -05:00
Matthew Brown
d094df30b6 Add phpunit config 2016-12-07 00:12:06 -05:00
Matt Brown
48e19fc7e5 Add support for closure docblocks 2016-12-06 19:41:52 -05:00
Matthew Brown
ff409a7f01 Update minimum requirements 2016-12-04 23:19:14 -05:00
Matthew Brown
3159d4e7aa Update nikic/php-parser for PHP 7.1 support 2016-12-03 20:04:42 -05:00
Matthew Brown
0cf3787b7f Be more lenient with requirements 2016-11-21 22:27:33 -05:00
Matthew Brown
09a1a92a8e Update composer for public repo 2016-11-21 17:08:17 -05:00
Jon Ursenbach
b744ba547a Adding a Composer run script for running a Psalm self check. 2016-11-06 22:15:03 -05:00
Jon Ursenbach
27c2db1d1d PSR-2 2016-11-02 17:50:54 -04:00
Jon Ursenbach
41c548c092 Adding PHPUnit as a dev dependency and a Composer script to run tests. 2016-10-20 11:54:55 -04:00
Jon Ursenbach
8ff2f8bddb "A non-empty PSR-4 prefix must end with a namespace separator." 2016-10-20 11:51:45 -04:00
Matthew Brown
2a2b5f7efc Add psalm bin folder 2016-07-26 15:12:44 -04:00
Matthew Brown
df28d24803 Change name to Psalm 2016-07-25 18:37:44 -04:00
Matthew Brown
fb51ef6d4c Update name here, too 2016-07-18 18:06:20 -04:00
Matthew Brown
e9bf13ecc0 Go back to regular nikic parser 2016-04-30 11:53:54 -04:00
Matthew Brown
c2817d4168 Fix booboo 2016-04-03 19:49:32 -04:00
Matthew Brown
b60213395b Add initial rudimentary tests 2016-04-03 19:47:06 -04:00
Steve Miketa
ea5948dedb Use dev-master alias 2016-03-07 13:51:42 -05:00
Steve Miketa
42b24bd5f0 Update php-parser package 2016-03-07 13:28:02 -05:00
Steve Miketa
d09e172b8b Update patched version of php-parser 2016-03-03 12:32:37 -05:00
Matthew Brown
0fff1b31f2 Fix ref 2016-01-07 18:45:20 -05:00
Matthew Brown
d689c6f765 Add composer 2016-01-07 18:33:37 -05:00