1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-13 17:57:37 +01:00
Commit Graph

6946 Commits

Author SHA1 Message Date
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
5e8219b613 Fix #5327 - add check to prevent OOMing on very large conditionals 2021-05-14 14:53:53 -04:00
Marco Pivetta
641587635d
Fix #5761 by marking all opcache_ functions as impure, as they are affected by runtime/engine (#5762)
Quoting original issue (fixes #5761):

> Given this snippet ( https://psalm.dev/r/4d51eeab35 ):
>
> ```php
> <?php
>
> function invalidate_cache_for(string $path): void {
>     opcache_invalidate($path);
> }
>
> invalidate_cache_for('foo');
> ```
>
> Psalm reports the `opcache_invalidate()` call as `UnusedFunctionCall`. I'm wondering if `opcache_invalidate()` is perhaps inferred as a pure function? The only reference to it that I could find is in 1a59e81808/dictionaries/CallMap.php, but no purity markers are there.
>
> I'd gladly fix these, if I could get a pointer to where purity is determined.
2021-05-13 21:18:00 -04:00
Matthew Brown
3797d7920f Add slashes 2021-05-13 21:14:54 -04:00
Matthew Brown
bb8ce8817d Simplify a bit of logic in switch analysis 2021-05-13 17:31:17 -04:00
Matthew Brown
18931295c4 Fix #5073 — don’t crash when templates cannot be resolved 2021-05-13 16:55:22 -04:00
Matthew Brown
2ebf97b4cb Fix #4910 - don’t allow array_merge to create massive keyed arrays 2021-05-13 16:27:05 -04:00
Matthew Brown
78ed9404cb Fix #4107 - resolve reference to static in class constant 2021-05-13 12:49:33 -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
orklah
ab1732de66
combining never/empty twice gives never (#5756) 2021-05-12 18:46:37 -04:00
40bc7cf294
callable-string is always a non-empty-string (#5741) 2021-05-10 11:47:32 -04:00
orklah
72022139fa
improve array_splice inference (#5738) 2021-05-10 11:45:52 -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
aa854ae338
Link to SARIF JSON schema (#5718)
Fixes vimeo/psalm#5716
2021-05-05 21:47:36 -04:00
Bruce Weirdan
f5a58adcac
Prefer @psalm-template over @phpstan-template (#5713)
* Prefer `@psalm-template` over `@phpstan-template`

Fixes vimeo/psalm#5590

* Prefer `@psalm` templates for methods as well
2021-05-05 21:47:01 -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
ed43c739e3 Prevent another unsafe template situation, skipping key-of tests for now 2021-05-05 01:06:53 -04:00
Matt Brown
f95458be61 Setting values on templated arrays should corrupt them 2021-05-05 00:46:43 -04:00
Matt Brown
ba90267ea7 Fix bad subtyping rule 2021-05-05 00:42:06 -04:00
Bruce Weirdan
27ea40eda0
Fix notice for certain invalid docblocks (#5709)
Fixes vimeo/psalm#5680
2021-05-03 22:28:17 -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
Matthew Brown
832a190dd4
Support enums (#5699)
* Add initial enum preparation

* Support cases method

* Ignore bad use error

cc @weirdan

* Fix type
2021-05-03 17:54:09 -04:00
Bruce Weirdan
105c6f3a1c
Remove (and prevent) unused uses (#5704)
* Updates `slevomat/coding-standard`
* Removes unused uses
* Prevents unused uses
* Fixes a number of symbol case mismatches
2021-05-03 17:22:15 -04:00
Matt Brown
0c30a94b4a Remove unused variable 2021-05-03 15:13:24 -04:00
Matt Brown
881dbf86e1 Fix inference for empty arrays 2021-05-03 12:40:14 -04:00
Matt Brown
eb71506a59 Fix #5697 - don’t consider docblocks when checking for invariant properties 2021-05-02 10:45:55 -04:00
Matt Brown
12844621b4 Fix #5693 - revert fix for #2048
The original fix was just a bit too narrow, and led to this bug
2021-05-01 21:13:42 -04:00
Matt Brown
0f7aaa5405 Fix #5696 - combinations of scalars should remove empty-scalar 2021-05-01 20:13:49 -04:00
Matt Brown
3a87f18b5a Fix #5685 - properly negate complex conditionals 2021-05-01 20:00:01 -04:00
Matt Brown
83a0325c0a Always run legacy plugins first
Legacy plugins are more likely to be custom-made, non-legacy ones like the PHPStorm meta scanner contain more generic info
2021-05-01 16:56:25 -04:00
Matt Brown
0f5b117534 Migrate ClassLikeName options to object 2021-04-30 15:01:33 -04:00
AndrolGenhald
79fcf79219
Kill children on error and check if stream is closed before writing from child. (#5682)
* Kill children on error and check if stream is closed before writing from child.

* Use SIGTERM to kill children, reap children on error.
2021-04-30 09:01:24 -04:00
Vincent Langlet
fb5c5a9c59
Fix array<empty, empty> not in array{foo?: mixed}<string, mixed> (#5677)
* Fix array<empty, empty> not in array{foo?: mixed}<string, mixed>

* Add tests
2021-04-30 09:00:49 -04:00
Matt Brown
cd53e047a5 Improve messages 2021-04-25 17:26:25 -04:00
Matt Brown
4f5c205c57 Improve error message for #5489 2021-04-25 16:02:00 -04:00
Bruce Weirdan
933822e400 Do not consider isset checks on static properties as redundant (#5525)
* Do not consider isset checks on static properties as redundant

Unlike normal properties, static properties do not have a prescribed
initialization sequence, so they can always be uninitialized (or unset).
Thus `isset()` checks on them are never redundant.

Fixes vimeo/psalm#5489

* Fix issue with nullable is_static
2021-04-25 15:53:07 -04:00
Matthew Brown
85a0ef0456
Revert "Do not consider isset checks on static properties as redundant (#5525)" (#5670)
This reverts commit cd002e6a87.
2021-04-25 15:46:13 -04:00
Matt Brown
67c5dc3c79 Fix #5517 - don’t let a variable’s by-refness be overwritten by a @var docblock 2021-04-25 15:11:23 -04:00
Matt Brown
7b7354efa3 Fix #5518 - add type for property with variable name 2021-04-25 14:49:43 -04:00
Matt Brown
2fa55d147a Allow parent class to call child protected method 2021-04-25 12:44:53 -04:00
Matt Brown
64fdac33e8 Fix #5641 - types should always be comparable to themselves 2021-04-25 10:45:43 -04:00
Matt Brown
419114e1f0 Fix #5662 — prevent crash when reporting mixed issue on virtual arg 2021-04-23 15:34:35 -04:00
Matt Brown
ecd5e3b7ae Fix #5652 - use accurate type combination rules when replacing templated union 2021-04-22 00:33:49 -04:00
Vincent Langlet
39e61ae942
Add support for phpstan import-type and type annotations (#5648)
* Add support for phpstan import-type and type annotations

* Add test

* Fix cs
2021-04-19 22:56:08 -04:00
Matt Brown
40b6860881 Workaround Phar compaction error 2021-04-18 23:28:34 -04:00
Matt Brown
642f2f435c Fix #5640 - improve handling of assignments in conditional 2021-04-18 16:16:54 -04:00
Matt Brown
bb0bfda7c5 Improve mic drop variable name 2021-04-18 15:50:50 -04:00
Matt Brown
0acc02e184 Use more descriptive names for properties & variables of if/else handling 2021-04-18 15:38:12 -04:00
Alexander Makarov
ff00255c19
Fix excluding binary path under Windows (#5628)
* Fix excluding binary path under Windows

* Fix CS
2021-04-15 06:55:45 -04:00
Bruce Weirdan
93946d0827
Forbid rejecting named arguments when parent allows them (#5627)
Fixes vimeo/psalm#5622
2021-04-15 06:55:13 -04:00
Matthew Brown
e505cd58b4
Add use 2021-04-12 23:52:50 -04:00
Matt Brown
f874740c83 Fix phpcs 2021-04-10 22:01:07 -04:00
Matt Brown
b7f122425f Use proper variable 2021-04-10 21:48:50 -04:00
Abdul Malik Ikhsan
2a31b66978
Add json_last_error to impure function (#5613)
* Add json_last_error to impure function

* add 'json_encode', 'json_decode' as well

* revert json_encode and json_decode
2021-04-10 20:38:02 -04:00
Matt Brown
012dafad79 Fix #5383 - prevent unsound use of new static for generics 2021-04-10 13:16:19 -04:00
orklah
bb88cff28a
Int and Float can be reconciled with Numeric (#5611) 2021-04-09 23:59:59 -04:00
3b3065c881
Allow variable keys with array_key_exists (#5606)
* Allow variable keys with array_key_exists

* Switch to elseif
2021-04-09 11:29:45 -04:00
AndrolGenhald
9f0d13998f
Fix race condition creating parser cache directory (fixes #4483) (#5603)
I wasn't able to reproduce the error under normal conditions, but I set a
breakpoint on the `mkdir` call, created the directory, then continued, and it
seems to handle it correctly.
2021-04-09 11:29:09 -04:00
AndrolGenhald
518d0af895
Strict int/float comparison for conditional types, improve range return type (#5601) 2021-04-09 11:28:48 -04:00
orklah
5f4a21190f
Numeric can be Falsy (#5598) 2021-04-07 22:02:13 -04:00
AndrolGenhald
870c433dc2
Check oldest ancestor for protected method visibility (fixes #5595) (#5597) 2021-04-07 22:01:41 -04:00
AndrolGenhald
9a03598a6d
Improve type resolution of class constants. (#5591)
Handle array plus operator (fixes #5588).
Handle array spread operator.
Improve string concatenation to resolve to literal instead of unknown string.

I feel like it should be possible to let ConstantTypeResolver take advantage of
the better type analysis in ArrayAnalyzer, ConcatAnalyzer, etc, but it would
require a restructuring that's beyond me for the time being.
2021-04-07 21:56:35 -04:00
Matt Brown
a469c82653 Fix #5587 - detect final class calls when routed through parent 2021-04-06 12:35:09 -04:00
Matt Brown
7080bc3bff Fix #5578 - variables always set in conditionals should be combined 2021-04-06 11:11:40 -04:00
Matt Brown
517b2030c9 Fix #5545 - throwing uses method 2021-04-04 21:17:12 -04:00
Bruce Weirdan
f07b6e675e
Support array of objects in array_column() (#5567)
Fixes vimeo/psalm#5460
2021-04-04 00:01:01 -04:00
Bruce Weirdan
34cb21c7fc
Report cases where object is coerced into object with properties (#5566)
Fixes vimeo/psalm#5565
2021-04-04 00:00:31 -04:00
Bruce Weirdan
106c7db5d1
Provide more detailed return type for get_object_vars() (#5557)
Handle keyed objects and named objects, including support for property
visibility.
2021-04-02 15:39:43 -04:00
Valentin Udaltsov
31096d9361
Marked iterator_to_array as an impure function (#5532) 2021-04-02 15:38:15 -04:00
AndrolGenhald
d022910599
ConcatAnalyzer improvements and non-falsy-string fixes. (#5544)
* ConcatAnalyzer improvements.

Deduplicate code.
Improve type inference.
Allow literal type inference when only one side has multiple types (fixes #5483).
Fix invalid type inference with negative int as right operand.

* Fix inference to be lowercase-string when concatenating int.

* Fix TNonEmptyLowercaseString to not be subtype of TNonFalsyString.

'0' is a non-empty-lowercase-string that is falsy.

* Fix other issues with non-falsy-string.

* Nest ands and ors

Co-authored-by: Matthew Brown <github@muglug.com>
2021-03-31 23:16:21 -04:00
Matt Brown
fe97aa0722 Fix #5542 - nullsafe method calls are assumed used 2021-03-31 10:08:52 -04:00
Matt Brown
150dd00060 Fix #5540 - function is used inside throw expression 2021-03-31 10:03:25 -04:00
Valentin Udaltsov
59b7de5647
Closes #3238 Marked flock as an impure function (#5543) 2021-03-31 09:55:36 -04:00
Matt Brown
ece138562f Fix too-long line 2021-03-30 18:39:51 -04:00
Bruce Weirdan
cd002e6a87
Do not consider isset checks on static properties as redundant (#5525)
* Do not consider isset checks on static properties as redundant

Unlike normal properties, static properties do not have a prescribed
initialization sequence, so they can always be uninitialized (or unset).
Thus `isset()` checks on them are never redundant.

Fixes vimeo/psalm#5489

* Fix issue with nullable is_static
2021-03-30 11:56:08 -04:00
Martin Gold
667568d925
Double directory separator on "Cannot resolve stubfile path" (#5509)
* fix: double directory separator on invalid stubfile path

* fix: non-existing stubfile error message
2021-03-30 11:55:33 -04:00
Bruce Weirdan
8753c28a1b
Marked more functions as impure (#5524)
Fixes vimeo/psalm#5519
2021-03-30 11:55:09 -04:00
Bruce Weirdan
6bd7f5b867
Forbid template annotation on closures (#5499)
They don't work properly anyway.

Fixes vimeo/psalm#5472
2021-03-29 15:10:04 -04:00
orklah
adc5368b97
fix Int overflow for pow (#5510) 2021-03-29 15:09:44 -04:00
Matt Brown
17e147935a Fix #5506 – make array_values and iterator_to_array respect nested templates 2021-03-29 09:37:51 -04:00
Bruce Weirdan
d57dde0d15
Allow phantom classes in instanceof expression (#5498)
Fixes vimeo/psalm#5481
2021-03-29 00:11:45 -04:00
Matt Brown
d4377c0baf Check upper bound too 2021-03-28 23:54:38 -04:00
Matt Brown
2d197e3e12 Allow older composer/semver cc @xurizaemon 2021-03-28 23:45:52 -04:00
Bruce Weirdan
ec7de89f0c
Do not let string subtypes subsume class-strings (#5497)
Previously, Psalm would treat unions like `class-string|numeric-string`
as `numeric-string`, while the only case when string should subsume
`class-string` is when we're combining `class-string` with non-specific
`string`.

Fixes vimeo/psalm#5491
2021-03-28 23:12:23 -04:00
Matt Brown
9a714b759e Fix #5496 - ensure params extended in properties are properly fleshed out 2021-03-28 23:10:38 -04:00
Matt Brown
f41deeab0a Taint through reset call 2021-03-28 13:14:35 -04:00
Matt Brown
f24ef253e3 Add better trace for MixedOperand issues 2021-03-28 12:09:16 -04:00
Matt Brown
93743d1465 Also add better message for MixedArgumentTypeCoercion 2021-03-28 11:32:38 -04:00
Matt Brown
54ac13b190 Allow nested template unwrapping inside reset, end
Fixes #5208
2021-03-28 09:52:23 -04:00
Matt Brown
72226c500a Add level to shepherd data 2021-03-27 22:24:38 -04:00
Matt Brown
c64e879178 Only check param-out when no exception is thrown 2021-03-27 09:50:20 -04:00
orklah
12cd9590c8
allow $var::class on templates (#5484) 2021-03-26 21:21:38 -04:00
sji
19554de6f6
Add @ignore-var and @psalm-ignore-var (#5488)
* add `@ignore-var` and `@psalm-ignore-var`

* Change two words

Co-authored-by: Matthew Brown <github@muglug.com>
2021-03-26 21:20:23 -04:00
Saif Eddin Gmati
9f74676524
allow dismissing return value of pure functions with by-reference arguments (#5463) 2021-03-25 09:05:59 -04:00
Matt Brown
929f931c14 Taint mixed keys too 2021-03-24 16:42:30 -04:00
Jean-Nicolas
30f64b79de
Checks the intersection type if the magic method does not exist (#5473) 2021-03-24 15:34:05 -04:00
Matt Brown
10ccbdd8be Add tainting for array keys
Fixes #5470
2021-03-24 15:32:56 -04:00
Matt Brown
937e68cc75 Change taint path names to prepare for allowing array key tainting 2021-03-24 15:23:56 -04:00
Matt Brown
9ad88256d1 Fix error message 2021-03-24 14:32:01 -04:00
b61ff8cffb
Allow string template params in concatenation (#5468) 2021-03-24 09:52:10 -04:00
Matt Brown
efa9b136d3 Fix linting issues 2021-03-23 19:42:56 -04:00
Saif Eddin Gmati
477ae33cd6
allow dismissing return value of no-return pure functions (#5461) 2021-03-23 19:34:12 -04:00
Matt Brown
a96645d2e3 Fix many uses of offsets 2021-03-23 01:30:51 -04:00
Matt Brown
15b0542260 Prevent more offset issues 2021-03-22 23:26:03 -04:00
Matt Brown
bf578d1024 Fix potential crash when calling magic setter 2021-03-22 23:08:38 -04:00
AndrolGenhald
de5a031088
Improve @no-named-arguments support and variadics. (#5455)
* Improve @no-named-arguments support and variadics.

Handling of argument unpacking and variadics still needs a pretty big makeover, but this is a good start.

Fixes #5420
Improves #5453 (iterable works, array still causes issues)

* Remove unneeded imports.
2021-03-22 19:58:22 -04:00
Matt Brown
9f3f420a5b Turn on unused variable detection by default on level 1 2021-03-22 09:44:40 -04:00
Sergey Yakimov
fb94db9b1f
Add proper handling of unpacked arguments with string keys (#5446)
* Add proper handling of unpacked arguments with string keys

* Fix undefined array key error

* Fix missed named arguments handling

* Fix false-positive on variadic parameter

* Add tests
2021-03-22 09:08:05 -04:00
Bruce Weirdan
4eca6acebd
Don't crash on index types used in a conditional type (#5447)
Fixes crash reported in vimeo/psalm#5423
2021-03-22 09:07:14 -04:00
Matt Brown
b73223f9c1 Add use statements 2021-03-20 22:17:22 -04:00
Matt Brown
f69cab8c02 Fix extra issue tests 2021-03-20 21:55:17 -04:00
Matt Brown
44c6d3035b Add more mixed origin information 2021-03-20 21:45:38 -04:00
Matt Brown
7f8d522912 Make all mixed issues implement MixedIssue 2021-03-20 21:44:04 -04:00
Matt Brown
d1740394aa Detect mixed echo argument when unused variable detection is turned on 2021-03-20 20:53:51 -04:00
Samuel Mortenson
e07337650b
Make taint source keys unique to the added taints. (#5444) 2021-03-20 15:42:24 -04:00
AndrolGenhald
0579c1109b
Fix bugs with array spread operator (fixes #5421) (#5433) 2021-03-19 22:43:58 -04:00
Samuel Mortenson
4aabb411a8
Added event to prevent tainting. (#5398)
* Added event to prevent tainting.

* Remove optional codebase parameter.

* Removed falsy check for codebase.

* Use two separate hooks for adding and removing taints

* Add slashes

* Update add/remove taint test name.

* Cleaned up SafeArrayKeyChecker example plugin.

* Added more AddRemoveTaintsEvent calls to codebase.

* Fix type check error with $added_taints param.

* Added AddRemoveTaintsEvent to remaining classes.

* Fix post-merge error.

* Add comma

* Remove $int_offset that never existed

Co-authored-by: Matt Brown <github@muglug.com>
2021-03-19 22:41:41 -04:00
AndrolGenhald
843305c8e0
Support template property invariance (fixes #5371) (#5414)
* Support property invariance with templates.

* Fix false positive NonInvariantDocblockPropertyType with grandchild.

* Redo templated property invariance check to fix issues.

* Add template covariant test.

* Fix property invariance false positive with template-covariant.
2021-03-19 21:55:50 -04:00
AndrolGenhald
17f23ccb30
Fix false-positive with non-empty object like array (fixes #5436) (#5437) 2021-03-19 21:54:01 -04:00
AndrolGenhald
b859fba52d
Fix array spread false negative that crashes (fixes #5431, reverts #2852) (#5432) 2021-03-19 21:51:36 -04:00
AndrolGenhald
d4590711d6
Fix object-like array keys when combining string and automatic keys (fixes #5427). (#5428)
* Fix object-like array keys (fixes #5427).

* Fix incorrect return types for tests.

* Fix false positive list with literal int key.
2021-03-19 21:44:44 -04:00
Matt Brown
42d3bceb4e Use more accurate return type 2021-03-18 15:19:29 -04:00
Matt Brown
b7a68edd0b Simplify complex methods 2021-03-18 15:09:03 -04:00
Matt Brown
a871d0dd58 Fix dumb bug 2021-03-18 11:27:32 -04:00
Matt Brown
e919e41114 Improve labelling 2021-03-18 11:18:49 -04:00
Matt Brown
04f3e29f94 Expand documentation method return type to ensure we’re giving a fair shot 2021-03-18 11:07:02 -04:00
AndrolGenhald
45694d37d4
Fix composer major.minor version detection (fixes #5415) (#5416)
* Fix composer major.minor version detection (fixes #5415)

* Add PHP 8 polyfill dependency.

* Fix version check.
2021-03-18 09:42:01 -04:00
Matt Brown
d19088bb10 Add better origins for calls 2021-03-17 19:37:21 -04:00
Matt Brown
3046468d1e Add hints for MixedAssignment issues 2021-03-17 01:10:42 -04:00
Bruce Weirdan
97fe86c4e1
Fix BC break introduced in 4.6.3 (#5410)
Fixes vimeo/psalm#5405

Requires new patch release.

This PR reverts changes to the signature of `IssueBuffer::finish()` and
introduces separate method to be used to capture `$_SERVER`
2021-03-16 19:28:18 -04:00
Matt Brown
9d979e3467 Fix #5406 - track more changes to assertion type 2021-03-16 16:33:09 -04:00
orklah
2777b62d0b
String can be reconciled with Scalar (#5402) 2021-03-16 13:46:23 -04:00
orklah
ff5a6cb297
iterator_to_array must always return array-key (#5400) 2021-03-16 13:45:34 -04:00
AndrolGenhald
9d840ee87b
Disable property invariance checks for properties with templates (#5380)
* Disable property invariance checks for templates

Property invariance checks were already disabled for template
properties, this also disabled the checks for arrays, lists,
class-string-maps, and iterables that contain templates.

Partially fixes #5371

* CS fixes

* Fix and simplify hasTemplate.

Add hasTemplate to TypeNode and simplify implementation with getChildNodes.

* Revert hasTemplate change and add containsTemplate.

* Check class-string too.
2021-03-16 13:43:30 -04:00
Bruce Weirdan
ae247d09a3
Don't mark promoted properties as unused params (#5404)
If anything, they should be marked as unused properties.

Fixes vimeo/psalm#4964
2021-03-16 13:41:43 -04:00
Matt Brown
817d1cf3fe Fix #5408 - avoid nullref when parser param cannot be found 2021-03-16 13:40:16 -04:00
Matt Brown
f1a840727d Improve min/max return type cc @orklah
Type::combineUnionTypes preserves metadata for union types, and is more accurate
2021-03-13 19:28:24 -05:00
Matt Brown
b549989ba7 Prevent overwriting storage type during analysis 2021-03-13 14:12:55 -05:00
orklah
90fd1c5d1f
fix usage of callable with array_map (#5373) 2021-03-12 14:05:22 -05:00
orklah
cddef00692
fix int overflow (#5369) 2021-03-12 13:24:00 -05:00
Bruce Weirdan
205fdd197e
Wrap entrypoints into IIFE to protect their variables (#5366)
* Wrap entrypoints into IIFE to protect their variables

Fixes vimeo/psalm#5359

* Add tests for Psalm variable isolation

* Capture environment before registering autoloader
2021-03-11 00:14:22 -05:00
orklah
0a4ad5733b
add stubs for min/max (#5353) 2021-03-11 00:13:17 -05:00
Bruce Weirdan
4f8ba04236
Provide more specific explode() return type (#5350)
Fixes vimeo/psalm#5347

`explode()` now omits `false` from the return type  when separator is a
definitely non-empty string.
2021-03-11 00:09:15 -05:00
Bruce Weirdan
8be77aaa2e
Track variable usage in bool to int casts (#5349)
Fixes vimeo/psalm#4956
2021-03-11 00:08:32 -05:00