Marco Pivetta
0d1e893151
Added ReflectionProperty#getType()
to psalm type stubs for PHP 7.4+ ( #3093 )
2020-04-08 09:04:49 -04:00
Bruce Weirdan
0161f25ef6
Bump callmap version to 7.4 ( #3094 )
...
The content of the callmap corresponds to 7.4, but internally the
version was set to 7.3. This caused 7.4 delta to be ignored, and 7.4
types to be used for 7.3.
2020-04-08 01:04:34 -04:00
Brown
2d4381eb4e
Fix #3096 - forget clauses in context after call
2020-04-08 01:03:37 -04:00
Brown
5db9f0e8c0
Fix #2722 - change behaviour to inherit params to match just on position
...
And not name + position
2020-04-08 00:54:17 -04:00
Brown
a79122256c
Use conditional return type for range
2020-04-07 19:59:20 -04:00
Brown
69045daea9
Convert a bunch of custom-handled functions to conditional stubbed ones
2020-04-07 16:48:29 -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
m0003r
11edb22c72
Implement @psalm-trace annotation, fixes #3079 ( #3080 )
2020-04-06 12:42:22 -04:00
Brown
26fcde10fa
Fix #3081 - use correct property type for ownerDocument
2020-04-06 12:41:18 -04:00
Brown
387bc02e71
Fix #3082 - merge intersection types when replacing template types
2020-04-06 10:19:36 -04:00
Brown
27032e875f
Ensure Generator return types are enforced for a function using yield from
2020-04-06 09:23:13 -04:00
Brown
aca84e6f96
Fix inconsistency in partial template matching
2020-04-05 18:40:25 -04:00
Mikko Pesari
166b4d04a5
ZipArchive::open() does not return resource ( #3067 )
2020-04-05 14:28:01 -04:00
m0003r
c8e7e43bb0
Type::getString already respects maxStringLength config, there is no need to additional checks ( #3069 )
2020-04-05 14:27:02 -04:00
Matthew Brown
e34a3a9281
Fix handling of old amp
2020-04-05 01:14:26 -04:00
Matthew Brown
4191f7a259
Remove unnecessary annotation
2020-04-05 00:54:31 -04:00
Matthew Brown
f0b4533ba4
Use same sort order regardless of OS
2020-04-05 00:37:46 -04:00
Matthew Brown
05f7c9757a
Write debug to stdout
2020-04-05 00:28:55 -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
c6afa0fef6
Be more explicit about references
2020-04-04 21:48:14 -04:00
Brown
003212fa15
Make sure to record class references even when we don’t know whether the class exists
2020-04-04 21:47:35 -04:00
Brown
81534bbe18
Fix possibly null issue
2020-04-04 18:57:33 -04:00
Brown
2930eb3f99
Prevent storing references to classes from within those classes
2020-04-04 18:42:14 -04:00
Brown
690b29762e
ZipArchive::open can return true cc @LeSuisse
2020-04-04 17:45:26 -04:00
Brown
6b25b33d81
Revert "Stub out str_replace types"
...
This reverts commit 94fefde376
.
2020-04-04 17:38:34 -04:00
Brown
649a33b27b
Remove json_decode stub, because it introduces too many false-positives
2020-04-04 17:23:15 -04:00
Brown
1bf1a6e46b
Accept partial match of template type
2020-04-04 17:14:33 -04:00
Brown
c82834ebe4
Also add back MixedAssignment suppression
2020-04-04 12:15:53 -04:00
Brown
eacb3d7aa0
Add back possibly undefined docblock class suppression
2020-04-04 12:14:53 -04:00
Brown
4b36c4e4bf
Add stub for json_encode
2020-04-04 11:18:24 -04:00
Brown
4aae4fc631
Add slash
2020-04-04 11:16:26 -04:00
Brown
fca6585f6e
Be more lenient when inside isset
2020-04-04 11:15:13 -04:00
Brown
94fefde376
Stub out str_replace types
2020-04-04 11:05:13 -04:00
Brown
b73b75f1a1
Allow newlines in shortcut version of return type provider
2020-04-04 11:04:00 -04:00
Brown
989269a6f6
Ignore issue
2020-04-04 09:39:39 -04:00
Brown
56cc5fb611
Allow shortcut for specifying conditional template types
2020-04-04 09:31:12 -04:00
Brown
c0e573ab6a
Try harder to understand templated array_map callable array
...
Fixes #3039
2020-04-03 16:53:56 -04:00
Brown
4f07a8fc5d
Fix false positive in trait comparison in 7.4
...
Fixes #3042
2020-04-03 15:11:37 -04:00
Brown
3c9ec90919
Fix deprecated call
2020-04-03 14:56:11 -04:00
Brown
08594cf712
Always be cloning
2020-04-03 13:56:03 -04:00
Matthew Brown
ecac9d56c0
Fix #3061 - prevent array_key_exists from completely changing type
2020-04-03 08:05:21 -04:00
Brown
af4a7cabe9
Fix #3057 and add support for @psalm-yield annotation
2020-04-02 22:38:10 -04:00
Brown
63b35fc889
Fix #3058 - use value for generator inference
2020-04-02 20:37:09 -04:00
Brown
72104a52ad
Improve file invalidation when using --diff mode
2020-04-02 17:18:04 -04:00
LeSuisse
3ecd6bbd00
Fix return type of \zip_open() ( #3046 )
...
This function can return an int [0] or false [1] in case of error.
The return value of ZipArchive has also been fixed, it returns either a
boolean or an int [2][3].
Close vimeo/psalm#3209 .
[0] https://github.com/php/php-src/blob/php-7.4.4/ext/zip/php_zip.c#L1176
[1] https://github.com/php/php-src/blob/php-7.4.4/ext/zip/php_zip.c#L1160
[3] https://github.com/php/php-src/blob/php-7.4.4/ext/zip/php_zip.c#L1483
[4] https://github.com/php/php-src/blob/php-7.4.4/ext/zip/php_zip.c#L1478
2020-04-01 17:12:45 -04:00
Brown
fa43d3a8ff
Don’t check stub files for non-unused-code checks
2020-04-01 16:31:28 -04:00
Brown
ba8e5e8209
Fix diff file load order
2020-04-01 15:57:25 -04:00
Brown
943d10854d
Clear existing issues before re-adding
2020-04-01 15:30:35 -04:00
Brown
04a49102ec
Small test improvements
2020-04-01 12:56:32 -04:00
Brown
fa28d767fc
Prevent a templated type from hitting covariance checks
2020-04-01 10:53:40 -04:00
Brown
5876635d6d
Always be clonin
2020-04-01 00:45:29 -04:00
Brown
1a678068b7
Consolidate conditionals
2020-03-31 23:05:20 -04:00
Brown
fc06250678
Add number_format slash
2020-03-31 22:52:39 -04:00
Brown
8328c1d3aa
Fix build
2020-03-31 22:32:48 -04:00
Matthew Brown
66dd794101
Add return function
2020-03-31 22:26:48 -04:00
Brown
4ef7cb50a5
Make Psalm faster when there aren’t any changes whatsoever
2020-03-31 22:22:34 -04:00
Brown
d5f43e52e7
Fix coercion
2020-03-31 16:57:08 -04:00
Brown
191a3febac
Return all cached errors not in analyzed files
2020-03-31 16:56:22 -04:00
Brown
cc38f25ed7
Don’t remove non-method issues
2020-03-31 16:33:05 -04:00
Brown
da729cfbc6
Don’t check params when mutations are being collected
2020-03-31 15:49:43 -04:00
Brown
ddc8c50d2a
Prevent some inheritance issues
2020-03-31 11:28:36 -04:00
Brown
687ce87995
Ensure issues from unused classes & params is always saved to cache
2020-03-31 09:56:27 -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
1b88316c51
Convert method from recursive to inline
2020-03-29 19:42:22 -04:00
Matthew Brown
82197f1761
Add many slashes
2020-03-29 15:56:45 -04:00
Matthew Brown
ce3532490c
Add profiling for analysing slow methods
2020-03-29 15:42: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
f097b9ae6c
Add better reconciliation of ints from array keys
2020-03-29 10:22:22 -04:00
Matthew Brown
788da0680e
Allow var_export userland implementation
2020-03-29 10:19:09 -04:00
Matthew Brown
1439c90789
Add support for conditional checks on literal ints & strings
2020-03-29 10:02:24 -04:00
Matthew Brown
7fdccc0439
Fix #3014 - change constant class access rules
2020-03-29 09:47:29 -04:00
Matthew Brown
39f7296670
Fix #2191 - allow inheritance from stub-only files
2020-03-29 00:13:01 -04:00
Matthew Brown
e85d22f004
Fix #3033 - allow __invoke on unions with non-objects
2020-03-28 23:41:05 -04:00
Matthew Brown
5395183837
Use more accurate means of determining whether function did return
2020-03-28 23:37:42 -04:00
Matthew Brown
7195ea6842
Fix #3030 - don’t suggest return types can do more
2020-03-28 23:15:54 -04:00
Matthew Brown
93735712f0
Fix #3032 - always replay docblock issues when analysing files
2020-03-28 19:54:55 -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
056f4aaac6
Fix #3027 - inherited properties should be templated properly
2020-03-27 18:31:48 -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
4021114b04
Fix too-long line
2020-03-27 10:43:12 -04:00
Brown
ae31ec6805
Fix resolution of get_called_class
2020-03-27 09:51:53 -04:00
Brown
3253f57c94
Don’t rescan everything when finding unused code
2020-03-27 09:45:54 -04:00
Brown
05f8f30d8c
Use more specific type description
2020-03-27 09:45:18 -04:00
Brown
031c5be8e6
Check trait methods better
2020-03-27 00:37:33 -04:00
Brown
53612d0df6
Make --diff imply --diff-methods
2020-03-26 18:14:54 -04:00
Brown
75432536f7
Add slashes
2020-03-26 14:43:48 -04:00
Brown
f88c7c1ec5
Fix closure return type inference
2020-03-26 14:38:32 -04:00
Brown
820bd95d8b
Fix existing issue check
2020-03-26 14:25:11 -04:00
Brown
4ced26bec2
Fix #3024 - replay errors in --diff --diff-methods mode
2020-03-26 14:22:06 -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
68c95c622a
Save information about last runs whether or not there were errors
2020-03-26 00:46:39 -04:00
m0003r
71826ad69e
Fix #2994 ( #3016 )
...
More carefully handling stream_select errors when system call is interrupted. It can be detected by parsing error message. If it is interrupted, just try again.
2020-03-25 21:25:33 -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
iggyvolz
94b246b987
Initial commit ( #3013 )
2020-03-24 18:32:57 -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
1e480ade12
Fix bugs
2020-03-24 14:49:05 -04:00
Brown
cae15b6c62
Use appropriate template types when applying array_filter asssertions
...
Fixes #3008
2020-03-24 12:15:56 -04:00
Brown
a83651050c
Seal objectlike arrays inferred from constants
2020-03-23 16:28:20 -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
Brown
4c081f7835
Things with mixed values can be the same
2020-03-23 12:08:05 -04:00
Matthew Brown
eeed5ecccc
Only prevent AbstractMethodCall on direct calls
...
Fixes #3007
2020-03-23 07:40:30 -04:00
Matthew Brown
6058725256
Add prototype for conditional return type
2020-03-22 10:44:48 -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
Niklas Keller
a7affbe716
Add \Error stub ( #3002 )
...
Otherwise, errors are generated if \Error is extended: https://psalm.dev/r/8169465beb
2020-03-21 19:11:23 -04:00
Niklas Keller
dd9924ea26
Fix Generator::throw return type ( #3001 )
2020-03-21 19:08:47 -04:00
LeSuisse
6353b614fa
$ignore parameter of \sodium_base642bin() is optional ( #2997 )
...
https://github.com/php/php-src/blob/php-7.3.15/ext/sodium/libsodium.c#L2775
2020-03-20 21:09:45 -04:00
Matthew Brown
a237ba307c
Use simpler method for generating links
2020-03-19 17:12:16 -04:00
Matthew Brown
fa2adfe1b3
Add slashes
2020-03-19 16:35:04 -04:00
Matthew Brown
4e07dfebaa
Make link part of IssueData so it’s available to all consumers
2020-03-19 16:22:43 -04:00
Matthew Brown
f532dc316c
Add informational links to Psalm‘s output
...
Fixes #2978
2020-03-19 16:04:40 -04:00
Matthew Brown
89a3af54a6
Add slash
2020-03-18 21:53:44 -04:00
Matthew Brown
cbf139952c
Fix #2989 - delay @mixin hydration until parent methods inherited
2020-03-18 21:38:53 -04:00
Matthew Brown
f7907eb43f
Fix #2987 - ignore MixedReturnTypeCoercion for generator send param
2020-03-18 21:25:25 -04:00
Matthew Brown
9e29f6107a
Add extra vendor check
2020-03-18 20:21:02 -04:00
Matthew Brown
afe25257da
Don’t cache files not in project directories
2020-03-18 19:54:48 -04:00
Matthew Brown
311bd19a6a
Fix #2983 - inherited lists should have their template types localised
2020-03-18 16:23:09 -04:00
Pavel Batečko
48af534270
Improve parse_url() return type ( #2955 )
2020-03-18 15:17:24 -04:00
Ben Davies
47f43fdcd7
use file contents intead of filemtime to detect changed files ( #2991 )
...
* use file contents intead of filemtime to detect changed files
* Add as extra filter step
Co-authored-by: Matthew Brown <github@muglug.com>
2020-03-18 13:36:11 -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
50eb12e562
Fix implementation kink
2020-03-15 16:14:09 -04:00
Matthew Brown
3339c12179
Temp, slightly hacky fix
2020-03-15 16:00:15 -04:00
Matthew Brown
532ce576cc
Fix #2974 - interpret interfaces a little better
2020-03-15 15:49:13 -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
af9e362c80
Fix indentation
2020-03-15 14:14:53 -04:00
Matthew Brown
73badf59d1
Fix #2925 - ignore null return type for array_replace_recursive
2020-03-15 14:07:55 -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
aba29f0cbf
Add slash
2020-03-13 20:28:32 -04:00
Matthew Brown
aaf74f084a
Fix #2954 - filter out used vars before checking params
2020-03-13 20:21:49 -04:00
Matthew Brown
54d38e562f
Fix #2970 - use correct unreferenced vars when analysing do
2020-03-13 11:41:17 -04:00
Matthew Brown
92e3d61663
Fix differ
2020-03-12 21:40:45 -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
99ca359f8b
Break apart large methods
2020-03-12 01:19:11 -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
321f1a5e2f
Cache trait nodes
2020-03-11 22:14:21 -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
a5cf4dbaaa
Make exception properties protected
2020-03-11 15:43:15 -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
Matthew Brown
1dc26afb27
Fix #2958 - prevent overriding final methods
2020-03-10 21:26:02 -04:00
Brown
d1fcbf38ae
Fix #2956 - treat Exception::getMessage as final and mutation-free
2020-03-10 15:12:55 -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
Brown
a5672db9f9
Avoid issue where caches haven’t caught up
2020-03-09 16:59:21 -04:00
Brown
1399b139fc
Fix #2951 - use reflection to identify trait when there’s more than one per file
2020-03-09 16:41:46 -04:00