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

3078 Commits

Author SHA1 Message Date
orklah
ae193ca4da replace elvis operator by coalesce operator when applicable 2021-10-13 20:16:06 +02:00
orklah
dbc6f503b1 use of strtolower only once 2021-10-13 20:16:06 +02:00
orklah
e17290a9bc
Merge pull request #6613 from orklah/string-unpacking
String unpacking
2021-10-13 15:18:11 +02:00
orklah
91c3d788f6
Merge pull request #6656 from orklah/setAttribute
use Attribute feature of PHP-Parser to avoid dealing with dynamic properties
2021-10-13 14:46:22 +02:00
orklah
bee5b69f7f use Attribute feature of PHP-Parser to avoid dealing with dynamic properties 2021-10-13 13:27:56 +02:00
orklah
9bb731182a reintroduce errors for older versions 2021-10-13 11:22:40 +02:00
orklah
6e7aafe9b8 better behaviour in SimpleTypeInferer 2021-10-13 11:22:40 +02:00
orklah
66bbcc212c remove unneeded argument 2021-10-13 11:22:40 +02:00
orklah
690c24f824 array unpacking with strings 2021-10-13 11:22:40 +02:00
orklah
e7cd2eac0a
Merge pull request #6641 from orklah/weird-assertion-count
Union::getAssertionString with multiple types
2021-10-13 08:15:28 +02:00
orklah
c6fb81007c
Merge pull request #6629 from orklah/loops-tweaking
tweaking with loops
2021-10-11 20:45:54 +02:00
orklah
af414ffe59
Merge pull request #6642 from orklah/inside-conditional
Inside conditional
2021-10-11 20:45:14 +02:00
orklah
911076939c
Merge pull request #6628 from orklah/phpparser2
Php-Parser 4.13
2021-10-11 20:42:32 +02:00
orklah
21456b85b1 add Never for throws. Add Never only if at top level 2021-10-11 19:35:18 +02:00
orklah
f9377c53fc infer never on closures(and more?) 2021-10-11 18:52:26 +02:00
orklah
c4ebc34695 suppress or use the return type 2021-10-11 17:27:52 +02:00
orklah
9e7d3a4cd6 sets the inside_conditional flag after creating another context from it 2021-10-11 16:38:39 +02:00
orklah
2e64854a6c don't allow getAssertionString to return a part of the Union 2021-10-11 16:07:57 +02:00
orklah
3aee938910
Merge pull request #6636 from orklah/possibly-undefined-satisfy-nullable
Allow sending possibly_undefined inputs to optional params
2021-10-10 23:12:38 +02:00
orklah
cc82e6cf41 suppress warning 2021-10-10 13:58:09 +02:00
orklah
1b24b0309c reduce complexity 2021-10-10 13:52:14 +02:00
orklah
69d412bfcb fix error message when input is possibly undefined 2021-10-10 13:42:28 +02:00
orklah
fb8b07613d Allow sending possibly_undefined inputs to optional params 2021-10-10 12:44:04 +02:00
orklah
f159ca76de
Merge pull request #6624 from orklah/float-always-float
invert the meaning of the errors
2021-10-10 10:42:37 +02:00
orklah
d5eb471688 every condition must be true 2021-10-10 10:27:22 +02:00
orklah
85668ed255 Add support for infinite for loops 2021-10-10 10:22:41 +02:00
orklah
39b85f574b revert back wrong change 2021-10-10 10:06:37 +02:00
orklah
70bfce769c revert back wrong change 2021-10-10 10:00:44 +02:00
orklah
df34daee52 more consistency 2021-10-10 00:51:47 +02:00
orklah
7c99878f58 tweaking with loops 2021-10-10 00:21:15 +02:00
orklah
870ee4ff93 ->args to ->getArgs 2021-10-09 23:37:04 +02:00
orklah
bac0217890 add "!" to invert the meaning of the errors 2021-10-09 21:15:27 +02:00
orklah
f62c76a334
Merge pull request #6622 from orklah/return_0
fix @return 0
2021-10-09 18:25:46 +02:00
orklah
a1df08f718 fix an old test 2021-10-09 18:18:15 +02:00
orklah
950b21d10a
Merge pull request #6621 from orklah/incompatible-types-found-for-T
add a little details to the Incompatible types found for T error
2021-10-09 15:10:27 +02:00
orklah
b1f20dffa0 fix brackets 2021-10-09 15:02:49 +02:00
orklah
e9f3e8795f add a little details to the Incompatible types found for T error 2021-10-09 15:01:13 +02:00
orklah
f35df421e2
Merge pull request #6604 from orklah/array-unshift-on-empty-array
Array unshift on empty array
2021-10-07 23:04:10 +02:00
orklah
87a5df6043 only put offset to 0 when there's only one argument 2021-10-07 20:38:10 +02:00
orklah
3fc716ec3b fix CS 2021-10-07 19:39:45 +02:00
orklah
a7c4f0052b foreach on list gives a positive|0 offset 2021-10-07 19:32:25 +02:00
orklah
3a2eddf2d7 pass the method_id to be able to set the new offset type to 0 for array_unshift 2021-10-07 09:46:49 +02:00
orklah
6627055f3b make TypeCombiner override empty-array 2021-10-07 09:46:17 +02:00
orklah
2c728546e4
Merge pull request #6485 from orklah/list-assert
assert that some type is a list
2021-10-04 13:31:34 +02:00
orklah
ac6a75ea7f
Merge pull request #6473 from orklah/double-assert2
assert both sides of an equality
2021-10-04 13:30:38 +02:00
orklah
0e83afdb86
Merge pull request #6518 from orklah/fix-truthy
improvements of alwaysTruthy/alwaysFalsy
2021-10-04 13:29:49 +02:00
orklah
8b07e69645
Merge pull request #6514 from zoonru/if-this-is
Add if-this-is
2021-10-04 09:49:26 +02:00
orklah
53c0a4e63a cleanup 2021-10-04 00:03:06 +02:00
orklah
d3bc179abd cover the case where the call to the function is namespaced but the function doesn't exists in the namespace 2021-10-02 10:02:24 +02:00
orklah
e0b2cb5028 consistency 2021-10-02 10:02:24 +02:00
orklah
0b8681c8bf check namespace before adding assertions 2021-10-02 10:02:24 +02:00
orklah
fa9990ae55 fix wrong method name 2021-10-02 10:02:24 +02:00
orklah
e02eec932e refactor Assertions for is_ functions 2021-10-02 10:02:24 +02:00
orklah
f641d9e95a assert that some type is a list 2021-10-02 10:02:22 +02:00
orklah
f8628ef68c fix errors 2021-10-02 10:01:05 +02:00
orklah
b9e65f066a refactor paradoxical conditions 2021-10-02 10:01:04 +02:00
orklah
85f16e9710 handle the case where analysis failed 2021-10-02 10:01:04 +02:00
orklah
597e9a99d7 Makes BooleanNot smarter 2021-10-02 10:01:04 +02:00
orklah
7f0d25374f add comment 2021-10-02 09:52:19 +02:00
orklah
83ad836e88 assert both sides of an equality 2021-10-02 09:52:19 +02:00
Bruce Weirdan
2e7e343ef8
Merge pull request #6423 from orklah/count-equal-0-negated-assertion 2021-10-02 00:53:03 +03:00
Bruce Weirdan
d232cc0d02
Merge pull request #6553 from orklah/exec-leak 2021-09-30 21:32:55 +03:00
orklah
02ef33c4ac
Merge pull request #6554 from simPod/use-a
Use correct English articles
2021-09-30 09:37:56 +02:00
Simon Podlipsky
4f5e30fd30
Use correct English articles 2021-09-30 09:19:08 +02:00
orklah
3133cd159a fix NPE 2021-09-29 22:30:38 +02:00
orklah
2a2e7c5e32 prevent object leaking that lead to changes in callmap 2021-09-29 22:27:34 +02:00
orklah
ab6efe49b2 fix CS 2021-09-26 23:41:26 +02:00
orklah
38dac34846 unnecessary null initialization 2021-09-26 23:34:32 +02:00
orklah
5d6d3df4cf unnecessary identical child method 2021-09-26 23:34:32 +02:00
orklah
9170b0af8f replace list() 2021-09-26 23:34:32 +02:00
orklah
2315316b17 return types 2021-09-26 23:34:32 +02:00
orklah
72eab30a3a coalesce operator 2021-09-26 23:34:31 +02:00
orklah
46801c4b98 clearer string operations 2021-09-26 23:34:31 +02:00
orklah
18b0c63de2 shorter operations 2021-09-26 22:44:33 +02:00
orklah
53e4719c19 boolean cast 2021-09-26 22:39:01 +02:00
orklah
c11b32d414 redundant variable check 2021-09-26 22:37:17 +02:00
orklah
a85cba3973 dead code 2021-09-26 22:37:17 +02:00
orklah
ae1afd90c6 coalesce operator 2021-09-26 22:37:17 +02:00
orklah
a5aa824258 unnecessary local variable 2021-09-26 22:37:17 +02:00
orklah
be8406294c unnecessary return 2021-09-26 22:37:16 +02:00
orklah
5b684309fd unnecessary ternary 2021-09-26 22:37:16 +02:00
orklah
153de33704 weird param always false 2021-09-26 22:37:16 +02:00
orklah
4481428f97 unused param 2021-09-26 22:36:17 +02:00
orklah
c0f6474bc6 merging exceptions 2021-09-26 22:36:17 +02:00
orklah
966211e052 unused variable 2021-09-26 22:36:16 +02:00
orklah
afbda6d0f6
Merge pull request #6535 from orklah/SA
Improvements
2021-09-25 20:16:38 +02:00
orklah
41ea541084 unset instead of reassign 2021-09-25 18:11:54 +02:00
orklah
7891e6136a unparsable types 2021-09-25 17:19:50 +02:00
orklah
cc77abaa40 unparsable types 2021-09-25 17:19:45 +02:00
orklah
748d58a1d6 unparsable types 2021-09-25 17:14:57 +02:00
orklah
89f5c12be2 unparsable types 2021-09-25 17:14:10 +02:00
orklah
a9b1248e9f unnecessary phpdoc is necessary 2021-09-25 17:13:58 +02:00
orklah
671a175deb unnecessary phpdoc 2021-09-25 17:08:51 +02:00
orklah
f0b0540563 unparsable types 2021-09-25 17:08:38 +02:00
orklah
3e6bf6f35f remove unused nullable on param types 2021-09-25 16:05:47 +02:00
orklah
a92fee8ae3 better combining 2021-09-25 11:21:06 +02:00
orklah
97e91e6bf0 code trimming 2021-09-25 02:34:21 +02:00
orklah
e6ba6092a6 turn inside_loop to true for do...while 2021-09-23 21:24:17 +02:00
orklah
d3d11471b7 allow arithmetics on variables as long as we're out of loops 2021-09-23 21:24:16 +02:00
orklah
012b65de78 try to improve behaviour 2021-09-23 21:24:16 +02:00
orklah
2b56d52760 rename vars for better diff 2021-09-23 21:24:16 +02:00
orklah
efde3f9180 change order for better diff 2021-09-23 21:24:16 +02:00
orklah
5ec9e6543d try with everything except Variables 2021-09-23 21:24:16 +02:00
orklah
c6949760f8 activate arithmetic operations on properties too 2021-09-23 21:24:16 +02:00
orklah
a70e7032e9 activate arithmetic operations on method calls too 2021-09-23 21:24:16 +02:00
orklah
c4b47d3786 activate arithmetic operations on func calls 2021-09-23 21:24:16 +02:00
orklah
cc6ab8340b improve type when min = max and add test 2021-09-23 21:24:16 +02:00
orklah
ea80373006 AssertionFinder refactor 2021-09-23 21:24:16 +02:00
orklah
a7fa63547e add tests, improve count behaviour on keyed arrays using integer range 2021-09-23 21:24:16 +02:00
orklah
7bf9df4360 restore paradox checking 2021-09-23 21:24:16 +02:00
orklah
667eec2ac8 consider count === 0 2021-09-23 21:24:16 +02:00
741c9ee471
Fixes 2021-09-22 10:26:21 +02:00
orklah
9b60c86206
Merge pull request #6508 from thomasbley/master
fixed Uncaught Error: Call to undefined function shell_exec()
2021-09-21 20:39:15 +02:00
f8a959c079
Fix silly bug 2021-09-21 14:11:33 +02:00
7e0b489efe
Merge remote-tracking branch 'origin/master' into if-this-is 2021-09-21 12:12:15 +02:00
Thomas Bley
6f958fe919 Merge branch 'master' of github.com:thomasbley/psalm 2021-09-20 16:55:58 +02:00
Thomas Bley
e60d9e5ec5 return 1 if shell_exec is not available for getCpuCount() 2021-09-20 16:55:16 +02:00
orklah
994c927b6a
Merge pull request #6445 from TysonAndre/negate-in_array-v2
Fix false positive ParadoxicalCondition in negation of in_array
2021-09-20 16:49:15 +02:00
Thomas
ecb368ff2b
Merge branch 'vimeo:master' into master 2021-09-20 12:19:43 +02:00
Thomas Bley
449ef0d994 fixed Uncaught Error: Call to undefined function shell_exec() 2021-09-20 12:18:49 +02:00
orklah
90e1662964
Merge pull request #6241 from orklah/range5
Range arithmetics and assertions
2021-09-20 07:15:43 +02:00
orklah
0f17a2590c fix Mod 2021-09-19 19:30:03 +02:00
orklah
25f78b5d54 refine Mod with positives everywhere 2021-09-19 19:30:03 +02:00
orklah
f87bd56105 fix Pow 2021-09-19 19:30:03 +02:00
orklah
5a2df475ca changes after review 2021-09-19 19:30:03 +02:00
orklah
3d7dc740c2 fix UnaryMinus 2021-09-19 19:30:03 +02:00
orklah
e75e390449 refactor big methods away 2021-09-19 19:30:03 +02:00
orklah
6b5e6eeecc fix wrong type 2021-09-19 19:30:02 +02:00
orklah
a6630c49a2 fix mod calculation with ranges 2021-09-19 19:30:02 +02:00
orklah
c226285a4b fix Mul and Pow operations 2021-09-19 19:30:02 +02:00
orklah
f789ab0655 add test and allow checking in already inferred types instead of just relying on statements from PHPParser for assertions 2021-09-19 19:30:02 +02:00
orklah
ae0586b0e6 fix shift inference 2021-09-19 19:30:02 +02:00
orklah
c26f403e7e fix an old bug with inverting positive int + allow inverting TIntRange 2021-09-19 19:30:02 +02:00
orklah
488c13b7c5 handle bit operations and add test 2021-09-19 19:30:02 +02:00
orklah
9994a91915 help Psalm understand the types 2021-09-19 19:30:02 +02:00
orklah
6f050359ce refactor int vs int range arithmetic by converting everything to range and add tests 2021-09-19 19:30:02 +02:00
orklah
0227894176 fix code 2021-09-19 19:30:02 +02:00
orklah
d2f73d3adb fix and test minus case 2021-09-19 19:30:01 +02:00
orklah
d919a53674 rename method too 2021-09-19 19:30:01 +02:00
orklah
9ab46ff3e0 rename class because it handles Div too now 2021-09-19 19:30:01 +02:00
orklah
2dd16f9e22 simplify code 2021-09-19 19:30:01 +02:00
orklah
def7d31566 fix positive-numeric assertion 2021-09-19 19:30:01 +02:00
orklah
c20c1b5002 better div and modulo inference 2021-09-19 19:30:01 +02:00
orklah
55b45853de try not to remove null after a positive-numeric assertion 2021-09-19 19:30:00 +02:00
orklah
219e425894 handle nightmare isset assertions 2021-09-19 19:30:00 +02:00
orklah
ee75586fbf expand test and fix assertions 2021-09-19 19:30:00 +02:00
orklah
d2e1388473 Allow inferior-to and superior-to even with negated numbers 2021-09-19 19:30:00 +02:00
orklah
61d1d1660d handle the div case when even if min/max are integers, there may be float between them 2021-09-19 19:30:00 +02:00
orklah
4682c4be5e remove unnecessary var 2021-09-19 19:29:59 +02:00
orklah
8325378e23 support inverted comparison and remove null after value comparison 2021-09-19 19:29:59 +02:00
orklah
ca4c18c30d put assertions back 2021-09-19 19:29:59 +02:00
orklah
1dcdaea117 int range arithmetics 2021-09-19 19:29:59 +02:00
orklah
e9f3d5ba06 assert from TClassString 2021-09-17 20:05:25 +02:00
orklah
44bfa2c21c flag alwaysTruthy conditions as redundant 2021-09-12 22:53:44 +02:00
S.M. Ataur Rahman
c13ed7cc28 type of "$http_response_header" is "list<string>" now 2021-09-09 01:36:07 +06:00
Bruce Weirdan
b4f024b1fe
Basic enum checks
* Duplicate cases
* Duplicate case values
* Invalid case values: value on a pure enum case, missing value on a
backed enum case, backing type / case type mismatch
* Literal expression evaluation for case values

