Brown
4f9cf54005
Use unaliased name for external hook
2019-11-04 10:13:12 -05:00
Brown
e7330afe8b
Fix #2295 - support special case of array_shift on known offset type
2019-11-04 09:21:13 -05:00
Matthew Brown
8dffd65a59
Preserve possible-undefinedness
2019-11-04 07:12:22 -05:00
Matthew Brown
5faebe2674
Fix templated assertion handling for static methods
2019-11-04 05:31:45 -05:00
Matthew Brown
8f421dc0bb
Refactor template calculation out from Psalm\Type\Union
2019-11-03 21:27:40 -05:00
Matthew Brown
7c4c78f67e
Fix #2271 - treat array_replace same as array_merge
2019-11-02 10:15:03 +01:00
Pavel Batečko
b229ac875d
Improve return types of explode() with limit ( #2286 )
2019-11-02 10:10:38 +01:00
Matthew Brown
a82e35a59f
Fix #2291 - extended covariant template param types should be treated as covariant
2019-11-01 18:25:07 +01:00
Matthew Brown
bab7e46983
Fix #2281 - allow lists to accept list types
2019-11-01 13:35:16 +00:00
Matthew Brown
050eb82f04
Fix #2290 - detect call on void type
2019-11-01 13:05:28 +00:00
Jáchym Toušek
f2c82fa212
Add support for Iterator<X> type ( #2285 )
...
* Add support for Iterator<X> type
* Fix tests
2019-10-30 18:00:27 +00:00
Matthew Brown
4845bbbd49
Improve solution to extended type juggling
2019-10-29 19:30:19 +00:00
Matthew Brown
8d7cdeb8ec
Fix #2275 - allow extended templated types to bypass mixed type coercion rules
2019-10-29 10:07:34 +00:00
Matthew Brown
0ac5c32f2f
Fix #2277 - scan psalm-assert types always
2019-10-25 23:39:33 +02:00
Brown
8876499ddd
Fix #2252 - allow destructuring of ArrayAccess objects
2019-10-22 11:17:42 -04:00
Brown
353cf2351e
Fix #2259 - if error suppression is use, list destructuring values will be nullable
2019-10-22 10:40:37 -04:00
Mikko Pesari
e82d3c438d
Fix wrong annotations in ext-ds method stubs ( #2263 )
...
* Fix wrong annotation for class implementing an interface
* Fix unrecognised annotations
2019-10-22 09:33:23 -04:00
Joram Schrijver
39b25f9008
Fix ArrayIterator::{uasort,uksort} parameter type ( #2254 )
2019-10-22 08:45:25 -04:00
Mikko Pesari
fc16eb5e92
Fix Ds\Set method stubs ( #2261 )
...
* Fix constructor parameters
* Add missing @param name
* Add missing implements
2019-10-22 06:12:35 -04:00
Brad Kent
6e6eea010b
callMap updates: unregister_tick_function, ReflectionClass::getInterfaceNames, ReflectionObject::getInterfaceNames ( #2258 )
2019-10-21 14:29:48 -04:00
Mikko Pesari
80665850db
Add method stubs for Ds\Set ( #2255 )
...
* Fix typo
* Add method stubs for Ds\Set
2019-10-21 10:06:26 -04:00
Matthew Brown
233977a764
Fix undefined array offset when too few iterator params supplied
2019-10-21 07:13:33 -04:00
Tyson Andre
94636476d2
Fix checking if union type with mixed is nullable ( #2253 )
...
Fixes #2249
2019-10-20 17:06:59 -04:00
Matthew Brown
05ace25817
Fix #2246 - fix return type of array_slice to be a list
2019-10-20 16:19:01 -04:00
Matthew Brown
b476761109
Fix #2235 - improve behaviour of array_merge on lists
2019-10-20 15:47:00 -04:00
Matthew Brown
1d6ca9bd7d
Allow callable-array type in docblocks
2019-10-20 15:33:57 -04:00
Matthew Brown
4aeb28aceb
Fix #2244 - correctly check do while expression before use
2019-10-20 14:18:30 -04:00
Matthew Brown
3bb0016434
Fix #2251 - add support for yielding from lists
2019-10-20 12:09:04 -04:00
Matthew Brown
22e35a7233
Improve message for mixed method call
2019-10-20 11:13:23 -04:00
Matthew Brown
0a35c9cd6a
Remove unnecessary computation
2019-10-19 23:03:59 -04:00
Matthew Brown
5910a362ea
Improve report output of taint analysis
2019-10-19 17:59:10 -04:00
Brown
8978e5c7f1
Add sink for print_r
2019-10-18 15:28:15 -04:00
Brown
2be489c527
Fix regression when identifying clauses in error
2019-10-18 15:06:37 -04:00
Brown
89752b8574
Support ext-ds and fix offset count
2019-10-18 11:35:24 -04:00
Brown
dda68228f3
Fix #2247 - don’t crash when yielding from class with too many template params
2019-10-18 11:01:16 -04:00
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
7b522af169
Provide necessary typehint
2019-10-15 20:41:06 -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
3dc96edf08
Update file references again
2019-10-13 23:37:15 -04:00
Matthew Brown
477fa8cba8
Set file references before they’re used
2019-10-13 23:30:01 -04:00
Matthew Brown
a0d484a314
Reduce duplicate calls
2019-10-13 22:05:16 -04:00
Matthew Brown
8c6b234c2c
Improve speed of taint analysis
2019-10-13 20:10:31 -04:00
Matthew Brown
e1e2ff3e57
Improve shuffling
2019-10-13 20:09:50 -04:00
Matthew Brown
7e76d3386d
Fix phpcs issues
2019-10-13 12:38:16 -04:00
Matthew Brown
3c00f3d029
Limit taint file re-analysis
2019-10-13 12:34:40 -04:00
Matthew Brown
cd8534fb6c
Shuffle file analysis order for more even threaded workload distribution
2019-10-13 12:33:18 -04:00
Matthew Brown
d0a9bf24f8
Void-returning functions are going to be impure
2019-10-13 09:51:25 -04:00
2e3s
a658566429
Add impure functions for mcrypt and iterator_apply ( #2227 )
2019-10-13 09:43:25 -04:00
Matthew Brown
7e2d00d6ed
Allow taints to be added to root array types
2019-10-12 12:23:40 -04:00
Matthew Brown
e5623e9257
Fix function call
2019-10-11 23:33:36 -04:00
Matthew Brown
4478d31593
Taint arrays in creation
2019-10-11 23:28:17 -04:00
Matthew Brown
5918278af3
Fix cache growth thanks to array_recursive
2019-10-11 20:17:07 -04:00
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
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
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
a05f4744cb
Only show taint issues when tracking tainted input
2019-10-09 14:26:32 -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
Matthew Brown
e620c2cfa4
Fix issue creating empty array offsets
2019-10-08 21:23:16 -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
c7eff18481
Add basic type classes for TList
2019-10-08 18:43:54 -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
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
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
bugreportuser
d8855282c6
Add more impure functions ( #2203 )
2019-10-03 15:01:31 -04:00
Brown
9b31483018
Fix unused var
2019-10-02 09:35:22 -04:00
Matthew Brown
24977fb021
Fix small bug
2019-10-02 01:17:45 -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
662f094886
Don’t complain about deprecated class inside itself
2019-09-08 14:55:45 -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
e7a69f715d
Fix #2106 - add defining class to converted template
2019-09-07 13:44:47 -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
6ad5d31132
Fix how hideExternalErrors behaves to match expectation
...
Fixes #2074
2019-09-01 10:56:55 -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
5a5629b835
Mixed value object-likes should still have string keys
2019-08-27 14:40:40 -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
Matthew Brown
b4213a9035
Don’t lower-case resource when converting ( #2063 )
2019-08-25 13:02:58 -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
4fcbc0fdad
Fix #2028 - warn when using deprecated class in function signature
2019-08-22 11:25:13 -04:00
Brown
855ab359fe
Break up Atomic::check
2019-08-22 11:25:13 -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
9d62971006
Fix possible issue negating falsy assertion
2019-08-18 17:51:43 -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
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
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