Matt Brown
b15384bbff
Tighten up rules arouund when mutation-free methods get memoised
2021-01-29 11:47:18 +01:00
orklah
e3e5a55907
unused use statements ( #4228 )
2021-01-29 11:39:42 +01:00
orklah
db45ff1ba4
More return types ( #4173 )
...
* add native return types
* redundant phpdoc
2021-01-29 11:38:57 +01:00
Brown
be3d130965
Fix #4132 - ignore purity of $this when checking for initialisation
2021-01-29 11:38:53 +01:00
Brown
02255ae26b
Fix #4077 - always track closure purity
2021-01-29 11:38:47 +01:00
Brown
51bfb3666b
Fix #4052 - foreach over an iterable is impure
2021-01-29 11:38:45 +01:00
Matthew Brown
c4074012f8
Fix immutable tests
2021-01-29 11:38:44 +01:00
Brown
fe5fd82a93
Fix ImpureVariable test
2021-01-29 11:38:44 +01:00
Brown
5513fcdcff
Prevent isset on uknown property in pure function
2021-01-29 11:38:44 +01:00
Brown
bc945b98bd
Allow modification after clone in pure context
2021-01-29 11:38:04 +01:00
Brown
47faea8ca3
Prohibit property fetches from pure contexts except when they’re on immutable objects
2021-01-29 11:38:04 +01:00
Brown
8fbc8de98a
Fix #3820 - don’t treat a method call as memoisable if it has assertions
2020-07-15 15:09:19 -04:00
Matthew Brown
a49a0e5650
Fix #3551 - count method can be impure
2020-06-14 11:06:53 -04:00
Matthew Brown
1b752d06ab
Fix #3201 - add additional constraints on constructor initialisation
2020-04-21 00:04:47 -04:00
Brown
edb07952fc
Static call inside throw does not violate purity
2020-04-18 12:43:51 -04:00
Grégoire Paris
b47306ad3b
Account for PDOException ( #3175 )
...
Probably for legacy reasons, PDOException::getCode() can return string (it's an
SQLSTATE code). Note that if you instantiate it yourself, you will get
an integer though.
I changed the signature of the Exception stub accordingly, and then
there were errors about incompatible signatures, so I had to change the
signature of Throwable too, which makes sense since a Throwable could be
a PDOException. The signature at
https://www.php.net/manual/en/throwable.getcode.php seems plain wrong,
and that same page of the docs warns about PDOException. Not sure what
are the plans for future versions of PHP.
2020-04-18 10:39:23 -04:00
Grégoire Paris
bc91de015e
Mark throwable methods as pure ( #3171 )
...
* Write stub as valid PHP
This works probably because it is not parsed by PHP but by something
more tolerant, but let's make it more valid (the final access type in
the signature is not valid) PHP anyway, that will raise fewer eyebrows.
* Document actual return type
See ca006e54e3/Zend/zend_exceptions.stub.php (L8)
* Mark all methods from Throwable as mutation free
Exception is the only possible class implementation of Throwable, and
all of its methods except __toString() are final.
See ca006e54e3/Zend/zend_exceptions.stub.php (L3-L25)
Closes #3170
2020-04-17 22:08:26 -04:00
Brown
d1fcbf38ae
Fix #2956 - treat Exception::getMessage as final and mutation-free
2020-03-10 15:12:55 -04:00
Brown
0a8bb32115
Fix #2866 - prevent use of impure __toString via concatenation in pure contexts
2020-02-24 14:50:34 -05:00
Matthew Brown
618ae77846
Prevent implicit __toString method calls in a pure context
2020-02-23 18:18:25 -05:00
Matthew Brown
5c3ec7a531
Fix #2696 - make sure static property references are prevented in pure functions
2020-01-27 22:55:20 -05:00
Brown
da43b8188f
Fix #2632 - detect invalid by-ref assignments in pure functions
2020-01-23 14:21:34 -05:00
Brown
0ac20e76c4
Fix #2631 - evaluate purity of uasort closure
2020-01-23 13:49:15 -05:00
Matthew Brown
ae46c9e132
Fix #2114 - make builtin constructors mutation free
2019-09-21 21:07:27 -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
21aa162d0a
Make assert() pure
...
Fixes #2113
2019-09-09 10:43:10 -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
f20dc16295
Make @immutable work properly
2019-08-31 10:07:23 -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
Brown
55cfbdcd5f
Fix erroneous complaint for str_replace
2019-08-13 14:26:25 -04:00
Brown
955899ade0
Builtin functions are assumed to be pure
2019-08-07 15:21:15 -04:00
Matthew Brown
3df248eea2
Add concept of purity to functions and methods
2019-07-18 01:31:48 -04:00