Marco Pivetta
7cd3d49dc4
Removed DateTimeImmutable::modify()
from the CallMap: fully covered by stub
...
Also expanded the return type from `static` to `static|false`, since the
operation can fail (with a warning too), such as in following example:
https://3v4l.org/Xrjlc
```php
<?php
var_dump(
(new DateTimeImmutable())
->modify('potato')
);
```
Produces
```
Warning: DateTimeImmutable::modify(): Failed to parse time string (potato) at position 0 (p): The timezone could not be found in the database in /in/Xrjlc on line 6
bool(false)
```
Ref: 534127d3b2/ext/date/php_date.stub.php (L508-L509)
2022-08-05 12:37:24 +02:00
Marco Pivetta
18557b8c70
Removed DateTimeImmutable::diff()
from the CallMap: fully covered by stub
2022-08-05 12:34:31 +02:00
Marco Pivetta
002585b57e
Removed DateTimeImmutable::getTimestamp()
from the CallMap: fully covered by stub
...
This also simplifies the return type from `int|false` to always `int`,
since a timestamp can always be produced.
Ref: eff9aed159/ext/date/php_date.stub.php (L496-L500)
2022-08-05 12:32:26 +02:00
Marco Pivetta
1be04e0988
Removed DateTimeImmutable::getOffset()
from the CallMap: fully covered by stub
2022-08-05 12:27:29 +02:00
Marco Pivetta
2b6fddf88d
Removed DateTimeImmutable::getTimezone()
from the CallMap: fully covered by stub
...
Note: also verified that a `DateTimeImmutable#getTimezone()` always returns
a default timezone (initialized internally), and therefore restricted the
type a bit.
2022-08-05 12:26:59 +02:00
Marco Pivetta
7ee12c7493
Removed DateTimeImmutable::format()
from the CallMap: fully covered by stub
...
Note: some conditional return type magic was required here.
See: https://github.com/vimeo/psalm/pull/8350#discussion_r937089212
2022-08-05 12:24:35 +02:00
Marco Pivetta
58ca4e0b73
Removed DateTimeImmutable::createFromFormat()
from the CallMap: fully covered by stub
2022-08-05 12:23:43 +02:00
Marco Pivetta
267d76088d
Removed DateTimeImmutable::sub()
from the CallMap: fully covered by stub
2022-08-05 12:23:00 +02:00
Marco Pivetta
dc7d26abb1
Removed DateTimeImmutable::__construct
from the CallMap: fully covered by stub
2022-08-05 12:22:27 +02:00
Marco Pivetta
68978b9e19
s/psalm-pure/psalm-mutation-free, since psalm-mutation-free is safer to use
...
Ref: c205d652d1 (r934032422)
The idea is that `@psalm-pure` disallows `$this` usage in child classes,
which is not wanted, while `@psalm-mutation-free` allows it.
By using `@psalm-mutation-free`, we don't completely destroy inheritance
use-cases based on internal (immutable) state.
2022-08-01 10:08:35 +02:00
Marco Pivetta
c205d652d1
DateTimeImmutable#sub()
always returns another static
instance, never false
2022-07-31 18:12:07 +02:00
Marco Pivetta
dcaf610b0a
Removed @psalm-immutable
marked from MyDate
extending DateTimeImmutable
...
`DateTimeImmutable` is not really immutable, therefore this marker was wrong upfront
2022-07-31 18:08:01 +02:00
Marco Pivetta
b4b2bc66c7
Added better stubs for DateTimeImmutable
, highlighting how the constructor is **NOT** immutable
...
`DateTimeImmutable` is **almost** immutable: `DateTimeImmutable::__construct()` is in fact not a pure
method, since `new DateTimeImmutable('now')` produces a different value at each instantiation (by design).
This change makes sure that `DateTimeImmutable` loses its `@psalm-immutable` class-level marker,
preventing downstream misuse of the constructor inside otherwise referentially transparent code.
Note: only pure methods are stubbed here: all other methods declared by `DateTimeImmutable` (parent interface)
are NOT present here, and are either inferred from runtime reflection, or `CallMap*.php` definitions.
Methods are sorted in the order defined by reflection on PHP 8.1.8, at the time of writing this ( https://3v4l.org/3TGg8 ).
Following simplistic snippet was used to infer the current signature:
```php
<?php
$c = new \ReflectionClass(\DateTimeImmutable::class);
$methods = array_map(function ($m) {
return $m->getName()
. '(' . implode(',', array_map(function ($p) {
return $p->getType()
. ' $' . $p->getName()
. ($p->isOptional() ? ' = ' . var_export($p->getDefaultValue(), true) : '');
}, $m->getParameters())) . ')' . ($m->getReturnType() ? (': ' . $m->getReturnType()) : '');
}, $c->getMethods());
$properties = array_map(function ($m) {
return $m->getName();
}, $c->getProperties());
var_dump($methods, $properties);
```
2022-07-31 18:02:30 +02:00
orklah
6998fabb2b
Merge pull request #8349 from VincentLanglet/formatCurrency
...
Fix formatCurrency return type
2022-07-31 15:10:26 +02:00
Vincent Langlet
90ac39d89f
Fix formatCurrency return type
2022-07-30 23:31:21 +02:00
orklah
dcc663625f
Merge pull request #8344 from mathroc/chore/update-ReflectionProperty-getValue-args-type
...
ReflectionProperty::getValue $object is nullable since php 8.0
2022-07-29 22:29:37 +02:00
Mathieu Rochette
14241d74b3
ReflectionProperty::getValue $object is nullable since php 8.0
...
https://www.php.net/manual/en/reflectionproperty.getvalue.php
2022-07-29 22:14:12 +02:00
AndrolGenhald
148264305f
Merge pull request #8341 from someniatko/issue-7731
...
recognize `@psalm-allow-private-mutation` in PHP 8+ constructors
2022-07-29 09:31:20 -05:00
someniatko
0abde258fa
#7731 - recognize @psalm-allow-private-mutation
in PHP 8+ constructors
2022-07-29 16:50:56 +03:00
AndrolGenhald
489706b92e
Merge pull request #8335 from someniatko/issue-8330
...
#8330 - take into account that `static` type may have been unwrapped in `hasStaticInType()`
2022-07-29 08:38:48 -05:00
someniatko
0c652f72f6
#8330 - take into account that static
type may have been unwrapped in ExistingAtomicStaticCallAnalyzer#hasStaticInType()
2022-07-29 12:31:37 +03:00
orklah
d7cd84c4eb
Merge pull request #8302 from kkmuffme/fix-cache-directory-race-conditions
...
fix race conditions causing notices if directory does not exist
2022-07-25 19:04:37 +02:00
AndrolGenhald
0b482ac020
Merge pull request #8312 from fluffycondor/dateperiod-stub
...
Add stub for DatePeriod
2022-07-25 09:27:40 -05:00
Semyon
b1295d6894
Code style
2022-07-25 17:15:28 +03:00
Semyon
462ce7138a
Make DatePeriod implement Traversable oh PHP 7, rename constructor params
2022-07-25 17:11:36 +03:00
Semyon
9d3253482d
Add stub for DatePeriod
2022-07-25 17:11:36 +03:00
AndrolGenhald
640d3b646c
Merge pull request #8308 from honca/4.x
...
Fixed ini_set types for arg value
2022-07-22 10:10:41 -05:00
Honca
8b5999470a
Fixed ini_set types for arg value
2022-07-22 11:09:03 +02:00
orklah
910bc57c79
Merge pull request #8304 from kkmuffme/fix-triggerErrorExits-config-not-working
...
fix triggerErrorExits not working
2022-07-21 19:36:25 +02:00
kkmuffme
e1b0255db8
fix triggerErrorExits not working
...
Fix https://github.com/vimeo/psalm/issues/8270
2022-07-21 12:54:47 +02:00
kkmuffme
233863dc0c
circle CI error for unrelated code?
2022-07-21 11:36:55 +02:00
kkmuffme
bb760a2224
fix race conditions causing notices if directory does not exist
2022-07-21 11:36:16 +02:00
AndrolGenhald
cac9ec957c
Merge pull request #8249 from someniatko/issue-8200
...
Improve inferring the "final" `static` type when calling static methods inside a different class
2022-07-14 16:41:01 -05:00
someniatko
1e0b572264
#8200 - bikeshedding the tests
2022-07-14 10:03:47 +03:00
orklah
4fbbf820d8
Merge pull request #8228 from othercorey/callmap-nullable
...
Fix nullable return types for CallMap functions
2022-07-14 09:03:35 +02:00
Corey Taylor
f28ac73777
Fix nullable return types for CallMap functions
2022-07-13 22:44:38 -05:00
someniatko
21a6dd9096
#8200 - move tests to the correct provider ("valid" instead of "invalid")
2022-07-12 21:53:14 +03:00
orklah
416b597d1c
Merge pull request #7994 from aszenz/4.x
...
Adds support for fixing missing throws doc block
2022-07-12 20:46:14 +02:00
someniatko
931b3bb18b
#8200 - simplify ExistingAtomicStaticCallAnalyzer::hasStaticType()
2022-07-12 21:43:31 +03:00
someniatko
ecbceb1d58
#8200 - move Issue8200Test to ClassTemplateTest
2022-07-12 21:38:23 +03:00
someniatko
b3e673d7ec
#8200 - flip logic of determining "source" of static
type in ExistingAtomicStaticCallAnalyzer::getMethodReturnType()
2022-07-12 21:17:10 +03:00
someniatko
3a5054018b
#8200 - generalize ExistingAtomicStaticCallAnalyzer::hasStaticInType() for non-object cases
2022-07-12 21:00:19 +03:00
someniatko
470885e4f1
#8200 - improve inferring the "final" static
type when calling static methods inside a different class
...
differentiate between `static` defined in a class which CALLS a given static method, and `static` defined in the method which IS CALLED.
2022-07-12 13:51:28 +03:00
orklah
7f3d55dfa0
Merge pull request #8244 from jack-worman/CountReport
...
New "Count" Report Format
2022-07-11 18:55:01 +02:00
orklah
057d78dc41
Merge pull request #8214 from BenMorel/geos2
...
Fix GEOSGeometry stubs with default values
2022-07-11 18:52:08 +02:00
Benjamin Morel
bcf3c5153c
Fix GEOSGeometry stubs with default values
2022-07-11 11:51:35 +02:00
Jack Worman
3b76ac85dc
Count Report Format
2022-07-10 17:50:50 -05:00
orklah
ac39688d13
Merge pull request #8243 from kkmuffme/change-trigger-error-to-error-log
...
use error_log instead of trigger_error
2022-07-10 12:54:31 +02:00
kkmuffme
a77f6fca12
use error_log
2022-07-10 12:04:42 +02:00
orklah
ce7d4ee165
Merge pull request #8240 from kkmuffme/fix-cache-race-condition-multiple-psalm-instances
...
use lock to fix race condition in cache
2022-07-10 10:32:06 +02:00