1
0
mirror of https://github.com/danog/psalm.git synced 2024-11-26 20:34:47 +01:00
Commit Graph

3648 Commits

Author SHA1 Message Date
Matt Brown
613ce96582
Support property type promotion ref #4089 2021-01-29 11:39:45 +01:00
Matt Brown
f63a40f69b
Fix #4266 - prevent OOM when analysing closure unioned with invokable class 2021-01-29 11:39:44 +01:00
Matt Brown
a4b6cb83db
Fix #4264 - prevent crash when analysing file with duplicate classes 2021-01-29 11:39:44 +01:00
Matt Brown
a6e3d46d62
Treat func_get_args as using function params 2021-01-29 11:39:44 +01:00
Matt Brown
63953d5676
4.x - refactor unused variable detection
This turns unused variable detection into an explicit control-flow problem, where before we had a more simplistic mark-and-sweep algorithm
2021-01-29 11:39:44 +01:00
Matt Brown
5351a07cea
Fix analysis when there’s a break in a loop after a reassignment 2021-01-29 11:39:43 +01:00
Brown
5e8e183667
Add improvements from unused variable checks 2021-01-29 11:39:43 +01:00
Brown
ee2149342e
Add more unused variable tests 2021-01-29 11:39:43 +01:00
Brown
cf2872c285
Ensure loop marks vars as possibly assigned 2021-01-29 11:39:43 +01:00
Bruce Weirdan
ecec9dd040
Fixes crash due to class/filename mismatch (#4247)
Introduced in 56cddd16bf
2021-01-29 11:39:43 +01:00
Brown
f5019d92e2
Fix unused var in finally false-positive 2021-01-29 11:39:43 +01:00
Brown
1893147aed
Prevent duplicate switch return types 2021-01-29 11:39:43 +01:00
Brown
5177511a72
Fix test result 2021-01-29 11:39:42 +01:00
Brown
999a8aa4a8
Move taint graph functionality into its own object 2021-01-29 11:39:42 +01:00
Brown
d666d93950
Add more tests for unused variables 2021-01-29 11:39:42 +01:00
orklah
e3e5a55907
unused use statements (#4228) 2021-01-29 11:39:42 +01:00
Brown
d40cc0b35b
Skip currently-failing undefined variable test 2021-01-29 11:39:41 +01:00
Brown
734b9c3833
Detect more issues inside finally block 2021-01-29 11:39:41 +01:00
Brown
0856354b48
Rename TaintGraph to ControlFlowGraph because it’s about to do more 2021-01-29 11:39:41 +01:00
Brown
364f8f1a01
Add back necessary suppression 2021-01-29 11:39:40 +01:00
Brown
c288dac4de
Fix tests 2021-01-29 11:39:40 +01:00
Brown
dbe4b4c708
Localise taint analysis better 2021-01-29 11:39:40 +01:00
Brown
291c067dc5
Rename Taint object to TaintGraph 2021-01-29 11:39:40 +01:00
orklah
9f00b8536a
fix test on windows (#4225) 2021-01-29 11:39:40 +01:00
orklah
f1aba254be
Use array destructuring when possible (#4221)
* list usage

* fix inversion
2021-01-29 11:39:39 +01:00
Brown
c0bf0a8fa7
Fix #4198 - make analysis of class-string property assignments more robust 2021-01-29 11:39:39 +01:00
orklah
b559951bf4
replace deprecated methods with their equivalent (#4217) 2021-01-29 11:39:39 +01:00
orklah
3652d51275
Remove empty() and use strict comparison when safe (#4211)
* replace empty usage with stricter checks

* use strict comparison when safe

* replace is_null with === null for consistency
2021-01-29 11:39:39 +01:00
Brown
ec64ae930a
Fix a couple of false-positive redundant conditions 2021-01-29 11:39:38 +01:00
Brown
1b10f11217
Fix tests 2021-01-29 11:39:38 +01:00
Brown
ff2c18aa67
Fix #4208 - array with possibly-undefined keys isn‘t really sealed 2021-01-29 11:39:38 +01:00
Brown
e7333ec4db
Fix #4209 - allow hinting arrow function return type 2021-01-29 11:39:38 +01:00
Brown
1b6ecfc128
Fix #4210 - fix __invoke declaration tracing 2021-01-29 11:39:38 +01:00
Brown
7e534d14d0
Improve accuracy of array_filter 2021-01-29 11:39:37 +01:00
Brown
f8e7b649c7
Improve array_merge return type 2021-01-29 11:39:37 +01:00
Brown
95cc274192
Support more array intersections in type parsing 2021-01-29 11:39:37 +01:00
Brown
376a825161
Fix regression – detect unused params with defaults again 2021-01-29 11:39:37 +01:00
Brown
5e6b158dd9
Do no writing when saving parser cache in tests 2021-01-29 11:39:36 +01:00
Brown
270f9de20a
Fix a few more things 2021-01-29 11:39:36 +01:00
Brown
e9fb3dcad2
Fix various things 2021-01-29 11:39:36 +01:00
Brown
d53a9313a5
Fix stub test 2021-01-29 11:39:36 +01:00
Brown
0b66e8897c
Add check for strpos dictionaries
Ref #4070
2021-01-29 11:39:36 +01:00
Brown
db55f608be
Fix #4122 - detect yield in function arguments 2021-01-29 11:39:36 +01:00
Brown
168972e91a
Fix #4178 - always detect missing property types 2021-01-29 11:39:36 +01:00
Bruce Weirdan
b27a233cdd
Support multiple issue types in @psalm-suppress (#4179)
* Accept multiple issue names in `@psalm-suppress`

Fixes vimeo/psalm#1575

* Accept multiple issue types on statement docblocks as well

* Proper highlighting of individual issues in compound suppressions
2021-01-29 11:39:36 +01:00
Bruce Weirdan
4319132057
Added @psalm-stub-override for classlikes and methods (#4177)
Fixes vimeo/psalm#1252
2021-01-29 11:39:34 +01:00
orklah
865b36cd3d
replace return; by return null; in every non-void method, add return null; when mising, add return types, remove redundant phpdoc (#4176) 2021-01-29 11:38:58 +01:00
Brown
29481ed1bd
Fix #4127 - improve error message for unused closure var 2021-01-29 11:38:58 +01:00
ygottschalk
c361f86c68
added array-size max constraint to greater check (#4175)
added a few unit tests
2021-01-29 11:38:58 +01:00
Brown
5d04368d98
Fix #4169 - add appropriate bounds check 2021-01-29 11:38:57 +01:00
orklah
db45ff1ba4
More return types (#4173)
* add native return types

* redundant phpdoc
2021-01-29 11:38:57 +01:00
Brown
0116284d16
Improve unique issue solution 2021-01-29 11:38:57 +01:00
Brown
568cbfb1be
Fix tests 2021-01-29 11:38:56 +01:00
Brown
ca0608d92a
Fix #4070 - prevent literal strpos argument 2021-01-29 11:38:56 +01:00
Brown
c291b93bbe
Fix #4167 - allow many issues for the same position 2021-01-29 11:38:56 +01:00
Brown
b84e88f342
Fix #4154 - treat literal numeric strings as numeric 2021-01-29 11:38:56 +01:00
Brown
b148221e18
Always detect return type mismatches from docblock parents 2021-01-29 11:38:56 +01:00
Brown
539bc13cb3
Fix some signatures 2021-01-29 11:38:55 +01:00
Brown
cbb97c42a8
Fix #4146 - allow null checks on Iterator::current output 2021-01-29 11:38:55 +01:00
Brown
e7730c2b34
Fix #4148 - add Closure to scanned classes when arrow function is seen 2021-01-29 11:38:55 +01:00
orklah
1348e61afb
add native param types (#4137)
* add native param types

* redundant phpdoc

* add more param types and adds "?" to nullable types

* remove redundant phpdoc

* add more param types and remove redundant phpdoc

* add more param types and remove redundant phpdoc
2021-01-29 11:38:54 +01:00
Matthew Brown
274d19c649
Prevent variables named "haystack" from receiving literal strings
cc @staabm
2021-01-29 11:38:54 +01:00
Matthew Brown
4dc045f30d
Support analysing preg_match_all args in reverse to infer matches type 2021-01-29 11:38:54 +01:00
Brown
f7474faff2
Hard code possible bit-shift values 2021-01-29 11:38:54 +01:00
Brown
4583467325
Fix #4128 - improve understanding of preg_match_all 2021-01-29 11:38:53 +01:00
Brown
be3d130965
Fix #4132 - ignore purity of $this when checking for initialisation 2021-01-29 11:38:53 +01:00
orklah
61512da144
add native return types (#4116)
* add native return types

* remove redundant phpdoc
2021-01-29 11:38:53 +01:00
Brown
f9d6b9d7c1
Improve tests a little 2021-01-29 11:38:53 +01:00
Brown
06a9ae9c6c
Clean up immutable fix 2021-01-29 11:38:52 +01:00
Brown
4d0b91fcd2
Allow passing mutable object into immutable class to store reference 2021-01-29 11:38:52 +01:00
Brown
e3d7d0315a
Fix #4109 - detect duplicate match condition 2021-01-29 11:38:52 +01:00
Brown
58cda0a003
Fix #4112 - allow slashes in docblock tag names 2021-01-29 11:38:52 +01:00
orklah
becac547fb
Short list syntax (#4102)
* Short list syntax

* revert unrelated CS
2021-01-29 11:38:52 +01:00
Brown
b94de0c8b8
Add more accomodations for TPositiveInt 2021-01-29 11:38:51 +01:00
Brown
73770f4268
Fix erroneous Closure::__invoke return type 2021-01-29 11:38:51 +01:00
Brown
472c2839ad
Fix crash with @var over echo 2021-01-29 11:38:51 +01:00
Brown
8611f99e09
Fix exhaustiveness checks for const value 2021-01-29 11:38:50 +01:00
Brown
d7cc68cb09
Fix issues 2021-01-29 11:38:50 +01:00
Brown
a0a7f8a98b
Catch unmatched matches 2021-01-29 11:38:50 +01:00
Brown
b62719c9c8
Fix some magic method calls when a return type provider exists 2021-01-29 11:38:50 +01:00
Brown
eae55eb584
Fix #4093 - prevent redundant condition in presence of positive-int 2021-01-29 11:38:50 +01:00
Brown
9b726904f9
Ignore redundant conditions inside match potentially in perpetuity? 2021-01-29 11:38:49 +01:00
Brown
b785efb210
Support match expressions and throw expressions 2021-01-29 11:38:49 +01:00
Brown
36b1a21fcf
Support mixed type natively 2021-01-29 11:38:49 +01:00
Brown
65c855a4d3
Support static return type 2021-01-29 11:38:49 +01:00
Brown
e5aae7f9e6
Support PHP 8 union types 2021-01-29 11:38:49 +01:00
Brown
5bd8fa61c6
Change version test 2021-01-29 11:38:49 +01:00
Brown
c96ba8d1f5
Add some backwards-incompatible changes for 4.x 2021-01-29 11:38:48 +01:00
Brown
226f3cef6a
Improve understanding of negated count queries 2021-01-29 11:38:48 +01:00
Brown
4b628c7db5
Improve Closure::fromCallable handling 2021-01-29 11:38:48 +01:00
Tyson Andre
c9ff06d4d4
Fix expected php 8.0 syntax error (#4084)
This will very likely be parsed as an attribute in php 8.0
See
https://wiki.php.net/rfc/shorter_attribute_syntax_change#secondary_vote
2021-01-29 11:38:48 +01:00
Brown
38cd48657f
Fix modulo test 2021-01-29 11:38:48 +01:00
Brown
e5e50926d4
Fix #4083 - namespace docblock method classes the proper way 2021-01-29 11:38:48 +01:00
Brown
b7002ceb9f
Fix treatment of closure params in array_map 2021-01-29 11:38:48 +01:00
Brown
9f246938ba
Fix #4081 - better inference of positive ints 2021-01-29 11:38:48 +01:00
Brown
5232f3012c
Fix test 2021-01-29 11:38:47 +01:00
Brown
02255ae26b
Fix #4077 - always track closure purity 2021-01-29 11:38:47 +01:00
Brown
5835eec863
Fix #4061 - allow indirect null comparison check 2021-01-29 11:38:46 +01:00
Brown
489cd99752
Allow bare pure-callable in namespace cc @azjezz 2021-01-29 11:38:46 +01:00
Saif Eddin G
a0a30c500c
add pure-callable type (#4066) 2021-01-29 11:38:46 +01:00
Brown
6d43a6696c
Make clause fully immutable 2021-01-29 11:38:46 +01:00
Brown
b09309aa92
Prevent unset on immutable properties 2021-01-29 11:38:46 +01:00
Brown
11ee00442d
Refine iterable key after is_array check
Ref #4038
2021-01-29 11:38:46 +01:00
Brown
e585955c96
Use immutable data structures for clause calculations 2021-01-29 11:38:45 +01:00
Brown
ab8d794709
Refine test for windows compat 2021-01-29 11:38:45 +01:00
Brown
4735ca39e2
Fix get_class-inferred templating 2021-01-29 11:38:45 +01:00
Brown
a0a9c9b7bc
Fix #4038 - don’t remove null types unnecessarily in mixed union 2021-01-29 11:38:45 +01:00
Brown
bd7f207e31
Preserve intersections when expanding templated types
Fixes #4043
2021-01-29 11:38:45 +01:00
Brown
6aa8a492ac
Create empty params by default for SplObjectStorage
Fixes #4055
2021-01-29 11:38:45 +01:00
Brown
51bfb3666b
Fix #4052 - foreach over an iterable is impure 2021-01-29 11:38:45 +01:00
Brown
8ca604a533
Expand object-with-properties
Fixes #4057
2021-01-29 11:38:45 +01:00
Brown
91e1e5f0f6
Fix #4036 - add immutable annotations automatically too 2021-01-29 11:38:44 +01:00
Bruce Weirdan
1ac27d6d22
Fix prophecy warnings (#4051)
* Use weirdan/prophecy-shim to avoid PHPUnit warnings on prophesize() calls

* Drop vcs repo as the package is already available on packagist

* Bump psalm/plugin-phpunit

Fixes Prophecy-related issues
2021-01-29 11:38:44 +01:00
Matthew Brown
c4074012f8
Fix immutable tests 2021-01-29 11:38:44 +01:00
Brown
596492a95a
Only add pure when not overriding upstream 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
1ec0f35011
Only add pure to functions with params 2021-01-29 11:38:43 +01:00
Matthew Brown
07843d4768
Don’t add pure annotation when closure is impure 2021-01-29 11:38:43 +01:00
Matthew Brown
601a8fdcb6
Restrict pure annotation addition a little more 2021-01-29 11:38:42 +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
Bruce Weirdan
dabfb16e34
Test parallelization (#4045)
* Run tests in random order

Being able to run tests in any order is a pre-requisite for being able
to run them in parallel.

* Reset type coverage between tests, fix affected tests

* Reset parser and lexer between test runs and on php version change

Previously lexer was reset, but parser kept the reference to the old
one, and reference to the parser was kept by StatementsProvider. This
resulted in order-dependent tests - if the parser was first initialized
with phpVersion set to 7.4 then arrow functions worked fine, but were
failing when the parser was initially constructed with settings for 7.3

This can be demonstrated on current master by upgrading to
nikic/php-parser:4.9 and running:

```
vendor/bin/phpunit --no-coverage --filter="inferredArgArrowFunction" tests/ClosureTest.php
```

Now all tests using PHP 7.4 features must set the PHP version
accordingly.

* Marked more tests using 7.4 syntax

* Reset newline-between-annotation flag between tests

* Resolve real paths before passing them to checkPaths

When checkPaths is called from psalm.php the paths are resolved, so we
just mimicking SUT behaviour here.

* Restore newline-between-annotations in DocCommentTest

* Tweak Appveyor caches

* Tweak TravisCI caches

* Tweak CircleCI caches

* Run tests in parallel

Use `vendor/bin/paratest` instead of `vendor/bin/phpunit`

* Use default paratest runner on Windows

WrapperRunner is not supported on Windows.

* TRAVIS_TAG could be empty

* Restore appveyor conditional caching
2021-01-29 11:38:04 +01:00
Brown
bcc9c413ad
Allow adding pure annotations to functions
Ref #4036
2021-01-29 11:38:04 +01:00
Bruce Weirdan
1cc4715740
Fix windows tests (#4040)
* Fix windows tests by not mangling the expectations

* Use platform-dependent directory separator in expected messages

* fix CS
2021-01-29 11:38:04 +01:00
Bruce Weirdan
78a63ed25a
Resolve typedefs that are used in var docblocks of foreach (#4037)
Fixes vimeo/psalm#4029
2021-01-29 11:38:03 +01:00
Brown
7ac771da48
Fix #4017 - allow float defaults in namespaced classes 2021-01-29 11:37:59 +01:00
Olle
3630b4a2f9 Merge remote-tracking branch 'remotes/upstream/master' 2020-08-18 15:59:46 +00:00
Bauke van der Woude
7ac6d2e5a4
Fix hash_*() signatures (#4014)
Functions can return false when an invalid algorithm is supplied
2020-08-18 09:35:31 -04:00
Brown
1468a28273 Fix #3999 - allow @psalm-type to reference imported type right above 2020-08-18 09:34:07 -04:00
Brown
134955a5f4 Fix #4011 - prevent mixed assignment in loop 2020-08-18 08:51:09 -04:00
Daniel Melchior
17ed440f2e
fix #4013: prevent exception when two mixins declare methods with same name (#4018)
fixes #4013
2020-08-18 08:38:30 -04:00
Brown
de6b354fa0 Fix #4005 - prevent crash when assignment var assertion no longer valid 2020-08-17 15:47:39 -04:00
Brown
11f170acb4 Don’t modify object after unnecessary assertion 2020-08-16 23:38:59 -04:00
Bruce Weirdan
7adc25c421
Improve import errors (#3997)
* Better errors for invalid type imports

Fixes vimeo/psalm#3885

* Finishing touches

Docs, schema, CS

* Drop unused import

* Drop more unused imports
2020-08-16 22:53:53 -04:00
Bruce Weirdan
22d8f5a0bc
Fixed duplicate shortcodes (#3996)
Also added an utility to help assign new shortcodes and a test to
prevent duplicate shortcodes.
2020-08-16 16:26:54 -04:00
Matthew Brown
cb243778d2 Fix #3917 - allow comparisons between classes and interfaces 2020-08-16 16:25:59 -04:00
Matthew Brown
38af5db8f0 Fix #3929 - merge expanded types where necessary 2020-08-16 16:12:29 -04:00
Matthew Brown
5c20a5295e Improve solution to #3964 2020-08-16 13:03:30 -04:00
Matthew Brown
ec2178d14a Fix #3927 - prevent crash with bad type ref 2020-08-16 12:43:46 -04:00
Matthew Brown
a356a43a51 Fix #3964 - prevent incorrect intersection of unions 2020-08-16 12:26:07 -04:00
Matthew Brown
a0bb5ed37d Fix #3991 - fix test 2020-08-15 14:21:24 -04:00
Brown
cdef4ec351 Alter docblock params too 2020-08-14 16:26:55 -04:00
Brown
dbcf154036 Add fixer for mismatching param names 2020-08-14 15:25:21 -04:00
Brown
209d17c868 Fix #2891 - treat autoloaded constants better 2020-08-13 09:14:27 -04:00
Brown
42c3a703b5 Fix #3741 - detect scalar class constants in if-true assertions 2020-08-12 17:03:41 -04:00
Toshiyuki Goto
e0d1655582
Add an unqualified classes in PHPUnit/Framework/Assert/Functions.php to $knownBadClasses (#3985) 2020-08-11 07:33:11 -04:00
m0003r
e81593f359
Localize types on magic properties (#3971)
* Fix #3949 - localize types on magic properties

* fix failing tests

* fix code style

Co-authored-by: m03r <m03r@m03r.net>
2020-08-10 12:45:21 -04:00
Brown
6def99d653 Add ConstructorSignatureMismatch issue distinct from MethodSignatureMismatch 2020-08-10 12:26:25 -04:00
the-toster
5bdc9723ff
fix for DeprecatedClass suppress on property (#3962)
* add test case for DeprecatedClass suppress on property

* fix test case for DeprecatedClass suppress on property - suppress MissingConstructor also

* ugly way to fix - double analyze propery statement to get dockblock + fix in TypeChecker - respect given suppressed_issues in checkNamedObject

* replace double analyze propery with direct DocBlock manipulation

* replace double analyze propery with direct DocBlock manipulation

* add exception handler to keep original addContextProperties behavior

* correct way to unwrap value from array
2020-08-10 10:50:37 -04:00