1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-17 11:56:59 +01:00
Commit Graph

2452 Commits

Author SHA1 Message Date
Brown
4415e0f69c Fix special case calling callable param with string non-global function
Fixes #3411
2020-05-19 15:48:31 -04:00
Matthew Brown
777b6e8d91 Simplify conditional 2020-05-19 15:07:30 -04:00
Brown
b5ae0167a2 Fix typo 2020-05-19 14:58:53 -04:00
Brown
b38d945b12 Cast null and false to empty string
Ref #3408
2020-05-19 14:53:06 -04:00
Brown
8becefda04 Forbid :: in object-like key name
Ref #3399
2020-05-19 14:38:46 -04:00
Šimon Podlipský
dc82243edc
Add RdKafka:flush() to CallMap (#3410) 2020-05-19 12:56:58 -04:00
Brown
0b2da18f1e Break up StatementsAnalyzer 2020-05-19 12:56:30 -04:00
Šimon Podlipský
47cf69ded1
Fix RdKafka maps (#3404)
Resolves #3388
2020-05-19 10:13:25 -04:00
Brown
666cc3b4c9 Fix BinaryOp analysis 2020-05-18 23:00:53 -04:00
Brown
8e5b330c5a Break apart CallAnalyzer 2020-05-18 22:57:00 -04:00
Brown
5b06c206e0 Move classes into deeper namespace 2020-05-18 22:52:33 -04:00
Brown
ace049a068 Beautify BinaryOpAnalyzer 2020-05-18 18:57:09 -04:00
orklah
478bb267d8
stubs for array_sum (#3395) 2020-05-18 17:23:21 -04:00
Brown
8c86d47eb7 Downgrade some PossiblyInvalidClone issues 2020-05-18 17:18:13 -04:00
Brown
4ca83ca30d Add slash 2020-05-18 17:05:47 -04:00
Brown
3a582dde8d Allow merging of numeric-string and literal string 2020-05-18 16:57:16 -04:00
Brown
2312523318 Support merging of numeric-string with literal 2020-05-18 16:56:09 -04:00
Brown
b62f646388 Fix #3391 - move_uploaded_file mutates 2020-05-18 16:26:08 -04:00
Evgeniy
04a576708c
Correct analyze clone expression (#3382)
* Correct analyze clone, add PossibleInvalidClone issue type

* Infer mixed type when possible incorrect clone

* Remove unused variable
2020-05-18 16:22:50 -04:00
Brown
ea0a99d3a8 Fix bad merge 2020-05-18 16:02:10 -04:00
Brown
5ee1487a01 Make ExpressionAnalyzer more beautiful 2020-05-18 15:13:27 -04:00
SignpostMarv
911ac2d363
Infer numeric-string from (string)$numeric (#3390)
* adding test for vimeo/psalm#3370

* check if typecast will result in numeric-string

* int & float as per examples in vimeo/psalm#3370
* numeric & numeric-string because they shouldn't lose numericness.

* satisfy phpcs

* adjusting assertions to reflect typecasting change
2020-05-18 13:42:47 -04:00
Brown
21798efed2 Fix #3388 - eliminate null after < 0 check 2020-05-18 08:52:44 -04:00
Mark Sch
9aa46221f6
Use pretty print for JSON reporting. (#3364)
* Use pretty print for JSON reporting.

* Use pretty print for JSON reporting.

* Use pretty-print option on CLI for BC.

* Change static:: const to self::

Co-authored-by: Matthew Brown <github@muglug.com>
2020-05-18 08:40:20 -04:00
orklah
3e7f5df7e1
Solve more cases when docblock rendering is not needed (#3387) 2020-05-18 07:16:18 -04:00
Matthew Brown
b0ffaf0077 Fix type coercion 2020-05-17 22:51:48 -04:00
RJ Garcia
fd15bfc65d
Infer Return Types for Arrow Functions #3376 (#3385)
* Infer Return Types for Arrow Functions #3376

- Made a small patch to check for closure or arrow
  function when attempting to infer the functions
  params
- Added new isExprClosureLike to start to consolidate
  all checks on closure/arrow fns

Signed-off-by: RJ Garcia <ragboyjr@icloud.com>

* Use better check

* Remove unused method

Co-authored-by: Matthew Brown <github@muglug.com>
2020-05-17 22:17:35 -04:00
orklah
dd4927a14c
Avoid regenerating docblock when no modification is made (#3374)
* Avoid regenerating docblock when no modification is made

* Generate empty docblock before, in case there was no docblock at all
2020-05-16 16:44:47 -04:00
Jefersson Nathan
f824cc380a
Add more test case scenario for @psalm-import-type (#3375)
* Add test case scenario for @psalm-import-type

Signed-off-by: Jefersson Nathan <malukenho.dev@gmail.com>

* Add fix for @psalm-import-type test

Signed-off-by: Jefersson Nathan <malukenho.dev@gmail.com>

* Add test for import ocross namespaces

Signed-off-by: Jefersson Nathan <malukenho.dev@gmail.com>

* Add tests for failing cases

Signed-off-by: Jefersson Nathan <malukenho.dev@gmail.com>
2020-05-16 16:43:35 -04:00
Matthew Brown
4dd0a2b775 Fix #3380 - allow comparisons between template param and empty array 2020-05-16 16:41:07 -04:00
Matthew Brown
f6342a40d9 Remove unnecesary conditional check for do
Fixes #3378
2020-05-16 16:32:36 -04:00
Nobu Funaki
abef8008bc
Fix InvalidCast after is_callable([$val, '__toString']) check (#3372)
Support is_callable() with an array argument similar to method_exists()
2020-05-16 08:50:43 -04:00
Brown
c62e08a88e Support intersection of type aliases 2020-05-15 16:18:52 -04:00
Brown
111303d913 Add non-empty-lowercase-string type 2020-05-15 10:18:05 -04:00
Brown
013467dc0e Add reference to ensure proper hydration 2020-05-15 00:31:55 -04:00
Brown
0086eb25a2 Remove duplicate types with @psalm-import-type 2020-05-15 00:16:20 -04:00
Brown
2d92943625 Add support for expansion of type aliases 2020-05-15 00:15:48 -04:00
Brown
9f3f7bb946 Consolidate ThreadData types 2020-05-14 23:44:22 -04:00
Brown
c212c03e40 Don’t stop analysing when encountering an UndefinedGlobalVariable
Fixes #3366
2020-05-14 22:51:51 -04:00
Brown
ae48c1895f Fix #3365 - add support for negated empty string checks 2020-05-14 22:09:37 -04:00
Brown
48504aa88c Pass through typa aliases where appropriate 2020-05-14 00:48:58 -04:00
Brown
006c6e09f1 Add more details to type alias creation 2020-05-14 00:41:50 -04:00
Brown
2327a0db6b Add TTypeAlias object with a creation path 2020-05-13 19:49:03 -04:00
Brown
190c9ce27e Use TypeAlias object to allow future extension 2020-05-13 19:29:59 -04:00
Brown
0fc3398631 Move parsing methods into internal namespace 2020-05-13 19:12:45 -04:00
Brown
2af0a17d03 Fix #3236 - allow use-checking of more methods starting with __ 2020-05-12 22:39:26 -04:00
Matthew Brown
8c236f411a Fix #3353 - allow extending nested when nested as type is mixed 2020-05-12 15:07:16 -04:00
Brown
3e58163180 Prevent empty function id
Ref #3354
2020-05-12 12:54:06 -04:00
Brown
d8cd30b34a Fix #3340 - catch more errors in @method type parsing 2020-05-11 18:39:07 -04:00
Brown
0d5d7c8938 Add null check 2020-05-11 11:56:07 -04:00
Brown
291018034b Remove unnecessary PHP code 2020-05-11 11:36:50 -04:00
Brown
3554aa4435 Fix crash newly introduced 2020-05-11 09:34:07 -04:00
Brown
eefd2e743b Use generic function definition for sscanf
cc @villfa
2020-05-10 23:58:51 -04:00
Brown
8f2f2617d4 Improve refactor 2020-05-10 22:45:01 -04:00
Brown
5f4d162dd5 Break out type expander into separate class 2020-05-10 22:39:18 -04:00
sj-i
fa601f97d7
update proc_open() types for PHP 7.4 (#3333)
as of PHP 7.4, proc_open() accepts an array for its first argument.
https://www.php.net/manual/en/function.proc-open.php#refsect1-function.proc-open-parameters
2020-05-10 21:11:27 -04:00
Brown
48da7a4be8 Fix issues found with Vimeo’s code 2020-05-10 21:09:48 -04:00
Matthew Brown
733da0e539 Fix #3311 - don’t erroneously mark a class as undefined
As they can sometimes only be obvious once an autoloader has been registered
2020-05-10 15:55:44 -04:00
Matthew Brown
4b388a2951 Fix ref 2020-05-10 11:35:35 -04:00
Brown
55222573ea Mark as possibly-undefined any variable that wasn’t present when the loop began
Fixes #3332
2020-05-10 11:17:50 -04:00
Brown
28349c6423 Remove mixin_fqcln hack 2020-05-10 09:04:30 -04:00
Brown
58c63bd1b2 Migrate generic param comparison method 2020-05-08 22:49:08 -04:00
Brown
75761647c2 Fix #3321 - allow interface methods to be mapped 2020-05-08 14:52:53 -04:00
Brown
640ffdb324 Fix #3323 - make short object-like arrays sealed tuples 2020-05-08 14:36:06 -04:00
Brown
2d5c2a9dd1 Fix #3324 - prevent crash asserting on possibly-undefined variable 2020-05-08 14:21:10 -04:00
Brown
65b4263315 Fix #3320 - add final flag to pseudo methods where appropriate 2020-05-08 07:28:12 -04:00
Brown
4295f9525f Fix #3313 - add check for very specific pattern 2020-05-07 12:30:15 -04:00
Brad Kent
18ee440e3f
update mysqli_stmt::__construct signature (#3315) 2020-05-07 12:08:22 -04:00
Brown
20bcfb096a Fix #3305 - use the same issue type for short closures as closures 2020-05-06 09:57:02 -04:00
Brown
a089d8bd58 Fix #3296 - propagate final flag to static calls in return types 2020-05-03 20:42:06 -04:00
Matthew Brown
dc64d4b1ca Support evaluation of boolean conditionals in scanning stage
Fixes #3290
2020-05-03 10:44:00 -04:00
Matthew Brown
23b0a18632 Fix property type 2020-05-03 10:22:52 -04:00
Matthew Brown
b69c37acdf Simplify logic around evaluating expressions a little 2020-05-03 10:19:15 -04:00
Brown
d99fbc0d4d Remove blank line 2020-05-03 00:26:50 -04:00
Brown
b8a1f5d5c9 Allow destructuring on arrayaccess implementers 2020-05-03 00:08:03 -04:00
Brown
bf5e178d16 Fix #3289 - treat property on non-generic type like actual value 2020-05-02 23:37:59 -04:00
Brown
618a54ff41 Fix #3240 - check arguments when class cannot be found 2020-05-02 22:13:59 -04:00
Brown
aceaf6c356 Fix #3217 - don’t override abstract return type with parent one 2020-05-02 21:57:53 -04:00
Brown
d3fba74f75 Fix false-positive 2020-05-02 21:56:28 -04:00
Brown
3e0c4cfb75 Fix #3210 - prevent possibly-null array access from destructure 2020-05-02 20:36:41 -04:00
Brown
132b5c9358 Fix #3263 - inherit magic properties when using @mixin 2020-05-02 19:57:38 -04:00
Brown
29741cd76d Remove earlier now-unnecessary fix 2020-05-02 19:24:48 -04:00
Matthew Brown
da5e8a4324 Increase type coverage for projects that use assert after mixed 2020-05-02 14:55:30 -04:00
feek
c5319fc379
fix: mixin parameter of self should be properly resolved (#3280)
Co-authored-by: Matthew Brown <github@muglug.com>
2020-05-02 14:32:43 -04:00
Brown
07e5250292 Fix #3273 - add support for func_num_args() in conditional type 2020-05-01 16:02:53 -04:00
Brown
0d8b56dc78 Fix return type coalescing for conditional return types 2020-05-01 13:04:48 -04:00
Brown
6024447ca0 Expand function-based template types before comparing against inherited
Fixes #3276
2020-05-01 12:40:10 -04:00
Brown
5e76467378 Fix #3279 - make sure self/parent references in mixin use existing class 2020-05-01 11:23:02 -04:00
Brown
117a4d4d40 Require callable() have a return type when in conditional
Fixes #3260
2020-04-30 23:35:13 -04:00
Brown
bb1c8a9d74 Don’t clobber intersection types after generic in union
Fixes #3274
2020-04-30 23:15:16 -04:00
Brown
470bf807b7 Add better handling of expression termination 2020-04-30 22:23:37 -04:00
Brown
9e6797d297 Add protection from ComplicatedExpression 2020-04-30 22:23:07 -04:00
Brown
ce8fb459e9 Allow complex types in conditional is expressions
Ref #3277
2020-04-30 22:02:37 -04:00
Brown
8ab5a0f504 Probably safe to un-negate a class string assertion without autoloader 2020-04-30 12:48:21 -04:00
Brown
21f4deed3b Fix #3268 - infer generator return for closure 2020-04-29 16:52:37 -04:00
Brown
555f525038 Add type 2020-04-29 14:58:48 -04:00
Brown
891c66650b Prevent unintersectable template lower bounds
Ref #3264
2020-04-29 14:57:57 -04:00
Andrii Dembitskyi
d3fd9a6acf
Fix #3265 (#3267)
We should add function body
2020-04-29 12:30:04 -04:00
Brown
e782329821 Add slashes 2020-04-28 23:42:53 -04:00
Brown
63c190ff83 Fix #3257 - refine as type and clone where necessary 2020-04-28 22:26:54 -04:00
orklah
8571746f8a
Add hook for plugins after FunctionLikeAnalysis (#3258) 2020-04-28 15:30:51 -04:00
Brown
a0667f1543 Remove accidentally-added interface 2020-04-28 15:27:09 -04:00
Brown
05ff8d0142 Prevent invalid [] brackets in tree
Fixes #3246
2020-04-28 15:18:50 -04:00
Brown
a402d4598b Define with single argument should not trigger a notice
Fixes #3254
2020-04-28 14:43:12 -04:00
Brown
d56c5c9782 Fix #3256 - fix parsing of colons in callable inside conditional 2020-04-28 10:55:17 -04:00
Grégoire Paris
1fb1c2195d
Allow non-string keys (#3221)
Although it would be stupid to provide an array with exclusively
non-string keys, it's possible to have an array with a bit of both.

See for instance
155d028be0/tests/Doctrine/Tests/DBAL/Functional/DataAccessTest.php (L263-L276)
2020-04-27 22:49:07 -04:00
Brown
f0487c216d Add slash 2020-04-27 09:50:27 -04:00
Brown
95dbb93732 Fix #3237 - allow mixin to reference generic params 2020-04-27 09:10:24 -04:00
Brown
189cd2bdc8 Fix key stringg 2020-04-27 00:50:07 -04:00
Brown
755ada9114 Fix #3234 - infer iterator key types properly 2020-04-27 00:41:34 -04:00
Brown
f91e94b64e Make sure to remember correct positions of @var references 2020-04-27 00:05:20 -04:00
Brown
10f3bef743 Fix type check 2020-04-26 20:21:24 -04:00
Brown
e65bffc94f Support intersections with __toString
Fixes #3149
2020-04-26 20:04:41 -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
Brown
ebcb0b8cc4 Fix #3228 - support IteratorIterator wrapping 2020-04-26 16:59:03 -04:00
Brown
d88c31f461 Support templated @mixin 2020-04-26 16:49:52 -04:00
Brown
83fe3a2fd9 Complain about malformed @property annotation 2020-04-26 10:10:14 -04:00
Brown
e1c6fcc707 Fix #3215 - suppress PossiblyUndefinedMethod in synthetic call 2020-04-24 00:11:32 -04:00
Brown
e9666372d0 Fix coercion 2020-04-22 16:27:43 -04:00
Brown
507f5f4afa Add context-sensitive conversion 2020-04-22 16:08:04 -04:00
Brown
a670aa7ddc Fix #3214 - allow if/else branches of conditional to both be arrays 2020-04-22 16:07:13 -04:00
Brown
52c0346b65 Fix #3213 - make sure static is bound from a static call with set class 2020-04-22 11:34:46 -04:00
Fabien Villepinte
a93bf28532
Fix #3045 - ignore mixed assignments to variables named $_ (#3211) 2020-04-21 20:18:38 -04:00
still-dreaming-1
16fa208a60
Made compact's return array key type more specific (#3209) 2020-04-21 20:18:11 -04:00
Matthew Brown
1b752d06ab Fix #3201 - add additional constraints on constructor initialisation 2020-04-21 00:04:47 -04:00
Brown
8f57d0c738 Fix #3204 - normalise function ids where possible 2020-04-20 21:38:35 -04:00
Grégoire Paris
e7b8983b7e
Make Throwable methods overridable (#3203)
Methods from \Exception cannot be overriden, but that does not mean
methods from \Throwable cannot be.

Closes #3202
2020-04-20 17:17:47 -04:00
Brown
6b42efed3f Fix #3150 - only inherit docblock return when same type is returned 2020-04-20 09:22:58 -04:00
Brown
a3ae2a713b Fix #3182 - don’t allow unnamespaced string references to functions in same context 2020-04-19 21:21:18 -04:00
Brown
6fc18af42e Fix #3163 - map object-like arrays too 2020-04-19 18:46:24 -04:00
Brown
286c396498 Fix #3185 - allow ignore_user_abort calls 2020-04-19 13:19:18 -04:00
Brown
e55fe0a0e8 Fix #3188 - register global variables as by-reference ones 2020-04-19 13:15:04 -04:00
Brown
bb46c30e38 Fix #3191 - don’t generate complex assertion from class-string 2020-04-19 12:53:50 -04:00
Brown
2188b6736f Fix #3162
Descend into inherited templates to prevent function-defined templates mapping inappopriately
2020-04-19 12:19:39 -04:00
Brown
3e07684855 Fix iterable coercion for Traversable-extending types
Fixes #3159
2020-04-19 09:15:20 -04:00
vladyslavstartsev
d8a4030a21
added right types for BCMath functions and GMP functions (#3189) 2020-04-19 08:04:11 -04:00
Brown
d2d795018f Fix #3138 - fix inherited property template type inference 2020-04-18 16:57:13 -04:00
Brown
ddbc1d2763 Yet again fix handling of nested template resolution and comparison 2020-04-18 13:02:55 -04:00
Brown
edb07952fc Static call inside throw does not violate purity 2020-04-18 12:43:51 -04:00
Brown
7af771a006 Fix #3132 - resolve array access in constant properly 2020-04-18 12:39:00 -04:00
Brown
61f5a06a7b Fix #3174 - always scan @mixin classes 2020-04-18 11:57:25 -04:00
Brown
8ba642f408 Fix bad param 2020-04-18 11:54:17 -04:00
Brown
b0455adced Fix #3177 - prevent crash by using inherited templates 2020-04-18 11:48:22 -04:00
Brown
5180ce1f54 Improve template assertion reconciliation
Fixes #3144
2020-04-18 11:22:06 -04:00
Grégoire Paris
b47306ad3b
Account for PDOException (#3175)
Probably for legacy reasons, PDOException::getCode() can return string (it's an
SQLSTATE code). Note that if you instantiate it yourself, you will get
an integer though.

I changed the signature of the Exception stub accordingly, and then
there were errors about incompatible signatures, so I had to change the
signature of Throwable too, which makes sense since a Throwable could be
a PDOException. The signature at
https://www.php.net/manual/en/throwable.getcode.php seems plain wrong,
and that same page of the docs warns about PDOException. Not sure what
are the plans for future versions of PHP.
2020-04-18 10:39:23 -04:00
Brown
e699004dab Improve names a little 2020-04-18 00:59:16 -04:00
Valentin Udaltsov
9b8e8ab964 Support non-empty-arrays in array_keys (#3168)
Closes #3160
2020-04-18 00:56:54 -04:00
Brown
d54f9bca17 Allow nested template resolution 2020-04-18 00:56:24 -04:00
Grégoire Paris
bc91de015e
Mark throwable methods as pure (#3171)
* Write stub as valid PHP

This works probably because it is not parsed by PHP but by something
more tolerant, but let's make it more valid (the final access type in
the signature is not valid) PHP anyway, that will raise fewer eyebrows.

* Document actual return type

See ca006e54e3/Zend/zend_exceptions.stub.php (L8)

* Mark all methods from Throwable as mutation free

Exception is the only possible class implementation of Throwable, and
all of its methods except __toString() are final.
See ca006e54e3/Zend/zend_exceptions.stub.php (L3-L25)

Closes #3170
2020-04-17 22:08:26 -04:00
Matthew Brown
aa29c7fc9e
Revert "Support non-empty-arrays in array_keys (#3168)" (#3172)
This reverts commit a280e57ecf.
2020-04-17 16:52:08 -04:00