AndrolGenhald
518d0af895
Strict int/float comparison for conditional types, improve range return type ( #5601 )
2021-04-09 11:28:48 -04:00
Cyril PASCAL
c45e47d8ad
Allow to use string key for preg_replace_callback callable argument
2021-04-09 15:33:16 +02: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
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
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
Marco Pivetta
a53cc23809
#4997 added more precise type inference for count()
returning 0
or positive-int
on known arrays ( #4999 )
...
* #4997 added more precise stub for `count()` returning `0` or `positive-int` on known types
* #4997 updated `count()` to support `\SimpleXmlElement` and `\ResourceBundle` counting, as well as handling hardcoded 2-element-arrays cases
This patch:
* adds support for `count(\SimpleXmlElement)` (https://www.php.net/manual/en/simplexmlelement.count.php )
* adds support for `count(\ResourceBundle)` (https://www.php.net/manual/en/resourcebundle.count.php )
* removes usage of global constants from stub (not supported - see https://www.php.net/manual/en/function.count.php )
* adds support for identifying fixed-element-count arrays, for example `count(callable&array)`, which is always `2`
* #4997 adapted `FunctionCallReturnTypeFetcher` to infer `TPositiveInt` for `count(TNonEmptyArray)` and `count(TNonEmptyList)`
* The `FunctionCallReturnTypeFetcher` is responsible for defining the precise type of a `\count(T)`
expression when given a `T`, so we baked the whole type resolution for `positive-int`, `0` and
`positive-int|0` directly in there.
While this complicates things, it is also true that it is not possible right now (for the stubs)
to provide the level of detail around `count()` that is required by the type inference system
for such a complex function with so many different semantics.
2021-01-13 09:48:38 -05:00
Matt Brown
05e319a6ed
Fix #4827 - don’t eradicate double after int check
2020-12-14 23:08:07 -05:00
orklah
5222cadfb3
Check from_docblock property to emit the right issue ( #4736 )
2020-11-29 21:40:13 -05:00
Matt Brown
0c477da310
Fix test failures
2020-11-25 20:05:09 -05:00
Marcus Bointon
e172e88274
Fix preg_match_all stub ( #4325 )
...
* preg_match_all can return false
* Test for preg_match_all returning false
* Fix test
* Add @psalm-ignore-falsable-return
2020-10-14 19:59:07 -04:00
Matt Brown
864a7bbb4c
Add better support for get_debug_type
2020-10-14 17:30:08 -04:00
Matt Brown
bb7d7132f7
Do arithmetic for preg_split arguments
2020-10-12 20:26:02 -04:00
Matt Brown
464795d86c
Fix #4309 - improve reuse of callmap callable inference
2020-10-12 13:46:43 -04:00
Matt Brown
f83b50460a
Add better return type for preg_split
2020-10-12 13:04:28 -04:00
Matt Brown
d8a74ca383
4.x - Prevent passing empty array to max or min
2020-10-12 12:09:12 -04:00
Matt Brown
7e65355513
4.x - detect falty !is_resource checks
2020-10-12 09:57:11 -04:00
Brown
56bae3b587
Add check for strpos dictionaries
...
Ref #4070
2020-09-13 21:42:44 -04:00
orklah
ead107fa9e
More return types ( #4173 )
...
* add native return types
* redundant phpdoc
2020-09-12 11:24:05 -04:00
Brown
eda426a594
Improve unique issue solution
2020-09-10 22:54:30 -04:00
Brown
aaede393d4
Fix #4070 - prevent literal strpos argument
2020-09-10 18:28:34 -04:00
Matthew Brown
3605eeee04
Support analysing preg_match_all args in reverse to infer matches type
2020-09-04 20:33:02 -04:00
Brown
d3d8c4ed87
Hard code possible bit-shift values
2020-09-04 18:31:50 -04:00
Brown
4d82d3ddad
Fix #4128 - improve understanding of preg_match_all
2020-09-04 18:10:14 -04:00
Brown
92239add4d
Add some backwards-incompatible changes for 4.x
2020-08-30 11:44:14 -04:00
Brown
c13b0efd49
Improve understanding of negated count queries
2020-08-30 11:32:01 -04:00
Bruce Weirdan
1cf5153700
Test parallelization ( #4045 )
...
* Run tests in random order
Being able to run tests in any order is a pre-requisite for being able
to run them in parallel.
* Reset type coverage between tests, fix affected tests
* Reset parser and lexer between test runs and on php version change
Previously lexer was reset, but parser kept the reference to the old
one, and reference to the parser was kept by StatementsProvider. This
resulted in order-dependent tests - if the parser was first initialized
with phpVersion set to 7.4 then arrow functions worked fine, but were
failing when the parser was initially constructed with settings for 7.3
This can be demonstrated on current master by upgrading to
nikic/php-parser:4.9 and running:
```
vendor/bin/phpunit --no-coverage --filter="inferredArgArrowFunction" tests/ClosureTest.php
```
Now all tests using PHP 7.4 features must set the PHP version
accordingly.
* Marked more tests using 7.4 syntax
* Reset newline-between-annotation flag between tests
* Resolve real paths before passing them to checkPaths
When checkPaths is called from psalm.php the paths are resolved, so we
just mimicking SUT behaviour here.
* Restore newline-between-annotations in DocCommentTest
* Tweak Appveyor caches
* Tweak TravisCI caches
* Tweak CircleCI caches
* Run tests in parallel
Use `vendor/bin/paratest` instead of `vendor/bin/phpunit`
* Use default paratest runner on Windows
WrapperRunner is not supported on Windows.
* TRAVIS_TAG could be empty
* Restore appveyor conditional caching
2020-08-23 10:32:07 -04:00
Bauke van der Woude
7ac6d2e5a4
Fix hash_*() signatures ( #4014 )
...
Functions can return false when an invalid algorithm is supplied
2020-08-18 09:35:31 -04:00
Matthew Brown
5c20a5295e
Improve solution to #3964
2020-08-16 13:03:30 -04:00
Brown
ad1920c3a2
Fix #3910 - improve handling of fgetcsv
2020-07-30 14:21:55 -04:00
jarstelfox
3096afed99
Fix echo false issue ( #3751 )
...
* Echo: add failing test case
echo false; is a noop, not an issue
* Echo: Fix failing test case
2020-07-05 08:55:42 -04:00
Brown
9aa0aca949
Fix handling of coerced callmap args
2020-06-24 11:51:31 -04:00
Brown
9b860214d5
Fix #3639 - allow coerced types to count when picking callmap options
2020-06-22 20:24:34 -04:00
orklah
72435757ea
Add false to possible parse_url return types ( #3359 ) ( #3445 )
...
* Add false to possible parse_url return types (#3359 )
* fix test
2020-05-24 09:19:58 -04:00
Brown
111303d913
Add non-empty-lowercase-string type
2020-05-15 10:18:05 -04:00
Brown
291018034b
Remove unnecessary PHP code
2020-05-11 11:36:50 -04:00
Fabien Villepinte
5087feff79
Fix #2845 - FunctionReturnTypeProvider for sscanf ( #3233 )
...
Co-authored-by: Fabien Villepinte <fabien.villepinte@displayce.com>
2020-04-26 17:36:44 -04:00
still-dreaming-1
16fa208a60
Made compact's return array key type more specific ( #3209 )
2020-04-21 20:18:11 -04:00
Brown
2e4aaac5bb
Add better inference for date calls
2020-04-14 21:07:44 -04:00
Brown
fea1310d67
Fix #3092 - round always returns a float
2020-04-09 23:31:26 -04:00
Brown
69045daea9
Convert a bunch of custom-handled functions to conditional stubbed ones
2020-04-07 16:48:29 -04:00
Brown
40345dd29c
Remove json_encode test that no longer works
2020-04-04 18:02:28 -04:00
Brown
1bf1a6e46b
Accept partial match of template type
2020-04-04 17:14:33 -04:00
Brown
1b01d7b356
Fix tests
2020-04-04 11:51:24 -04:00
Pavel Batečko
48af534270
Improve parse_url() return type ( #2955 )
2020-03-18 15:17:24 -04:00
Matthew Brown
0022de1f13
Fix #946 - allow too many arguments when one of union agrees
2020-03-15 13:44:00 -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
Thomas Gerbet
b40403d7b0
\sodium_memzero() sets to null the value of the given reference
...
While it is not mentionned in PHP manual \sodium_memzero() always sets
the given parameter to null [0].
[0] cb933d63c2/ext/sodium/libsodium.c (L512)
2020-03-03 19:34:20 -05:00
Matthew Brown
9bdca3c706
Forbid array<mixed, ...>
2020-02-21 01:26:51 -05:00
Brown
3d6c63bc08
Break apart FunctionCallTest
2020-01-31 13:58:02 -05:00
Matthew Brown
ce0298acc4
Fix #2704 - array_merge should ignore possibly-false issues where applicable
2020-01-29 21:09:33 -05:00
Matthew Brown
10221f474f
Fix test
2020-01-27 23:52:06 -05:00
Matthew Brown
82bb3b90f0
Add @return to test
2020-01-27 23:38:31 -05:00
Brown
faf6afdce8
Support call_user_func evaluation
...
Fixes #726
2020-01-24 13:34:50 -05:00
Matthew Brown
24e1d5446c
Fix #2642 - merging two explicit lists is still a list
2020-01-17 09:31:08 -05:00
Brown
1b551b805b
Fix #2627 - infer arrow function effects for array_filter
2020-01-15 11:40:49 -05:00
Brown
eb7c3dcc11
Fix #2611 - fix combination of inferred closure return types
2020-01-13 10:23:58 -05:00
Matthew Brown
bd846123ce
Fix #2560 - handle special case of array_filter on single-element array
2020-01-11 11:54:29 -05:00
Matthew Brown
40406c7ff0
Fix #2576 - remove literal key values if array_filter has no args
2020-01-11 11:48:22 -05:00
Pavel Batečko
702ca34c41
Improve array function types ( #2566 )
...
* Improve sorting function out types
* Improve return types of array_diff_assoc(), array_intersect_assoc()
* Fix versionCompareAsCallable test
2020-01-07 11:40:23 -05:00
Bruce Weirdan
7d3dd47efa
Added support for preg_grep ( #2523 )
2019-12-29 11:05:08 -05:00
Valentin Udaltsov
006f788d6a
Added array_fill_keys support ( #2512 )
...
* Added array_fill_keys support
* Removed unnecessary array_fill_keys phpdoc
2019-12-27 13:30:42 +00:00
Matthew Brown
456aa1c569
Fix #2468 - add support for zipping arrays
2019-12-18 18:14:02 +00:00
Matthew Brown
1d0ac3df29
Fix #2472 - array_map should retain non-emptiness when passed string callables
2019-12-15 14:06:12 -05:00
Matthew Brown
432c291dd7
Fix #2440 - add support for uasort
2019-12-08 21:30:19 -05:00
Valentin Udaltsov
4a742f9940
Added array_key_first and array_key_last stubs ( #2381 )
2019-11-27 10:59:12 -05:00
Matthew Brown
113bf921f6
Add support for arrow function inference
2019-11-27 10:12:59 -05:00
Pavel Batečko
4e594e0a65
Improve array function list handling ( #2377 )
...
* array_column() returns a list unless the 3rd arg is passed
* array_pad() return type provider
* array_chunk() return type provider
* array_map() preserve list types
2019-11-26 14:48:49 -05:00
Brown
5e17a9af10
Fix #2348 - ensure all functions and methods return some type
2019-11-14 14:44:29 -05:00
Joram Schrijver
c97ba8f713
Implement type-checking and forbidding for print ( #2314 )
...
* Add type-checking for print
* Allow print to be forbidden
2019-11-08 07:01:34 -05:00
Brown
e7330afe8b
Fix #2295 - support special case of array_shift on known offset type
2019-11-04 09:21:13 -05:00
Pavel Batečko
b229ac875d
Improve return types of explode() with limit ( #2286 )
2019-11-02 10:10:38 +01:00
Matthew Brown
05ace25817
Fix #2246 - fix return type of array_slice to be a list
2019-10-20 16:19:01 -04:00
Matthew Brown
b476761109
Fix #2235 - improve behaviour of array_merge on lists
2019-10-20 15:47:00 -04:00
lhchavez
216f991b0c
Normalize stringified type names ( #2239 )
...
This change makes stringified types more normalized. Concretely it sorts
all union types, reconciled types, and sorts the keys within object-like
types.
2019-10-17 01:14:33 -04:00
Matthew Brown
1a1b3a10a9
Fix #2225 - iterator_to_array can return a list
2019-10-10 23:47:11 -04:00
Brown
ead2e38985
fix test
2019-10-09 13:51:25 -04:00
Matthew Brown
6a07757b9a
Fix tests
2019-10-08 22:41:23 -04:00
Brown
16c33d1565
Add support for list type
...
Fixes #2209
2019-10-08 18:44:46 -04:00
Guuzen
50df2868f2
Fix issue #2201 ( #2212 )
2019-10-06 15:28:41 -04:00
Jay Klehr
27961045a0
allowing null as type for mysqli real_connect for host and passwd parameters ( #2210 )
2019-10-04 13:07:28 -04:00
Matthew Brown
2ffdf1bacc
Fix undefined numeric offset
2019-10-01 08:45:36 -04:00
Matthew Brown
d387a1966c
Fix array_slice return type
2019-09-21 15:50:37 -04:00
Brown
944531b73b
fix #2125 - Don’t assume function args are necessarily authoratative
2019-09-11 13:52:58 -04:00
Matthew Brown
6b52b84bee
Fix #2101 - use more accurate fallback when match isn’t found
2019-09-08 14:44:59 -04:00
Matthew Brown
03f59ae05e
Check other arguments of array_unshift/array_push
...
Ref #2052
2019-08-25 23:52:38 -04:00
Pavel Batečko
3e549e275b
Type $matches as an array if non-zero flags are passed to preg_match() ( #2022 )
...
* Type $matches as an array if non-zero flags are passed to preg_match()
* Add tests for preg_match() function call
2019-08-15 10:28:03 -04:00
Brown
58b6d8bed4
Fix #2012 - count(callable-array) is fine and always equals 2
2019-08-12 16:17:55 -04:00
Matthew Brown
de932c4c18
Fix #1972 - improve understanding of how setcookie works
2019-07-28 16:40:35 -04:00
Brown
5770a6c904
Add support for compact
2019-07-24 17:24:23 -04:00
Brown
59dd6393f5
Fix #1953 - support third arg for explode
2019-07-17 14:13:34 -04:00
Matthew Brown
da42be175f
Apply PHPCS fixes
...
Fixes #1880
2019-07-05 16:27:53 -04:00
Matthew Brown
aa3df3f7a5
Add better support for preg_replace_callback
2019-07-05 10:40:05 -04:00
Matthew Brown
220fa31404
Fix suppression
2019-06-30 11:14:05 -04:00
Brown
5943f6036e
Fix #1859 - allow function_exists introspection when function exists
2019-06-28 10:48:30 -04:00
LeSuisse
f29826b958
Fully qualify constants and function calls ( #1849 )
...
This should give a small performance boost.
Part of #1837 .
The change is enforced via phpcs and can be autofixed
with phpcbf.
2019-06-26 16:52:29 -04:00
Matthew Brown
c66a106622
Improve performance by doing less cloning
...
Ref #1837
2019-06-26 00:14:06 -04:00
Brown
84e002e9a7
Fix #1816 - convert array_filter strings to full closures
2019-06-19 17:42:42 -04:00
Matthew Brown
7155ed4e06
Fix #1811 - improve expected argument count
2019-06-19 09:05:07 -04:00
Matthew Brown
a553adb232
Fix test array spacing
2019-06-16 09:42:34 -04:00
Matthew Brown
2d5f332ebf
Fix #1781 by improving handling of callmap options
2019-06-15 16:10:48 -04:00
Brown
c81a9a8737
Fix #1742 - allow is_countable assertion to mean something
2019-06-07 15:49:10 -04:00
Brown
29eda50ed9
Fix #1716 - no notice when using single arg in min
2019-06-03 10:33:54 -04:00
Matthew Brown
4002504ff0
Allow trait_exists to inform type for ReflectionClass
2019-05-31 09:43:46 -04:00
Matthew Brown
e31cdf3be5
Fix #1701 - allow count to be called on SimpleXMLElement
2019-05-29 07:56:06 -04:00
Brown
a89892a41f
Prevent more broad template types being captured
2019-05-28 11:54:07 -04:00
Brown
29c869ed67
Ignore nullable issues on just-coerced types
2019-05-21 12:59:06 -04:00
Brown
4ecf370900
Coerce mixed values when passed as arguments
2019-05-21 11:51:41 -04:00
Lars Moelleken
0b5680f72f
fix return type of "array_combine()" && "array_replace()"
2019-05-12 19:37:46 -04:00
Brown
d7ee952084
Infer closure param type for array_filter/array_map
...
Fixes #664
2019-05-07 16:27:25 -04:00
Brown
0e4c8ce482
Split apart TypeCoercion issues, allowing more granular issue filtering
2019-04-25 18:02:19 -04:00
Brown
97f53a6486
@voku’s fixes for issues found by their callmap update
2019-04-11 11:02:46 -04:00
Brown
1a33b25264
Fix #1536 - prevent fatal error when filtering null array
2019-04-09 17:22:30 -04:00
Brown
5173c18cce
Fix calls after updating callmap
2019-04-09 16:52:32 -04:00
Brown
3dc3d659f1
Fix #1534 - allow unpacked args to be interpreted properly by overloaded functions
2019-04-09 14:48:51 -04:00
Brown
41c722448a
Fix #1531 - improve hrtime return type
2019-04-03 17:08:37 -04:00
Brown
f82a55d836
Fix #1512 - check args to mktime are all ints
2019-03-29 10:46:48 -04:00
Matthew Brown
c772914910
Add some formatting
2019-03-23 14:27:54 -04:00
Matthew Brown
f0ddc6f3bc
Fix array_reverse implementation
2019-03-17 18:14:30 -04:00
Brown
441d3c4693
Fix #1470 - array_reverse should preserve count
2019-03-15 16:39:31 -04:00
Matthew Brown
82e6876011
Fix #1397 - fix get_class behaviour for new instances
2019-03-02 18:02:11 -05:00
Bruce Weirdan
9bdc9f774f
More provider typing
2019-03-02 08:43:19 -05:00
Brown
601f303de2
Fix position of invalid param
2019-02-27 16:00:44 -05:00
Matthew Brown
3d4710c9d3
Add better checks for invalid array_map/array_filter args
2019-02-22 00:50:41 -05:00
Brown
41b133178a
Improve handling of count comparisons
2019-02-21 17:17:10 -05:00
Brown
b7a0950aea
Prevent passing casts to byref vars
2019-02-21 13:26:37 -05:00
Brown
079ac44263
Prevent pass by ref when type type is given
2019-02-20 17:43:12 -05:00
Matthew Brown
75104f4712
Fix #1359 - error on bad iterable args
2019-02-18 16:35:23 -05:00
Matthew Brown
c58100e3af
Fix #1313 - don’t allow mixed function calls
2019-02-10 16:15:52 -05:00
Matthew Brown
c383e61805
Fix #1296 - array_filter should allow scalar values
2019-02-07 13:05:17 -05:00
Matthew Brown
17541b415f
Fix #1191 - allow Psalm to check against different versions of PHP
2019-02-07 12:25:57 -05:00
Matthew Brown
f8f5ddfb04
Add support for string range
2019-02-07 10:50:42 -05:00
Brown
9edbae2bdc
Fix possible fatal when builtin function is called in array_filter
2019-01-28 17:54:50 -05:00
Brown
f33415827e
Add checks for rounded values
2019-01-28 11:57:49 -05:00
Matthew Brown
cd4d2027d0
Fix #1249 - allow iterator_to_array to respect getIterator method
2019-01-27 14:50:05 -05:00
Brown
184ee76176
Remove erroneous regular namespace check
...
Fixes #1235
2019-01-24 10:41:06 -05:00
Matthew Brown
99569e8ee3
Fix #1173 - transform const X = true to a true type
2019-01-21 16:55:50 -05:00
Matthew Brown
1c17d2e2f2
Extract template params from string/array callables cc @weirdan
...
The culmination of what you were getting at
2019-01-19 20:18:45 -05:00
Matthew Brown
ed68cb973d
Fix #1109 - add bad usort protection
2019-01-19 18:11:49 -05:00
Brown
8d61cb4816
Fix #1200 - no fatal error in array_map when not checking functions
2019-01-15 17:53:23 -05:00
Matthew Brown
214fd7d461
Add DuplicateFunction issue
...
Fixes #49
2019-01-06 16:40:44 -05:00
Matthew Brown
43b4c1c0a3
Fix #1168 - better return type for range
2019-01-06 13:02:46 -05:00
Matthew Brown
c7723df8ff
Allow gettype vars to be compared to strings
2019-01-05 16:23:18 -05:00
Matthew Brown
f5378bdca8
Improve function call resolution
2019-01-05 14:50:11 -05:00
Matthew Brown
9d8c2792e2
Add array-key type and improve general type handling
...
Fixes #1144
2019-01-05 00:15:53 -05:00
Matthew Brown
2dc3d9651f
Separate iterable into its own type
...
Fixes #1151
2019-01-04 14:54:40 -05:00
Andrii
36f6930e0c
🐛 #1163 Fix handling for default option in filter_var
2019-01-02 13:27:53 -05:00
Matthew Brown
c4d024a72d
Check variable static calls
...
Fixes #1142 and #1160
2019-01-02 09:00:45 -05:00
Matthew Brown
901596281c
Fix #1143 - check some variable new calls
2019-01-02 06:58:49 -05:00
Brown
fb848d62e9
Add checks for if (count($a)) and if (count($a) [operator] [number])
2018-12-19 16:15:19 -05:00