1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-16 11:26:55 +01:00
Commit Graph

5112 Commits

Author SHA1 Message Date
Brown
d8f5ad190b Improve invalidation of inherited properties 2020-02-10 17:03:51 -05:00
Brown
41af71556d Fix #2785 - parse wildcards in variables better 2020-02-10 15:30:06 -05:00
Brown
89a0b101e4 Fix #2784 - no crash when get_class arg is mixed 2020-02-10 14:44:33 -05:00
Matthew Brown
074780547d Fix #2780 - filter int on more values 2020-02-09 23:58:37 -05:00
Matthew Brown
47ffb59241 Fix #2764 - iterate through all possible template types where necessary 2020-02-09 18:11:50 -05:00
Markus Staab
45468d801f Dont corrupt checkstyle xml 2020-02-09 15:54:37 -05:00
Matthew Brown
d0ac709b70 Use more robust, if slower, mechanism that’s intersection-safe 2020-02-09 15:34:50 -05:00
Matthew Brown
14f8fb8ecd Fix two redundant asserts 2020-02-09 11:45:43 -05:00
Matthew Brown
3559fdd6b3 Fix #2742 - prevent paradoxes in assert calls 2020-02-09 11:42:41 -05:00
Matthew Brown
4de6f5c4ec Fix #2442 - using asserting after a MixedAssignment removes that error 2020-02-08 23:01:45 -05:00
Matthew Brown
5f4d797fe1 Fix #2772 - add support for multiple array_map function param inference 2020-02-08 12:17:57 -05:00
Matthew Brown
b439a573ce Empty is also the bottom type 2020-02-08 11:40:22 -05:00
Matthew Brown
b26deb434d Fix #2771 - replace empty params with generic equivalents
Ref #2755
2020-02-08 11:17:24 -05:00
Bruce Weirdan
d99f23eb45 Fix #2761 2020-02-07 12:51:40 -05:00
Brown
dcc855de95 Fix #2739 - specify wildcards in constants 2020-02-07 10:54:57 -05:00
Matthew Brown
4e36f6caf5 Add explicit paths for included files
Fixes #2757
2020-02-07 09:06:15 -05:00
Matthew Brown
966336a475 Improve byref array handling 2020-02-06 23:52:27 -05:00
Matthew Brown
da541dbb51 Remove some unnecessary errors 2020-02-06 23:10:18 -05:00
Brown
e567f8c728 Fix #2752 - string casts can be implicit method calls, don’t remove automatically 2020-02-06 21:05:16 -05:00
Brown
23f8967fb5 Fix conditional class-string template replacement 2020-02-06 19:40:18 -05:00
Brown
2a0dd48dcd Fix bad type 2020-02-06 17:31:17 -05:00
Brown
d5f71bf529 Localise template checks to class being tested 2020-02-06 16:38:45 -05:00
Brown
54efbbe831 Fix bad assertion 2020-02-06 16:32:26 -05:00
Brown
9af12932b5 Add slash 2020-02-06 15:09:34 -05:00
Brown
6116b457ed Port over more fixes from template match refactor 2020-02-06 15:07:57 -05:00
Brown
0fd0d01d2b Improve class-string templating 2020-02-06 14:35:36 -05:00
Brown
638e90356a Add slash 2020-02-06 11:58:39 -05:00
Brown
a16e03d992 Fix #2756 - narrow assertion templated type 2020-02-06 11:49:15 -05:00
Brown
ffd04132ce Fix #2754 - use ext-ds stubs from PHPStan 2020-02-06 10:38:10 -05:00
Benjamin Morel
b486bd4c78 PDOStatement::fetchColumn() can return any scalar 2020-02-05 11:46:01 -05:00
Brown
50fc50fab0 Fix #2751 - allow static methods to inherit class templates 2020-02-05 11:19:40 -05:00
Matthew Brown
bbdb1254ad Add line break 2020-02-05 08:51:11 -05:00
Lars Moelleken
759cfe4555 add more impure function calls 2020-02-05 08:51:11 -05:00
Brown
8fb810350a Don’t cache no-effects hashes when checking for initialisations 2020-02-04 17:53:26 -05:00
Brown
4c83ca75b3 Fix #2738 - clear out property issues when modifying constructors 2020-02-03 16:43:25 -05:00
Matthew Brown
b3f6b56f9c Add support for @psalm-readonly-allow-private-mutation 2020-02-02 15:56:08 -05:00
Matthew Brown
93fc1b1cc7 Fix #2729 - allow mutation of otherwise-readonly properties 2020-02-02 15:35:12 -05:00
Matthew Brown
8d7fb2b415 Add config flag to support properties without a magic getter 2020-02-02 14:23:38 -05:00
Thomas Gerbet
6f6e26580a Remove non-existent $serverctrls parameter for \ldap_bind()
In a8e58b0ba0 a `$serverctrls` parameter
was incorrectly added to the \ldap_bind() function.

