Brown
cff976049d
Remove unused vars
2020-06-29 13:24:05 -04:00
Brown
f6e2e0a84a
Perform string casting for taints in ArgumentAnalyzer
2020-06-29 13:21:33 -04:00
Brown
45c21853e5
Fix #3709 - don’t crash on inherited __toString tainting
2020-06-29 12:11:11 -04:00
Brown
aab90fb74e
Fix Psalm errors
2020-06-29 09:29:19 -04:00
Brown
38977d797e
Fix #3697 - cast types via implied __toString method
2020-06-29 09:13:19 -04:00
Brown
b54b832838
Break out method call tainting
2020-06-29 00:14:49 -04:00
Brown
559b3d3471
Fix #3681 - taint exit like echo
2020-06-25 17:17:08 -04:00
Brown
95bf7f835b
Improve handling of array_map, faking out calls where nececssary
2020-06-25 13:05:34 -04:00
Brown
b84cf74754
Fix #3668 - taint property types for magic properties without @property
2020-06-25 00:24:37 -04:00
Brown
dd25b81d3a
Fix #3670 - taint mixed foreach access
2020-06-24 19:16:30 -04:00
Brown
a6c7a48387
Add support for argument unpacking
...
Ref #3670
2020-06-24 18:43:15 -04:00
Tyson Andre
1670848267
Mark print() statement as the same sink type as echo ( #3669 )
2020-06-24 17:23:16 -04:00
Brown
7a7cd91c24
Fix #3631 - better treatment for assignments in complex conditionals
2020-06-24 13:16:52 -04:00
Brown
9aa0aca949
Fix handling of coerced callmap args
2020-06-24 11:51:31 -04:00
Brown
c29b3744ec
Change storage of out types
2020-06-24 11:51:31 -04:00
Brown
6a746b65ea
Fix #3655 - taint encapsulated strings
2020-06-23 16:38:59 -04:00
Brown
13fc8a75fd
Allow taints to flow where no return type exists
...
Fixes #3652
2020-06-23 15:52:19 -04:00
Brown
f72b609d42
Fix #3642 - detect missing property when name matches
2020-06-23 13:12:46 -04:00
Brown
4d6fc4d0ca
Fix get_class($foo) === static::class checks
2020-06-23 13:11:19 -04:00
Brown
1f86afece7
Revert "Fix #3631 - apply assertions to RHS of equality in conditional"
...
This reverts commit 9c17795545
.
2020-06-22 20:01:27 -04:00
Brown
fc8212e207
Fix static call specialisation via annotation
2020-06-22 18:40:43 -04:00
Brown
e8be2c500e
Support taint flows in more functions
2020-06-22 17:53:03 -04:00
Brown
7f05b3c530
Add $_REQUEST as a taint source
...
Ref #3636
2020-06-22 17:16:15 -04:00
Brown
9c17795545
Fix #3631 - apply assertions to RHS of equality in conditional
2020-06-22 15:16:16 -04:00
Brown
dddc159694
Add explicit path object
2020-06-22 02:10:03 -04:00
Brown
36f1630e03
Add more steps for clearer output
2020-06-22 01:08:58 -04:00
Brown
02e8313c39
Allow taintedness to propagate to some stubbed methods
2020-06-21 18:07:39 -04:00
Brown
07adecc6eb
Use correct method id when creating taints
2020-06-21 02:06:08 -04:00
Brown
dc83c2e2fc
Add annotation for taint sources
2020-06-21 00:58:56 -04:00
Brown
f21d3a8346
Remove html and sql taints for simple preg_replace patterns
2020-06-20 23:11:42 -04:00
Brown
8edee96d8d
Fix taint regression
2020-06-20 18:10:01 -04:00
Brown
80ed1daf33
Allow static method mixin to invoke instance method
2020-06-20 18:05:35 -04:00
Ilija Tovilo
2f646d29db
Fix #3607 - constant string class reference with leading backslash ( #3612 )
2020-06-19 18:02:39 -04:00
Andrei Petre
6024fe4761
use original case in error messages when reporting undefined methods ( #3615 )
2020-06-19 11:51:08 -04:00
Brown
b1c836e5f3
Improve specialisation after call
2020-06-19 01:59:45 -04:00
Brown
8f2e28c36b
Improve tainting of specializable classes
2020-06-19 01:22:51 -04:00
Brown
eecdc43ce7
Remove stray commas
2020-06-18 20:15:38 -04:00
Brown
49f0592794
Improve tracking of array taints
2020-06-18 18:48:19 -04:00
Brown
562a7c1ca4
Track taints from all tainted arrays
2020-06-18 13:45:58 -04:00
Brown
7d9a99a956
Fix #3609 - interpret strings as regular static calls
2020-06-18 11:56:08 -04:00
Brown
f609a01497
Move static property fetch analyzer to own class
2020-06-18 11:53:24 -04:00
Bruce Weirdan
6fb63903c1
Infer better types for magic constants used in const initializers ( #3602 )
...
Fixes vimeo/psalm#3464
2020-06-18 09:48:51 -04:00
Brown
137647a1a0
Fix #3603 - better typed value comparisons for loose equality
2020-06-18 09:31:38 -04:00
Olle Härstedt
e1cc27f7a2
Add new config: sealAllMethods ( #3578 )
...
* Add new config: sealAllMethods
* Add some more tests
* Fix codesniffer issue with preg_quote
* Fix missing method in test
Co-authored-by: Olle <noemail>
2020-06-15 22:36:42 -04:00
Brown
03e9649d49
Fix tainting of function calls absent taintable params
2020-06-15 20:59:48 -04:00
Brown
bbada7ba8d
Ensure correct vars are used
2020-06-15 17:16:12 -04:00
Brown
05cb39814c
Improve performance of long switch checks
2020-06-15 16:23:19 -04:00
Brown
8c5a434dc8
Allow updating array by reference
2020-06-15 14:45:08 -04:00
Matthew Brown
081a284759
Fix #3567 - remember which variables a callable sets byref in use
2020-06-14 11:58:50 -04:00
Matthew Brown
a49a0e5650
Fix #3551 - count method can be impure
2020-06-14 11:06:53 -04:00
Matthew Brown
683bde9540
Fix #3573 - allow UnnecessaryVarAnnotation to be suppressed
2020-06-13 16:48:10 -04:00
Matthew Brown
edb2b4c5ef
Get type of requires
2020-06-13 15:48:12 -04:00
Brown
9bfe50b20a
Always analyse cast expressions
...
Fixes #3577
2020-06-12 17:25:46 -04:00
Brown
45ea5d0bfe
Add a couple more shortcuts for common pattern
...
Fixes #3563
2020-06-12 11:18:34 -04:00
Brown
9ca6c868b7
Fix #3563 - add workaround for == true
2020-06-12 10:58:44 -04:00
Brown
5617e9d7c9
Fix array_values call
2020-06-09 19:06:08 -04:00
Brown
286a8f911a
Add support for static mixin calls
...
Fixes #3552
2020-06-09 18:39:52 -04:00
Matthew Brown
91e76f7173
Fix #3536 - Make method return type provider aware of original called method
2020-06-06 23:35:08 -04:00
Matthew Brown
0ac739fd48
Fix #3534 - allow magic method call on mixin
2020-06-06 23:28:32 -04:00
Matthew Brown
ce445636e7
Fix #3535 - match template param class constants properly
2020-06-06 20:02:14 -04:00
Matthew Brown
74a34f066c
Don’t check classes if literal strings are allowed
...
Fixes #3538
2020-06-06 19:31:42 -04:00
Brown
fcf0a681d9
Fix #3531 - ignore mixed returns from template
2020-06-06 10:33:49 -04:00
Brown
cf92361338
Fix #3522 - only use property pass-through when it’s visible
2020-06-04 16:15:07 -04:00
Brown
a4aa44494f
Fix #3519 - prevent empty callable string
2020-06-04 15:40:53 -04:00
Matthew Brown
c9ee691595
Fix suppression
2020-06-04 09:55:32 -04:00
Brown
fd74d3284d
Add support for PHPParser 4.5.0
2020-06-03 14:58:08 -04:00
Brown
7caaa64825
Fix #3418 - don’t override with send type when @psalm-yield is given
2020-06-02 13:27:17 -04:00
Brown
4e21e54ee1
Fix #3491 - provide correct types for substitution
2020-05-30 19:11:41 -04:00
El Azimov
bed5a74065
Add wildcard support for class constants in template. ( #3489 )
...
Co-authored-by: El Azimov <el.azimov@rocks>
2020-05-30 16:55:18 -04:00
Brown
db67be5965
Fix #3483 - analyse variable static property access properly
2020-05-29 09:28:34 -04:00
feek
5330dcbd7a
fix: pass along final ( #3471 )
2020-05-28 01:59:24 -04:00
still-dreaming-1
1bb884bd84
__TRAIT__ can be string or non-empty-string ( #3469 )
...
depending on whether or not it is used from inside a __TRAIT__
2020-05-27 19:23:46 -04:00
still-dreaming-1
9189335715
Fixes #3464 by typing __DIR__, __TRAIT__, and __FILE__ as non-empty-s… ( #3468 )
...
* Fixes #3464 by typing __DIR__, __TRAIT__, and __FILE__ as non-empty-string
* __TRAIT__ should stay string in case used outside a trait
Co-authored-by: <jesse@LAPTOP-73CA4O5T.localdomain>
2020-05-27 18:21:26 -04:00
Brown
3c60609c21
Support better mixin handling
2020-05-27 11:12:09 -04:00
Brown
9b413cfccc
Improved understanding of array_key_exists
...
Fixes #3463
2020-05-27 09:03:36 -04:00
Brown
ef53ee3a3b
Fix crash on aliased exception
...
Ref #3465
2020-05-27 08:09:58 -04:00
Brown
769ac5c052
Fix #3458 - scope templated mixin accurately
2020-05-26 23:32:07 -04:00
Brown
d04e21ee5a
Define mixin declaring classname
2020-05-26 23:32:07 -04:00
Brown
3da3d61270
Fix #3434 by removing extraneous call to simplifyType
2020-05-26 17:55:54 -04:00
Brown
0ef00f5756
Fix #3460 - allow isset checks on static properties
2020-05-26 17:40:27 -04:00
Brown
ecb179c784
Migrate min/max function calls back to CallMap
2020-05-26 12:28:56 -04:00
Brown
a266d4748b
Fix build
2020-05-26 07:50:11 -04:00
Brown
953be61cf2
Allow limiting connected taint paths
2020-05-25 23:28:11 -04:00
Brown
7e7456c863
Make taint checks more thorough
2020-05-25 17:10:53 -04:00
Brown
2e6fc24867
Template callmap methods too
...
Fixes #3453
2020-05-25 14:21:06 -04:00
Brown
118b700436
Simplify sink mapping for internal calls
2020-05-25 13:10:06 -04:00
Brown
be847472a2
Fix #3453 - allow conditional return types on instance methods
2020-05-25 09:39:30 -04:00
Brown
3416e33348
Fix indentation
2020-05-25 01:23:28 -04:00
Brown
240b2f898c
Add some negative test cases for @mixin
...
Also fix #3452
2020-05-25 00:19:52 -04:00
Brown
ff5c17c044
Switch subtype messagearg order
2020-05-24 09:43:54 -04:00
Brown
92a9a7efdf
Handle flows into arguments a little better
2020-05-23 23:54:16 -04:00
Matthew Brown
1d17c02fba
Fix #3442 - support broader type after initial array assignment
2020-05-23 23:23:50 -04:00
Brown
a198b09eb7
Add intermediary concat op node
2020-05-23 21:38:09 -04:00
Brown
f5a0622ad2
Fix style
2020-05-23 08:06:31 -04:00
Matthew Brown
0dee85d0b7
Remove redundancy
2020-05-23 01:48:56 -04:00
Brown
16af6a5773
Improve concat taint propagation
2020-05-23 01:11:16 -04:00
Brown
ee493909d7
Fix bugs
2020-05-23 00:08:16 -04:00
Brown
10c106f7eb
Add eval sink
2020-05-23 00:03:29 -04:00
Brown
dc73e25157
Detect taints in include calls
2020-05-22 23:53:37 -04:00
Brown
e82c317d53
Adjust tolerances
2020-05-22 21:37:18 -04:00
Brown
fb3cb2c4d1
Only use plain return type if we’re not memoizing
2020-05-22 17:05:39 -04:00
Brown
4b1c3db760
Don’t memoize method call where we have a getter standin
...
Fixes #3427
2020-05-22 15:54:32 -04:00
Brown
8632cdb3cd
Improve taint tracking during scanning phase
2020-05-22 12:33:48 -04:00
Brown
63c3678ae5
Improve property location resolution
2020-05-22 12:33:38 -04:00
Matthew Brown
187b944680
Add faster taint analysis
2020-05-22 12:33:29 -04:00
Joe Hoyle
6f28d741bc
Display variable assignment type in LSP hovers ( #3401 )
...
* Add node references for variable assignments
* Break up line
Co-authored-by: Matthew Brown <github@muglug.com>
2020-05-20 17:40:22 -04:00
Matthew Brown
3effdc5b69
Improve yield type substitution
2020-05-20 09:12:24 -04:00
Brown
2ec76f01c2
Fix redundant condition
2020-05-19 20:11:25 -04:00
Brown
27cb660377
Respect possibly-undefined array keys while merging
...
Fixes #3393
2020-05-19 20:10:01 -04:00
Brown
f335560b69
Allow setting property on templated type
2020-05-19 17:31:05 -04:00
Brown
a3214012a6
Only convert userland functions
2020-05-19 16:15:41 -04:00
Brown
4415e0f69c
Fix special case calling callable param with string non-global function
...
Fixes #3411
2020-05-19 15:48:31 -04:00
Brown
b5ae0167a2
Fix typo
2020-05-19 14:58:53 -04:00
Brown
b38d945b12
Cast null and false to empty string
...
Ref #3408
2020-05-19 14:53:06 -04:00
Brown
0b2da18f1e
Break up StatementsAnalyzer
2020-05-19 12:56:30 -04:00
Brown
666cc3b4c9
Fix BinaryOp analysis
2020-05-18 23:00:53 -04:00
Brown
8e5b330c5a
Break apart CallAnalyzer
2020-05-18 22:57:00 -04:00
Brown
5b06c206e0
Move classes into deeper namespace
2020-05-18 22:52:33 -04:00
Brown
ace049a068
Beautify BinaryOpAnalyzer
2020-05-18 18:57:09 -04:00
Brown
8c86d47eb7
Downgrade some PossiblyInvalidClone
issues
2020-05-18 17:18:13 -04:00
Brown
4ca83ca30d
Add slash
2020-05-18 17:05:47 -04:00
Evgeniy
04a576708c
Correct analyze clone expression ( #3382 )
...
* Correct analyze clone, add PossibleInvalidClone issue type
* Infer mixed type when possible incorrect clone
* Remove unused variable
2020-05-18 16:22:50 -04:00
Brown
ea0a99d3a8
Fix bad merge
2020-05-18 16:02:10 -04:00
Brown
5ee1487a01
Make ExpressionAnalyzer more beautiful
2020-05-18 15:13:27 -04:00
SignpostMarv
911ac2d363
Infer numeric-string from (string)$numeric ( #3390 )
...
* adding test for vimeo/psalm#3370
* check if typecast will result in numeric-string
* int & float as per examples in vimeo/psalm#3370
* numeric & numeric-string because they shouldn't lose numericness.
* satisfy phpcs
* adjusting assertions to reflect typecasting change
2020-05-18 13:42:47 -04:00
Brown
21798efed2
Fix #3388 - eliminate null after < 0 check
2020-05-18 08:52:44 -04:00
Matthew Brown
b0ffaf0077
Fix type coercion
2020-05-17 22:51:48 -04:00
RJ Garcia
fd15bfc65d
Infer Return Types for Arrow Functions #3376 ( #3385 )
...
* Infer Return Types for Arrow Functions #3376
- Made a small patch to check for closure or arrow
function when attempting to infer the functions
params
- Added new isExprClosureLike to start to consolidate
all checks on closure/arrow fns
Signed-off-by: RJ Garcia <ragboyjr@icloud.com>
* Use better check
* Remove unused method
Co-authored-by: Matthew Brown <github@muglug.com>
2020-05-17 22:17:35 -04:00
Matthew Brown
4dd0a2b775
Fix #3380 - allow comparisons between template param and empty array
2020-05-16 16:41:07 -04:00
Matthew Brown
f6342a40d9
Remove unnecesary conditional check for do
...
Fixes #3378
2020-05-16 16:32:36 -04:00
Nobu Funaki
abef8008bc
Fix InvalidCast after is_callable([$val, '__toString']) check ( #3372 )
...
Support is_callable() with an array argument similar to method_exists()
2020-05-16 08:50:43 -04:00
Brown
111303d913
Add non-empty-lowercase-string type
2020-05-15 10:18:05 -04:00
Brown
c212c03e40
Don’t stop analysing when encountering an UndefinedGlobalVariable
...
Fixes #3366
2020-05-14 22:51:51 -04:00
Brown
2af0a17d03
Fix #3236 - allow use-checking of more methods starting with __
2020-05-12 22:39:26 -04:00
Brown
0d5d7c8938
Add null check
2020-05-11 11:56:07 -04:00
Brown
291018034b
Remove unnecessary PHP code
2020-05-11 11:36:50 -04:00
Brown
3554aa4435
Fix crash newly introduced
2020-05-11 09:34:07 -04:00
Brown
eefd2e743b
Use generic function definition for sscanf
...
cc @villfa
2020-05-10 23:58:51 -04:00
Brown
8f2f2617d4
Improve refactor
2020-05-10 22:45:01 -04:00
Brown
5f4d162dd5
Break out type expander into separate class
2020-05-10 22:39:18 -04:00
Brown
48da7a4be8
Fix issues found with Vimeo’s code
2020-05-10 21:09:48 -04:00
Matthew Brown
4b388a2951
Fix ref
2020-05-10 11:35:35 -04:00
Brown
55222573ea
Mark as possibly-undefined any variable that wasn’t present when the loop began
...
Fixes #3332
2020-05-10 11:17:50 -04:00
Brown
28349c6423
Remove mixin_fqcln hack
2020-05-10 09:04:30 -04:00
Brown
640ffdb324
Fix #3323 - make short object-like arrays sealed tuples
2020-05-08 14:36:06 -04:00
Brown
2d5c2a9dd1
Fix #3324 - prevent crash asserting on possibly-undefined variable
2020-05-08 14:21:10 -04:00
Brown
a089d8bd58
Fix #3296 - propagate final flag to static calls in return types
2020-05-03 20:42:06 -04:00
Brown
d99fbc0d4d
Remove blank line
2020-05-03 00:26:50 -04:00
Brown
b8a1f5d5c9
Allow destructuring on arrayaccess implementers
2020-05-03 00:08:03 -04:00
Brown
bf5e178d16
Fix #3289 - treat property on non-generic type like actual value
2020-05-02 23:37:59 -04:00
Brown
618a54ff41
Fix #3240 - check arguments when class cannot be found
2020-05-02 22:13:59 -04:00
Brown
d3fba74f75
Fix false-positive
2020-05-02 21:56:28 -04:00
Brown
3e0c4cfb75
Fix #3210 - prevent possibly-null array access from destructure
2020-05-02 20:36:41 -04:00
Brown
29741cd76d
Remove earlier now-unnecessary fix
2020-05-02 19:24:48 -04:00
Matthew Brown
da5e8a4324
Increase type coverage for projects that use assert after mixed
2020-05-02 14:55:30 -04:00
Brown
07e5250292
Fix #3273 - add support for func_num_args() in conditional type
2020-05-01 16:02:53 -04:00
Brown
5e76467378
Fix #3279 - make sure self/parent references in mixin use existing class
2020-05-01 11:23:02 -04:00
Brown
9e6797d297
Add protection from ComplicatedExpression
2020-04-30 22:23:07 -04:00
Brown
8ab5a0f504
Probably safe to un-negate a class string assertion without autoloader
2020-04-30 12:48:21 -04:00
Brown
891c66650b
Prevent unintersectable template lower bounds
...
Ref #3264
2020-04-29 14:57:57 -04:00
Brown
a402d4598b
Define with single argument should not trigger a notice
...
Fixes #3254
2020-04-28 14:43:12 -04:00
Brown
95dbb93732
Fix #3237 - allow mixin to reference generic params
2020-04-27 09:10:24 -04:00
Brown
189cd2bdc8
Fix key stringg
2020-04-27 00:50:07 -04:00
Brown
755ada9114
Fix #3234 - infer iterator key types properly
2020-04-27 00:41:34 -04:00
Brown
f91e94b64e
Make sure to remember correct positions of @var references
2020-04-27 00:05:20 -04:00
Brown
10f3bef743
Fix type check
2020-04-26 20:21:24 -04:00
Brown
e65bffc94f
Support intersections with __toString
...
Fixes #3149
2020-04-26 20:04:41 -04:00
Brown
d88c31f461
Support templated @mixin
2020-04-26 16:49:52 -04:00
Brown
e1c6fcc707
Fix #3215 - suppress PossiblyUndefinedMethod in synthetic call
2020-04-24 00:11:32 -04:00
Brown
e9666372d0
Fix coercion
2020-04-22 16:27:43 -04:00
Brown
507f5f4afa
Add context-sensitive conversion
2020-04-22 16:08:04 -04:00
Brown
a670aa7ddc
Fix #3214 - allow if/else branches of conditional to both be arrays
2020-04-22 16:07:13 -04:00
Brown
52c0346b65
Fix #3213 - make sure static is bound from a static call with set class
2020-04-22 11:34:46 -04:00
Fabien Villepinte
a93bf28532
Fix #3045 - ignore mixed assignments to variables named $_ ( #3211 )
2020-04-21 20:18:38 -04:00
Matthew Brown
1b752d06ab
Fix #3201 - add additional constraints on constructor initialisation
2020-04-21 00:04:47 -04:00
Brown
bb46c30e38
Fix #3191 - don’t generate complex assertion from class-string
2020-04-19 12:53:50 -04:00
Brown
d2d795018f
Fix #3138 - fix inherited property template type inference
2020-04-18 16:57:13 -04:00
Brown
edb07952fc
Static call inside throw does not violate purity
2020-04-18 12:43:51 -04:00
Brown
b0455adced
Fix #3177 - prevent crash by using inherited templates
2020-04-18 11:48:22 -04:00
Brown
aa3846758e
Fix #3153 - narrow template types in conditional branches
2020-04-17 09:53:58 -04:00
Brown
8533b866ab
Simplify template bounds message
...
Ref #3126
2020-04-12 22:19:49 -04:00
Brown
e17cfd8dba
Fix #3125 - only apply clauses where applicable
2020-04-12 21:50:10 -04:00
Brown
633b210a32
Fix test
2020-04-12 21:47:50 -04:00
Brown
73f8f963fa
Expand out class constants as early as possible
...
Fixes #3128
2020-04-12 20:38:36 -04:00
Brown
5988149272
Prevent checking assertions on $this-> types, always accessible
2020-04-12 14:13:42 -04:00
Brown
c733d6d373
Only perform assertions where the property type is known
...
cc @m0003r
2020-04-12 12:56:33 -04:00
m0003r
77270dc9b7
Getters automagic ( #3122 )
...
* When method is a plain getter: (1) correct method return type if property type is known (2) auto assert-if-true that corresponding property is not falsy
* do not use getter automagic if getter is overridden somewhere
2020-04-12 08:40:24 -04:00
Brown
9d2957d339
Fix a few more edge-cases
2020-04-12 01:26:11 -04:00
Brown
d530fce4b3
Fall through with PossiblyInvalidIterator issue
2020-04-11 11:17:54 -04:00
Brown
db7447abd7
Make array coercion-to--mixed rules a little more lenient
2020-04-10 16:21:48 -04:00
Brown
672baea6fc
Fix #3116 - allow class to be compared to a templated class-string
2020-04-10 00:26:11 -04:00
Brown
556d5625b5
Prevent Throwable being intersected with itself
2020-04-10 00:10:31 -04:00
m0003r
1749c19a29
Fix $assertion_var_id calculation in method calls ( #3115 )
2020-04-09 23:03:53 -04:00
Brown
3a4dd70403
Prevent MixedMethodCall from generated array offsetGet calls
2020-04-09 11:45:15 -04:00
Brown
bd92ec6cd3
Detect nested issues
2020-04-09 10:42:54 -04:00
Brown
bd2104c5ba
Merge with mixed in nested arrays
2020-04-09 09:27:21 -04:00
m0003r
4d1be3f0c4
Allow plain assertions (@psalm-assert) about $this ( fixes #3105 ) ( #3108 )
...
* Allow plain assertions (@psalm-assert) about $this (fixes #3105 )
* Fix multiple assertion combining
* Fix multiple assertion combining for $this again
* Add test for multiple assertion combining for $this again
2020-04-09 08:15:07 -04:00
Brown
d868710b2b
Fix handling of built arrays
2020-04-08 16:11:11 -04:00
Brown
b2e010b431
Fix #3102 - identify issues with possibly-mixed output
2020-04-08 14:07:09 -04:00
Brown
a117c48bb2
Add back nuance to error messages for conflicting type bounds
2020-04-08 12:37:46 -04:00
Brown
550ba0a4c9
Compare to real outer context, not if one
...
Fixes #3091
2020-04-07 15:13:17 -04:00
Brown
61c979136f
Fix #3091 - simplify elseif negated clauses where possible
2020-04-07 13:04:24 -04:00
Brown
067104e170
Fix #3084 - keep track of upper and lower bounds of inferred template types
2020-04-07 00:13:56 -04:00
Matthew Brown
6cea065bca
Attempt to export file order in Linux CI
2020-04-05 00:10:50 -04:00
Matthew Brown
4c52032491
Use mixed if yield type not known
2020-04-04 23:54:41 -04:00
Matthew Brown
120595f480
Clone a little earlier
2020-04-04 23:45:38 -04:00
Brown
fca6585f6e
Be more lenient when inside isset
2020-04-04 11:15:13 -04:00
Brown
c0e573ab6a
Try harder to understand templated array_map callable array
...
Fixes #3039
2020-04-03 16:53:56 -04:00
Brown
08594cf712
Always be cloning
2020-04-03 13:56:03 -04:00
Brown
af4a7cabe9
Fix #3057 and add support for @psalm-yield annotation
2020-04-02 22:38:10 -04:00
Brown
5876635d6d
Always be clonin
2020-04-01 00:45:29 -04:00
Matthew Brown
b46e147735
Add some limits on switch case assertion calculation
...
Ref #2728
2020-03-30 00:20:00 -04:00
Matthew Brown
194f02507d
Allow conditional types to reference class constants
2020-03-29 13:37:37 -04:00
Matthew Brown
1b2017e4f4
Add slash
2020-03-29 10:44:38 -04:00
Matthew Brown
5ad55ae693
Fix type inference on simple conditional function calls
2020-03-29 10:42:57 -04:00
Matthew Brown
0e919a0696
Allow arithmetic on simple templated types
2020-03-29 10:34:46 -04:00
Matthew Brown
788da0680e
Allow var_export userland implementation
2020-03-29 10:19:09 -04:00
Matthew Brown
7fdccc0439
Fix #3014 - change constant class access rules
2020-03-29 09:47:29 -04:00
Matthew Brown
e85d22f004
Fix #3033 - allow __invoke on unions with non-objects
2020-03-28 23:41:05 -04:00
Matthew Brown
86a89b2d27
Fix #3034 - expand out while expressions for more accurate variable initialisation
2020-03-28 18:22:08 -04:00
Matthew Brown
de6aee32d1
Fix #3035 - improve templating for property assignments
2020-03-28 17:18:21 -04:00
Matthew Brown
47c1470e3b
Refactor reference checks to use more appropriate properties
2020-03-28 16:30:56 -04:00
Brown
cc548a45fa
Improve detection of unused classes
2020-03-28 14:45:58 -04:00
Brown
60613462fe
Improve static resolution a little more
2020-03-28 08:14:35 -04:00
Brown
5835c34a29
Expand out static extra types
2020-03-28 00:08:31 -04:00
Brown
e3ff856cac
Improve treatment of static in intersection
2020-03-27 19:17:44 -04:00
Brown
5cb1538448
Don’t add unnecessary taints
2020-03-27 19:09:15 -04:00
Brown
b57563c8cf
Renamed function to be a little better
2020-03-27 18:30:59 -04:00
Tyson Andre
e560858b23
Fix grammar nit in "is can never happen" message ( #3025 )
...
Should either be "is impossible" or "can never happen"
2020-03-27 17:32:49 -04:00
Brown
f88c7c1ec5
Fix closure return type inference
2020-03-26 14:38:32 -04:00
Brown
971ae50bea
Do prep work for #3024 - improve handling of absent class references
2020-03-26 12:35:27 -04:00
Matthew Brown
f94ab22a5f
Be better about strict inference
2020-03-25 09:18:49 -04:00
Matthew Brown
4734583444
Don’t overwrite already-defined template
2020-03-24 23:40:01 -04:00
Brown
467da32f84
Fix instanceof static and isa (static::class) handling
2020-03-24 18:58:15 -04:00
Brown
a9b6c51748
Improve new $class to make it more static-y
2020-03-24 18:30:08 -04:00
Brown
1bfc61d402
Allow final classes to bypass static checks
2020-03-24 18:14:10 -04:00
Brown
ec34a16291
Warn about invalid static returns
2020-03-24 18:00:20 -04:00
Brown
f6759c3d16
Check return statement types for inherited docblocks
2020-03-24 17:59:48 -04:00
Brown
a7245b4459
Fix bugs
2020-03-23 13:29:00 -04:00
Matthew Brown
27a0651b6c
Fix #3009 - make sure return type is set when returning early
2020-03-23 13:25:55 -04:00
Matthew Brown
ce9eef9ed7
Improve returning
2020-03-23 13:25:55 -04:00
Matthew Brown
eeed5ecccc
Only prevent AbstractMethodCall on direct calls
...
Fixes #3007
2020-03-23 07:40:30 -04:00
Matthew Brown
26694345d6
Fix unknown variable
2020-03-21 20:53:46 -04:00
Matthew Brown
6746f1c047
Fix #3004 - reset property types inside a closure defined in a class
2020-03-21 20:46:38 -04:00
Matthew Brown
c986cdf12e
Allow edge-case of by-reference assignment with unitiliazed property
...
Fixes #3003
2020-03-21 19:23:32 -04:00
Matthew Brown
474b9dc01b
Fix too-long line
2020-03-17 17:44:31 -04:00
Matthew Brown
9cd817077e
Improve fix
2020-03-17 17:34:45 -04:00
Matthew Brown
4166e5a4ef
Fix tests
2020-03-17 16:30:03 -04:00
Matthew Brown
da170efb65
Don’t coerce literal values
...
Fixes #2982
2020-03-17 16:16:58 -04:00
Matthew Brown
951b943c38
Fix #2981 - check that class exists before making it a phantom
2020-03-17 15:04:50 -04:00
Matthew Brown
309a229db1
Add codes to all issues
2020-03-17 09:19:47 -04:00
Matthew Brown
a4add37293
Check for variadic functions
2020-03-16 11:46:44 -04:00
Matthew Brown
9556e9ad69
Disable enclosing method/function return type inference
...
cc @ragboyjr – this makes Psalm unstable, as method return types cannot change midway through analysis (as it means results would be dependent on file analysis order)
2020-03-16 11:45:49 -04:00
Matthew Brown
4232bfb6e6
Fix location
2020-03-15 23:29:52 -04:00
Matthew Brown
6c3ff8f245
Remove unused variable
2020-03-15 23:21:48 -04:00
Matthew Brown
a8a1142889
Fix #2977 - make MixedAssignment message a bit more clear, hopefully
2020-03-15 23:20:12 -04:00
Matthew Brown
c85fa9083d
Fix #2915 - prevent "if (true)" and similar
2020-03-15 22:23:31 -04:00
Matthew Brown
b6380ae595
Fix false-positives around unevaluated code
2020-03-15 14:43:05 -04:00
Matthew Brown
6c7f89b0ab
Fix #2920 - track unevaluated code after nested returns
2020-03-15 14:31:41 -04:00
Matthew Brown
3ebb5a1142
Fix #1843 - ignore intersection TooManyArguments issues
2020-03-15 14:01:33 -04:00
Matthew Brown
0022de1f13
Fix #946 - allow too many arguments when one of union agrees
2020-03-15 13:44:00 -04:00
Matthew Brown
0af2eba4b9
Fix #2973 - don’t allow template type through
2020-03-15 11:14:06 -04:00
Matthew Brown
2c0cf4030f
Detect assigning collections of mutable objects in immutable
...
Fixes #2946
2020-03-15 00:21:20 -04:00
Matthew Brown
43189b3d55
Allow types to be traversed
2020-03-14 23:54:51 -04:00
RJ Garcia
2de3e27f10
Initial inferred Closure Returns ( #2945 )
...
- Added detection for when we can infer
closure types from parent fn return types
- Implemented functionality for infering types of
returned closures
- Added ability to infer type of return from typed
closures
- Added a new getFunctionLikeStorage method in
Codebase to support easily getting a function
despite being a method, closure, or function
- Added some utilities to the MethodIdentifier
to facilitate creating MethodIdentifier's from
string method references
Closes #2896
Signed-off-by: RJ Garcia <rj@bighead.net>
2020-03-14 14:51:43 -04:00
Matthew Brown
acac77b3f0
Improve message
2020-03-14 01:19:50 -04:00
Matthew Brown
0aca01faea
Improve fix to #2805
2020-03-14 01:09:12 -04:00
Matthew Brown
54d38e562f
Fix #2970 - use correct unreferenced vars when analysing do
2020-03-13 11:41:17 -04:00
Matthew Brown
5210f9b69b
Fix #2966 - register constructor use for new $templated_class
2020-03-12 11:42:01 -04:00
Matthew Brown
c6a5781e78
Break apart FunctionCallAnalyzer::analyze method
2020-03-12 11:05:50 -04:00
Matthew Brown
96fbcd5a64
Break out more methods
2020-03-11 23:38:49 -04:00
Matthew Brown
329c9afdf5
Actually remove method
2020-03-11 23:20:19 -04:00
Matthew Brown
973703e396
Break out template param collection
2020-03-11 23:15:15 -04:00
Matthew Brown
9732697e45
Break out method call purity checks
2020-03-11 23:09:09 -04:00
Matthew Brown
bfb919d26a
Break out methods into their own classes
2020-03-11 23:04:52 -04:00
Matthew Brown
8f28f41399
Improve magic checks
2020-03-11 18:42:41 -04:00
Matthew Brown
950260a041
No erroneous UndefinedMethod when accessing sealed class
2020-03-11 18:27:07 -04:00
Matthew Brown
f128c8ffda
Fix overriding of mapped property type visibility
2020-03-11 17:41:05 -04:00
Matthew Brown
43d9361395
Break out more methods
2020-03-11 13:35:33 -04:00
Matthew Brown
89f6866893
Fix magic property test
2020-03-11 12:45:30 -04:00
Matthew Brown
50cddb5350
Break out purity checks
2020-03-11 12:24:25 -04:00
Matthew Brown
c5fa07920c
Fix improper property var calculation
...
Ref #1332
2020-03-11 11:03:27 -04:00
Matthew Brown
ef64e6e8eb
Improve abstract call handling
2020-03-11 10:36:39 -04:00
Matthew Brown
27598f508e
Fix too-long line
2020-03-11 10:18:53 -04:00
Matthew Brown
0d62fbdf98
Detect erroneous abstract static method calls
2020-03-11 10:18:40 -04:00
Matthew Brown
d2950af636
Break apart MethodCallAnalyzer a bit
2020-03-11 09:38:09 -04:00
Brown
0cfe565d0a
Fix #2952 - always be cloning
2020-03-09 18:59:56 -04:00
Brown
2a72990d62
Add back support for unused method checks
2020-03-09 18:55:35 -04:00
leightonthomas
60fb3924bc
Fix #2914 - falsable functions who only expect true now produce errors
2020-03-09 14:25:18 -04:00
Brown
04bcc32efb
Fix #2940 - fix array offset assignment under ??=
2020-03-09 14:09:41 -04:00
Brown
a0da7356e9
Fix #2935 - make handling of templated properties much less hacky
2020-03-09 09:59:02 -04:00
Brown
40a7a1156f
Fix #2930
2020-03-09 09:45:35 -04:00
Matthew Brown
5b7ab6a542
Fix coercion
2020-03-09 01:32:27 -04:00
Matthew Brown
3243819f1b
Fix #2941 - allow class-string<self> to be fleshed out
2020-03-09 01:29:16 -04:00
Matthew Brown
5b4ed6b516
Fix #2942 - support array_splice properly for numeric-keyed arrays
2020-03-09 01:15:52 -04:00
Sergey Melesh
a5da866d97
Ignore exceptions already caught by previous catch
2020-03-08 20:19:56 -05:00
Matthew Brown
b999037263
Fix #2928 - properly expand out skipped template inheritance
2020-03-06 19:24:47 -05:00
Matthew Brown
766effb0db
Improve accuracy of diff generation
2020-03-06 13:48:59 -05:00
Matthew Brown
10b807b4f6
Fix reference generation from methods in --diff mode
2020-03-06 13:02:34 -05:00
Matthew Brown
a2a507166d
Fix #2923 - remove hack to fix a template issue
2020-03-06 09:42:23 -05:00
Matthew Brown
51bfc7c619
Only emit mixed issues for MissingClassPropertyType
...
Fixes #2388
2020-03-06 07:57:00 -05:00
Matthew Brown
7ea06c7b1a
Only emit PossiblyUndefinedVariable issue on variables
2020-03-05 23:40:47 -05:00
Matthew Brown
75a3412a42
Downgrade error when using unknown variable in mixed method
2020-03-05 21:24:08 -05:00
Matthew Brown
b2678d40aa
Revert "Fix #2909 - don’t treat args of unknown calls as possible by-reference vars"
...
This reverts commit 105fe012c4
.
2020-03-05 21:10:29 -05:00
Matthew Brown
105fe012c4
Fix #2909 - don’t treat args of unknown calls as possible by-reference vars
2020-03-04 23:49:06 -05:00
Matthew Brown
1615612394
Fix #2910 - prevent ternaries from ever being considered valid reference
2020-03-04 22:30:53 -05:00
Matthew Brown
88c4088bc2
Prevent self/static refs outside classes
...
Fixes #2895
2020-03-01 17:25:55 -05:00
Matthew Brown
f44c3488eb
Keep track of which arg a given template was assigned from
...
Fixes #2900 - We only care about the depth of a templated match when templating from a particular argument. The next argument should essentially start afresh
2020-03-01 12:27:18 -05:00
Matthew Brown
e0d555e203
Allow function names to passed in as strings for callable template resolution
2020-02-29 15:43:45 -05:00
Matthew Brown
2d6cf8a0b0
Get bindable params earlier, before replacing with extended ones
2020-02-27 23:10:26 -05:00
Matthew Brown
abb3800d20
Fix bad template replacement
2020-02-27 23:00:40 -05:00
Matthew Brown
39d6800531
Remove default
2020-02-27 21:54:19 -05:00
Matthew Brown
c565afde64
Fix method call after method_exists check
2020-02-27 21:46:58 -05:00
Matthew Brown
1f19aed31b
Fix support for replacing mocked types in own classes
2020-02-27 21:36:03 -05:00
Philip Hofstetter
d315822bfa
make skipping of checks after invalid includes configurable
...
as suggested in the PR it's best to make the setting configurable.
In order not to break existing installations, we default to keeping the
old behaviour, but in a later version of psalm, we might change the
default.
2020-02-27 18:49:23 -05:00
Philip Hofstetter
f2277ebb6d
don't disable checks when includes can't be resolved
...
Any unresolvable include (even suppressed ones) would lead to some
subsequent tests being disabled as a side-effect.
this fixes #2817
2020-02-27 18:49:23 -05:00
Brown
35c1670602
Fix #2875 - treat intersections more similarly than before
2020-02-27 18:42:15 -05:00
Matthew Brown
eeb2858b30
Add additional fix for #2784
2020-02-27 08:56:39 -05:00
Brown
ea0a670230
Flesh out class constants in function call return type
...
Fixes #2884
2020-02-26 17:28:44 -05:00
Brown
234a6ba4b4
Suppress null check
2020-02-24 16:22:50 -05:00
Brown
ff7fbcda99
Fix #2871 - prevent keyed arrays from being interpreted as callables
2020-02-24 16:19:33 -05:00
Brown
0a8bb32115
Fix #2866 - prevent use of impure __toString via concatenation in pure contexts
2020-02-24 14:50:34 -05:00
Matthew Brown
f1a9b73a78
Fix message
2020-02-23 18:24:43 -05:00
Matthew Brown
ed4f4e35b8
Fix null checks
2020-02-23 18:20:59 -05:00
Matthew Brown
41e076e0ee
Fix bad
2020-02-23 18:19:53 -05:00
Matthew Brown
618ae77846
Prevent implicit __toString method calls in a pure context
2020-02-23 18:18:25 -05:00
Matthew Brown
1abece4f7c
Use more accurate types
2020-02-23 17:03:27 -05:00
Matthew Brown
b01bc9ab12
Fix union-of-mixed array key creation
2020-02-22 21:13:14 -05:00
Matthew Brown
4dae5b3190
Prevent more mixed array keys
2020-02-22 20:52:39 -05:00
Matthew Brown
27fd76649c
Prevent more array<mixed, ...> construction
2020-02-22 12:20:03 -05:00
Matthew Brown
6ad3d039df
Prevent more array<mixed,...> creation
2020-02-22 12:12:40 -05:00
Matthew Brown
952045e2ba
Fix return type checks
2020-02-22 11:28:24 -05:00
Matthew Brown
1a3129b0e0
Fix test condition
2020-02-22 10:53:30 -05:00
Matthew Brown
1c218c020e
Fix #1684 - detect error in assertion on return type of direct call
2020-02-22 10:41:57 -05:00
Matthew Brown
db17c85dd6
Fix #2787 - make accessing undefined objectlike key an error
2020-02-22 00:29:59 -05:00
Matthew Brown
4707b21227
Fix tests
2020-02-21 22:15:25 -05:00
Brown
7d99a15072
Fix #2805 - forbid passing in mutable class to mutation-free context
2020-02-21 18:25:35 -05:00
Brown
292a2359b3
Add slash
2020-02-21 15:44:26 -05:00
Brown
b51863fc9b
Fix #2848 - allow casting templated types
2020-02-21 15:17:35 -05:00
Matthew Brown
aea33824e6
Fix #1555 - allow phantom class constants
2020-02-18 19:46:05 -05:00
Brown
0e23fab5d2
Detect bugs similar to that which caused #2832
2020-02-18 12:53:54 -05:00
Brown
6e8088776d
Use better return type for SimpleXMLElement::offsetGet
2020-02-18 10:58:56 -05:00
Matthew Brown
ced092874a
Make config generation smarter
2020-02-17 22:05:58 -05:00
Matthew Brown
00afcda5e0
Fix #2824 - allow unpacking of non-arrays with template params
2020-02-17 19:54:11 -05:00
Matthew Brown
3561c7d5dc
Make sure yield from expressions counted as used
...
Fixes #2823
2020-02-17 19:21:04 -05:00
Matthew Brown
cf977c3542
Don’t convert constant descriptions to lowercase
2020-02-17 18:19:33 -05:00
Matthew Brown
d3bfb96431
Fix #2808 - improve yield type discernment
2020-02-15 10:47:07 -05:00
Matthew Brown
3feccc1f98
Fix tests
2020-02-14 22:24:39 -05:00
Matthew Brown
653353709a
Use MethodIdentifier object instead of string
2020-02-14 20:54:26 -05:00
Matthew Brown
422bd25f04
Maybe fix indentation
2020-02-13 19:33:47 -05:00