1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-03 10:07:52 +01:00
Commit Graph

9713 Commits

Author SHA1 Message Date
Bruce Weirdan
6b9b4b523d Namespace anonymous classes
Fixes vimeo/psalm#10755
2024-03-03 16:21:20 +01:00
Bruce Weirdan
ceb290891b Initial support for named parameters for callables
Fixes vimeo/psalm#10766
2024-03-02 19:17:48 +01:00
Bruce Weirdan
cabcb02614
Merge pull request #10765 from theodorejb/avoid-duplication 2024-03-02 15:52:52 +01:00
kkmuffme
a1848a1a14 @since annotations should only infer PHP version in .phpstub files or for @since 8.0.0 PHP
Fix https://github.com/vimeo/psalm/issues/10761
2024-03-02 11:52:51 +01:00
kkmuffme
d751c202d8 fix unrelated Config bug not honoring PHP composer versions 8.2 + 8.3 2024-03-02 11:50:52 +01:00
Theodore Brown
e357b972f6 Avoid duplicating code for RiskyTruthyFalsyComparison 2024-02-29 20:38:40 -06:00
Bruce Weirdan
496b214671
Merge pull request #10764 from weirdan/fix-since-version-comparison 2024-03-01 03:03:19 +01:00
Bruce Weirdan
97b22ecdfd Fix version comparison for @since
Refs vimeo/psalm#10761
2024-03-01 01:37:33 +01:00
kkmuffme
52fb472207 Fix PHP notice - crash on invalid taint-escape 2024-02-29 17:54:51 +01:00
Evan Shaw
22f32c1392 Set inside_isset = false when analyzing arguments 2024-02-27 22:30:10 +13:00
Bruce Weirdan
60badd0a93
Merge pull request #10752 from edsrzf/array-isset-disable-dim 2024-02-27 01:11:12 +01:00
Bruce Weirdan
0ce62a51ec Let's see what breaks without this hack 2024-02-27 01:04:03 +01:00
Bruce Weirdan
27461c98f6 Strip null used to signify completed iterations in foreach context
Even though `Generator::current()` can return `null` once generator is
exhausted, `foreach()` never iterates after iterator ends, so we can
safely remove `null` (unless, of course, generator can yield `null`).
2024-02-27 01:04:03 +01:00
Bruce Weirdan
8a0bc19fa6 Forbid iterating over generators with non-nullable send()
Fixes vimeo/psalm#6985
2024-02-27 01:04:03 +01:00
Bruce Weirdan
e9ea999f50
Merge pull request #10738 from MelechMizrachi/vimeo-fix-long-array-consts-false-flag 2024-02-27 00:40:20 +01:00
Evan Shaw
3535324842 Fix new errors 2024-02-26 21:47:05 +13:00
Evan Shaw
10ed0f3cd6 Set inside_isset false when analyzing ArrayDimFetch dim 2024-02-26 21:47:05 +13:00
Bruce Weirdan
01dc2fef84 Fix loading stubs from phar file on Windows
Fixes vimeo/psalm#10747
2024-02-25 13:58:32 +01:00
Oliver Hader
de7b65ea8a
Use TaintKind/TaintKindGroup constants instead of string values 2024-02-24 16:31:52 +01:00
Melech Mizrachi
f553392454 Fix a false flag issue with InvalidConstantAssignmentValue being thrown for constants over a certain length. Usually happens with arrays or lists over 100+ entries in length.
Check if this type was defined via a dockblock or type hint otherwise the inferred type should always match the assigned type, and we don't even need to do additional checks
There is an issue with constants over a certain length where additional values are added to fallback_params in the assigned_type but not in const_storage_type which causes a false flag for this error to appear. Usually happens with arrays/lists.

