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

1213 Commits

Author SHA1 Message Date
Matt Brown
e49573e7f6 Fix #279 - make sure referenced vars updated always in or 2017-11-09 16:42:39 -05:00
Matt Brown
ff5ea32ea3 Fix #277 - infer stdClass from object cast 2017-11-09 15:58:09 -05:00
Matt Brown
6db3758b81 Fix #275 with bad sig 2017-11-09 15:36:21 -05:00
Tyson Andre
e2dd3db70f Fix phpdoc in psalm's codebase referring to missing params. (#273)
Also, don't use `@return self` in __construct, it returns void.
2017-11-08 23:32:22 -05:00
Matthew Brown
765d82548d Remove more dead code 2017-11-08 23:27:51 -05:00
Tyson Andre
b3505cfbef Get rid of unused variables in psalm's codebase (#272)
* Remove unused variables

* Fix more unused variables

* Fix remaining detected undefined variables

Other 20 detected undefined variable warnings were false positives.
2017-11-08 23:14:27 -05:00
Matthew Brown
a7b32beb4e Add better checks for array_rand’s signature 2017-11-08 21:56:54 -05:00
Matthew Brown
dd86513fc5 Fix #271 - remove invalid complaint about private overridden method 2017-11-08 21:27:23 -05:00
Matt Brown
6d14bf65d7 Loosen restrictions on compact(), fix #267 2017-11-08 09:37:58 -05:00
Matthew Brown
44c40dff4f Fix #270 by looking at root ids when analysing array assignment in loops 2017-11-08 08:23:34 -05:00
Matt Brown
750d18d20a Fix #266 - do better analysis of array_rand
And also have better fallback when accessing string key on object-like array
2017-11-07 17:38:54 -05:00
Matt Brown
ba426c9dbf Fix erroneous return types 2017-11-07 17:20:50 -05:00
Matt Brown
e0371aed62 Introduce file manipulation concept to plugins 2017-11-07 14:46:53 -05:00
Matt Brown
490e78e136 Add isset check for safety 2017-11-06 15:42:39 -05:00
Matt Brown
97de8f7684 Allow Psalm to check static call LHS vars 2017-11-06 15:37:49 -05:00
Matt Brown
4b573bde1f Fix get_class($e) !== checks 2017-11-06 12:04:38 -05:00
Matt Brown
81493a639e Add more robust property assignment when property not defined 2017-11-03 12:27:01 -04:00
Matthew Brown
a651fad6f0 Fix #263 - add support for @psalm-param and @psalm-var annotations 2017-11-02 21:45:17 -04:00
Matt Brown
b163c296ff Fix templated return types in traits 2017-11-02 15:07:39 -04:00
Matthew Brown
aeb9882281 Add back support for TObject property fetch 2017-10-29 17:44:13 -04:00
Matthew Brown
35e6cf8108 Change MissingInclude to MissingFile 2017-10-29 17:36:02 -04:00
Matthew Brown
afc8cb4068 Check for property fetch mocks 2017-10-29 17:33:26 -04:00
Matthew Brown
b618bd798d Add new issues for missing required files 2017-10-29 14:39:23 -04:00
Matthew Brown
51280c1670 Allow byref args of socket_select to pass through unchanged 2017-10-28 16:26:45 -04:00
Matthew Brown
24980cd7d7 Constrain user-defined functions and methods 2017-10-28 16:05:35 -04:00
Matthew Brown
45df0292b1 Never constrain by-ref array variables 2017-10-28 15:33:29 -04:00
Matthew Brown
bee14d184f Add better check for property 2017-10-28 15:17:32 -04:00
Matthew Brown
02dde911ce Allow DateTimeImmutable::__construct arg to be nullable 2017-10-28 14:53:25 -04:00
Matthew Brown
323da5ce13 Add callmap updates from Phan 2017-10-28 14:02:33 -04:00
Matthew Brown
30acb9e3b7 Improve array function byref understanding by hard-coding rules 2017-10-28 13:56:29 -04:00
Matthew Brown
3f9bd530fd Fix #262 - allow return type of simplexml functions to be false 2017-10-27 20:15:00 -04:00
Matt Brown
8b7d82ddf6 Fix #2 - suppress errors for single lines 2017-10-26 18:19:19 -04:00
Matt Brown
d06e844748 Fix issue simplifying callable types 2017-10-26 16:05:57 -04:00
Matt Brown
897c70f8f5 Add back support for switch-getclass ::class constants 2017-10-26 15:07:36 -04:00
Steffen Weber
30465518f7 Fix signature of "gmp_import"
According to the PHP manual, the second and third argument of "gmp_import" have default values and are therefore optional.

