1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-13 17:57:37 +01:00
Commit Graph

2659 Commits

Author SHA1 Message Date
lhchavez
216f991b0c Normalize stringified type names (#2239)
This change makes stringified types more normalized. Concretely it sorts
all union types, reconciled types, and sorts the keys within object-like
types.
2019-10-17 01:14:33 -04:00
Matthew Brown
e8618371fb Refine isset checks 2019-10-17 01:09:21 -04:00
Matthew Brown
54a31f8cff Be more scrupulous about mixed vars 2019-10-17 00:29:51 -04:00
Matthew Brown
29902c8b99 Fix #2237 - suppress reconciling issues when inherited clauses couldn’t be resolved into types 2019-10-16 21:55:11 -04:00
Brown
d52d9b6552 Fix #2234 - treat continuous assertions on interfaces as redundant 2019-10-16 18:43:03 -04:00
Matthew Brown
9115ffd237 Fix #2215 - refine closure type if it doesn’t clash 2019-10-15 20:34:41 -04:00
Brown
b29227aaf6 Allow taints to be removed via annotation 2019-10-15 16:25:27 -04:00
Brown
22a12444df Fix #2220 - detect destructuring of non-array 2019-10-15 13:55:30 -04:00
Brown
aa5d82d30d Fix #2228 - load functions defined on traits included in a class 2019-10-15 12:09:08 -04:00
Brown
5e649f684c Fix erroneous return type resolution 2019-10-14 17:10:30 -04:00
Matthew Brown
8c6b234c2c Improve speed of taint analysis 2019-10-13 20:10:31 -04:00
Matthew Brown
7e2d00d6ed Allow taints to be added to root array types 2019-10-12 12:23:40 -04:00
Matthew Brown
4478d31593 Taint arrays in creation 2019-10-11 23:28:17 -04:00
Brown
3f837a3493 Fix #2192 - allow static return value on templated object 2019-10-11 12:02:41 -04:00
Matthew Brown
1a1b3a10a9 Fix #2225 - iterator_to_array can return a list 2019-10-10 23:47:11 -04:00
Matthew Brown
0556f28a9f Fix #2224 - make sure literal strings are put into appropriate arrays when templating 2019-10-10 23:38:57 -04:00
Matthew Brown
c419e0e798 Fix #2222 - check for @throws docblock inheritance 2019-10-10 22:44:21 -04:00
Brown
3658771bff Fix #2221 - variadic args are lists 2019-10-10 17:46:20 -04:00
Brown
67b32f463e Support assertions on lists 2019-10-10 10:57:43 -04:00
Brown
ead2e38985 fix test 2019-10-09 13:51:25 -04:00
Brown
e822ec7541 Unsetting list elements should turn to an array 2019-10-09 12:49:31 -04:00
Brown
54d5a25077 Remove known array offsets after altering array 2019-10-09 10:36:55 -04:00
Brown
b75720c32b Add more list types 2019-10-09 10:04:34 -04:00
Matthew Brown
c7600fde10 Fix #2217 - interpret callable self return type references properly 2019-10-09 07:40:42 -04:00
Matthew Brown
6a07757b9a Fix tests 2019-10-08 22:41:23 -04:00
Matthew Brown
38de68f507 array_values should preserve array non-emptiness 2019-10-08 22:22:58 -04:00
Matthew Brown
e620c2cfa4 Fix issue creating empty array offsets 2019-10-08 21:23:16 -04:00
Brown
23fcbec584 Add a few more list types 2019-10-08 19:06:16 -04:00
Brown
16c33d1565 Add support for list type
Fixes #2209
2019-10-08 18:44:46 -04:00
Brown
5265aee278 Process reconciliation more aptly 2019-10-08 14:33:06 -04:00
Brown
f175050837 Fix #2214 - use better way for marking types as changed 2019-10-07 16:59:05 -04:00
Guuzen
50df2868f2 Fix issue #2201 (#2212) 2019-10-06 15:28:41 -04:00
bugreportuser
064d4886c3 Track exception suppressions (#2211) 2019-10-04 14:01:58 -04:00
Brown
3de056cdc2 Remove test that’s a bit broken 2019-10-04 14:00:53 -04:00
Brown
94001aad4a Fix #2208 - handle templated property types appropriately 2019-10-04 13:51:36 -04:00
Jay Klehr
27961045a0 allowing null as type for mysqli real_connect for host and passwd parameters (#2210) 2019-10-04 13:07:28 -04:00
Brown
b0aaede9e1 Add support for checking integer array offsets 2019-10-04 11:08:08 -04:00
Matthew Brown
d85fbaec09 Add stricter checks after first isset 2019-10-03 21:34:56 -04:00
Brown
60214ab0c7 Allow assertions on arbitrary offsets without isset 2019-10-03 18:40:47 -04:00
Brown
ebe8bedb20 Allow assertions on class constants 2019-10-03 18:13:04 -04:00
Brown
ca06277f30 Add better support for previous key types 2019-10-03 15:43:17 -04:00
Brown
549aee47f1 Fix bug asserting array emptiness 2019-10-03 15:27:55 -04:00
Matthew Brown
3182aa51ee Add currently-broken test 2019-10-02 01:18:57 -04:00
Matthew Brown
24977fb021 Fix small bug 2019-10-02 01:17:45 -04:00
Bruce Weirdan
ff7b46435c Disable composer plugins for end-to-end tests (#2194)
When Psalm is installed with `composer global require vimeo/psalm` it
brings in `ocramius/package-versions`, effectively making it a global
composer plugin (so it runs for all `composer install`s, even for
totally unrelated projects).

However `ocramius/package-versions` has a peculiar quirk: it fails when
there's no `composer.lock` present, and there's no `composer.lock` for
projects that have no dependencies (like the end-to-end test projects).

The net result is that end-to-end tests always fail wherever Psalm is
installed globally.

This PR fixes it by disabling composer plugins for end-to-end tests.
2019-10-01 20:26:55 -04:00
Brown
d225374d6d Fix #2156 - do better inference after isset 2019-10-01 19:31:08 -04:00
Brown
56856f3da0 Break up assert tests 2019-10-01 17:09:34 -04:00
Matthew Brown
325579a0b8 Skip broken test 2019-10-01 09:14:26 -04:00
Matthew Brown
95c7b986c2 Fix formatting 2019-10-01 08:46:37 -04:00
Matthew Brown
2ffdf1bacc Fix undefined numeric offset 2019-10-01 08:45:36 -04:00
Matthew Brown
f8a2eae0e2 Fix #2186 - use expanded class name for aliased class 2019-09-30 22:15:48 -04:00
Matthew Brown
a9d0296252 Fix #2182 - allow modification to cloned objects inside 2019-09-30 22:07:20 -04:00
Matthew Brown
0f7925e769 Fix #2183 - evaluate return after do with break inside 2019-09-29 16:12:52 -04:00
Matthew Brown
4ec22cffca Fix #2184 - execute __invoke methods explicitly 2019-09-29 16:01:33 -04:00
Matthew Brown
9af8a9ac38 Fix #2181 - prevent class template types being wiped by anonymous class use 2019-09-27 12:58:32 -04:00
Brown
0972debfdd Add test for array assertion type 2019-09-26 15:57:51 -04:00
Brown
73eb71bada I think I understand strpos/strrpos a little better now 2019-09-26 15:31:56 -04:00
Brown
4832aa6075 Fix incorrect location for substitution 2019-09-26 15:22:33 -04:00
Brown
cf799d0926 Fix #2173 - remove @var annotations automatically 2019-09-26 15:08:05 -04:00
Brown
2c9a082b3e Fix #2172 - only complain about missing offset if it’s really missing 2019-09-25 19:02:49 -04:00
Brown
5e47cda6e5 Fix #2170 - allow @method annotations to override inherited immutable ones 2019-09-25 17:39:32 -04:00
Brown
648dda67ed Fix Psalm issues 2019-09-25 13:12:29 -04:00
Brown
1a48be8e9c Fix #2165 - coerce null array offset to zero 2019-09-25 12:17:37 -04:00
Brown
2d621f185a Fix #2166 - inherit twice from docblocks 2019-09-25 12:02:59 -04:00
Brown
267ae3a568 Move docblock inheritance tests into separate place 2019-09-25 12:02:59 -04:00
Matthew Brown
3205d1b752 Fix #2158 - loose equality should not imply equivalence 2019-09-22 10:54:17 -04:00
Matthew Brown
a5f79353ed Fix #2157 - don’t merge closures and callable params 2019-09-22 00:58:30 -04:00
Matthew Brown
9c629414a7 Fix #2138 - complain when inheriting from immutable interfaces without annotation 2019-09-21 22:52:30 -04:00
Matthew Brown
0ae04c9743 Fix #2148 - support arrays properly 2019-09-21 21:50:11 -04:00
Matthew Brown
264131c211 Fix #2121 - no internal error on funk assertion syntax 2019-09-21 21:22:31 -04:00
Matthew Brown
ae46c9e132 Fix #2114 - make builtin constructors mutation free 2019-09-21 21:07:27 -04:00
Matthew Brown
fdbea45534 Fix #2159 - only apply elseif conditions to vars that exist in main context 2019-09-21 16:58:31 -04:00
Matthew Brown
d387a1966c Fix array_slice return type 2019-09-21 15:50:37 -04:00
Brown
be4894c8e0 Fix #2155 - coerce false to 0, true to 1 in array offset 2019-09-20 15:21:38 -04:00
Brown
e6f90ab83f Fix #2146 - check count args length 2019-09-19 15:07:49 -04:00
Brown
c5ef2516b5 Fix #2150 - add detection for unnecessary @var annotations
And also remove them from codebase
2019-09-19 11:59:43 -04:00
Matthew Brown
9ad6c36d9b
Conditionally verify that array offsets exist (#2147)
* Check array offsets idea

* Clean up some issues

* Add a few light fixes

* Add docs
2019-09-18 14:21:06 -04:00
Brown
0ac9108814 Fix #2139 - allow comprehension of constant ternaries 2019-09-17 11:29:41 -04:00
Brown
6423a5e68a Fix #2145 - complain make byref params passed to closures mixed afterwards 2019-09-16 18:42:44 -04:00
Matthew Brown
0b4981f01b Fix #1551 - do better at inferring class constant types 2019-09-14 14:26:31 -04:00
Brown
944531b73b fix #2125 - Don’t assume function args are necessarily authoratative 2019-09-11 13:52:58 -04:00
Brown
8784812739 Fix #2116 - allow property set inside unserialize 2019-09-10 10:31:46 -04:00
Matthew Brown
deb36e8b27 Allow array_map alone when it uses a closure 2019-09-09 21:28:56 -04:00
Brown
a6baa2d04c Allow callables to be understood as pure
Fixes #2112
2019-09-09 12:11:04 -04:00
Brown
3c7fd94503 Add more test cases for @psalm-external-mutation-free 2019-09-09 11:23:51 -04:00
Brown
a1ea5c38c2 Clean up unnecessary annotation
Ref #2111
2019-09-09 11:20:47 -04:00
Brown
b49444b8ad Allow immutable objects to be cloned
Fixes #2111
2019-09-09 11:14:40 -04:00
Brown
21aa162d0a Make assert() pure
Fixes #2113
2019-09-09 10:43:10 -04:00
Brown
56c884845f Static methods inside @psalm-immutable class should be permitted
Fixes #2109
2019-09-09 10:38:55 -04:00
Matthew Brown
6b52b84bee Fix #2101 - use more accurate fallback when match isn’t found 2019-09-08 14:44:59 -04:00
Matthew Brown
d27935d109 Improve accuracy around array addition 2019-09-08 10:23:12 -04:00
Matthew Brown
b61d0c6dcd Fix #2104 - only treat @method returns as separate if attached to method name 2019-09-07 22:30:09 -04:00
Matthew Brown
85ae8f93d2 Clear out property assignments when necessary 2019-09-07 18:34:18 -04:00
Matthew Brown
e7a69f715d Fix #2106 - add defining class to converted template 2019-09-07 13:44:47 -04:00
lhchavez
ae2c6715a7 Allow @psalm-assert to propagate member assertions to the caller's context (#2100)
This change injects method call assertions that involve member variables
to the caller context by replacing `$this->` with the lhs of the member
call.

Fixes: #2099
2019-09-05 21:00:02 -04:00
Brown
071fae98b2 Fix #2095 - respect @method annotations even when method already exists 2019-09-04 09:42:12 -04:00
Brown
de5df1e36a Warn about unnecessary use of DateTimeImmutable 2019-09-03 13:49:15 -04:00
Matthew Brown
44838fce21 Fix test example 2019-09-01 22:13:16 -04:00
Matthew Brown
51e552665e Fix #2061 - add config to allow suppression of string increment issues 2019-09-01 17:49:37 -04:00
Matthew Brown
5f0514b3da Remove stray comma 2019-09-01 16:55:03 -04:00
Matthew Brown
9cbe389285 Fix #910 - dead code issues with abstract vendor method 2019-09-01 16:52:40 -04:00
Matthew Brown
b4178c7ee1 Fix #2013 - don’t add more specific return type when @inheritdoc present 2019-09-01 16:00:52 -04:00
Matthew Brown
914ef5a5dd Fix #2091 - $this properties should be replaced in trait types 2019-09-01 15:45:28 -04:00
Matthew Brown
da1f36b57f Fix #2089 - properly coerce arguments 2019-09-01 10:10:38 -04:00
Matthew Brown
0279c6f6d9 Allow mutation-free method calls in pure functions 2019-08-31 22:03:37 -04:00
Matthew Brown
dee2cf3281 Detect use of static inside pure function 2019-08-31 21:31:53 -04:00
Matthew Brown
dcc4de59df Change @immutable to @psalm-immutable 2019-08-31 18:43:45 -04:00
Matthew Brown
37d09cdefa Fix call to impure function 2019-08-31 15:01:53 -04:00
Matthew Brown
f20dc16295 Make @immutable work properly 2019-08-31 10:07:23 -04:00
Matthew Brown
4a38ab165f Fix erroneous marking of external-mutation-free method as unused 2019-08-31 10:02:11 -04:00
Matthew Brown
900cfc0f05 Improve handling of external-mutation-free objects created in pure functions 2019-08-31 09:49:32 -04:00
Matthew Brown
f096c3d29c Don’t identify impurity when checking property initialisation 2019-08-31 09:07:00 -04:00
Matthew Brown
7886d5a408 Add support for @psalm-mutation-free annotation on methods 2019-08-31 00:47:12 -04:00
Matthew Brown
504ccdab8c $a++, $a-- etc should be treated as assignments 2019-08-30 18:06:45 -04:00
Matthew Brown
d891217a48 Don’t complain about initialisation of external-mutation-free classes from pure context 2019-08-30 17:34:58 -04:00
Matthew Brown
bbde2d6239 Add support for @psalm-external-mutation-free 2019-08-30 17:26:55 -04:00
Matthew Brown
6d07663d70 Annotate method getters more accurately 2019-08-30 16:40:32 -04:00
Brown
b7b4baff8f Add support for @immutable
Fixes #1272
2019-08-30 12:36:35 -04:00
Brown
9bd7f21a9d Fix #2083 - don’t bludgeon method_exists first type 2019-08-29 14:27:25 -04:00
Brown
22ba3ada7b Fix #2081 - allow Assert::true to replace assert() calls 2019-08-29 11:53:36 -04:00
lhchavez
1f0aca00b3 Use the correct types for AssignmentRef (#2078)
This change assigns the type of the rhs expression to the variable that
will become a reference, as well as preventing clobbering of the rhs if
it is an already-typed variable.

Fixes: #2077
2019-08-27 23:19:09 -04:00
Brown
095ea1a554 Properly clone array when changing value 2019-08-27 17:00:00 -04:00
Brown
1cb8c3f6c4 Infer missing docblock-supplied types from constructor
Fixes #2071
2019-08-27 10:37:39 -04:00
Brown
3b865f6509 Fix #2048 - allow mixed array to be assigned specific string keys 2019-08-27 10:18:58 -04:00
Matthew Brown
853e92e7fc Fix #2073 - better understand assignments inside elseif 2019-08-26 22:55:28 -04:00
Brown
febd60dade Add better handling of catch-reassigned vars
Ref #2052
2019-08-26 11:41:15 -04:00
Matthew Brown
f4f4a32f08 Fix #2062 - treat function inside variable method call name as used 2019-08-26 00:47:46 -04:00
Matthew Brown
d09a427214 Don’t make test reliant on knowing about Exception 2019-08-26 00:24:56 -04:00
Matthew Brown
781e711243 Allow use of namespaced Resource class
Ref #2052
2019-08-26 00:08:18 -04:00
Matthew Brown
03f59ae05e Check other arguments of array_unshift/array_push
Ref #2052
2019-08-25 23:52:38 -04:00
Brown
80d9b5dc29 Add support for iterating over SimpleXMLElement 2019-08-23 14:15:20 -04:00
Brown
fef61e996e Propagate possibly-null issues onto fetched properties 2019-08-23 13:27:38 -04:00
Brown
f00ee740c0 Analyse encapsulated string when method not known
Ref #2052
2019-08-23 10:59:59 -04:00
Matthew Brown
738ba81185 Fix #2046 - trigger PossiblyNullArgument when in union with mixed 2019-08-22 23:26:04 -04:00
Matthew Brown
5a1604d088 Fix #2047 - left side of callable is a thing that is also kinda called 2019-08-22 22:06:22 -04:00
Brown
4fcbc0fdad Fix #2028 - warn when using deprecated class in function signature 2019-08-22 11:25:13 -04:00
Thomas Bley
149402abda Extend impure functions (#2042)
* extended impure functions, fixes #2038

* extended UnusedCodeTest #2038
2019-08-21 13:12:13 -04:00
Brown
9835943294 Fix #2041 - make sure property is always set 2019-08-21 11:25:08 -04:00
Brown
3001eb9d34 Move taint location to end 2019-08-21 09:53:00 -04:00
Brown
9696fb8dce Follow taint to source when reporting 2019-08-20 17:38:15 -04:00
Brown
95c61db513 Add a PossibleRawObjectIteration issue 2019-08-20 12:06:02 -04:00
Matthew Brown
302ed4b21b Support existing concatenation more better 2019-08-20 00:33:59 -04:00
Matthew Brown
73f245f91d Allow compounding method_exists types with || 2019-08-20 00:00:20 -04:00
Matthew Brown
17e7fe70c1 Fix #2035 more comprehensively 2019-08-19 22:45:24 -04:00
Matthew Brown
f5b63218f1 Revert "Fix #2035 - warn about erroneous casting"
This reverts commit d0f277a168.
2019-08-19 22:12:03 -04:00
Matthew Brown
d0f277a168 Fix #2035 - warn about erroneous casting 2019-08-19 21:49:45 -04:00
Brown
a3e9dec925 Allow multiple method_exists checks to inform type 2019-08-19 10:08:21 -04:00
Matthew Brown
920c2d83c3 Use types for method_exists checks in some places 2019-08-18 22:27:19 -04:00
Matthew Brown
b8bdaea09a Fix reconciliation of mixed to Traversable 2019-08-18 18:06:57 -04:00
Matthew Brown
9d62971006 Fix possible issue negating falsy assertion 2019-08-18 17:51:43 -04:00
Matthew Brown
6ea68e9f7f Clean up more unused @psalm-suppress annotations 2019-08-18 16:59:56 -04:00
Matthew Brown
c5f62d261d Remove redundant @psalm-suppress in Psalm’s codebsae 2019-08-18 16:10:12 -04:00
Matthew Brown
5d94e340ee Remove unused suppressions in tests 2019-08-18 15:34:32 -04:00
Matthew Brown
2a5e0d8f39 Fix #1444 - track unused suppressions 2019-08-18 14:27:50 -04:00
Matthew Brown
2146f73782 Prepare for tracking unused suppressions
Ref #1444
2019-08-18 12:25:48 -04:00
Matthew Brown
f5b9dfe543 Add support for @psalm-scope-this
Ref #2032
2019-08-18 11:18:10 -04:00
Matthew Brown
b6dc8f547e Fix #2031 - still get class const return type after defined check 2019-08-17 18:01:24 -04:00
lhchavez
c98c160907 Allow explicitly-annotated mixed assignments (#2030)
This change makes it possible to assign mixed expressions to variables
if an annotation is explicitly added to the variable. This allows the
use of `call_user_func` without needing to suppress issues.

Fixes: #1374
2019-08-17 11:22:43 -04:00
Matthew Brown
9c616aa5c6 Remove pure function calls when removing unused variables 2019-08-16 23:19:52 -04:00
Brown
43041836dd Fix #2026 - add support for calling __toString implicitly after method_exists 2019-08-16 11:33:58 -04:00
Brown
236a7ffd15 Fix #2027 - fix improperly retained callable check 2019-08-16 10:32:03 -04:00
Brown
538abbc54c Fix #2020 - allow static::CONST_NAME to have non-mixed type in final class 2019-08-15 10:41:30 -04:00
Pavel Batečko
3e549e275b Type $matches as an array if non-zero flags are passed to preg_match() (#2022)
* Type $matches as an array if non-zero flags are passed to preg_match()

* Add tests for preg_match() function call
2019-08-15 10:28:03 -04:00
Brown
a4d57e5524 Fix #2018 - prevent fatal error on class_aliased class reference 2019-08-15 10:17:27 -04:00
Brown
57386ab26e Fix #2023 - no UnusedVariable complaint when method is undefined 2019-08-15 09:51:40 -04:00
Brown
e25ce152d6 Fix #2014 - prevent unusedvariable false positive when redefined in assignment || 2019-08-15 09:43:43 -04:00
Brown
7622f11a20 Add a couple of skipped tests 2019-08-14 17:15:35 -04:00
Brown
e92896f145 Fix taint records 2019-08-14 09:52:59 -04:00
Matthew Brown
600999a3a8 Add better typing 2019-08-14 00:47:57 -04:00
Brown
c3949e3194 Improve taint protection for exec-related commands 2019-08-13 19:18:50 -04:00
Brown
2b2988b072 Fix #2019 - allow union in @throws 2019-08-13 15:44:18 -04:00
Brown
d6e084ec9c Remove false-positive for callmap function arg 2019-08-13 14:53:31 -04:00
Brown
55cfbdcd5f Fix erroneous complaint for str_replace 2019-08-13 14:26:25 -04:00
Brown
0468d11158 Detect function in array access op 2019-08-13 14:07:45 -04:00
Brown
da230bc9f1 Change the type of @throws error to UndefinedDocblockClass 2019-08-13 13:41:12 -04:00
Brown
b5614d03f8 Add detection for unused function calls 2019-08-13 13:15:23 -04:00
Matthew Brown
ef3771d643 Fix #2015 - complain about invalid @throws classes 2019-08-12 23:42:51 -04:00
Matthew Brown
d5b026839c Add support for different taint types ref #1990 2019-08-12 23:16:05 -04:00
Brown
58b6d8bed4 Fix #2012 - count(callable-array) is fine and always equals 2 2019-08-12 16:17:55 -04:00
Brown
10b8a94564 Fix #2007 - improve unused variable detection in always-entered loops 2019-08-12 16:01:24 -04:00
Brown
669b50e8b4 Fix erroneous callable parsing 2019-08-12 15:04:43 -04:00
Brown
4046b44903 fix #2010 - properties with defaults should work with static type 2019-08-12 14:29:14 -04:00
Matthew Brown
62451762fa Preserve type params when negating array on iterable type
Fixes #2005
2019-08-12 00:44:26 -04:00
Tyson Andre
b88fe2cfe0 Fix typos (#2003) 2019-08-11 17:13:43 -04:00
Matthew Brown
7ed30cd5b0 Add support for @readonly annotation 2019-08-11 16:01:37 -04:00
Matthew Brown
7c6b1581d3 Add warnings about uninitialised properties to mixed as well 2019-08-11 00:22:28 -04:00
Matthew Brown
e32b92be6b Fix #1986 - do better inference after isset on array offsets 2019-08-10 23:22:48 -04:00
Matthew Brown
1586cb249d Add protection for leaky assertions 2019-08-10 16:58:57 -04:00
Matthew Brown
af0331c251 Fix #1997 - fix reconciliation of arrays and traversables 2019-08-10 14:39:14 -04:00
Matthew Brown
60c0133fff Break apart reconciler 2019-08-10 13:22:21 -04:00
Matthew Brown
460120ec45 Fix #1994 - make assert-if-true work for $this properties 2019-08-10 09:12:02 -04:00
Brown
5254b7501e Fix #1996 - detect unused variable in static property name 2019-08-09 12:55:47 -04:00
Matthew Brown
53817ed40b Fix #1991 - allow overlapping code to subsume manipulations inside 2019-08-08 22:58:54 -04:00
Brown
cf53f5d825 Ignore spaces when array keys have $ at start 2019-08-08 18:01:08 -04:00
Brown
bdac01582d Fix #1989 - support fully-qualified params in @method annotations 2019-08-08 17:25:56 -04:00
Brown
955899ade0 Builtin functions are assumed to be pure 2019-08-07 15:21:15 -04:00
Matthew Brown
b5eb63bb2d Revert "Coerce value with array-offset to array|ArrayAccess"
This reverts commit a8a67bc7e7.
2019-08-07 00:36:45 -04:00
Matthew Brown
a8a67bc7e7 Coerce value with array-offset to array|ArrayAccess
Fixes #1986
2019-08-07 00:31:53 -04:00
Brown
14b37b95af Fix potential recursion 2019-08-06 17:29:44 -04:00
Brown
37d93141c4 Only register taints on known magic properties 2019-08-06 13:05:34 -04:00
Brown
17753865f3 Add detection to mixed params 2019-08-06 10:33:21 -04:00
Matthew Brown
8f6d432dd0 Add support for magic property comprehension 2019-08-05 23:19:22 -04:00
Brown
6eb62591ab Specialise calls when functions are pure 2019-08-05 18:33:33 -04:00
Brown
87bf907c1e Fix echo checks 2019-08-05 10:21:23 -04:00
Matthew Brown
b2c0993cdc Add framework for taint analysis to Psalm
Ref #611
2019-08-04 10:37:36 -04:00
Jeffrey Yoo
73a6fbe557 catch cases of invalid use of backslash (#1983) 2019-08-01 16:10:12 -04:00
Brown
6a213a60aa Make test name align with tested thing 2019-07-31 17:42:01 -04:00
Brown
3a1a3ebc47 Fix #1980 - don’t complain about UnusedVariable after continue 2019-07-31 17:35:56 -04:00
Matthew Brown
f718c2fca1 Fix #1974 - prevent bad property defaults on static properties 2019-07-29 22:18:46 -04:00
Matthew Brown
c887d907e3
Add missing return type 2019-07-28 20:42:35 -04:00
Matthew Brown
90854c4094 Fix broken behaviour when analysing interface test methods 2019-07-28 19:44:36 -04:00
Matthew Brown
f432cc0884 Fix #1846 - warn about missing interface return types 2019-07-28 19:03:12 -04:00
Matthew Brown
c356b579fd Prevent empty @template-extends docblock from being a fatal error
Fixes #1963
2019-07-28 16:47:06 -04:00
Matthew Brown
de932c4c18 Fix #1972 - improve understanding of how setcookie works 2019-07-28 16:40:35 -04:00
Matthew Brown
2f400381a5 Fix #1973 - bust method mutation cache when reloading language server 2019-07-28 10:05:51 -04:00
Brown
8cb5d012d9 Check expressions in variable name static calls 2019-07-25 09:45:11 -04:00
Matthew Brown
2c89a97f91 Fix #1970 - make sure reconciled types are templated 2019-07-25 08:33:27 -04:00
Matthew Brown
5a4a133f50 Fix #1970 - allow comparison to templated param class 2019-07-24 22:13:51 -04:00
Brown
5770a6c904 Add support for compact 2019-07-24 17:24:23 -04:00
Brown
ea2074b19b Allow suppression of unused variable issues 2019-07-24 17:01:41 -04:00
Brown
862f48503f Fix tests 2019-07-24 17:00:27 -04:00
Brown
e22e0ac92c Fix unused ref in assign op
Fixes #1968
2019-07-24 16:53:14 -04:00
Jeffrey Yoo
ed61bcafda Issue 1926 unused variable (#1967)
* add support for Psalter to remove UnusedVariable

* fix issues found by Psalm

* fix stylistic issues found by phpcs

* added more stylistic changes and suppressed UndefinedClass error for Psalm

* suppress TypeDoesNotContainType error for CheckTrivialExprVisitor

* fix whitespace issue raised by phpcs

* fix bug where partial removal of assignment by ref does not process '&' symbol

* Remove workspace files

* remove 'Array_' and 'ArrayItem' classes from blacklist and add 'New_' class to the blacklist
2019-07-24 16:48:54 -04:00
Brown
c283f0877d Analyse binary ops always 2019-07-22 18:04:52 -04:00
2e3s
f15cc7dd5b Mark private properties unused when referenced only in constructor (#1962)
* Mark private properties unused when referenced only in constructor

If a private property is used only in constructor then most likely
it's a dead code since there is no need to have the class property.
But such static properties can be accessed between the calls.

* Ignore the private property issue on alter

* Fix the related dead code psalm

* Add a missing condition into the test
2019-07-21 23:29:16 -04:00
Matthew Brown
76508e6d64 Improve behaviour of templated template assertions
Fixes #1956
2019-07-21 01:40:19 -04:00
Matthew Brown
3516b48173 Break out templated assertion tests 2019-07-21 01:10:33 -04:00
Bruce Weirdan
e0a59ce117 Fixed PHP 7.4 related issues (#1957)
- s/fn/f/g (fn is a reserved keyword in 7.4)
- ReflectionType::__toString() warning (this method is deprecated in 7.4)

Note that some issues are caused by `phpspec/propecy` code and will be
fixed when phpspec/propecy#432 lands. Most were caused by
`ReflectionType::__toString()` usage in
`Psalm\Internal\Codebase\Reflection` though.
2019-07-18 23:36:39 -04:00
Matthew Brown
8d63d5dc4e Add lookup for builtin functions 2019-07-18 23:30:44 -04:00
Matthew Brown
5583ae842e Refactor signature selection a little 2019-07-18 23:08:54 -04:00
Matthew Brown
0e6bd79a09 Allow completion from functions to work without namespacing cc @iluuu1994 2019-07-18 21:50:59 -04:00
Matthew Brown
3df248eea2 Add concept of purity to functions and methods 2019-07-18 01:31:48 -04:00
Matthew Brown
74e1b521a5 Add support for completing builtin class names
Fixes #1863
2019-07-17 22:50:57 -04:00
Matthew Brown
ab50c6ce2e Fix #1949 - check that aliased name doesn’t exist before transforming 2019-07-17 20:33:44 -04:00
Brown
59dd6393f5 Fix #1953 - support third arg for explode 2019-07-17 14:13:34 -04:00
Brown
28fbafa207 Break out tests for algebra 2019-07-15 16:08:38 -04:00
Matthew Brown
18da84c713 Fix #1937 - allow proper reconciliation on templated values 2019-07-15 01:26:08 -04:00
Sergey Melesh
af875439e7 Inherit throws docblock from parent class by default (#1947) 2019-07-14 17:29:04 -04:00
Sergey Melesh
ee1387473f Fix throws docblock inheritance (#1945) 2019-07-13 10:10:51 -04:00
Brown
7f0dcae0b2 Always evaluate property calls on mixed methods 2019-07-12 14:39:06 -04:00
Brown
1208437b4c Fix #1940 - allow proper evaluation of /a/b/../../ 2019-07-12 14:28:21 -04:00
Brown
12eeb8b320 Fix #1935 - clear stub grandchildren 2019-07-11 18:23:02 -04:00
Brown
7d05568e22 Add skipped test for broken stubbing behaviour
Ref #1935
2019-07-11 12:51:43 -04:00
Brown
73b1571bd7 Remove php version from default baseline generation 2019-07-11 10:41:44 -04:00
Brown
9aa0fd022c Fix potential coercion gotcha 2019-07-10 14:48:15 -04:00
Brown
2cb7625515 Fix #1932 - coerce empty array passed as template param to general 2019-07-10 13:54:06 -04:00
Brown
e7aadee88f Fix #1931 - narrow down property assignment 2019-07-10 13:49:11 -04:00
Brown
2c6854f403 Massage arg type after coerced param
Ref #1927
2019-07-10 12:12:51 -04:00
Brown
884a03078b Fix #1886 - derived types from templates in new calls should be coercable 2019-07-09 14:48:26 -04:00
Matthew Brown
6cbf499f14 Fix #1922 - ignore iterable/array when transforming assertions 2019-07-09 07:38:37 -04:00
Bruce Weirdan
173a40e769 Deprecated Psalm\isAbsolutPath in favor of Webmozart\PathUtil\Path::isAbsolute (#1921) 2019-07-07 21:20:12 -04:00
Bruce Weirdan
6a74cf96a1 Allow backslash after drive name (#1917)
* Allow backslash after drive name

Before, paths like `C:/path/to/something` were considered absolute, but
`C:\path/to/something` were not

Refs vimeo/psalm#1913

* Revert "Mark testPluginFilenameCanBeAbsolute incomplete on Windows (#1914)"

This reverts commit 210ac39d00.
2019-07-07 19:06:31 -04:00
Barney Laurance
210ac39d00 Mark testPluginFilenameCanBeAbsolute incomplete on Windows (#1914) 2019-07-07 15:21:25 -04:00
Matthew Brown
5c4ac97546 Fix #1915 - allow @psalm-assert-if-true to operate on $this 2019-07-07 15:06:03 -04:00
Matthew Brown
820eba1151 Add test for null init 2019-07-07 14:01:33 -04:00
Matthew Brown
cd715a60fd Fix #1909 - populate var scope if try always leaves 2019-07-07 13:52:43 -04:00
Matthew Brown
bceb4efde9 Fix #1911 - allow proper namespaces in union assertions 2019-07-07 09:14:23 -04:00
Barney Laurance
ea83068deb Allow resolving directories from config file location (continued) (#1910)
* Extract function getPsalmHelpText() from psalm.php

* Extract initialiseConfig from psalm.php

* Add -c as valid short option for psalter and psalm-refactor

* Use initialiseConfig in psalter, psalm-refactor and psalm-language-server as well as psalm

* Rely on psalm --alter resolving directory from config file in test

* Remove erronous condition for config file path

This code was based on me wrongly thinking that the config file location
was seprated from the argument name with a space instead of an equals
sign

* Use config dir as current dir in psalm and psalm-refactor, as with psalter and psalm-language-server

* Remove redundant duplicated code

* Refactor: move calls to \Psalm\Config::setComposerClassLoader inside initialiseConfig

* PHPCS fix

* Extract function get_path_to_config from command scripts

* Refactor - extract functions from \Psalm\Config::loadFromXML

* Refactor - reduce verbosity of config loading code

* Allow running e2e tests on windows

* Fix testCompactReport on Windows

* convert line endings to make testCompactReport pass on Windows
2019-07-07 08:55:53 -04:00
Barney Laurance
94f934627c Work in progress - resolve directories from config file location (#1904)
* Add resolveFromConfigFile config option

Treats all paths as relative to the location of the config file, not
the current working directory of the process.

This commit just changes psalm, further commits will be needed to
apply the change to psalter and the LSP server.

* Copy asset xml files into project root for testing, delete during teardown

Needed since paths are now resolved relative to the position of the
file.

Not sure why I only saw a test failre for 1.xml - would have expected it
for all eight files.

* Fix following rebase

* Move psalm --init handly code above working directory setting code

If there's no psalm.xml yet we can't use the location of psalm.xml to
set our working directory

* Move Psalm version output code above working directory resolution

Working directory doesn't need to be known to output version constant

* Rely on new config file based working directory in end to end test

* Dont use rely on config dir for --alter - not currently working

* Fix code style error

* Add failing test for supporting config without `resolveFromConfigFile="true"`

* Don't treat config directory as a path to check

* Document resolveFromConfigFile setting
2019-07-06 12:21:39 -04:00
Matthew Brown
e6bd30cc0b Allow closures to contain templated @var docblocks
Fixes #1865
2019-07-06 00:18:53 -04:00
Matthew Brown
d29c7b42d9 Fix #1869 - don’t memoize magic properties after set 2019-07-06 00:00:17 -04:00
Matthew Brown
cd33430616 Fix #1885 - allow comparison to templated class string 2019-07-05 22:57:38 -04:00
Matthew Brown
b4f03abca6 Fix #1886 - allow empty array to be coerced to a mixed one 2019-07-05 17:44:22 -04:00
Matthew Brown
da42be175f Apply PHPCS fixes
Fixes #1880
2019-07-05 16:27:53 -04:00
Matthew Brown
aa3df3f7a5 Add better support for preg_replace_callback 2019-07-05 10:40:05 -04:00
Matthew Brown
422d9944d8 Fix #1903 - inherit @method from parent interfaces 2019-07-04 22:39:28 -04:00
Matthew Brown
20b7ff1f9d Add unused test 2019-07-04 22:25:49 -04:00
Matthew Brown
6dd549b8a6 Fix #1900 - discard old references to code after an assignment 2019-07-04 17:35:33 -04:00
Matthew Brown
9c95dfad44 Skip failing test 2019-07-04 16:44:06 -04:00
Matthew Brown
d0f6f85dba Fix #1899 - detect dead code after array assignment 2019-07-04 16:38:31 -04:00
Matthew Brown
802016757c Fix #1891 - don’t enter class_alias if the class doesn’t exist 2019-07-04 15:46:24 -04:00
Matthew Brown
efe096c7ab Fix #1897 - add support for unions in @psalm-assert annotations 2019-07-04 15:05:55 -04:00
Matthew Brown
df3d7e1d2c Make line endings mostly all the same 2019-07-03 16:58:27 -04:00
Brown
5c76b3c82d Fix #1888 - add go-to-variable 2019-07-01 18:48:33 -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
Matthew Brown
220fa31404 Fix suppression 2019-06-30 11:14:05 -04:00
Matthew Brown
36e2ea6881 Fix #1822 - update use statements with classes 2019-06-30 11:12:50 -04:00
Matthew Brown
8aadf93402 Fix return type 2019-06-29 21:56:34 -04:00
Matthew Brown
62fb86aef0 Fix #1875 - improve printing of iterable type 2019-06-29 21:46:01 -04:00
Matthew Brown
ca53019d6b Simplify class completion lookup
Ref #1822
2019-06-29 21:32:26 -04:00
Matthew Brown
622ad800cc Don’t rescan if the problem is unbalanced braces 2019-06-29 00:22:41 -04:00
Matthew Brown
cb28c44228 Fix #1873 - allow spread operators in inferred property types 2019-06-28 22:28:35 -04:00
Brown
5943f6036e Fix #1859 - allow function_exists introspection when function exists 2019-06-28 10:48:30 -04:00
Brown
6514f2084c Fix #1860 - be less restrictive about class_exists checks 2019-06-28 10:17:59 -04:00
Brown
6b32565a9b Allow references to deprecated class inside the class 2019-06-27 13:36:39 -04:00
Brown
ba121a94e7 Allow union of class-strings in signature
Ref #1851
2019-06-27 11:44:35 -04:00
Brown
c4eb127f11 Fix treatment of class_exists 2019-06-27 10:17:11 -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
Brown
1864d9a2be Allow templated @var on return docblocks 2019-06-26 16:26:14 -04:00
Brown
5ed49c0c03 Fixed #1848 - allow static class strings to be compared 2019-06-26 15:11:16 -04:00
Matthew Brown
372a512a86 Don’t convert trait self to trait name 2019-06-26 00:28:43 -04:00
Matthew Brown
c66a106622 Improve performance by doing less cloning
Ref #1837
2019-06-26 00:14:06 -04:00
Matthew Brown
70a1696a04 Limit template expansion of possibly-mixed vars 2019-06-25 23:43:25 -04:00
Matthew Brown
3a52ccd5a6 Add tests for things that should work 2019-06-25 21:46:18 -04:00
Matthew Brown
41837eb62c Run in directory 2019-06-25 20:55:30 -04:00
Matthew Brown
0da801fee1 Prevent failure in end-to-end test from affecting others 2019-06-25 20:38:44 -04:00
Brown
16bf5f11e1 Fix #1845 - prevent string return when expecting template 2019-06-25 15:06:02 -04:00
Brown
6cb52d2d0e Move strings that reference T::class 2019-06-25 14:15:58 -04:00
Brown
e5016a4ffc Break out function class-string tests in a separate file 2019-06-25 14:13:00 -04:00
Brown
91686bef4b Improve robustness of template checks 2019-06-25 13:20:30 -04:00