Added two separate tests to cover both lists, and arrays to ensure this issue is fixed.
2024-02-23 11:25:34 -07:00
Bruce Weirdan
eeffee7aae
Merge branch '5.22.x' into 5.x 2024-02-23 00:41:03 +01:00
Bruce Weirdan
7bd35be5d5
Catch missing classlike exceptions during scanning
This may resolve #10706, although I'm not exactly convinced it's the
best way.
2024-02-23 00:33:42 +01:00
Bruce Weirdan
4a5f433831
Merge pull request #10729 from ohader/revert-10242-5.x 2024-02-21 17:07:02 -04:00
kkmuffme
9d8080096c Fix RiskyTruthyFalsyComparison reporting irrelevant errors when there is no explicit truthy/falsy type 2024-02-20 22:28:12 +01:00
Oliver Hader
679aaf0939
Revert "Allow tainted numerics except for 'html' and 'has_quotes'" 2024-02-20 13:55:31 +01:00
Bruce Weirdan
503ccd8235
Merge pull request #10722 from kkmuffme/fix-uppercase-non-empty-lowercase-and-falsy-in-loop 2024-02-20 07:07:09 -04:00
Oliver Hader
1ff41e68a0
Drop superfluous fetching of statements from event 2024-02-20 00:22:14 +01:00
Oliver Hader
2943cfe11d
Add list of statements to BeforeFileAnalysisEvent
Fixes: #10725
2024-02-20 00:00:27 +01:00
kkmuffme
4ac18720aa Revert https://github.com/vimeo/psalm/pull/10039 and fix type and test 2024-02-19 14:14:24 +01:00
kkmuffme
f035c00a21 Fix non-empty-lowercase-string handling with literal non-lowercase strings
* Fix https://github.com/vimeo/psalm/issues/9782 and related issues
* add explicit handling for non-falsy-string to not fallback non-falsy-string and 0 to string
2024-02-19 11:32:52 +01:00
Bruce Weirdan
d3c1222152
Merge pull request #10704 from issidorov/fix-detecting-magic-static-methods 2024-02-17 10:45:23 -04:00
Bruce Weirdan
03fcf68d9e
Allow multiple spaces between type name and type definition 2024-02-15 23:34:17 +01:00
893b60ed0d
Improve parsing of psalm-type 2024-02-15 23:34:16 +01:00
Ivan Sidorov
8a70bc2506 Resolve tests with suppression "UndefinedMethod"
Apply suggestions from code review.

Resolved problems:
```
1) MagicMethodAnnotationTest::testValidCode with data set "magicStaticMethodInheritanceWithoutCallStatic"
Psalm\Exception\CodeException: UnusedPsalmSuppress - src/somefile.php:9:58 - This suppression is never used

2) MagicMethodAnnotationTest::testValidCode with data set "magicStaticMethodInheritanceWithoutCallStatic_WithReturnAndManyArgs"
Psalm\Exception\CodeException: TooManyArguments - src/somefile.php:9:6 - Too many arguments for B::bar - expecting 0 but saw 2
```
2024-02-14 22:17:26 +00:00
Ivan Sidorov
e940de5edd Resolve tests with creation of a list of issues
Resolved problems:
```
1) Psalm\Tests\MagicMethodAnnotationTest::testInvalidCodeWithIssues with data set "staticInvocationWithMagicMethodFoo"
UnexpectedValueException: Cannot get method params for A::foo

2) Psalm\Tests\MagicMethodAnnotationTest::testInvalidCodeWithIssues with data set "nonStaticSelfCallWithMagicMethodFoo"
UnexpectedValueException: Cannot get method params for B::foo
```
2024-02-13 17:25:16 +00:00
Ivan Sidorov
4c645e186c Resolve tests for StaticInvocation and NonStaticSelfCall
The code has been moved from down to up.

Resolved problems:
```
1) MagicMethodAnnotationTest::testInvalidCode with data set "staticInvocationWithInstanceMethodFoo"
Failed asserting that exception of type "Psalm\Exception\CodeException" is thrown.

2) MagicMethodAnnotationTest::testInvalidCode with data set "nonStaticSelfCallWithInstanceMethodFoo"
Failed asserting that exception of type "Psalm\Exception\CodeException" is thrown.
```
2024-02-13 17:25:16 +00:00
Ivan Sidorov
14316f55ba Resolve testAnnotationWithoutCallConfigWithExtendsWithStatic
Resolved error:
```
MagicMethodAnnotationTest::testAnnotationWithoutCallConfigWithExtendsWithStatic
Failed asserting that exception of type "Psalm\Exception\CodeException" is thrown.
```