Fixes vimeo/psalm#6426
Fixes vimeo/psalm#6427
2021-09-07 12:35:38 +03:00
Tyson Andre
f4f989d1e5 Use different in-array-* check for non-literals
Negating this would not contradict the original condition if the
variables were different. A string can be in one array of strings but
not be in a different array of strings.
2021-09-06 21:48:08 -04:00
Tyson Andre
7df819e585 Unrelated: Use strict_equality instead of loose_equality for === checks
(`=` is strict equality, `~` is loose equality)
2021-09-06 21:44:19 -04:00
Tyson Andre
f69a255611 Fix false positive ParadoxicalCondition in negation of in_array
For #6439
2021-09-06 21:15:04 -04:00
Bruce Weirdan
7b11024886
Flag invalid backing types for enums
Fixes vimeo/psalm#6428
2021-09-05 20:12:24 +03:00
Bruce Weirdan
5dfd157d72
Merge pull request #6420 from orklah/ternary-override-type
Ternary override type when reassigning
2021-09-04 21:58:32 +03:00
Bruce Weirdan
b710aab148
Merge pull request #6419 from TysonAndre/in_array-fix 2021-09-04 21:56:36 +03:00
Bruce Weirdan
3a3fde332e
Merge pull request #6392 from orklah/control-action-test 2021-09-04 21:38:08 +03:00
orklah
0825f220fe allow ternary to override previous type when reassigning 2021-09-04 20:22:06 +02:00
Tyson Andre
58e7ae1809 Also support non-literal types in strict in_array() check
Modified approach to #6396 by orklah

