1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-14 02:07:37 +01:00
Commit Graph

12113 Commits

Author SHA1 Message Date
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
orklah
ffc8c8080d
Merge pull request #8360 from bitwise-operators/8307-operand-class-constants
Add BitwiseNot and BooleanNot operators to SimpleTypeInferer
2022-08-04 20:30:52 +02:00
someniatko
be02e7e5c7 #8363 - support static as a type parameter in return types of the first-class callables 2022-08-04 17:16:06 +03:00
someniatko
f3d67845c5 #8363 - ensure we recognize inherited static methods for the first-class callables 2022-08-04 17:01:42 +03:00
Bitwise Operators
9f6ce3059d tests: added tests for bitwise-and, bitwise-xor, bitwise-not and boolean-not class constants 2022-08-04 08:52:43 +02:00
orklah
1ef3851580
Merge pull request #8364 from kkmuffme/add-but-to-differentiate-errors-invalidargument
add ", but" for InvalidArgument error message where a type is provided
2022-08-03 20:33:29 +02:00
kkmuffme
d2be169ce5 update tests 2022-08-03 20:12:18 +02:00
kkmuffme
0d32203f9a add ", but" for InvalidArgument error message where a type is provided 2022-08-03 19:40:30 +02:00
Bitwise Operators
a5c550cea4 Fix incorrect handling of null response 2022-08-03 18:27:32 +02:00
Bitwise Operators
f782313c45 Add BitwiseNot and BooleanNot operators to SimpleTypeInferer. Should fix #8307. 2022-08-03 15:48:54 +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
24f7920e9a
Fix if propagation (#8326)
* Add failing unit test

* Fix test

* Revert "Add comment for skipped test"

This reverts commit e4f73beb08.

* Revert "Simplify context updates even more"

This reverts commit a32e63f131.

* Revert "Remove special handling for elseifs that breaks for else if"

This reverts commit d7d9ddc653.

* Fix test
2022-07-30 19:20:05 -04:00
Vincent Langlet
90ac39d89f Fix formatCurrency return type 2022-07-30 23:31:21 +02:00
orklah
f5b7a569e2
Merge pull request #8345 from weirdan/rector-ArraySpreadInsteadOfArrayMergeRector-2
Applied ArraySpreadInsteadOfArrayMergeRector (take 2)
2022-07-30 09:18:15 +02:00
Bruce Weirdan
c9e6b54050
CS fix 2022-07-29 23:08:11 -04:00
Bruce Weirdan
7444ea8e2d
Simplify some methods to keep Psalm happy 2022-07-29 23:01:49 -04:00
Bruce Weirdan
238b54abf8
Revert one particular replacement that confuses Psalm 2022-07-29 22:00:21 -04:00
Bruce Weirdan
58e87fa5e0
Applied ArraySpreadInsteadOfArrayMergeRector (take 2) 2022-07-29 18:17:21 -04: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
7c4228fb56
Merge pull request #8324 from Nicelocal/fix_union_assertions
Fix union assertions
2022-07-28 19:06:14 +02:00
7a7a7f6bc9
cs-fix 2022-07-28 12:05:13 +02:00
33d8f3a62d
Fix unit tests 2022-07-28 12:03:12 +02:00
abe58876a7
Fix 2022-07-27 20:32:44 +02:00
6ce32a48d5
Fix 2022-07-27 20:24:24 +02:00
68f3f246f5
Fix 2022-07-27 20:08:00 +02:00
1a4d68e53b
Make private 2022-07-27 18:56:24 +02:00
82e8c0dea8
Disable intersection of unrelated classes 2022-07-27 18:55:01 +02:00
c409675e3e
Fix intersection of final classes 2022-07-27 18:46:07 +02:00
c2a8d1bb06
cs 2022-07-27 18:00:24 +02:00
e19589117d
Fix unit test 2022-07-27 17:56:41 +02:00
37274b308f
Add temporary failing test 2022-07-27 17:51:55 +02:00
09fb879428
Fix #8322, #8319 2022-07-27 17:42:48 +02:00
18106af5e5
Refactor 2022-07-27 14:39:34 +02:00