Appended problem:
```
MagicMethodAnnotationTest::testValidCode with data set "magicStaticMethodInheritanceWithoutCallStatic"
Psalm\Exception\CodeException: UndefinedMethod - src/somefile.php:9:32 - Method B::bar does not exist
```
2024-02-13 17:25:16 +00:00
Ivan Sidorov
5f89fa1730 Resolved all tests
Resolved problem:

```
1) MagicMethodAnnotationTest::testSealAllMethodsSetToFalseWithStatic
Psalm\Exception\CodeException: UndefinedMagicMethod - somefile.php:8:15 - Magic method B::foo does not exist
```
2024-02-13 17:25:16 +00:00
Ivan Sidorov
0ba346c5a0 Delete code of replacing variable method_id
The main task for deleting:
```
$method_id = new MethodIdentifier(
    $fq_class_name,
    '__callstatic',
);
```

List of resolved problems:
```
1) Psalm\Tests\MagicMethodAnnotationTest::testNoSealAllMethodsWithStatic
Failed asserting that exception of type "Psalm\Exception\CodeException" is thrown.

2) Psalm\Tests\MagicMethodAnnotationTest::testSealAllMethodsWithoutFooWithStatic
Failed asserting that exception of type "Psalm\Exception\CodeException" is thrown.

3) Psalm\Tests\MagicMethodAnnotationTest::testInvalidCode with data set "inheritSealedMethodsWithStatic"
Failed asserting that exception of type "Psalm\Exception\CodeException" is thrown.
```

Appended problem by that fix:
```
1) MagicMethodAnnotationTest::testSealAllMethodsSetToFalseWithStatic
Psalm\Exception\CodeException: UndefinedMagicMethod - somefile.php:8:15 - Magic method B::foo does not exist
```
2024-02-13 17:25:16 +00:00
Ivan Sidorov
df2067dd74 Resolve testReferencedMethods
Resolved problem:
```
FileReferenceTest::testReferencedMethods with data set "getClassReferences"
Failed asserting that two arrays are identical.
--- Expected
+++ Actual
@@ @@
         'foo\b::__construct' => true
         'foo\c::foo' => true
     )
-    'foo\c::__construct' => Array &2 (
+    'foo\a::__callstatic' => Array &2 (
+        'foo\b::__construct' => true
+    )
+    'foo\c::__construct' => Array &3 (
         'foo\b::bar' => true
     )
 )
 ```
2024-02-13 17:25:16 +00:00
Ivan Sidorov
2567a99347 Extract checking method "__callStatic" from block "if"
Appended problem by that commit:
```
1) FileReferenceTest::testReferencedMethods with data set "getClassReferences"
Failed asserting that two arrays are identical.
--- Expected
+++ Actual
@@ @@
         'foo\b::__construct' => true
         'foo\c::foo' => true
     )
-    'foo\c::__construct' => Array &2 (
+    'foo\a::__callstatic' => Array &2 (
+        'foo\b::__construct' => true
+    )
+    'foo\c::__construct' => Array &3 (
         'foo\b::bar' => true
     )
 )
```
2024-02-13 17:25:16 +00:00
Ivan Sidorov
083b8e26db Add issue message for magic methods 2024-02-13 17:25:16 +00:00
Ivan Sidorov
29b4c38a94 Add argument with_pseudo for method finding 2024-02-13 17:25:16 +00:00
Markus Staab
f5fb9498de Use IssueBuffer::maybeAdd() instead of throwing 2024-02-13 09:11:11 +01:00
Markus Staab
da69803823 Report invalid number of arguments for psalm-taint-* 2024-02-12 10:46:45 +01:00
Bruce Weirdan
395f3f7862
Merge pull request #10690 from weirdan/9649-this-out-on-constructors 2024-02-11 16:34:25 -04:00
Bruce Weirdan
a8c093aea2
Handle taking references to unspecified magic methods 2024-02-11 02:45:24 +01:00
Bruce Weirdan
d10e384338
Report first class callables generated for unknown static methods
Fixes vimeo/psalm#10170
2024-02-11 02:24:27 +01:00
Bruce Weirdan
def0489b98
Process @psalm-this-out on __construct() as well
Fixes vimeo/psalm#9649
2024-02-11 01:53:30 +01:00
Bruce Weirdan
ceaea625f3
Merge pull request #10675 from robchett/prevent_nullable_mixed 2024-02-10 14:20:36 -04:00