Fixes #6333

Co-Authored-By: orklah <ronan_morin@hotmail.com>
2021-09-04 12:34:49 -04:00
orklah
f9b37cea5b name error 2021-09-04 14:08:04 +02:00
orklah
c8cf503367 introduce isAlwaysFalsy and isAlwaysTruthy 2021-09-04 13:56:13 +02:00
orklah
e99c1951ae Make Psalm understand infinite while loop in control actions 2021-09-02 22:28:01 +02:00
Roland Franssen :)
27faf9502e 😓 2021-09-02 20:39:03 +02:00
Roland Franssen :)
a4356089ef fix 2021-09-02 20:37:21 +02:00
Roland Franssen :)
4bf4d8e451 Forbid empty() 2021-09-02 20:32:05 +02:00
Bruce Weirdan
cbcc38aab8
Merge pull request #6339 from niconoe-/allow-object-on-array_walk 2021-08-31 23:45:10 +03:00
Bruce Weirdan
103b2b7244
Warn about array_walk_recursive over objects 2021-08-31 23:18:20 +03:00
Bruce Weirdan
624246b996
Merge pull request #6376 from orklah/use-variable-in-backtick 2021-08-29 04:39:13 +03:00
orklah
27b6d5ad3b fix psalm errors 2021-08-29 00:39:36 +02:00
orklah
10c20dc8f3 mark variable used in backticks as used 2021-08-29 00:26:52 +02:00
Bruce Weirdan
b370ce92aa
Report RawObjectIteration when array_walk is used on objects 2021-08-20 01:43:49 +03:00
Bruce Weirdan
9222b24ea1
Merge pull request #6321 from orklah/analyze-dynamic-classConstFetch 2021-08-20 01:06:56 +03:00
orklah
dbf3512b70 introduce $definite_class flag and use it to avoid using final keyword for simple inference 2021-08-19 23:19:59 +02:00
Bruce Weirdan
65f34d0d9f
Merge pull request #6346 from orklah/id-cache
remove cache after unsetting a key from a TKeyedArray
2021-08-19 22:01:44 +03:00
orklah
6ba8876153 remove cache after unsetting a key from a TKeyedArray 2021-08-19 20:40:25 +02:00
orklah
2b37bdf253 get rid of the final check that was there only for static:: before 2021-08-17 23:40:03 +02:00
orklah
ee53c57952 add back alter blocks but remove renaming the $stmt->class part when it's a variable 2021-08-17 23:11:28 +02:00
Barney Laurance
88276d7f1e Fix error message for call to internal method from root namespace 2021-08-17 18:54:57 +01:00
orklah
1bf7447685 small refactor, add LiteralClassString, remove alter code blocks 2021-08-17 18:51:59 +02:00
orklah
7308c86bb2 fix build 2021-08-16 21:56:37 +02:00
orklah
9264ea5cbb Allow type inference on dynamic ClassConstFetch 2021-08-16 21:20:20 +02:00
orklah
1e17069c24 Change > assertion back to @ and put back a perf threshold 2021-08-15 10:13:05 +02:00
Bruce Weirdan
a9ead63ae1
Revert "Assertions for Integer Range" 2021-08-14 18:06:41 +03:00
Matthew Brown
6cc5ba970a Fix tests 2021-08-14 10:45:32 -04:00
Matthew Brown
a4479761a7 Fix #3660 - ensure mixed percentage for file never drops below 0 2021-08-14 10:35:31 -04:00
Bruce Weirdan
7ff2a660dd
Merge pull request #6233 from supersmile2009/fix-in-array-assert 2021-08-13 01:39:31 +03:00
Bruce Weirdan
568a9e0412
Prevented empty assertions
and simplified the code a bit.
2021-08-13 00:39:24 +03:00
Bruce Weirdan
6294e06955
Improve constant array inference
This fixes int offset inference and adds handling for array unpacks in
constant arrays. Mostly it's copy/pasted from `ArrayAnalyzer` with
further adjustments.