See php/doc-en#20.
2020-02-02 12:34:28 -05:00
Matthew Brown
43c7b00cd0 Fix #2734 - allow is_a to operate on templated class-strings 2020-02-02 12:26:28 -05:00
Matthew Brown
8db4bc7691 Improve formatting of intersection error messages
Also reduce false positives on intersections of templates
2020-02-02 12:25:24 -05:00
Matthew Brown
f981c61990 Add slashes 2020-02-02 11:04:29 -05:00
Matthew Brown
b67f661604 Fix #2735 - interpret template check in context of class-string generation 2020-02-02 10:51:18 -05:00
Matthew Brown
f0fc9cce5f Fix missing param doc 2020-02-01 18:24:09 -05:00
Matthew Brown
d0b87b6cb0 Fix #2723 - use magic method return type where necessary 2020-02-01 18:21:32 -05:00
Matthew Brown
6dbb911da1 Fix templating class-string unions 2020-02-01 15:02:44 -05:00
Orklah
e48dc2d158 small stubs changes for reflection 2020-02-01 12:54:43 -05:00
Matthew Brown
292f6e797f Only make directly-assertable things possibly-undefined
Ref #2724
2020-02-01 10:58:13 -05:00
Brown
3b6f53a356 Revert "Fix #2724 - make sure behaviour is not dependent on array type"
This reverts commit 1df03b0ff2.
2020-01-31 17:25:15 -05:00
Brown
1df03b0ff2 Fix #2724 - make sure behaviour is not dependent on array type 2020-01-31 16:46:05 -05:00
Brown
97343c3eb8 Fix unnecessary param 2020-01-31 16:36:46 -05:00
Brown
adbe44d7bb Revert countable checks 2020-01-31 15:24:44 -05:00
Brown
66227f9b7f Fix #2727 - callable arg checks should obey ignore_falsable_return 2020-01-31 13:58:56 -05:00
Brown
34408a892c Support has-at-least type in negation 2020-01-31 13:13:50 -05:00
Brown
37765098e9 Fix #2725 - allow empty checks on objects that implement countable 2020-01-31 12:55:33 -05:00
Brown
8f95c5679e Fix #2720 - allow throwing self 2020-01-30 18:00:31 -05:00
Brown
b46f219c51 Do better inference for array_map return type 2020-01-30 17:43:13 -05:00
Brown
9405314222 Always Be Cloning 2020-01-30 17:22:40 -05:00
Brown
216d9256a1 Allow templated array_map callable inference
Fixes #2719
2020-01-30 17:13:46 -05:00
Philip Hofstetter
f6983fd883 allow setting php version from config or composer.json
if a composer.json is present and a PHP version requirement is
configured, we set the php version to the minimal PHP version that
satisfies the composer requirement.

Additionally, this adds a `phpVersion` attribute to the <psalm> tag. If
that's set, it takes precedence over what has been detected in
composer.json.

And finally, the --php-version command line flag continues to work and
takes precedence over the setting in the <psalm> tag

