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
leightonthomas
60fb3924bc
Fix #2914 - falsable functions who only expect true now produce errors
2020-03-09 14:25:18 -04:00
Brown
2c8688dd97
Don’t crash when conditionally defining classes with properties
2020-03-09 14:24:19 -04:00
Brown
04bcc32efb
Fix #2940 - fix array offset assignment under ??=
2020-03-09 14:09:41 -04:00
Brown
aa8d7be6e2
Add implements DateTimeInterface
...
Fixes #2948
2020-03-09 10:58:32 -04:00
Brown
3c416482ec
Fix #2932 - don’t crash when trying to expand callable object-like array
2020-03-09 10:56:37 -04:00
Brown
a0da7356e9
Fix #2935 - make handling of templated properties much less hacky
2020-03-09 09:59:02 -04:00