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

1484 Commits

Author SHA1 Message Date
Brown
09cf864d9b Mark preg_replace_callback as sometimes-pure 2019-10-11 13:54:33 -04:00
Brown
3f837a3493 Fix #2192 - allow static return value on templated object 2019-10-11 12:02:41 -04:00
Matthew Brown
7857b07f91 Fix list-could-be-array issue 2019-10-11 08:24:35 -04:00
Matthew Brown
1a1b3a10a9 Fix #2225 - iterator_to_array can return a list 2019-10-10 23:47:11 -04:00
Matthew Brown
c419e0e798 Fix #2222 - check for @throws docblock inheritance 2019-10-10 22:44:21 -04:00
Matthew Brown
03c39cbe7c Fix #2223 - make sure lists are handled in more places 2019-10-10 20:16:43 -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
99c91efbc6 Add support for reconciling callable lists 2019-10-10 10:34:31 -04:00
Brown
cc9a925e84 Allow list to be coerced to callable 2019-10-10 10:26:13 -04:00
Brown
50e729a6d1 Fix more list issues 2019-10-09 13:42:39 -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
Brown
0b0534d41b Add more list annotations to Psalm’s codebase 2019-10-09 09:17:43 -04:00
Matthew Brown
10b0be3650 Fix explode 2019-10-09 07:44:26 -04:00
Matthew Brown
c7600fde10 Fix #2217 - interpret callable self return type references properly 2019-10-09 07:40:42 -04:00
Matthew Brown
51cfd556d6 Add non-empty-list support 2019-10-08 22:53:55 -04:00
Matthew Brown
6a07757b9a Fix tests 2019-10-08 22:41:23 -04:00
Matthew Brown
d7007c3b76 Fix casing 2019-10-08 22:25:15 -04:00
Matthew Brown
38de68f507 array_values should preserve array non-emptiness 2019-10-08 22:22:58 -04:00
Matthew Brown
5cdc3aa6d4 Remove tautological statement 2019-10-08 21:39:28 -04:00
Matthew Brown
2ae76bbc8e Prohibit objectlike to list 2019-10-08 21:38:01 -04:00
Brown
db33efb3e8 Fix another bad comma 2019-10-08 19:13:04 -04:00
Brown
23fcbec584 Add a few more list types 2019-10-08 19:06:16 -04:00
Brown
2d4a7fbe3e Fix array fetch analysis offset 2019-10-08 19:01:00 -04:00
Brown
573b6bfe67 Remove bad comma 2019-10-08 18:51:44 -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
6b012f8fa6 Use smarter type merging when analysing if statements 2019-10-08 13:07:28 -04:00
Guuzen
50df2868f2 Fix issue #2201 (#2212) 2019-10-06 15:28:41 -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
549aee47f1 Fix bug asserting array emptiness 2019-10-03 15:27:55 -04:00
bugreportuser
d8855282c6 Add more impure functions (#2203) 2019-10-03 15:01:31 -04:00
Brown
d225374d6d Fix #2156 - do better inference after isset 2019-10-01 19:31:08 -04:00
Brown
a81c3067ad Store the whole type 2019-10-01 17:09:32 -04:00
Brown
f8f8b633b1 Suppress a bunch of PossiblyUndefinedArrayOffset issues 2019-10-01 15:44:43 -04:00
Matthew Brown
9f10564184 Add another array addition check 2019-10-01 09:13:31 -04:00
Fabien Villepinte
e7faf81223 Fix the arguments order of rar_entry_get() (#2189) 2019-10-01 08:47:56 -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
14adc9b491 Fix phpcs 2019-09-29 16:04:32 -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
Matthew Brown
81464d8dbf Fix #2179 - add gz* to list of impure functions 2019-09-27 09:50:33 -04:00
Matthew Brown
cbc142671d Fix #2175 - support late-resolved empty arrays 2019-09-27 09:05:56 -04:00
Brown
4823ec54d4 Add slashes 2019-09-26 17:12:57 -04:00
Brown
4ff3a5517d Fix typo 2019-09-26 17:12:57 -04:00
Brown
4ec966d72a Fix variable 2019-09-26 15:53:41 -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
2fa0e05802 Fix #2169 - always use most immediate function storage when analysing 2019-09-25 18:48:41 -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
Matthew Brown
56d250777e Add back interface complaint 2019-09-22 20:42:31 -04:00
Matthew Brown
3205d1b752 Fix #2158 - loose equality should not imply equivalence 2019-09-22 10:54:17 -04:00
Matthew Brown
80059f9139 Scrub inferred mutation-free when method is overridden 2019-09-22 09:40:08 -04:00
Matthew Brown
add051c2be Enforce immutability constraints only on interface methods 2019-09-22 09:26:26 -04:00
Matthew Brown
3d84518eab Fix closure usage in Psalm code 2019-09-22 01:03:42 -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
340b7b9752 Fix phpcs issue 2019-09-21 21:53:39 -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
c68dcf2f74 Don’t coerce false to null when coming from ignore-false type 2019-09-20 15:30:29 -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
f6b0de08f8 Remove unnecessary assertion 2019-09-19 15:41:44 -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
Brown
a0f7e73aea Fix #2127 - improve behaviour of suppression discovery in threaded mode 2019-09-16 11:58:42 -04:00
Matthew Brown
0b4981f01b Fix #1551 - do better at inferring class constant types 2019-09-14 14:26:31 -04:00
Matthew Brown
d941294a84 Move class const analysis 2019-09-14 13:12:54 -04:00
Joram Schrijver
0b39884974 Fix some return values in the language server (#2134)
* Fix return value of LSP shutdown

It is specified as a request that returns null. Returning void causes
the language server to crash.

* Fix empty responses of LSP textDocument/definition

It is specified to return either a Location, an array of Locations, or
null. Hovers are unrelated.

* Fix responses of LSP textDocument/hover

It is specified to either return Hover or null. Psalm could previously
return a success response containing a MarkedString, but with a null
value. MarkedString is not allowed to contain null.
2019-09-14 10:14:03 -04:00
SignpostMarv
943705ce0e load an xdebug stub when required, re: vimeo/psalm#2118 (#2133)
* load an xdebug stub when required, re: vimeo/psalm#2118

* correcting case sensitivity of XDebug to Xdebug

* only load the Xdebug stub when needed
2019-09-14 10:13:39 -04:00
Brown
944531b73b fix #2125 - Don’t assume function args are necessarily authoratative 2019-09-11 13:52:58 -04:00
LeSuisse
a8e58b0ba0 Fix signatures of \ldap_bind() and \ldap_bind_ext() (#2122)
Both functions accepts a null $bind_rdn parameter to do an
anonymous bind and they also accept a fourth optional
parameter.

References:
https://www.php.net/manual/en/function.ldap-bind.php
https://github.com/php/php-src/blob/php-7.3.9/ext/ldap/ldap.c#L1152
https://github.com/php/php-src/blob/php-7.3.9/ext/ldap/ldap.c#L1209
2019-09-11 12:01:53 -04:00
Fabien Villepinte
601827137a Fix the signature of sodium_crypto_scalarmult_base() (#2119) 2019-09-10 18:11:15 -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
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
78175c9765 Support @psalm-readonly too 2019-09-08 15:12:30 -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
a032978a85 Use a better check for functional purity 2019-09-08 11:49:14 -04:00
Matthew Brown
3dbfedb51a Make purity test more strict again 2019-09-08 11:34:16 -04:00
Matthew Brown
0fc8c9a9bb Soften definition of purity to allow functions that return by-ref output 2019-09-08 11:32:04 -04:00
Matthew Brown
4cac8cd70f Don’t complain about mutating call when it was inferred during reflection 2019-09-08 10:36:57 -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
b7f79b547e Ensure that properties not set on class add back to context (as mixed) 2019-09-07 22:10:22 -04:00
Matthew Brown
85ae8f93d2 Clear out property assignments when necessary 2019-09-07 18:34:18 -04:00
Matthew Brown
8be43398f0 Add better handling of print_r 2019-09-07 13:01:36 -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
Brown
8601731fa2 Prohibit mutation-free assignment ops 2019-09-03 12:16:31 -04:00
ADmad
da23c2e73a Fix callmap for PDO::lastInsertId() (#2092) 2019-09-02 08:38:05 -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
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
cfdfb9b64c Allow pure functions/methods to be called and not destroy known properties 2019-08-31 14:54:59 -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
e8500e5e51 Anything calling rand/mt_rand can’t be pure 2019-08-30 16:41:59 -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
aba3659311 Add more specific key coercion rules when assigning to arrays 2019-08-27 15:12:25 -04:00
Brown
4db8ca6a1d Cleanup extra issues from recent fixes 2019-08-27 14:16:34 -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
Matthew Brown
25487a5b63 Break out if conditional analysis 2019-08-26 22:55:01 -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
Niklas Keller
25fbd5ddf7 Fix Generator::throw parameter type (#2059) 2019-08-26 00:25:17 -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
Matthew Brown
e6a93b6d52
Revert "Added ArrayObject to the array_key_exists signature (#2066)" (#2070)
This reverts commit 431678c25d.
2019-08-25 23:46:13 -04:00
Ivan Kurnosov
431678c25d Added ArrayObject to the array_key_exists signature (#2066) 2019-08-25 21:40:53 -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
Ilija Tovilo
e0cd04d809 Add more impure functions to configuration (#2053)
* Add more impure functions to configuration

Closes #2050

* Change note
2019-08-23 08:50:13 -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
7797bfd71c Refactor FunctionLikeAnalyzer::analyze 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
Matthew Brown
4fff6c28a9
add slashes 2019-08-20 19:02:23 -04:00
Brown
9696fb8dce Follow taint to source when reporting 2019-08-20 17:38:15 -04:00
Brown
86e5e50c1b Prevent baaad behaviour 2019-08-20 14:26:32 -04:00
Brown
95c61db513 Add a PossibleRawObjectIteration issue 2019-08-20 12:06:02 -04:00
Brown
14584d6bae Allow use without glue 2019-08-20 11:58:19 -04:00
Brown
32d5f0bb36 Remove accomodation for implode that’s deprecated in 7.4
Fixes #2036
2019-08-20 11:43:58 -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
80949b2b29 Improve object-with-methods assertions 2019-08-18 18:19:26 -04:00
Matthew Brown
b8bdaea09a Fix reconciliation of mixed to Traversable 2019-08-18 18:06:57 -04:00
Matthew Brown
1b983babd0 Allow unset of potentially invalid array key type 2019-08-18 18:06:41 -04:00
Matthew Brown
43a9ff0735 Prevent erroneous unused suppressions from plugin 2019-08-18 17:18:03 -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
b6d0aeaa9c Avoid erroneous issue suppression complaints 2019-08-18 14:56:47 -04:00
Matthew Brown
eb50aad3a1 Fix offsets when checking function suppressions 2019-08-18 14:44:45 -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
1e400c5e1d Add slash 2019-08-18 11:24:14 -04:00
Matthew Brown
b098b4e3b2 Fix implicit cast 2019-08-18 11:21:26 -04:00
Matthew Brown
f5b9dfe543 Add support for @psalm-scope-this
Ref #2032
2019-08-18 11:18:10 -04:00
Tyson Andre
ce03be2dc0 Add BeforeAnalyzeFileInterface (#2034)
This is a prerequisite of the plugin I mentioned in #378

This may be useful for other types of plugins
(e.g. checking raw file contents or file names)
2019-08-18 10:40:07 -04:00
Matthew Brown
62dff200d5 Fix redundant condition 2019-08-17 18:02:38 -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
ac7354605a Fix bad Psalm issue 2019-08-16 23:33:28 -04:00
Matthew Brown
9c616aa5c6 Remove pure function calls when removing unused variables 2019-08-16 23:19:52 -04:00
Brown
d236c2d5f1 Fix use of $method_id 2019-08-16 11:48:32 -04:00
Brown
43041836dd Fix #2026 - add support for calling __toString implicitly after method_exists 2019-08-16 11:33:58 -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
86264a736b Fix dumb change 2019-08-15 10:07:31 -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
3d01708c6c Improve backtrace of property-involved issues 2019-08-14 11:47:58 -04:00
Brown
e92896f145 Fix taint records 2019-08-14 09:52:59 -04:00
Matthew Brown
01c876e9cb Remove stray comma 2019-08-14 00:50:35 -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
3ff2a64e16 Don’t complain about untyped properties missing constructors 2019-08-13 13:38:15 -04:00
Brown
b5614d03f8 Add detection for unused function calls 2019-08-13 13:15:23 -04:00
Matthew Brown
7533949667 Preserve taintedness of str_replace 2019-08-13 08:07:16 -04:00
Matthew Brown
a4b9b7311b Improve message a bit 2019-08-12 23:58:40 -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
Matthew Brown
2ed28764d6 Break apart negated assertion reconciler to be more manageable 2019-08-12 00:37:55 -04:00
Matthew Brown
d3f924a49e Fix #2004 - remove useless unset 2019-08-11 17:17:03 -04:00
Tyson Andre
f1de94967b Allow class constant names to begin with lower-case (#2002)
Followup to e58ade5803
2019-08-11 17:13:56 -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
6397421215 Return mixed in special case 2019-08-11 08:27:56 -04:00
Matthew Brown
fac7df2ee0 Explicitly mixed properties need not be initialised 2019-08-11 00:25:30 -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
034799773d Remove unused var 2019-08-10 14:45:43 -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
3cf160cbe9 Separate out assertion negation reconciliation 2019-08-10 12:04:16 -04:00
Matthew Brown
3f78082720 Fix is_string call 2019-08-10 09:16:32 -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
Gert de Pagter
5b2f54bbcb Allow setLocale to have 0 or null as parameters (#1993) 2019-08-09 08:41:28 -04:00
Matthew Brown
dec612a47e Remove blank line 2019-08-08 23:06:52 -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
d5e2c323d3 Add support for pure-ish instance methods 2019-08-08 14:17:34 -04:00
Matthew Brown
747782d258 Fix #1987 - avoid inferredType not being null 2019-08-07 22:41:26 -04:00