this fixes #2628
2020-01-30 08:48:53 -05:00
Matthew Brown
6c7d1b4e64 Ignore nullable return DomNodeList/DomNameNodeMap::item 2020-01-29 23:53:47 -05:00
Matthew Brown
5eb2ebc508 Add more type-system protections for bad array args 2020-01-29 23:41:17 -05:00
Matthew Brown
2829530ea6 Fix #2713 - allow interface with __invoke to be called 2020-01-29 22:33:28 -05:00
Matthew Brown
989123f82e Fix line length 2020-01-29 22:31:23 -05:00
Matthew Brown
933dff9e20 Fix #2712 - allow __toString to have more specific type 2020-01-29 22:28:40 -05:00
Matthew Brown
4b7780905e Improve reconciliation logic once more 2020-01-29 22:00:20 -05:00
Matthew Brown
06ffa24c26 Fix assertions to be better 2020-01-29 21:46:44 -05:00
Matthew Brown
2aebc522f1 Fix #2705 - mark by-ref args as used if not variables already 2020-01-29 21:46:30 -05:00
Matthew Brown
e92656c4cb Fix #2707 - reconcile object equality properly 2020-01-29 21:25:44 -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
4489b7169d Allow possibly-false return for DOMDocument::saveXML
Fixes #2714
2020-01-29 21:03:34 -05:00
Matthew Brown
c2f1b3b700 Use slightly cleaner way of sorting file issues 2020-01-29 09:00:13 -05:00
Philip Hofstetter
8f8672dd6b
do not corrupt internal state when a baseline is present (#2710)
this fixes #2709
2020-01-29 08:53:58 -05:00
Pavel Batečko
ecf85aef12
Add generic definition of DOMNamedNodeMap (#2703)
* Fix #2638 - propagate phantom classes to recursive calls to Scanner::queueClassLikeForScanning()

* Add generic definition of DOMNamedNodeMap
2020-01-29 08:39:07 -05:00
Matthew Brown
1dc1ebe23a Remove unused variable 2020-01-27 23:19:03 -05:00
Matthew Brown
ff01f41b44 Allow strings in assert annotation 2020-01-27 23:15:50 -05:00
Matthew Brown
5c3ec7a531 Fix #2696 - make sure static property references are prevented in pure functions 2020-01-27 22:55:20 -05:00
Matthew Brown
5f7730c12e
Add slash 2020-01-27 12:26:06 -05:00
Brown
15808458cc Better understand nesting loops and switches
Fixes #2700
2020-01-27 12:17:12 -05:00
orklah
563032c5f2 List notation in callmap (#2693)
* improve multiple return types with list<> + Exception::getTrace details

* fix broken syntax

* seems like changing libxml_get_errors return type angered the CI God

* revert array_count_values
2020-01-27 09:13:15 -05:00
Matthew Brown
dec274a1fe Fix list scanning 2020-01-27 09:07:22 -05:00
Philip Hofstetter
5774cfed7d mark additional impure functions (#2699)
both `fflush` and `vprintf` have very similar cousins already declared
as having side-effects.

This fixes #2687
2020-01-27 08:12:40 -05:00
Barney Laurance
4a4c0f1362 Clarify documentation of --diff and --diff-methods (#2680)
* Clarify documentation of --diff and --diff-methods

* Save Psalm cache in CircleCI
2020-01-25 10:50:11 -05:00
Matthew Brown
8c89760ff3 Use more accurate type for large arraya
Fixes #2690
2020-01-25 10:38:23 -05:00
Brown
c3a989f6a8 Fix bad var 2020-01-24 15:44:18 -05:00
Brown
c09f97ed6e Fix #2691 - allow list to be a callable maybe 2020-01-24 15:09:06 -05:00
Brown
38e9e8ba87 Register methods as used 2020-01-24 14:53:32 -05:00
Brown
548c9f7e65 Remove unused var 2020-01-24 14:09:25 -05:00
Brown
9f077f5aec Fix formatting 2020-01-24 14:08:01 -05:00
Brown
53b0650c6c Fix #2688 - foreach loop evaluation should allow changing loop var 2020-01-24 13:55:30 -05:00
Brown
faf6afdce8 Support call_user_func evaluation
Fixes #726
2020-01-24 13:34:50 -05:00
orklah
ef07e55deb add list<> notation in stubs (#2675)
* add list<> notation in stubs

* change phpdoc to be compatible with expected list<>

* change interface phpdoc to be compatible with expected list<>

* revert array_chunk => special case to handle with preserve keys.

* change array_chunk return to match both behaviour

* revert list<> notation in parameters where not required
2020-01-24 13:17:36 -05:00
Brown
dbdf7473f4 Fix abstract trait method implementation errors when using self 2020-01-24 11:15:35 -05:00
Brown
34d73e7243 Fix #2685 - always evaluate $a++ in unknown call 2020-01-24 10:32:28 -05:00
Matthew Brown
3af48347a9 Bind template params for IteratorIterator 2020-01-24 09:18:31 -05:00
Matthew Brown
efd46b35c5 Fix signatures 2020-01-24 09:10:42 -05:00
Matthew Brown
c893bd6a6b Add IteratorIterator generics 2020-01-24 08:58:52 -05:00
Matthew Brown
c87b19eeb0 Fix #2681 - no error after empty check on literal value 2020-01-23 22:26:49 -05:00
Brown
0ffb833bf3 Fix #2677 - use better assertion for null coalesce 2020-01-23 14:52:35 -05:00
Brown
da43b8188f Fix #2632 - detect invalid by-ref assignments in pure functions 2020-01-23 14:21:34 -05:00
Brown
0ac20e76c4 Fix #2631 - evaluate purity of uasort closure 2020-01-23 13:49:15 -05:00
Brown
311164f5ee Fix #2679 - session_start is impure 2020-01-23 10:26:11 -05:00
Matthew Brown
fa65ab8168 Add support for Github Actions output
Fixes #2678
2020-01-23 07:14:48 -05:00
SignpostMarv
dc80880a80 check if phpstorm meta path is a file or directory (#2643)
* check if phpstorm meta path is a file or directory, making a note if it was a directory, re: #2640

* import is_file()

* overcautiously glob into meta directory
2020-01-22 11:06:06 -05:00
Brown
e68ca6a20b Fix #2661 - catch invalid array_push on property 2020-01-22 09:57:59 -05:00
Matthew Brown
947765c1c6 Improve count checks slightly 2020-01-22 07:51:24 -05:00
Ben Davies
5139d61171 remove unnecessary loops (#2671) 2020-01-22 07:42:00 -05:00
Matthew Brown
8202af957d Index issues by file to reduce some lookups 2020-01-21 21:07:44 -05:00
Brown
0132b3789b Fix #2665 - warn about abstract class interface inheritance issues 2020-01-21 11:46:51 -05:00
Brown
a2e1dfd64e Fix #2667 - don’t check inherited signature return types for accuracy 2020-01-21 11:07:44 -05:00
Brown
36f5c51f01 Allow unpacking of list args with known elements 2020-01-21 10:13:37 -05:00
Matthew Brown
504de0a9ce Catch more UnanalyzedFileExceptions to prevent LSP crash
Fixes #2633
2020-01-20 23:27:56 -05:00
orklah
f2802b6862 fix typo (#2663) 2020-01-20 23:19:48 -05:00
Matthew Brown
db7b537bd1 Fix missing class 2020-01-17 13:19:57 -05:00
Matthew Brown
8ccd4860e3 fclose should treat resource as passed-by-reference 2020-01-17 13:12:00 -05:00
Matthew Brown
1c8af2fdc7 Fix #2658 - catch exceptions thrown inside catch 2020-01-17 12:05:37 -05:00
Matthew Brown
7f093ca8ed Fix #2626 - allow assertions on resource types
Also fixes #2266
2020-01-17 11:55:16 -05:00
Matthew Brown
1697115861 Only set from docblock if not mixed 2020-01-17 10:34:13 -05:00
Matthew Brown
a840743015 Fix #2625 - set template as type from docblock 2020-01-17 10:27:00 -05:00
Matthew Brown
b582c49f51 Fix #2645 - add workarounds for some edgecases 2020-01-17 10:25:05 -05:00
Matthew Brown
2c48d42904 Allow destructuring of callable array
Fixes #2653
2020-01-17 10:02:58 -05:00
Matthew Brown
471d7610f0 Fix #2644 - improve type inference of autoloaded constants 2020-01-17 09:52:43 -05:00
Matthew Brown
24e1d5446c Fix #2642 - merging two explicit lists is still a list 2020-01-17 09:31:08 -05:00
Matthew Brown
adf230e873 Fix #2636 - allow non-empty-list in assert annotation 2020-01-17 09:06:34 -05:00
Alexander Wühr
f9560009ca Allow false as \PDO::fetch return type (#2647) 2020-01-17 08:48:08 -05:00
Matthew Brown
c50fa27025 Identify trait method access level violations as less serious 2020-01-17 00:28:08 -05:00
Matthew Brown
be6cd0f8c6 Fix generation of files in non-psr directory 2020-01-16 23:24:53 -05:00
Matthew Brown
257ebfd205 Improve trait method mismatch failure rules 2020-01-16 22:36:30 -05:00
Bruce Weirdan
17857163fc Modular config files (#2635)
This change introduces an option to have the configuration split across
several files using standard XInclude tags. This may be useful for more
complex configs, or to include auto-generated parts into a manually
written config file.
2020-01-16 15:57:52 -05:00
Tyson Andre
6612bb74a1 Use floor() instead of round() for long progress percentage (#2634)
PHPUnit and many other applications use floor.
Otherwise, the second-last lines would show 100% despite not being
complete.

```
\sprintf(
    ' %' . $this->numTestsWidth . 'd / %' .
    $this->numTestsWidth . 'd (%3s%%)',
    $this->numTestsRun,
    $this->numTests,
    \floor(($this->numTestsRun / $this->numTests) * 100)
)
```
2020-01-16 15:57:09 -05:00
Alfred Bez
619ced135b fixed RarArchive signatures (#2641) 2020-01-16 11:01:14 -05:00
Pavel Batečko
1b0eba74fd Allow NULL $contextnode in DOMXPath::query() (again) (#2637) 2020-01-16 08:35:36 -05:00
Brown
d434f7fb9d Add list identification for late-resolved constants
Fixes #2624
2020-01-15 11:54:01 -05:00
Brown
1b551b805b Fix #2627 - infer arrow function effects for array_filter 2020-01-15 11:40:49 -05:00
Brown
c07fd13f2b Fix #2623 - prevent crash when combining class strings in constants 2020-01-15 11:26:58 -05:00
Matthew Brown
389af1bfc7 Fix #2618 setting list param from docblock 2020-01-14 22:46:19 -05:00
Matthew Brown
4a03c4aedd Fix impossible isset checks 2020-01-14 21:54:02 -05:00
Matthew Brown
c3edbdbc19 Allow checking $_SESSION for null without altering type 2020-01-14 21:51:04 -05:00
Matthew Brown
1202ba45ef
Fix blank line 2020-01-14 18:51:46 -05:00
Brown
df8f2085f0 Change constant type to be more forgiving 2020-01-14 18:39:15 -05:00
Brown
de7a870509 Add better mixed check 2020-01-14 18:38:02 -05:00
Brown
0f6b61d62d Clone isset type before contradicting 2020-01-14 18:28:32 -05:00
Brown
3fd70a9c88 Only set if non-null 2020-01-14 17:03:58 -05:00
Brown
adc658901a Improve inference of constant() calls 2020-01-14 16:56:09 -05:00
orklah
b09869b7c6 callmap changes (#2612)
* set_error_handler return the same type as its param

* a constant can only have scalars, array of scalars or null

* a constant can only have scalars, array of scalars or null
2020-01-14 16:55:25 -05:00
Brown
1ccababcb7 Track list-ness of constant arrays
Fixes #2621
2020-01-14 12:13:41 -05:00
Brown
c79a8ecbc2 Fix dumb 2020-01-14 10:55:07 -05:00
Brown
fcc7d896a0 Commit actual fix 2020-01-14 10:53:54 -05:00
Matthew Brown
42073a800a Remove unevaluated code 2020-01-14 00:55:56 -05:00
Matthew Brown
e1daf26202 Improve support for null coalesce checks 2020-01-14 00:53:38 -05:00
Matthew Brown
b0073d4558 Fix #2614 - prevent isset($string) 2020-01-13 21:27:09 -05:00
Matthew Brown
ef3c2d30c9 Fix #2613 - allow docblock-defined object-like as non-empty-array 2020-01-13 21:05:30 -05:00
Brown
5d15ef062e Fix phpcs 2020-01-13 17:28:00 -05:00
Brown
6c771e5dd3 Prevent crashes under PHP 7.3 on macs in Language server mode 2020-01-13 16:50:09 -05:00
Brown
eb7c3dcc11 Fix #2611 - fix combination of inferred closure return types 2020-01-13 10:23:58 -05:00
Tyson Andre
7a65eb1da9 Fix required parameter after optional in Psalm (#2609)
Psalm supports php 7.1 at minimum, so this is no longer necessary.
2020-01-12 12:46:08 -05:00
Тальгат Хайруллов
39a822759d #2579 TooManyArguments was triggered if the variadic function declared at the autoloader file. Fixed. (#2580) 2020-01-12 11:33:38 -05:00
Mark A. Hershberger
fbc2c21c9b bug: #2103 -- throw error if directories are given instead of file (#2605)
* bug: #2103 -- throw error if directories are given instead of file

* use global is_dir
2020-01-12 10:53:12 -05:00
Pavel Batečko
87debfe954 Support suppressing all issues with @psalm-suppress all (#2584)
* Support suppressing all issues using @psalm-suppress all

* Document @psalm-suppress all
2020-01-12 10:38:32 -05:00
SignpostMarv
9b2ceba2db removing trailing comma in function call, not detectable by php-cs-fixer re: FriendsOfPHP/PHP-CS-Fixer#4135 (#2597) 2020-01-11 16:00:38 -05:00
Matthew Brown
39f0def7bf Add null check 2020-01-11 15:59:28 -05:00
Matthew Brown
131fb97663 Fix #2594 - forbid isset check on null 2020-01-11 15:58:40 -05:00
Matthew Brown
7b887efc2c Fix #2547 - use better conditional check 2020-01-11 12:33: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
Matthew Brown
85966d8a21 Fix #2577 - fix list cast to array 2020-01-11 11:42:09 -05:00
Matthew Brown
2ae85f7c8b Fix #2593 - don’t crash with bad @param-out annotation 2020-01-11 10:47:31 -05:00
Matthew Brown
1b7b71f2ca Fix #2591 - always remove changed var from parent clauses
Even when there are no child clauses due to an assertion
2020-01-10 23:46:45 -05:00
Brown
5ddcab1003 Fix subtraction of string from numeric 2020-01-10 18:05:45 -05:00
Brown
df8e3845e5 Fix #2590 - allow null argument for DateTime when no second arg passed 2020-01-10 15:53:15 -05:00
Brown
03030d4887 Fix #2583 - don’t convert scalar terms in @method annotations 2020-01-10 11:29:18 -05:00
Brown
2c7197ab4b Fix #2578 - improve inference of functions beginning with assert 2020-01-09 15:45:17 -05:00
Brown
bd9142f131 Fix #2574 - remove assertions after increment 2020-01-09 11:51:56 -05:00
Matthew Brown
bd7f342491 Add constant definitions 2020-01-08 23:48:42 -05:00
Brown
55bf6333af Fix addition of Psalm classes 2020-01-08 17:47:30 -05:00
Brown
eb7a8ae8d2 Fix sorting 2020-01-08 17:43:49 -05:00
Brown
6b43c41ea3 Add file-defined functions 2020-01-08 17:40:50 -05:00
Brown
7482b9e56f Emit all stubs discovered by Psalm during analysis
Fixes #827
2020-01-08 17:23:40 -05:00
Matthew Brown
146dd461ef Fix #2569 - improve template return type checks 2020-01-07 21:08:13 -05:00
Brown
adfb488986 Fix #2565 - prevent infinite recursion when analysing file with @mixin annotations that reference each other 2020-01-07 17:06:44 -05:00
Brown
55aceb2b6d Add if 2020-01-07 13:18:24 -05:00
Brown
024ec38aa1 Fix #2567 - still remap params in some circumstances 2020-01-07 13:01:16 -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
Matthew Brown
90d6b73fd8 Fix taint analysis of binary operations 2020-01-07 08:50:31 -05:00
Matthew Brown
8f3d325bbc Fix comparison 2020-01-07 02:24:21 -05:00
Matthew Brown
1f777bec0e Capture non-empty-string from concat more effectively 2020-01-07 01:44:12 -05:00
Matthew Brown
ce5917c6fb Add better string detection 2020-01-07 01:21:29 -05:00
Matthew Brown
b351df0483 Fix typo 2020-01-07 01:06:51 -05:00
Matthew Brown
2cd7f74efb Fix #2554 - treat templated class string as proper subtype of class string 2020-01-07 00:39:16 -05:00
Matthew Brown
eaae84c7f8 Fix concat emptiness 2020-01-06 21:30:19 -05:00
Matthew Brown
cc9e0fab67 Prevent string being used in non-empty-string location 2020-01-06 20:57:57 -05:00
Brown
07aaa3f99d Don’t complain about method mismatches for @mixin 2020-01-06 18:04:28 -05:00
Dusk
63dea52e76 Add support for most PDOStatement fetch modes (#2553)
Flags like PDO::FETCH_CLASSTYPE and PDO::FETCH_PROPS_LATE aren't
supported yet.

(in re. #2529)
2020-01-06 16:41:52 -05:00
Brown
5c45221bdc Improve reconciliation of ||
Ref #2426
2020-01-06 16:37:44 -05:00
Brown
578b90c2da Improve naming of variables 2020-01-06 16:03:17 -05:00
Brown
49d9dd12b6 Change $op_ to $right in a few more places 2020-01-06 15:44:48 -05:00
Brown
9149f468e6 Change var name 2020-01-06 15:42:06 -05:00
Brown
bd2cbf28e3 Add parent issue type for UndefinedMagicMethod 2020-01-06 14:24:20 -05:00
Brown
083fbc55e1 Add more specific UndefinedMagicMethod issue 2020-01-06 14:23:33 -05:00
Brown
8e786a17dd Deal with a reconciled var more accurately
Ref #2426
2020-01-06 11:09:07 -05:00
Brown
cd0d118463 Fix count 2020-01-06 10:40:46 -05:00
Matthew Brown
8c71da75af Add fix to more places 2020-01-06 09:47:14 -05:00
Matthew Brown
a212375343 Fix possibly bad property fetch 2020-01-06 09:21:42 -05:00
Matthew Brown
137650fe6f Fix #2556 - don’t remap params if they’ve already been remapped once 2020-01-06 09:18:16 -05:00
Matthew Brown
4888ae67a6 Fix #2558 - remove wedge clauses when they’re the only thing left 2020-01-06 08:56:50 -05:00
Matthew Brown
4e85967184 Fix tests 2020-01-05 21:58:18 -05:00
Matthew Brown
867511d7fd Use more specific error magic properties 2020-01-05 21:07:26 -05:00
Matthew Brown
f48ecda295 Fix ref 2020-01-05 18:53:24 -05:00
Matthew Brown
2fb5a9d326 Few small improvements 2020-01-05 18:37:07 -05:00
Matthew Brown
d4ef5c2a4a Fix read flags 2020-01-05 17:20:09 -05:00
SignpostMarv
fbf66ba7f6 Typecast bool to int (#2550)
* adding specific checks for typecasting booleans, re: vimeo/psalm#2548

* satisfying phpcs

* amend check to use psalm types rather than php-parser types

* implementing tests for typecasting bools to int

* satisfying phpcs
2020-01-04 16:36:19 -05:00
Matthew Brown
37810b5a44 Fix #2552 - add parse error when encountering empty array values 2020-01-04 16:33:02 -05:00
Matthew Brown
8ecb8555e2 Fix count 2020-01-04 13:12:22 -05:00
Matthew Brown
37fb15250c Add check for only simplest conditionals 2020-01-04 13:09:55 -05:00
Matthew Brown
8cbc26c2f1 Add range checks to identify for loops that always enter 2020-01-04 13:05:23 -05:00
Matthew Brown
9fa2db1b6c Move Union::getTypes to Union::getAtomicTypes 2020-01-04 12:20:26 -05:00
Matthew Brown
ba6d0df048 Fix #2546 properly 2020-01-04 11:16:53 -05:00
Brown
fb48db9163 Remove unused property 2020-01-03 13:10:24 -05:00
Brown
996053cca6 Fix #2545 - fix bug when coming back after analysing method call in constructor 2020-01-03 11:29:45 -05:00
Brown
0e39759ed6 Improve solution to #2546 slightly 2020-01-03 10:56:47 -05:00
Brown
4263417ac3 Fix #2546 - ignore vars set inside loop 2020-01-03 10:33:32 -05:00
Matthew Brown
df33405635 Seal properties and methods whenever @method/@property is used 2020-01-03 08:44:52 -05:00
Matthew Brown
bf310fb326 Seal where a mixin is given 2020-01-03 08:34:11 -05:00
Matthew Brown
d5d4a1826d Add initial support for @mixin Foo 2020-01-02 23:50:19 -05:00
Brown
9177b410cb Fix reconciliation of callable 2020-01-02 16:59:19 -05:00
Brown
bfbb9b2b34 Un-nest some logic 2020-01-02 16:59:19 -05:00
Brown
9d8706dbad Check for posix existence before using threads
Fixes #2335
2020-01-02 15:30:02 -05:00
Brown
5f5a942a32 Improve handling of interface-implementing edge-case 2020-01-02 15:24:03 -05:00
Brown
de0fad2197 Fix #2541 - check variable var assignment 2020-01-02 14:07:02 -05:00
Brown
ca1e65b29b Handle iterators better 2020-01-02 10:41:43 -05:00
Brown
314db95cee Add support for sort param 2020-01-02 10:27:13 -05:00
Matthew Brown
e68fd02e80 Refine class string after callable array check 2020-01-02 08:31:19 -05:00
Matthew Brown
25e7039f02 The current method is used
Fixes #2540
2020-01-01 18:33:12 -05:00
Matthew Brown
033b610770 Fix composer checks once more 2020-01-01 17:29:30 -05:00
Matthew Brown
872365f444 Fix #2539 - use unaliased parent class name 2020-01-01 17:23:13 -05:00
Matthew Brown
a69903cd92 Fix dumb 2020-01-01 15:22:37 -05:00
Matthew Brown
690209d8e5 Add sort function stub 2020-01-01 15:07:41 -05:00
Matthew Brown
086d141f5c Fix #2537 - allow complex intersection templates to be preserved 2020-01-01 13:51:54 -05:00
Matthew Brown
d175abe0f0 Improve templating for intersections 2020-01-01 13:31:41 -05:00
Matthew Brown
4630d19d45 Fix psalm running 2020-01-01 12:49:12 -05:00
Matthew Brown
4021d673bd Fix #2536 - grab binary op left assertions after analysis 2020-01-01 12:45:24 -05:00
Matthew Brown
d7fb64bbb7 Fix #2349 - use function suppressed issues 2019-12-31 09:16:49 -05:00
Matthew Brown
f79088a955 Fix undefined var 2019-12-31 09:13:18 -05:00
Matthew Brown
16b8edd583 Fix #2409 - use more robust assertion parsing 2019-12-31 09:10:14 -05:00
Matthew Brown
5bd9b988fb Fix #2494 - don’t use extended name for anonymous classes 2019-12-31 08:46:52 -05:00
Matthew Brown
87fec3e6fe Fix #2505 - don’t attempt to analyse classes that weren‘t properly scanned 2019-12-31 08:04:51 -05:00
Matthew Brown
02fd1659ef Ignore serialize/unserialize methods
Fixes #2511
2019-12-31 07:56:35 -05:00
Matthew Brown
79be178146 Add associative-array as an alias of array 2019-12-30 17:01:10 -05:00
Matthew Brown
bc8952c793 Add Phan updates 2019-12-30 16:58:34 -05:00
Matthew Brown
8f504f9664 Fix style 2019-12-30 16:42:34 -05:00
Matthew Brown
ec292f58dc Move explode handling into its own file 2019-12-30 16:39:37 -05:00
Matthew Brown
b7fa15f89d Port over updates from PHPStan 2019-12-30 15:55:15 -05:00
Matthew Brown
c14d1f7d7e Fix order 2019-12-30 15:55:15 -05:00
Matthew Brown
53a2f77d00 Add better return type provider for PDO statement
Fixes #2529
2019-12-30 11:34:24 -05:00
Matthew Brown
44441042f0 Fix style things 2019-12-30 11:07:04 -05:00
Matthew Brown
366e2d30a3 Improve assertions support a bit more 2019-12-30 10:48:50 -05:00
Matthew Brown
19faa31865 Allow assertions on nested properties 2019-12-30 10:01:31 -05:00
Matthew Brown
c79ba0b09e Include non-empty-string type in more places 2019-12-30 07:25:36 -05:00
Matthew Brown
023c4bcef0 Fix #2532 - fix templating inside class method when calling templated method 2019-12-30 07:25:36 -05:00
Matthew Brown
508c2e268a Process phpstan-template in class docblocks 2019-12-29 16:08:09 -05:00
Matthew Brown
2b88261ecd Fix templated assertion cc @vasily-kartashov
This is a good reason for you to skip 3.8.1
2019-12-29 11:57:54 -05:00
Bruce Weirdan
7d3dd47efa Added support for preg_grep (#2523) 2019-12-29 11:05:08 -05:00
Matthew Brown
b375ebf06f Fix test 2019-12-29 10:29:03 -05:00
Matthew Brown
26876b9a13 array_push shouldn’t change list type 2019-12-29 10:20:44 -05:00
Matthew Brown
d3fb0181cb Fix #2527 - no crash when template cannot be resolved 2019-12-29 08:45:42 -05:00
Matthew Brown
0c7851ae21 Fix #2526 - always check for array assignment in assignop 2019-12-29 08:36:46 -05:00
Matthew Brown
55c2f7faa2 Fix #2508 - don’t replace templated types with generic ones inside own function 2019-12-28 18:38:02 -05:00
Matthew Brown
ce9435da19 Fix #2521 - use correct context class when analysing trait 2019-12-28 15:56:26 -05:00
Bruce Weirdan
4110ec351b Make travis green again (#2518)
* Bumped phpspec/prophecy version to prevent 7.4 deprecations

* Fix DOMDocument::$config type

This property was documented as containing DOMConfiguration object, but
in fact always returned `null` (see [php source](ee80567a83/ext/dom/document.c (L542))).

DOMConfiguration class is removed in PHP 8.

* Dropped unused use

* Allow to set PHP 8.0 as current version

* Fix CallMap issues for PHP 8.0

- Use both major and minor version to load deltas
- Don't load non-existent deltas
- Stop at lowest possible delta
2019-12-27 19:06:09 -05:00
Matthew Brown
6a6a6ab2d7 Fix dumb 2019-12-27 16:51:49 -05:00
Matthew Brown
982fe627e0 Fix #2515 - allow chained assertions on @psalm-mutation-free methods 2019-12-27 16:44:55 -05:00
Matthew Brown
1d2fefd647 Preserve more information after removing types 2019-12-27 15:26:01 -05:00
Matthew Brown
9a04d93cf9 Fix #2352 - treat hexdec return type a bit better 2019-12-27 14:14:49 -05:00
Matthew Brown
4a28525275 Fix removal of traversable from iterable
Fixes #2509
2019-12-27 13:01:44 -05:00
Matthew Brown
068afa09d3 Add very basic implementation for class-string-map
Fixes #1969
2019-12-27 12:49:28 -05:00
Matthew Brown
b78f273ccf Improve handling of template params a smidge 2019-12-27 11:49:44 -05:00
Matthew Brown
2f2cd85a6a Identify invalid static property array assignment 2019-12-27 10:34:51 -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
6b81f8c64a Fix #2506 - use correct flag when checking classes after analysis 2019-12-24 01:02:34 +00:00
Matthew Brown
ee35db5a3b Refine assignment somewhat 2019-12-22 12:43:57 +00:00
Matthew Brown
141bfd313f Improve handling of assignments in arrays 2019-12-22 12:36:16 +00:00
Matthew Brown
8bd68608fa Fix message 2019-12-22 11:08:47 +00:00
Matthew Brown
8fc3c3b8cd Improve removing types from callable 2019-12-22 10:29:00 +00:00
Matthew Brown
3be8e4c6ba Improve string comparison negation 2019-12-22 02:09:22 +00:00
Matthew Brown
4c8730c5a3 Improve handling of unset array, ensuring that keys don’t persevere 2019-12-22 01:42:39 +00:00
Bruce Weirdan
ede1076039 Dropped unused use (#2495) 2019-12-21 00:58:05 +00:00
Matthew Brown
946b4f73e6 Fix #2493 - don’t crash when provided function doesn’t exist 2019-12-21 00:34:31 +00:00
Bruce Weirdan
7e8268fe94 Drop non-existent param from docblock (#2492)
I wonder why psalm didn't catch it.
2019-12-21 00:14:22 +00:00
Matthew Brown
59aeb6b6c3 Fix #2490 - allow overriding renamed trait methods in subclass 2019-12-20 20:11:27 +00:00
Matthew Brown
8c1638efc5 Fix tests once more 2019-12-20 19:37:36 +00:00
Matthew Brown
3d03da271d Fix tests to give more accurate locations 2019-12-20 18:18:26 +00:00
Matthew Brown
395cac0e0b Add specific exception 2019-12-20 18:08:53 +00:00
Matthew Brown
e475a1826c Issues with non-abstract methods should always be MethodSignatureMismatches 2019-12-20 18:08:35 +00:00
Matthew Brown
a5434aabfe Fix #2491 - report trait issues at the most local place 2019-12-20 17:57:31 +00:00
Matthew Brown
1b54d058aa Fix #2488 - add support for @phpstan- annotations 2019-12-20 10:49:10 +00:00
Matthew Brown
a4191171bf Fix #2483 - treat intersecting PHPDocs from interfaces better 2019-12-20 01:42:57 +00:00
Matthew Brown
d7b99148be Add support for JUnit report type
Fixes #2485
2019-12-19 20:18:09 +00:00
Matthew Brown
15cd62d332 Fix #2484 - add support for spaces in assert-if-true types 2019-12-19 19:24:26 +00:00
Matthew Brown
ab03ac06f4 Add support for spread operator before type as well
Ref #2429
2019-12-19 00:29:01 +00:00
Matthew Brown
cc3df7d6be Remove errant comma 2019-12-18 23:50:57 +00:00
Matthew Brown
af28d650f3 Fix #2408 - existing offsets checked with isset should be valid 2019-12-18 23:48:25 +00:00
Matthew Brown
456aa1c569 Fix #2468 - add support for zipping arrays 2019-12-18 18:14:02 +00:00
Matthew Brown
734ad02203 Fix #2476 - flesh out iterable params 2019-12-18 17:19:54 +00:00
Matthew Brown
9d8ca08fb9 Fix #2479 - analyse undefined function arguments too 2019-12-18 16:37:48 +00:00
Matthew Brown
11433dc9d0 Fix references 2019-12-18 14:43:15 +00:00
Matthew Brown
cb797c6159 Fix inherited class methods as well
Ref #2478
2019-12-18 14:39:37 +00:00
Matthew Brown
49a3f89526 Fix #2478 - process trait template inheritance sensibly 2019-12-18 13:58:37 +00:00
Brown
e551b24843 Classes that just reference themselves aren’t used 2019-12-16 11:46:10 -05:00
Matthew Brown
bf67c036aa Fix #2474 - treat free-standing binaryops as ifs instead 2019-12-16 08:32:00 -05:00
Matthew Brown
bdbc758ddc Fix #2475 - allow iterable covariance 2019-12-16 07:16:35 -05:00
Matthew Brown
529efaa29c Fix #2473 - allow array_map to work with callables returning static 2019-12-15 19:55:20 -05:00
Matthew Brown
7cb021a268 Fix the fix 2019-12-15 14:11:24 -05: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
3ef93fd795 Add slash 2019-12-15 13:34:12 -05:00
Matthew Brown
090ad90de3 Fix build issues 2019-12-15 13:28:38 -05:00
Matthew Brown
72f3c306d7 Fix #2471 - don’t erroneously template class-strings 2019-12-15 13:23:04 -05:00
Matthew Brown
1a92e98dd3 Warn about more generic callables 2019-12-14 11:55:26 -05:00
Matthew Brown
ce2e5b27c0 Fix #2470 - only parameterise constructors according to inherited params 2019-12-14 11:38:09 -05:00
Matthew Brown
c7a3ba9e4a Refine callable type 2019-12-14 10:47:20 -05:00
Matthew Brown
c3d8315ab9 Don’t inherit parameter covariance 2019-12-14 10:06:40 -05:00
Matthew Brown
797a059a84 Prevent static methods using class instance template types 2019-12-14 09:40:09 -05:00
Matthew Brown
b48021dbfd Allow null return on template with null as type
Ref #2466
2019-12-13 21:56:43 -05:00
Matthew Brown
f40b6625eb Fix #2431 - allow null in template defaults 2019-12-13 21:40:09 -05:00
Brown
2469f04715 Improve reconciliation of arrays with constant offsets 2019-12-13 17:17:14 -05:00
Brown
6d02aa86e8 Reconcile string emptiness a bit better 2019-12-13 15:51:54 -05:00
Matthew Brown
c9b5e96b0f Fix ref 2019-12-13 08:11:04 -05:00
Matthew Brown
ca5f8fabdc Fix #2464 - null coalesce shouldn’t allow undefined vars 2019-12-13 08:06:40 -05:00
Matthew Brown
6ff312fe13 Fix test 2019-12-12 11:43:03 -05:00
Matthew Brown
1df77a9f43 Only mark vars as reconcilable if they can be memoized 2019-12-12 11:24:47 -05:00
Matthew Brown
f45014d403 Fix #2460 - allow assertions on immutable method calls 2019-12-12 09:32:33 -05:00
Matthew Brown
8f25183784 Fix #2459 - don’t add assertions to parent context unnecessarily 2019-12-12 00:37:00 -05:00
Brown
05783eb616 Find issues with impossible property values 2019-12-11 17:08:02 -05:00
Brown
612f74f481 Clean up static property reconciliation 2019-12-11 15:05:09 -05:00
Brown
6b56a0239d Improve handling of assertions on static properties 2019-12-11 14:06:09 -05:00
Brown
d2b99cbe77 Add possibly defined vars in binary op analysis 2019-12-11 13:09:27 -05:00
Brown
e476eed111 Fix issue where inside_conditional is forgotten 2019-12-11 12:06:10 -05:00
Brown
2f9b1ff665 Fix too-long line 2019-12-11 11:40:47 -05:00
Brown
e564d67214 Add support for simple default arrays in @method docblocks
Fixes #2455
2019-12-11 11:29:00 -05:00
Brown
79f3a5d371 Allow empty string parsing 2019-12-11 10:52:46 -05:00
Brown
3a7dd61889 Fix #2457 - allow psalm-type aliases to be used above return type 2019-12-11 10:30:40 -05:00
Brown
4b715cdbff Fix #2456 - ignore UnusedFunctionCall when function asserts 2019-12-11 10:13:22 -05:00
Matthew Brown
c27d0d953b Add null check 2019-12-11 00:38:28 -05:00
Matthew Brown
848cbbb487 Fix #2454 - build up template map to better understand passed-through data 2019-12-11 00:34:54 -05:00
Brown
2e322ee214 Don’t try to fix missing trait method params
Fixes #2427
2019-12-10 17:32:39 -05:00
Brown
b3cf9d3958 Catch circular references in constants
Fixes #2453
2019-12-10 16:16:44 -05:00
Brown
20049eb0b5 Fix #2437 - don’t worry about mixed templated param types 2019-12-10 14:58:26 -05:00
Brown
9d22f56560 Fix #2443 - templates are not valid PHPDoc 2019-12-10 14:03:51 -05:00
Brown
423288d2fe Fix negations of templated numeric 2019-12-10 10:55:24 -05:00
Matthew Brown
a3ab8e8973 Fix dumb 2019-12-10 09:47:17 -05:00
Matthew Brown
3faf1f8bc2 Improve int assertions 2019-12-10 09:44:38 -05:00