https://php.net/gmp_import
2017-10-25 09:12:20 -04:00
Matthew Brown
122b354c4c Ignore get_class and instanceof checks for arbitrary classes in traits 2017-10-24 00:01:43 -04:00
Matthew Brown
467bbba593 Prevent falsy values from leaking into the type system 2017-10-23 22:04:07 -04:00
Matt Brown
0c33db0a3e Fix #258 - tempnam can return false 2017-10-23 13:13:07 -04:00
Matt Brown
c850ef644d Add PossiblyFalseReference and PossiblyFalseArgument issues
Useful for catching error cases
2017-10-23 11:47:00 -04:00
Matthew Brown
a34de5b79c Fix #257 - prevent collapsing callable into string 2017-10-23 08:00:28 -04:00
Matthew Brown
e41e1fa57d Fix #256 - don’t crash when encountering types that match one another 2017-10-23 07:35:28 -04:00
Matthew Brown
2c18686c8c Fix #247 - allow is_callable checks on array 2017-10-22 21:07:06 -04:00
Matthew Brown
a85cd1db8a Add support for get_class and get_type negation checks 2017-10-22 20:17:04 -04:00
Matthew Brown
4d32c72ef8 Fix #250 and fix #255 - handle switch statements like PHP does 2017-10-22 19:53:53 -04:00
Matthew Brown
c7d55bf6de Improve aseertion finding by digging deeper into trivial comparisons 2017-10-22 19:11:28 -04:00
Matthew Brown
f9032924e6 Allow == true comparisons to be evaluated to !falsy 2017-10-22 12:09:22 -04:00
Matthew Brown
f6e01b5925 Change empty type assertions to "falsy"
As empty has a special meaning
2017-10-22 11:57:41 -04:00
Matthew Brown
032cd3b897 Fix #254 - catch parse exception when improving function types 2017-10-22 01:04:35 -04:00
Matt Brown
3c6a8a0b24 Fix #251 - allow Psalm to analyse Wordpress 2017-10-19 19:19:29 -04:00
Matt Brown
c395930a06 Fix missing function issue ref #251 2017-10-19 18:23:18 -04:00
Matt Brown
dbcec1be38 Fix #249 - get out of nested class 2017-10-19 14:40:38 -04:00
Matthew Brown
2e00fb19ee Fix #246 - amend return type for DateTime::createFromFormat 2017-10-16 00:47:48 -04:00
Matthew Brown
295792d550 Fix #235 - add psalm.xml option to support igbinary serializer 2017-10-15 12:38:47 -04:00
Matthew Brown
657d154288 CacheProvider -> ParserCacheProvider 2017-10-15 11:57:44 -04:00
Matthew Brown
00aaa4adaf Fix #242 - add --no-cache option 2017-10-13 21:27:20 -04:00
Matthew Brown
8c4a3734a3 Revert serialisation changes 2017-10-12 20:27:33 -04:00
Matthew Brown
38c8a1d9cf Stop analysing statements if expression has errors 2017-10-12 20:24:22 -04:00
Matthew Brown
b7f6d15a24 Don’t freak out over incorrectly-cased classes 2017-10-12 19:53:12 -04:00
Matthew Brown
d455e24958 Make shallow type comparison case insensitive ref #240 2017-10-12 19:46:00 -04:00
Matt Brown
024bcbc371 Fix #239 - warn about bad brackets 2017-10-12 14:02:06 -04:00
Bruce Weirdan
ed3e429d2c s/'mixed'/''/g 2017-10-12 09:21:49 -04:00
Bruce Weirdan
52962db24c Adjusted Closure methods signatures
This fixes the following false-positive:
```php
function a(): bool {
  $a = function(): bool { return true; }
  return $a->call(new stdClass);
}
```
where psalm previously complained about (wrongly) inferred type to be
Closure
2017-10-12 09:21:49 -04:00
Matthew Brown
1b7a5c2944 Fix #236 - incorrect operand issue text 2017-10-12 08:51:57 -04:00
Bruce Weirdan
f080e32ef0 Corrected case of Traversable typehints
Affected functions/methods:
* `iterator_apply()`
* `iterator_count()`
* `IteratorIterator::__construct()`
* `iterator_to_array()`