Fixes vimeo/psalm#6263
Fixes vimeo/psalm#6289
2021-08-12 20:39:21 +03:00
Bruce Weirdan
8f85f580da
Extract item handling 2021-08-11 01:18:23 +03:00
Bruce Weirdan
f9a75983f9
Use ArrayCreationInfo for is_list flag 2021-08-11 00:47:45 +03:00
Bruce Weirdan
b6ade31dd0
Use ArrayCreationInfo for can_create_objectlike flag 2021-08-11 00:39:56 +03:00
Bruce Weirdan
ba4f1db2cd
Use ArrayCreationInfo for class strings 2021-08-11 00:29:14 +03:00
Bruce Weirdan
47d3d31c47
Use ArrayCreationInfo for property types 2021-08-11 00:19:18 +03:00
Bruce Weirdan
abe5ef774c
Use ArrayCreationInfo for key and value types 2021-08-11 00:05:00 +03:00
Bruce Weirdan
a64a30cdda
Combine value types at once 2021-08-10 21:30:57 +03:00
Bruce Weirdan
a41d5c5b4f
Combine offset types at once 2021-08-10 21:23:13 +03:00
Bruce Weirdan
cf28859faf
Extract array type inference 2021-08-10 20:48:45 +03:00
Bruce Weirdan
5dc748d372
Merge pull request #6273 from VincentLanglet/nonEmptyConstant
Constants are non empty strings
2021-08-09 23:36:41 +03:00
Bruce Weirdan
868a1672c1
Merge pull request #6253 from orklah/unusedSuppress 2021-08-09 23:34:14 +03:00
Vincent Langlet
b28316c27c Declare some constant as non empty 2021-08-09 21:39:49 +02:00
orklah
5134747edd CS 2021-08-09 20:46:15 +02:00
orklah
e688781383 seal the result of two sealed KeyedArrays 2021-08-09 20:43:17 +02:00
orklah
2253667bd5 fix CS, remove redundant vars 2021-08-07 00:22:47 +02:00
orklah
b194291bb3 try to fix offsets 2021-08-07 00:08:19 +02:00
Alexandr Zolotukhin
65a129e3c2 Fix type reconciliation for complex cases with union types 2021-08-06 00:13:26 +03:00
orklah
3fe678b914 ignore UnnecessaryVarAnnotation 2021-08-05 21:05:44 +02:00
orklah
c706497cbd restrict types 2021-08-04 19:45:25 +02:00
orklah
0c75ac89d0 refactor arithmetics 2021-08-04 19:43:27 +02:00
Bruce Weirdan
2ecd1d8bd3
Merge pull request #6238 from orklah/unused-foreach-fixable
don't flag UnusedForeachValue as fixable
2021-08-03 19:37:07 +03:00
orklah
006088d578 don't flag UnusedForeachValue as fixable 2021-08-03 18:24:53 +02:00
Alexandr Zolotukhin
097e88a7cb Improved in_array assertion extraction
Extract non-literal type assertion from in_array

