1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-17 03:47:04 +01:00
Commit Graph

180 Commits

Author SHA1 Message Date
Sergei Morozov
c2972dd759 Allow sebastian/diff 4.0 to be installed
This is required to allow installation of Psalm alongside PHPUnit 9 using Composer.
2020-02-07 10:56:31 -05:00
Matthew Brown
15e15037a0
Drop down semver req 2020-02-03 15:55:24 -05:00
Philip Hofstetter
f6983fd883 allow setting php version from config or composer.json
if a composer.json is present and a PHP version requirement is
configured, we set the php version to the minimal PHP version that
satisfies the composer requirement.

Additionally, this adds a `phpVersion` attribute to the <psalm> tag. If
that's set, it takes precedence over what has been detected in
composer.json.

And finally, the --php-version command line flag continues to work and
takes precedence over the setting in the <psalm> tag

this fixes #2628
2020-01-30 08:48:53 -05:00
Matthew Brown
05f8cfac65 Bump PHPUnit min dep 2020-01-29 08:54:58 -05:00
Scott Arciszewski
dbb630ec91 Allow Psalm to be installed on PHP 8 (#2660)
PHP 8 won't be released until later this year, but it'd be nice to be able to install Psalm without Composer complaining loudly.
2020-01-17 18:11:44 -05:00
Matthew Brown
cfbf0dfcef Bump Symfony console requirements 2020-01-12 11:28:50 -05:00
Andreas Möller
3eebed6c33 Fix: Remove unused friendsofphp/php-cs-fixer (#2603)
Co-authored-by: Matthew Brown <github@muglug.com>
2020-01-12 10:52:33 -05:00
Matthew Brown
fd25829488 Sorting packages in composer.json 2020-01-12 10:43:11 -05:00
Andreas Möller
3cfc2f87f9 Enhancement: Normalize composer.json (#2599) 2020-01-12 10:39:53 -05:00
Matthew Brown
8d9ad338fb Add whitelist of pre-checked extensions 2020-01-01 16:43:36 -05:00
Bruce Weirdan
4110ec351b Make travis green again (#2518)
* Bumped phpspec/prophecy version to prevent 7.4 deprecations

* Fix DOMDocument::$config type

This property was documented as containing DOMConfiguration object, but
in fact always returned `null` (see [php source](ee80567a83/ext/dom/document.c (L542))).

DOMConfiguration class is removed in PHP 8.

* Dropped unused use

* Allow to set PHP 8.0 as current version

* Fix CallMap issues for PHP 8.0

- Use both major and minor version to load deltas
- Don't load non-existent deltas
- Stop at lowest possible delta
2019-12-27 19:06:09 -05:00
Aurélien Delogu
7d5c44ab60 Update composer.json (#2496) 2019-12-21 08:52:46 +00:00
Matthew Brown
02fbf12337 Only warn about clauses in the currently-scanned conditional 2019-12-08 16:35:56 -05:00
Matthew Brown
a82ed91a00 Fix build 2019-12-01 17:18:07 -05:00
Matthew Brown
2c08321603 Ignore union types for now 2019-11-27 00:00:46 -05:00
Matthew Brown
d1fbd1fa26 Add working arrow-functions implementation 2019-11-26 23:52:26 -05:00
Brown
90cb3f4472 Speed up accessing node data
Ref #1837
2019-11-26 17:48:47 -05:00
Brown
ae10e6c130 Add polyfill for spl_object_id 2019-11-25 12:50:48 -05:00
LeSuisse
edeb37207f Allow usage of symfony/console v5 (#2366) 2019-11-22 08:56:40 -05:00
Brown
1b6b8fdba3 Pin PHP Parser to 4.2 for now 2019-11-08 12:18:28 -05:00
SignpostMarv
e9cd7917a4 symfony/process:^4.3 requires php:^7.1.3, adjust dependency constraint to prevent install on < 7.1.3 (#2141)
* symfony/process:^4.3 requires php:^7.1.3, adjust dependency constraint to prevent install on < 7.1.3

* remove 7.1 option
2019-09-18 15:03:12 -04:00
SignpostMarv
849d1e1574 shepherd plugin requires ext-curl (#2131) 2019-09-12 16:41:21 -04:00
Matthew Brown
da42be175f Apply PHPCS fixes
Fixes #1880
2019-07-05 16:27:53 -04:00
Ilija Tovilo
67c3726254 Implement signature help - closes #1841 (#1862)
* Implement signature help - closes #1841

* Add explicit signature count

* [LSP] Do analysis for every signatureHelp request

See here: https://github.com/vimeo/psalm/pull/1862#issuecomment-507007346

* Don’t language server information when checking property for init

* Fix signature help for functions

* Add try-catch around signature help Functions::getStorage()
2019-07-01 15:54:32 -04:00
LeSuisse
f29826b958 Fully qualify constants and function calls (#1849)
This should give a small performance boost.
Part of #1837.

The change is enforced via phpcs and can be autofixed
with phpcbf.
2019-06-26 16:52:29 -04:00
Ilija Tovilo
16768e363c Jump between parens when autocompleting method with parameters (#1839) 2019-06-24 07:51:12 -04:00
Barney Laurance
4c57c67e2f Add end to end tests that invoke psalm as a separate process (#1798)
* Add end to end tests that invoke psalm as a separate process

* Assert that psalm --init creates config file
2019-06-16 15:56:00 -04:00
Brown
d1630863ad Fix #1787 - prevent initialisation when nullable isn’t set 2019-06-14 16:53:40 -04:00
Brown
7af21b80a9 Add binary link 2019-06-10 14:01:47 -04:00
Jaik Dean
61203857a0 Require stable version of openlss/lib-array2xml 2019-06-06 07:06:07 -04:00
Matthew Brown
a581b4c443 Build Phar on 7.1 so it doesn’t get php73 polyfill
Fixes #1739
2019-06-04 19:14:12 -04:00
Matthew Brown
99a2d86661 Prevent installation of PHP7.3 polyfill 2019-06-04 01:58:50 -04:00
Gert de Pagter
6d25b1f9a2 Fix whitespace 2019-06-03 08:55:56 -04:00
Matthew Brown
07e74633d6
Add back phpmyadmin dev req 2019-06-01 20:06:36 -04:00
Matthew Brown
8b90f7e93e
Disable paratest 2019-06-01 19:25:59 -04:00
Matthew Brown
385a9b009e Add paratests 2019-06-01 19:08:37 -04:00
Bruce Weirdan
1b0158ad72 Fixed vimeo/psalm#1714 (#1715)
* Fixed vimeo/psalm#1714

Moved `isAbsolutePath()` into a functions file (`src/functions.php`)
that is now automatically loaded by composer autoload.

/cc: @jwage

* Dropped redundant bootstrap
2019-06-01 08:26:22 -04:00
Matthew Brown
a1eb191f57 Remove TSqlSelectString and related dependency 2019-05-20 23:14:41 -04:00
Brown
7708e1c489 Bump PHPUnit version 2019-05-20 13:58:14 -04:00
Brown
0f3385ce95 Use sebastian/diff 2019-05-17 11:26:44 -04:00
Matthew Brown
0d2fc4e774
Bump minimum PHPUnit version 2019-05-16 19:05:27 -04:00
Brown
0bd4dbcbc4 Bump to PHP 7.1
Fixes #1650
2019-05-16 18:36:36 -04:00
Matthew Brown
e08944cae0 Allow diff mode with --find-dead-code 2019-04-27 17:38:24 -04:00
Matthew Brown
bd48ba858e Add @SignpostMarv’s fixes for Windows tests 2019-03-31 19:08:55 -04:00
Brown
1f4191fcfa Pin PHPCS version 2019-03-19 11:46:51 -04:00
Brown
5beb26659e Add special type for SQL select strings for plugins to consume 2019-03-07 14:56:18 -05:00
Bruce Weirdan
191f8da41f Update psalm/plugin-phpunit 2019-03-02 08:43:19 -05:00
Aaron Piotrowski
b0d97843ce Update Amp usage
Fixed a few errors and used byte-stream for reading and writing.
2019-02-06 16:08:41 -05:00
Matthew Brown
263a4c8cf1 Use Amp for handling language server event loop 2019-02-06 16:08:41 -05:00
Tyson Andre
da32bcbe48 Use lowercase nikic/php-parser for composer 2.0 compatibility
Seen in composer 1.8.3:

> Deprecation warning: require.nikic/PHP-Parser is invalid, it should not
> contain uppercase characters. Please use nikic/php-parser instead. Make
> sure you fix this as Composer 2.0 will error.
2019-02-04 09:14:30 -05:00
Matthew Brown
37aef674a1 Remove unused library 2019-01-15 22:17:45 -05:00
Matthew Brown
fd0ab47b80 Fix #1118 - detect possible issues with unions of mixed 2018-12-08 13:18:55 -05:00
Brown
ca602f8e17 Fix language server crash after editing trait method names 2018-11-20 15:51:47 -05:00
Matthew Brown
ccef804282 Add 3.x to Psalm 2018-11-18 17:42:26 -05:00
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