This fixes the following false-positive:
```php
class Iter extends IteratorIterator {
    public function __construct(Traversable $a) {
	parent::__construct($a);
    }
}
```
where psalm previously wanted `parent::__construct()` argument to be
`traversable` (all-lowercase).
2017-10-12 08:49:24 -04:00
Matthew Brown
deb489e82d Fix #232 - discard clauses when evaluating catch block 2017-10-10 23:09:19 -04:00
Matthew Brown
862d22e83c Fix #230 - invalidate root vars on $arr[]= assignment 2017-10-10 23:01:52 -04:00
Matthew Brown
b43c2d5f0c Fix #231 - add special case for === false checks 2017-10-10 22:36:33 -04:00
Matthew Brown
7ebffbcd2d Bump parser version 2017-10-07 15:06:47 -04:00
Matthew Brown
beea51d7bf Fix property check 2017-10-07 15:05:05 -04:00
Matthew Brown
cbc889a498 Add cache-clearing mechanism 2017-10-07 14:41:16 -04:00
Matthew Brown
e47198b326 Add workaround for Psalm checking itself on PHP 5.6 2017-10-07 11:38:51 -04:00
Matthew Brown
6ab693ceeb Add missing class 2017-10-07 11:31:18 -04:00
Matthew Brown
9774131876 Fix #224 - explicit string casts fail when no __toString present 2017-10-07 11:27:54 -04:00
Matthew Brown
483b4c75f3 Fix #223 - array_map with too few args should have issue 2017-10-07 10:33:19 -04:00
Matthew Brown
6b4bd47ddb Fix #181 and #225 - resolve problems with self in comments/return statements 2017-10-07 10:22:52 -04:00
Matthew Brown
1cc13bdeeb Prevent TNamedObject from having a leading slash 2017-10-06 23:35:16 -04:00
MacFJA
a38c36c597 Always generate report files, even if no errors and warnings 2017-10-02 07:38:22 -04:00
Steffen Weber
4145119268 Fix case of ZipArchive properties
The properties "numFiles" and "statusSys" use camelCase.