Extract false, true and null assertion

Fix assertion against arrays with union-typed values

Fix assertion against non-sealed arrays
2021-08-03 17:29:32 +03:00
Bruce Weirdan
caaff6e3b4
Merge pull request #6210 from orklah/int-range3 2021-08-01 16:37:15 +03:00
Matthew Brown
00c062267d Fix space 2021-07-31 21:15:26 -04:00
Matthew Brown
a205a23ccb Fix #6212 - remove untested code, add test for reasonable behaviour 2021-07-31 19:50:56 -04:00
Bruce Weirdan
2562e37e60
Scan preloaded stubs earlier
This should prevent Psalm from sometimes marking user-defined classes as
built-in.

Fixes vimeo/psalm#5126
Fixes vimeo/psalm#5626
2021-08-01 01:36:37 +03:00
orklah
2a9ddab738 replace +/- by >/< 2021-07-31 22:06:36 +02:00
orklah
5f764b9d8f replace > by @ 2021-07-31 21:59:35 +02:00
orklah
059eb5e29d break the > assertion thing to see what start to fall apart 2021-07-31 21:54:15 +02:00
orklah
a8efe58784 fix isset assertion 2021-07-31 15:47:12 +02:00
orklah
128a811174 add internal assertions for superior and inferior 2021-07-31 15:47:12 +02:00
Bruce Weirdan
4cb9d8ceec
Merge pull request #6205 from orklah/typos
fix typos
2021-07-29 22:31:03 +03:00
orklah
d0fe1528b6 fix typos 2021-07-29 20:59:52 +02:00
Bruce Weirdan
7aa5564047
Merge pull request #6192 from orklah/array_replace_not_nullable
make array_replace and array_replace_recursive not nullable
2021-07-28 00:20:46 +03:00
orklah
d9df3211c5 make array_replace and array_replace_recursive not nullable 2021-07-27 23:02:41 +02:00
Jack Robertson
f0193f20fa Consider print, and conditionally exit / die impure 2021-07-27 13:26:54 +01:00
Bruce Weirdan
ae0c8f57fd
Merge pull request #6187 from orklah/wrong-nullable-type 2021-07-27 00:52:20 +03:00
orklah
06af927f12 fix an error I made a few months ago 2021-07-26 23:09:27 +02:00
Bruce Weirdan
4d99fbcce0
Merge pull request #6185 from orklah/typo
fix wrong wording from #6083
2021-07-26 23:00:42 +03:00
orklah
2259113727 fix wrong wording 2021-07-26 21:09:12 +02:00
Bruce Weirdan
82dfbbc12e
Merge pull request #6167 from orklah/non-div-with-numeric-and-int 2021-07-25 13:56:48 +03:00
orklah
55245cf558 Arithmetic operation between numeric and int or float gives int|float 2021-07-25 12:29:11 +02:00
Bruce Weirdan
aa23aa5387
Merge pull request #6166 from orklah/StringIncrementOnNumericString 2021-07-24 23:27:17 +03:00
orklah
f63f1b5d2a use is_numeric for checking if a Literal is numeric 2021-07-24 21:44:12 +02:00
orklah
9189fa1745 add tests and code for handling LiteralString that are Numeric 2021-07-24 21:21:50 +02:00
orklah
b48a42ffab don't try to handle preinc/postinc 2021-07-24 21:18:11 +02:00
Bruce Weirdan
3caceb7131
Merge pull request #6169 from orklah/numeric-strictBinaryOperands 2021-07-24 15:45:42 +03:00
orklah
1a41ee4dd4 keep wording consistency 2021-07-24 11:18:50 +02:00
orklah
7146c646e3 Trigger InvalidOperand when processing two numeric types in strict operands mode 2021-07-24 11:04:09 +02:00
orklah
4b660aa941 handle every increment/decrement 2021-07-24 10:51:10 +02:00
orklah
c8ee73ce30 Allow increment on numeric-string 2021-07-23 21:10:29 +02:00
Bruce Weirdan
198fdf876e
Merge pull request #6142 from orklah/trigger_error 2021-07-23 09:22:55 +03:00
Matthew Brown
43cff22b25 Add support for native PHP readonly 2021-07-21 13:29:07 -04:00
Bruce Weirdan
052c7478cc
Unary plus and minus mark operand as used
Fixes vimeo/psalm#6145
2021-07-21 01:15:51 +03:00
orklah
9ff0fceb71 CS changes 2021-07-20 23:41:11 +02:00
orklah
acfdb82856 Basic implementation 2021-07-20 23:34:38 +02:00
Bruce Weirdan
7bcefb783a
Simplify InstancePropertyAssignmentAnalyzer::analyzeAtomicAssignment()
... to fix build issues.
2021-07-20 00:08:49 +03:00
Bruce Weirdan
0317f1dbec
Merge pull request #6130 from weirdan/forbid-dynamic-access-to-static-props 2021-07-19 16:11:29 +03:00
Bruce Weirdan
d992331125
Expand magic properties
Fixes vimeo/psalm#4344
Fixes vimeo/psalm#5663
Fixes vimeo/psalm#5639
Fixes vimeo/psalm#5955
Fixes vimeo/psalm#3272
2021-07-18 23:43:33 +03:00
Bruce Weirdan
7418e6e167
grammar 2021-07-18 16:52:00 +03:00
Bruce Weirdan
a180dc6099
Flag staticness mismatch
This handles two new cases:
1. Accessing static property with `->` (produces notices and warnings: https://3v4l.org/TiGan)
2. Accessing non-static property with `::` (causes fatal error: https://3v4l.org/IdYSh)

Fixes vimeo/psalm#6117
2021-07-18 02:51:33 +03:00
Bruce Weirdan
53ae7764e9
Merge pull request #6129 from orklah/unused-global 2021-07-18 02:33:50 +03:00
orklah
79d0647d19 fix issue when setting a value to a global is considered unused 2021-07-17 22:00:54 +02:00
Grégoire Paris
26f8e5b333
Add negated identity with false case
This is the opposite of === true and works the same.
2021-07-17 03:20:23 +03:00
Bruce Weirdan
af5cdb4dd4
Check deprecated properties on $this->prop reads
Fixes vimeo/psalm#6118
2021-07-17 01:20:35 +03:00
orklah
0bd8b03f7a Fix usage of gettype in a switch with closed resource 2021-07-14 12:49:46 +02:00
Bruce Weirdan
601c8cac5b
Merge pull request #6086 from orklah/cleanup 2021-07-14 09:08:18 +03:00
orklah
c3a4e513f9 add more detailed phpdoc for $conditional and remove unused code 2021-07-14 00:02:36 +02:00
orklah
bcd22335b6 add some detailed phpdoc for $conditional 2021-07-13 22:35:57 +02:00
orklah
874b8ed7ae fix doc 2021-07-13 22:29:27 +02:00
orklah
647b9b78dc cleanup and refactor AssertionFinder 2021-07-13 20:54:47 +02:00
Ruslan Karimov
8a08489dcc Merge branch 'master' into fix-5957
# Conflicts:
#	tests/UnusedVariableTest.php
2021-07-13 10:15:35 +05:00
Ruslan Karimov
cfaca07c6d added dataflow to stringy bitwise op, bitwise not op (fix 5957) 2021-07-13 10:05:21 +05:00
Bruce Weirdan
6729f4db01
Merge pull request #6083 from orklah/falsable-argument 2021-07-13 02:13:39 +03:00
orklah
52033f4b69 fix condition when scalar is allowed 2021-07-13 00:34:22 +02:00
orklah
1fc8982ca9 fix condition when bool is allowed 2021-07-13 00:19:13 +02:00
orklah
688367de38 Always emit InvalidArgument when the parameter is always false and not accepted 2021-07-13 00:06:36 +02:00
Matthew Brown
f2bc6913db
Fix #6061 — delay analysis of array value except when unpacking (#6081) 2021-07-12 17:05:33 -04:00
Bruce Weirdan
e93b37a225
Merge pull request #6060 from VincentLanglet/statement 2021-07-11 22:12:10 +03:00
Matthew Brown
acc7ee261c
Fix #6066 - introduce more robust system for capturing template constraints (#6072)
* Fix #6066 - add better system for capturing template constraints

* Fix comment
2021-07-11 12:03:21 -04:00
Vincent Langlet
3339ce1379 Use stmt instead of args 2021-07-11 11:22:13 +02:00
Matthew Brown
d883d73991 Fix template bound terminology
I had this flipped by mistake
2021-07-10 14:08:09 -04:00
Vincent Langlet
49ed7b045f Pass statement to MethodReturnTypeProviderEvent 2021-07-08 00:02:36 +02:00
orklah
f8644fb508 Improve resolution of __METHOD__ and __FUNCTION__ 2021-07-03 10:01:53 +02:00
Matt Brown
d18a4f4ccc Don’t stop scanning loop contents due to possibly-null iterator 2021-06-28 13:13:12 -04:00
Matt Brown
19cc4cb4ee Simplify lots of usage checks 2021-06-25 10:14:49 -04:00
Matt Brown
67d68a5dc0 Use more accurate variable name 2021-06-25 09:54:39 -04:00
Bruce Weirdan
6d4262edbd
Mark return values in as throw argument as used (#5989)
Fixes vimeo/psalm#5975
2021-06-25 09:11:27 -04:00
Oliver Hader
38d3b15f8d
[BUGFIX] Specialize TaintSink in IncludeAnalyzer (#5986)
* [TEST] Assert more details in TaintTest

* [TEST] Add test for multiple tainted includes

* [BUGFIX] Specialize TaintSink in IncludeAnalyzer

Fixes: #5986
2021-06-23 08:27:03 -04:00
Bruce Weirdan
0a57c86549
Announce removal of deprecated methods (#5956)
Refs vimeo/psalm#4700
2021-06-20 14:12:20 -04:00
orklah
3c9476bdf6
Prevent infinite loop in case a TClassConstant is expanded to itself (#5951) 2021-06-18 08:51:19 -04:00
orklah
79478a60b1
Allow class constant as offset key (#5943)
* allow class-constant as an array offset when the type match

* remove object with __toString as a possible offset as it's not valid
2021-06-17 18:15:57 -04:00
orklah
872f1c232c
allow Psalter to fix RedundantCast (#5948)
* allow Psalter to fix RedundantCast

* fix test
2021-06-17 18:15:45 -04:00
Matthew Brown
c2f7422e80
Prevent crash with non-UTF-8 string
Fixes #5945
2021-06-17 12:26:18 -04:00
Bruce Weirdan
e552925af6
Emit separate type of issue when foreach value is unused (#5932)
* Emit separate type of issue when foreach value is unused

Fixes vimeo/psalm#5929

* Fixed var name case sensitivity
2021-06-17 00:40:24 -04:00
Matt Brown
9dde8eed9d Add support for literal-int annotations as well 2021-06-14 23:24:09 -04:00
Matt Brown
c3fdfc5795 Support literal ints in encapsed strings 2021-06-14 16:30:45 -04:00
Matt Brown
4941b9e5d2 Rename class and make it type-hintable 2021-06-14 16:02:59 -04:00
Matt Brown
5ae8b2a23f Add preliminary support for literal-string 2021-06-14 15:30:25 -04:00
Bruce Weirdan
24d45a50de
Merge pull request #5924 from BafS/fix-type-error-patch-1 2021-06-13 21:19:43 +03:00
BafS
d395e00f18
Add assertion 2021-06-13 12:07:34 +02:00
Matt Brown
23b7ff86b7 Mark interface methods as unused even when inherited 2021-06-12 16:13:29 -04:00
BafS
eb4ecc20d4
Fix style 2021-06-11 20:11:21 +02:00
BafS
07cf6012f7
Use assert() instead of phpdoc 2021-06-11 20:07:59 +02:00
BafS
dde0f1fb06
Fix Uncaught TypeError with some shifts 2021-06-11 20:03:23 +02:00
Matt Brown
f2f5f1eaa2 Revert fix and tests 2021-06-10 17:44:34 -04:00
Matt Brown
47bf5ed567 Fix #5918 - add new issue to detect unquoted strings 2021-06-10 17:43:04 -04:00
Matt Brown
e661c5fb55 Fix erroneous use when comparing methods 2021-06-10 14:39:01 -04:00
Matthew Brown
6d09418a23
Detect unused return values (#5917)
* Detect unused return values

* Allow static-returning instance methods (presumed to be fluent)

* Make $is_used the default for Codebase::methodExists
2021-06-10 14:18:15 -04:00
Matt Brown
8509999f3f Remove some unused return values 2021-06-10 12:09:46 -04:00
Matthew Brown
d12cf88e83 Add back supported for templated index assignment 2021-06-09 12:55:37 -04:00
Matthew Brown
0a7d254689 Fix #5911 - improve non-terminating switch type inference 2021-06-09 09:06:23 -04:00
Bruce Weirdan
6abce3525a
Enforce use sort (#5900) 2021-06-07 22:55:21 -04:00
Andrey Klimenko
3ad3375777
Fix generic destruction in assertion (#5888) 2021-06-04 15:33:37 -04:00
Matt Brown
b33f87f68d Treat all assignment operations as equivalent binary ops 2021-06-04 14:39:38 -04:00
Andrey Klimenko
e5e397a6c5
Type negation in generic context (#5879)
* Type negation in generic context

* Fix cs
2021-06-03 01:06:25 -04:00
Barney Laurance
e0eb8f88e5
Apply De Morgan's to output copy (#5872) 2021-06-02 06:32:50 -04:00
Matt Brown
f3fc112bae Fix #4523 - fix short-circuiting for properties and method calls 2021-06-01 16:06:12 -04:00
Bruce Weirdan
0c77ccc238
Check whether constructor is internal on new call (#5843)
Fixes vimeo/psalm#5841
2021-05-28 09:44:07 -04:00
Matt Brown
38c452ae58 Add example given in ticket and ensure that works too 2021-05-24 00:09:51 -04:00
orklah
de1bb954cf
Handle the case where a switch return on each case (#5819)
* Handle the case where a switch return on each case

* introduce a "hybrid" case exit type for cases where there's both "none" and something else
2021-05-23 16:24:29 -04:00
Matt Brown
7354ec9903 Fix #5298 - improve handling of method that may write properties 2021-05-23 16:22:52 -04:00
orklah
350df114f3
Transform bad offsets (#5817)
* Transform bad offset access

* fix build
2021-05-23 14:43:30 -04:00
orklah
89f815ff62
Add assertions for >=0 (#5815) 2021-05-23 14:24:15 -04:00
Matt Brown
938afc5aea Allow union of 0|positive-int to bypass PossiblyUndefinedIntArrayOffset error 2021-05-23 13:59:40 -04:00
orklah
c69cf9a849
Allow empty-string in first position of an type (#5814) 2021-05-22 12:36:02 -04:00
Matt Brown
6a61298074 Fix #5810 - detect properties that are never read 2021-05-21 09:25:57 -04:00
Matt Brown
4f9067f5c8 Fix unused properties in Psalm’s own codebase 2021-05-21 09:15:23 -04:00
Matt Brown
4b17cc9a4b Fix #5809 - remove unnecessary issue suppression 2021-05-21 07:35:01 -04:00
Matt Brown
bbbde2ffa1 Fix empty line 2021-05-19 15:20:28 -04:00
Matt Brown
ccd50fdb34 Fix ##5795 - array casts should always be lists 2021-05-19 15:17:50 -04:00
orklah
f62b83a190
Assert intersection type when two variables are compared (#5774) 2021-05-18 16:14:58 -04:00
Matt Brown
3c43bc1522 Fix #5789 - prevent incorrect return type inference when all cases return 2021-05-18 08:52:41 -04:00
Matt Brown
9eda9f9bbf Fix cs 2021-05-17 19:44:55 -04:00
Matt Brown
21456f51e6 Only call ScopeAnalyzer once on whole function body 2021-05-17 18:52:25 -04:00
Matt Brown
836587ec1d Fix combination of end states with never 2021-05-17 12:35:27 -05:00
Matt Brown
9635ca620c Correctly interpret continue 2 in nested loops 2021-05-17 08:26:38 -05:00
orklah
4c4d574bed
better inference of string increment (#5777)
* better inference of string increment

* fix combination
2021-05-17 07:44:53 -05:00
Matt Brown
f6bdeb6234 Fix switch-with-continue bug 2021-05-17 07:27:58 -05:00
orklah
6501ca7b95
Redundant cast to Int preserve type (#5773)
* Redundant cast to Int preserve type

* add test
2021-05-15 07:19:18 -04:00
Matt Brown
1195335078 Fix #5768 - call methods with proper params 2021-05-14 22:50:11 -04:00
Matt Brown
5f780e7ef7 Improve count inference 2021-05-14 20:12:28 -04:00
Matt Brown
c4aea7c82c Fix #5434 - prevent crash with class-string-map 2021-05-14 19:44:11 -04:00
orklah
1bb4a05725
NullsafeMethodCall makes the variable not null for the rest of the scope (#5771) 2021-05-14 19:21:01 -04:00
orklah
0b96f40198
quote offset value (#5760) 2021-05-14 17:19:23 -04:00
Matthew Brown
bb8ce8817d Simplify a bit of logic in switch analysis 2021-05-13 17:31:17 -04:00
Matthew Brown
cc7ff94f7c Prevent crash when method being called does not exist in reflection
Crash seen when running this test in PHP 7.4 because the method does not exist, but the call map includes it in 8.0
2021-05-13 12:40:39 -04:00
Matthew Brown
4873f53f69 Fix issue when two continue/break statements write same variable 2021-05-13 09:39:25 -04:00
orklah
1a59e81808
allow scalar values in return to be accepted, even when the branch has no inferred types (#5749) 2021-05-12 18:47:05 -04:00
Matthew Brown
859b4a2caa Fix #5725 – don’t transform non-docblock types unnecessarily 2021-05-09 12:03:42 -04:00
Vincent Langlet
587b144f0e
Check for ParamName even for method with only one param (#5732)
* Check for ParamName even for method with only one param

* Fix tests
2021-05-08 19:33:48 -04:00
Bruce Weirdan
58c8e75db3
Suppress issues emitted by MethodComparator at class level (#5711)
Fixes vimeo/psalm#5698
2021-05-05 21:46:29 -04:00
Bruce Weirdan
9e19653a72
Infer never return type (#5710)
* Allow __toString to return never

Fixes vimeo/psalm#5653

* Push $return_is_exit down

* Produce unique control actions

* Test suggesting `@return never`
2021-05-05 01:22:29 -04:00
Matt Brown
f95458be61 Setting values on templated arrays should corrupt them 2021-05-05 00:46:43 -04:00
Bruce Weirdan
0189420814
Inherit class-level suppressions when checking methods (#5708)
Fixes vimeo/psalm#5687
May fix vimeo/psalm#3357
2021-05-03 22:26:56 -04:00