https://secure.php.net/manual/en/class.ziparchive.php
2017-09-26 10:38:06 -04:00
Matthew Brown
5bd6228708 Fix #220 - don’t worry about parent property access 2017-09-24 08:17:27 -04:00
Matt Brown
ee655e6f33 Fix #218 - strings passed to format always return string 2017-09-22 10:18:44 -04:00
Bruce Weirdan
ed0e9702ae Adjusted signatures of DateTime and friends
* __wakeup is void -> void, see http://php.net/manual/en/language.oop5.magic.php#object.wakeup
* DateTime::__construct() does not accept null as time
* DateTimeZone::getLocation() has no last $object parameter
* ditto for DateTimeZone::getName()
* ditto for DateTimeZone::getTransitions()
2017-09-22 10:06:24 -04:00
Matt Brown
1012c23ff5 Fix assertion checks 2017-09-21 16:31:19 -04:00
Matt Brown
d949165eb6 Fix #217 - bad param count for DateTimeImmutable::getTimezone 2017-09-21 15:37:05 -04:00
Matt Brown
3bc497b18e Fix #217 - bad param count for DateTimeImmutable::getTimezone 2017-09-21 15:36:26 -04:00
Matt Brown
6f911c7386 Emit more specific operand issues 2017-09-20 11:22:17 -04:00
Matthew Brown
e42e590442 Add more descriptive exception messages 2017-09-20 08:43:54 -04:00
Matthew Brown
1a9592fc62 Fix #215 where ReflectionMethod implementing class is not a parent class or parent interface 2017-09-19 23:35:37 -04:00
François Kooman
eb79cb7172 fix running Psalm on itself due to its use of json_encode 2017-09-18 16:14:01 -04:00
François Kooman
8e35a72cc3 fix json_encode return values
`json_encode` can also return `false`
2017-09-18 16:14:01 -04:00
Matt Brown
d380bf3f19 Fix #209 - fix issue with file load order results change 2017-09-18 16:10:08 -04:00
Matthew Brown
e84586cfaa Fix return type space issue 2017-09-16 15:08:11 -04:00
Matthew Brown
7c261d7d1f Add return after every special type 2017-09-16 15:00:50 -04:00
Matthew Brown
391696bc83 Use a blacklist, not a whitelist 2017-09-16 13:28:33 -04:00
Matthew Brown
3a8efec728 Add error for pass by reference 2017-09-16 13:16:21 -04:00
Matthew Brown
fc6b663c8a Only write files if they’re changed 2017-09-16 12:52:46 -04:00
Matthew Brown
9a3cb742cb Refactor docblock manipulation and add tests for it 2017-09-16 12:45:20 -04:00
Matthew Brown
995e92a8c3 Remove empty if block 2017-09-14 00:36:38 -04:00
Matthew Brown
2a4a6fc490 Exit early if checking iterable for methods 2017-09-14 00:32:14 -04:00
Matthew Brown
313e1c383c Fix edge-case issue with abstract class not fully implementing interface 2017-09-13 23:57:11 -04:00
Matt Brown
5b3531b5a5 Fix null coalescing on nullable output 2017-09-13 14:35:42 -04:00
Matt Brown
eee8442af6 Fix #199 - allow classes to suppress PropertyNotSetInConstructor warnings 2017-09-13 11:32:13 -04:00
Matt Brown
439a1ddc97 Exit early if a bad class is detected 2017-09-11 11:58:11 -04:00
Matt Brown
d1807cfb95 Improve checks for switch types 2017-09-11 11:58:11 -04:00
François Kooman
8a28ab4b26 Fix some cURL function return values (#208)
At least the functions referenced here can also return boolean
`false` according to the PHP manual. Add this information to the
CallMap file.
2017-09-10 21:49:51 -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
Matthew Brown
e89a2929d5 Infer types from numeric operations 2017-09-06 21:44:26 -04:00
Matthew Brown
9f9e8a1b30 Improve API for inference 2017-09-03 20:52:54 -04:00
Matthew Brown
11aa3558b7 Make sure encapsulated strings can also coerce param types 2017-09-02 19:48:59 -04:00
Matthew Brown
a0c27cee4f Allow param types to be inferred from presence of concat ops 2017-09-02 19:23:00 -04:00
Matthew Brown
a725009181 Only say we could not infer param type if we’re actively looking 2017-09-02 18:26:19 -04:00
Matthew Brown
6531e3bfb8 Throw exception if impossible state is reached 2017-09-02 18:22:44 -04:00
Matthew Brown
73694ab04e Suggest types when complaining of untype params
Ref #204
2017-09-02 18:15:52 -04:00
Matthew Brown
8aabcbce35 Introduce UntypedParam warnings when functions are missing param types 2017-09-02 11:18:56 -04:00
Matt Brown
1cc63fe718 Ignore leading slash in array_map methods 2017-08-30 13:45:41 -04:00
Matthew Brown
622217b708 Fix #205 - add file references at analysis stage too 2017-08-22 12:38:38 -04:00
Matthew Brown
fb656f3575 Fix #203 and detect invalid countable count calls 2017-08-19 13:30:33 -04:00
Matthew Brown
e4e6c2a6e6 Fix #201 - list/array assignment should invalidate clauses too 2017-08-18 23:14:38 -04:00
Matthew Brown
fbc6379275 Fix #202 - vars changed inside loops should invalidate clauses 2017-08-18 22:41:25 -04:00
Matt Brown
8c6835b928 Remove redundancy 2017-08-18 17:11:39 -04:00
Matt Brown
d106587737 Add better check for value 2017-08-18 17:10:57 -04:00
Matt Brown
3075f16308 Ignore static, self and parent in callable class names 2017-08-18 17:02:15 -04:00
Matt Brown
9a036cb4ab Fix resource signatures 2017-08-18 16:51:34 -04:00
Matt Brown
c626b7d68a Fix #200 - allow mapping of more callable strings, and callable arrays 2017-08-14 19:30:11 -04:00
Matt Brown
0b0e7aa662 Fix #197 - allow nested class and function definitions 2017-08-14 15:46:01 -04:00
Matt Brown
d6e2e786db Ignore self calls as well 2017-08-11 19:09:15 -04:00
Matt Brown
a7baa7e928 Support callable checks on inline-defined functions 2017-08-11 19:05:04 -04:00
Matt Brown
13d98b803d Check that callable string class exists first 2017-08-11 18:48:58 -04:00
Matt Brown
17a900ab54 Add ability to detect invalid callable functions 2017-08-11 18:30:58 -04:00
Matt Brown
396d214e3c Throw exception when function storage is missing 2017-08-08 14:45:47 -04:00
Matt Brown
8f9fdcb637 Create storage for plugins before scanning 2017-08-08 11:03:45 -04:00
Matt Brown
4b5a5ead74 Fix paradox detection for multiple clauses 2017-08-07 18:38:38 -04:00
Matt Brown
e9b50cd2f1 Fix #196 to prevent false positives 2017-08-07 17:52:09 -04:00
Matthew Brown
4175295113 Isolate where we load static storage objects (#195)
* Move FileChecker::$storage calls to provider

* Add ClassLikeStorageProvider

* Use ClassLikeStorageProvider everywhere

* Move storage arrays into providers
2017-07-29 15:05:06 -04:00
Matthew Brown
3859c3c3cf Narrow abstract check 2017-07-28 23:53:06 -04:00
Matthew Brown
c5952af6f0 Fix bug with trait implementing abstract method 2017-07-28 23:38:57 -04:00
Matt Brown
22b6dafe3c Fix #194 - carry over const definitions 2017-07-28 10:42:30 -04:00
Matt Brown
c8ec0dc650 Fix casing issue 2017-07-27 19:14:16 -04:00
Matt Brown
84f1993a2e Fix potential bug on case-sensitive OSes with badly-cased comment polluting code 2017-07-27 16:59:41 -04:00
Matt Brown
3e60b4b6ad Fix formatting 2017-07-27 16:15:17 -04:00
Matt Brown
aca295ef7d Build up file-class references on initial scan 2017-07-27 16:13:26 -04:00
Matthew Brown
2c1a0b197e Remove param typehint 2017-07-26 23:47:29 -04:00
Matthew Brown
0d88b4f2e7 Remove whitespace 2017-07-26 21:27:59 -04:00
Matt Brown
7b178a2b25 Add ability to stub constants 2017-07-26 19:54:22 -04:00
Matt Brown
0e67565b2c Return null if path exists 2017-07-26 19:36:41 -04:00
Matt Brown
b4a46429df Add FileChecker subclass analysis 2017-07-26 19:27:30 -04:00
Matt Brown
dbb1bf2e73 Add addSuppressedIssue API method back 2017-07-26 16:09:09 -04:00
Matt Brown
76ba419330 Group unused tests together 2017-07-25 17:04:58 -04:00
Matthew Brown
e29dd140e3 Refactor scanning and analysis, introducing multithreading (#191)
* Add failing test

* Add visitor to soup up classlike references

* Move a whole bunch of code into the visitor

* Move some methods back, move onto analysis stage

* Use the getAliases method everywhere

* Fix refs

* Fix more refs

* Fix some tests

* Fix more tests

* Fix include tests

* Shift config class finding to project checker and fix bugs

* Fix a few more tests

* transition test to new syntax

* Remove var_dump

* Delete a bunch of code and fix mutation test

* Remove unnecessary visitation

* Transition to better mocked out file provider, breaking some cached statement loading

* Use different scheme for naming anonymous classes

* Fix anonymous class issues

* Refactor file/statement loading

* Add specific property types

* Fix mapped property assignment

* Improve how we deal with traits

* Fix trait checking

* Pass Psalm checks

* Add multi-process support

* Delay console output until the end

* Remove PHP 7 syntax

* Update file storage with classes

* Fix scanning individual files and add reflection return types

* Always turn XDebug off

* Add quicker method of getting method mutations

* Queue return types for crawling

* Interpret all strings as possible classes once we see a `get_class` call

* Check invalid return types again

* Fix template namespacing issues

* Default to class-insensitive file names for includes

* Don’t overwrite existing issues data

* Add var docblocks for scanning

* Add null check

* Fix loading of external classes in templates

* Only try to populate class when we haven’t yet seen it’s not a class

* Fix trait property accessibility

* Only ever improve docblock param type

* Make param replacement more robust

* Fix static const missing inferred type

* Fix a few more tests

* Register constant definitions

* Fix trait aliasing

* Skip constant type tests for now

* Fix linting issues

* Make sure caching is off for tests

* Remove unnecessary return

* Use emulative parser if on PHP 5.6

* Cache parser for faster first-time parse

* Fix constant resolution when scanning classes

* Remove test that’s beyond a practical scope

* Add back --diff support

* Add --help for --threads

* Remove unused vars
2017-07-25 16:11:02 -04:00
Matt Brown
e83ea3a5fe Fix #192 - correct SessionHandlerInterface::gc signature 2017-07-24 17:58:38 -04:00
Matthew Brown
86f2a9981c Fix #190 by updating callmap 2017-07-19 08:54:01 -04:00