Matthew Brown
4334ddcaa3
Fix style
2019-11-27 02:11:18 -05:00
Matthew Brown
3f2d57c7a3
Fix #2379 - support spread array RFC
2019-11-27 02:07:17 -05:00
Matthew Brown
c75f7dc4d5
Fix #2339 - add support for null coalescing operator
2019-11-27 00:34:23 -05:00
Brown
f97a8f0d5b
Use more accurate way to determine list size
2019-11-26 16:34:19 -05:00
Brown
5626058eff
Fix #2374 - refine error-suppressed output a little better
2019-11-25 15:38:54 -05:00
Brown
96c4eeec98
When calling magic method clone node info
2019-11-25 13:08:38 -05:00
Brown
0bcb7863f3
Use better system for storing inferred types and assertions
2019-11-25 11:44:54 -05:00
Brown
81f513bb4c
Fix #2358 - always analyse new XXX(...) in unknown method calls
2019-11-18 16:14:21 -05:00
Matthew Brown
2369bac943
Preserve self refs where possible
2019-11-16 19:59:08 -05:00
Matthew Brown
7d7d4dd926
Fix style stuff
2019-11-15 21:47:53 -05:00
Brown
55bf6a2db3
Migrate static return types
2019-11-15 16:50:43 -05:00
Brown
4747ba709a
Migrate more things
2019-11-15 15:34:25 -05:00
Brown
5e17a9af10
Fix #2348 - ensure all functions and methods return some type
2019-11-14 14:44:29 -05:00
Matthew Brown
5fabf41c8e
Check for not-callable return value
2019-11-14 07:57:22 -05:00
Brown
00be4c2071
Mark var as unused
2019-11-13 15:06:22 -05:00
Brown
c9e7dcfa92
Fix false positive UnusedVariable
2019-11-13 14:32:27 -05:00
Brown
7516b7b0cf
Fix #2336 - detect used variable in mixed array offset
2019-11-13 13:38:34 -05:00
Brown
7b719915f5
Fix style things
2019-11-12 10:21:27 -05:00
Brown
7f5af741f7
Improve assertion calculation on mixed vars
2019-11-12 10:12:07 -05:00
Brown
96586f16c0
Fix phpcs issues
2019-11-11 10:11:42 -05:00
Brown
af5f83602e
Break out more specific possibly defined offset errors
2019-11-11 09:59:56 -05:00
Matthew Brown
94d4b876ba
Fix #2177 - mark variables in try block as potentially undefined
2019-11-09 12:25:30 -05:00
Brown
895737d8be
Fix style
2019-11-08 12:49:53 -05:00
Brown
ac6256e645
Fix #2312 , improve understanding of template replacement
2019-11-08 11:56:41 -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
3d7b34e7f6
Fix #2273 - ensure all template params are bound
2019-11-07 11:03:41 -05:00
Brown
06b64a4a01
Detect erroneous use of empty check on bools
2019-11-06 16:14:46 -05:00
Brown
3e98c800ec
Fix #2309 - prevent closure-inferred generic template params overwriting parent ones
2019-11-06 13:13:02 -05:00
Brown
a8ed6ba9c4
Fix #2308 - prevent specialisation from bound params
2019-11-06 11:20:51 -05:00
Matthew Brown
d7e435c352
Add slashes
2019-11-05 19:08:16 -05:00
Matthew Brown
050045209f
Only allow string offset assignment when offset is integer
2019-11-05 19:05:43 -05:00
Matthew Brown
cbaf050bd2
Fix #2307 - allow setting of array string offset
2019-11-05 19:03:59 -05:00
Brown
1f42843d42
Fix #2296 - use case insensitive closure ids
2019-11-04 14:48:02 -05:00
Matthew Brown
5faebe2674
Fix templated assertion handling for static methods
2019-11-04 05:31:45 -05:00
Matthew Brown
8f421dc0bb
Refactor template calculation out from Psalm\Type\Union
2019-11-03 21:27:40 -05:00
Matthew Brown
050eb82f04
Fix #2290 - detect call on void type
2019-11-01 13:05:28 +00:00
Brown
8876499ddd
Fix #2252 - allow destructuring of ArrayAccess objects
2019-10-22 11:17:42 -04:00
Brown
353cf2351e
Fix #2259 - if error suppression is use, list destructuring values will be nullable
2019-10-22 10:40:37 -04:00
Tyson Andre
94636476d2
Fix checking if union type with mixed is nullable ( #2253 )
...
Fixes #2249
2019-10-20 17:06:59 -04:00
Matthew Brown
22e35a7233
Improve message for mixed method call
2019-10-20 11:13:23 -04:00
Matthew Brown
0a35c9cd6a
Remove unnecessary computation
2019-10-19 23:03:59 -04:00
Matthew Brown
5910a362ea
Improve report output of taint analysis
2019-10-19 17:59:10 -04:00
Matthew Brown
9115ffd237
Fix #2215 - refine closure type if it doesn’t clash
2019-10-15 20:34:41 -04:00
Brown
b29227aaf6
Allow taints to be removed via annotation
2019-10-15 16:25:27 -04:00
Brown
22a12444df
Fix #2220 - detect destructuring of non-array
2019-10-15 13:55:30 -04:00
Brown
5e649f684c
Fix erroneous return type resolution
2019-10-14 17:10:30 -04:00
Matthew Brown
8c6b234c2c
Improve speed of taint analysis
2019-10-13 20:10:31 -04:00
Matthew Brown
7e2d00d6ed
Allow taints to be added to root array types
2019-10-12 12:23:40 -04:00
Matthew Brown
e5623e9257
Fix function call
2019-10-11 23:33:36 -04:00
Matthew Brown
4478d31593
Taint arrays in creation
2019-10-11 23:28:17 -04:00
Brown
3f837a3493
Fix #2192 - allow static return value on templated object
2019-10-11 12:02:41 -04:00
Matthew Brown
7857b07f91
Fix list-could-be-array issue
2019-10-11 08:24:35 -04:00
Matthew Brown
03c39cbe7c
Fix #2223 - make sure lists are handled in more places
2019-10-10 20:16:43 -04:00
Brown
cc9a925e84
Allow list to be coerced to callable
2019-10-10 10:26:13 -04:00
Brown
54d5a25077
Remove known array offsets after altering array
2019-10-09 10:36:55 -04:00
Brown
b75720c32b
Add more list types
2019-10-09 10:04:34 -04:00
Brown
0b0534d41b
Add more list annotations to Psalm’s codebase
2019-10-09 09:17:43 -04:00
Brown
2d4a7fbe3e
Fix array fetch analysis offset
2019-10-08 19:01:00 -04:00
Brown
16c33d1565
Add support for list type
...
Fixes #2209
2019-10-08 18:44:46 -04:00
Brown
94001aad4a
Fix #2208 - handle templated property types appropriately
2019-10-04 13:51:36 -04:00
Brown
b0aaede9e1
Add support for checking integer array offsets
2019-10-04 11:08:08 -04:00
Matthew Brown
d85fbaec09
Add stricter checks after first isset
2019-10-03 21:34:56 -04:00
Brown
549aee47f1
Fix bug asserting array emptiness
2019-10-03 15:27:55 -04:00
Brown
d225374d6d
Fix #2156 - do better inference after isset
2019-10-01 19:31:08 -04:00
Brown
a81c3067ad
Store the whole type
2019-10-01 17:09:32 -04:00
Brown
f8f8b633b1
Suppress a bunch of PossiblyUndefinedArrayOffset issues
2019-10-01 15:44:43 -04:00
Matthew Brown
9f10564184
Add another array addition check
2019-10-01 09:13:31 -04:00
Matthew Brown
95c7b986c2
Fix formatting
2019-10-01 08:46:37 -04:00
Matthew Brown
2ffdf1bacc
Fix undefined numeric offset
2019-10-01 08:45:36 -04:00
Matthew Brown
f8a2eae0e2
Fix #2186 - use expanded class name for aliased class
2019-09-30 22:15:48 -04:00
Matthew Brown
a9d0296252
Fix #2182 - allow modification to cloned objects inside
2019-09-30 22:07:20 -04:00
Matthew Brown
14adc9b491
Fix phpcs
2019-09-29 16:04:32 -04:00
Matthew Brown
4ec22cffca
Fix #2184 - execute __invoke methods explicitly
2019-09-29 16:01:33 -04:00
Brown
4ff3a5517d
Fix typo
2019-09-26 17:12:57 -04:00
Brown
cf799d0926
Fix #2173 - remove @var annotations automatically
2019-09-26 15:08:05 -04:00
Brown
2c9a082b3e
Fix #2172 - only complain about missing offset if it’s really missing
2019-09-25 19:02:49 -04:00
Brown
648dda67ed
Fix Psalm issues
2019-09-25 13:12:29 -04:00
Brown
1a48be8e9c
Fix #2165 - coerce null array offset to zero
2019-09-25 12:17:37 -04:00
Brown
c68dcf2f74
Don’t coerce false to null when coming from ignore-false type
2019-09-20 15:30:29 -04:00
Brown
be4894c8e0
Fix #2155 - coerce false to 0, true to 1 in array offset
2019-09-20 15:21:38 -04:00
Brown
f6b0de08f8
Remove unnecessary assertion
2019-09-19 15:41:44 -04:00
Brown
e6f90ab83f
Fix #2146 - check count args length
2019-09-19 15:07:49 -04:00
Brown
c5ef2516b5
Fix #2150 - add detection for unnecessary @var annotations
...
And also remove them from codebase
2019-09-19 11:59:43 -04:00
Matthew Brown
9ad6c36d9b
Conditionally verify that array offsets exist ( #2147 )
...
* Check array offsets idea
* Clean up some issues
* Add a few light fixes
* Add docs
2019-09-18 14:21:06 -04:00
Matthew Brown
0b4981f01b
Fix #1551 - do better at inferring class constant types
2019-09-14 14:26:31 -04:00
Matthew Brown
d941294a84
Move class const analysis
2019-09-14 13:12:54 -04:00
Brown
944531b73b
fix #2125 - Don’t assume function args are necessarily authoratative
2019-09-11 13:52:58 -04:00
Brown
8784812739
Fix #2116 - allow property set inside unserialize
2019-09-10 10:31:46 -04:00
Brown
a6baa2d04c
Allow callables to be understood as pure
...
Fixes #2112
2019-09-09 12:11:04 -04:00
Brown
a1ea5c38c2
Clean up unnecessary annotation
...
Ref #2111
2019-09-09 11:20:47 -04:00
Brown
b49444b8ad
Allow immutable objects to be cloned
...
Fixes #2111
2019-09-09 11:14:40 -04:00
Matthew Brown
a032978a85
Use a better check for functional purity
2019-09-08 11:49:14 -04:00
Matthew Brown
d27935d109
Improve accuracy around array addition
2019-09-08 10:23:12 -04:00
Matthew Brown
b7f79b547e
Ensure that properties not set on class add back to context (as mixed)
2019-09-07 22:10:22 -04:00
Matthew Brown
85ae8f93d2
Clear out property assignments when necessary
2019-09-07 18:34:18 -04:00
lhchavez
ae2c6715a7
Allow @psalm-assert to propagate member assertions to the caller's context ( #2100 )
...
This change injects method call assertions that involve member variables
to the caller context by replacing `$this->` with the lhs of the member
call.
Fixes : #2099
2019-09-05 21:00:02 -04:00
Brown
071fae98b2
Fix #2095 - respect @method annotations even when method already exists
2019-09-04 09:42:12 -04:00
Brown
de5df1e36a
Warn about unnecessary use of DateTimeImmutable
2019-09-03 13:49:15 -04:00
Brown
8601731fa2
Prohibit mutation-free assignment ops
2019-09-03 12:16:31 -04:00
Matthew Brown
51e552665e
Fix #2061 - add config to allow suppression of string increment issues
2019-09-01 17:49:37 -04:00
Matthew Brown
0279c6f6d9
Allow mutation-free method calls in pure functions
2019-08-31 22:03:37 -04:00
Matthew Brown
cfdfb9b64c
Allow pure functions/methods to be called and not destroy known properties
2019-08-31 14:54:59 -04:00
Matthew Brown
4a38ab165f
Fix erroneous marking of external-mutation-free method as unused
2019-08-31 10:02:11 -04:00
Matthew Brown
900cfc0f05
Improve handling of external-mutation-free objects created in pure functions
2019-08-31 09:49:32 -04:00
Matthew Brown
f096c3d29c
Don’t identify impurity when checking property initialisation
2019-08-31 09:07:00 -04:00
Matthew Brown
d891217a48
Don’t complain about initialisation of external-mutation-free classes from pure context
2019-08-30 17:34:58 -04:00
Matthew Brown
bbde2d6239
Add support for @psalm-external-mutation-free
2019-08-30 17:26:55 -04:00
Matthew Brown
6d07663d70
Annotate method getters more accurately
2019-08-30 16:40:32 -04:00
Brown
b7b4baff8f
Add support for @immutable
...
Fixes #1272
2019-08-30 12:36:35 -04:00
Brown
22ba3ada7b
Fix #2081 - allow Assert::true to replace assert() calls
2019-08-29 11:53:36 -04:00
lhchavez
1f0aca00b3
Use the correct types for AssignmentRef ( #2078 )
...
This change assigns the type of the rhs expression to the variable that
will become a reference, as well as preventing clobbering of the rhs if
it is an already-typed variable.
Fixes : #2077
2019-08-27 23:19:09 -04:00
Brown
095ea1a554
Properly clone array when changing value
2019-08-27 17:00:00 -04:00
Brown
aba3659311
Add more specific key coercion rules when assigning to arrays
2019-08-27 15:12:25 -04:00
Brown
4db8ca6a1d
Cleanup extra issues from recent fixes
2019-08-27 14:16:34 -04:00
Brown
3b865f6509
Fix #2048 - allow mixed array to be assigned specific string keys
2019-08-27 10:18:58 -04:00
Matthew Brown
f4f4a32f08
Fix #2062 - treat function inside variable method call name as used
2019-08-26 00:47:46 -04:00
Matthew Brown
03f59ae05e
Check other arguments of array_unshift/array_push
...
Ref #2052
2019-08-25 23:52:38 -04:00
Brown
fef61e996e
Propagate possibly-null issues onto fetched properties
2019-08-23 13:27:38 -04:00
Brown
f00ee740c0
Analyse encapsulated string when method not known
...
Ref #2052
2019-08-23 10:59:59 -04:00
Matthew Brown
738ba81185
Fix #2046 - trigger PossiblyNullArgument when in union with mixed
2019-08-22 23:26:04 -04:00
Matthew Brown
5a1604d088
Fix #2047 - left side of callable is a thing that is also kinda called
2019-08-22 22:06:22 -04:00
Brown
9835943294
Fix #2041 - make sure property is always set
2019-08-21 11:25:08 -04:00
Brown
86e5e50c1b
Prevent baaad behaviour
2019-08-20 14:26:32 -04:00
Matthew Brown
17e7fe70c1
Fix #2035 more comprehensively
2019-08-19 22:45:24 -04:00
Matthew Brown
f5b63218f1
Revert "Fix #2035 - warn about erroneous casting"
...
This reverts commit d0f277a168
.
2019-08-19 22:12:03 -04:00
Matthew Brown
d0f277a168
Fix #2035 - warn about erroneous casting
2019-08-19 21:49:45 -04:00
Matthew Brown
920c2d83c3
Use types for method_exists checks in some places
2019-08-18 22:27:19 -04:00
Matthew Brown
1b983babd0
Allow unset of potentially invalid array key type
2019-08-18 18:06:41 -04:00
Matthew Brown
c5f62d261d
Remove redundant @psalm-suppress in Psalm’s codebsae
2019-08-18 16:10:12 -04:00
Matthew Brown
62dff200d5
Fix redundant condition
2019-08-17 18:02:38 -04:00
Matthew Brown
b6dc8f547e
Fix #2031 - still get class const return type after defined check
2019-08-17 18:01:24 -04:00
lhchavez
c98c160907
Allow explicitly-annotated mixed assignments ( #2030 )
...
This change makes it possible to assign mixed expressions to variables
if an annotation is explicitly added to the variable. This allows the
use of `call_user_func` without needing to suppress issues.
Fixes : #1374
2019-08-17 11:22:43 -04:00
Matthew Brown
ac7354605a
Fix bad Psalm issue
2019-08-16 23:33:28 -04:00
Matthew Brown
9c616aa5c6
Remove pure function calls when removing unused variables
2019-08-16 23:19:52 -04:00
Brown
43041836dd
Fix #2026 - add support for calling __toString implicitly after method_exists
2019-08-16 11:33:58 -04:00
Brown
538abbc54c
Fix #2020 - allow static::CONST_NAME to have non-mixed type in final class
2019-08-15 10:41:30 -04:00
Brown
86264a736b
Fix dumb change
2019-08-15 10:07:31 -04:00
Brown
57386ab26e
Fix #2023 - no UnusedVariable complaint when method is undefined
2019-08-15 09:51:40 -04:00
Brown
e25ce152d6
Fix #2014 - prevent unusedvariable false positive when redefined in assignment ||
2019-08-15 09:43:43 -04:00
Brown
3d01708c6c
Improve backtrace of property-involved issues
2019-08-14 11:47:58 -04:00
Brown
e92896f145
Fix taint records
2019-08-14 09:52:59 -04:00
Matthew Brown
600999a3a8
Add better typing
2019-08-14 00:47:57 -04:00
Brown
c3949e3194
Improve taint protection for exec-related commands
2019-08-13 19:18:50 -04:00
Brown
d6e084ec9c
Remove false-positive for callmap function arg
2019-08-13 14:53:31 -04:00
Brown
0468d11158
Detect function in array access op
2019-08-13 14:07:45 -04:00
Brown
b5614d03f8
Add detection for unused function calls
2019-08-13 13:15:23 -04:00
Matthew Brown
d5b026839c
Add support for different taint types ref #1990
2019-08-12 23:16:05 -04:00
Brown
669b50e8b4
Fix erroneous callable parsing
2019-08-12 15:04:43 -04:00
Brown
4046b44903
fix #2010 - properties with defaults should work with static type
2019-08-12 14:29:14 -04:00
Matthew Brown
7ed30cd5b0
Add support for @readonly annotation
2019-08-11 16:01:37 -04:00
Matthew Brown
60c0133fff
Break apart reconciler
2019-08-10 13:22:21 -04:00
Matthew Brown
3f78082720
Fix is_string call
2019-08-10 09:16:32 -04:00
Matthew Brown
460120ec45
Fix #1994 - make assert-if-true work for $this properties
2019-08-10 09:12:02 -04:00
Brown
5254b7501e
Fix #1996 - detect unused variable in static property name
2019-08-09 12:55:47 -04:00
Brown
d5e2c323d3
Add support for pure-ish instance methods
2019-08-08 14:17:34 -04:00
Matthew Brown
747782d258
Fix #1987 - avoid inferredType not being null
2019-08-07 22:41:26 -04:00
Brown
955899ade0
Builtin functions are assumed to be pure
2019-08-07 15:21:15 -04:00
Brown
16a1dc8538
Fix errors
2019-08-06 18:56:36 -04:00
Brown
14b37b95af
Fix potential recursion
2019-08-06 17:29:44 -04:00
Brown
fc8d2bd563
Do more taint creation for magic properties
2019-08-06 14:27:21 -04:00
Brown
37d93141c4
Only register taints on known magic properties
2019-08-06 13:05:34 -04:00
Brown
0dc6b74fb4
Add taintedness to magic property fetches
2019-08-06 12:54:12 -04:00
Brown
17753865f3
Add detection to mixed params
2019-08-06 10:33:21 -04:00
Matthew Brown
8f6d432dd0
Add support for magic property comprehension
2019-08-05 23:19:22 -04:00
Brown
6eb62591ab
Specialise calls when functions are pure
2019-08-05 18:33:33 -04:00
Matthew Brown
b2c0993cdc
Add framework for taint analysis to Psalm
...
Ref #611
2019-08-04 10:37:36 -04:00
Matthew Brown
ea1f9874fb
Remove more memory leaks
2019-08-02 01:55:24 -04:00
Brown
8cb5d012d9
Check expressions in variable name static calls
2019-07-25 09:45:11 -04:00
Matthew Brown
5a4a133f50
Fix #1970 - allow comparison to templated param class
2019-07-24 22:13:51 -04:00
Brown
352f18b169
Register so it doesn’t get removed
2019-07-24 17:41:13 -04:00
Brown
5770a6c904
Add support for compact
2019-07-24 17:24:23 -04:00
Brown
e22e0ac92c
Fix unused ref in assign op
...
Fixes #1968
2019-07-24 16:53:14 -04:00
Brown
c283f0877d
Analyse binary ops always
2019-07-22 18:04:52 -04:00
Matthew Brown
3d4adee6b3
Reduce with / before converting back
2019-07-21 11:03:02 -04:00
Matthew Brown
76508e6d64
Improve behaviour of templated template assertions
...
Fixes #1956
2019-07-21 01:40:19 -04:00
Tyson Andre
5d5a9c6eac
Remove redundant casts and unused use statements ( #1955 )
...
* Remove redundant casts
(not sure about older versions of php-parser)
* Remove unused use statements
2019-07-18 23:37:36 -04:00
Matthew Brown
0e6bd79a09
Allow completion from functions to work without namespacing cc @iluuu1994
2019-07-18 21:50:59 -04:00
Matthew Brown
3df248eea2
Add concept of purity to functions and methods
2019-07-18 01:31:48 -04:00
Brown
7f0dcae0b2
Always evaluate property calls on mixed methods
2019-07-12 14:39:06 -04:00
Brown
1208437b4c
Fix #1940 - allow proper evaluation of /a/b/../../
2019-07-12 14:28:21 -04:00
Brown
8e149461f0
Remove unnecessary references to had_template
2019-07-10 14:03:13 -04:00
Brown
e7aadee88f
Fix #1931 - narrow down property assignment
2019-07-10 13:49:11 -04:00
Brown
2c6854f403
Massage arg type after coerced param
...
Ref #1927
2019-07-10 12:12:51 -04:00
Matthew Brown
1ae9ea5fed
Use object instead of by-ref params
2019-07-10 01:35:57 -04:00
Brown
884a03078b
Fix #1886 - derived types from templates in new calls should be coercable
2019-07-09 14:48:26 -04:00
Matthew Brown
5c4ac97546
Fix #1915 - allow @psalm-assert-if-true to operate on $this
2019-07-07 15:06:03 -04:00
Matthew Brown
d29c7b42d9
Fix #1869 - don’t memoize magic properties after set
2019-07-06 00:00:17 -04:00
Matthew Brown
cd33430616
Fix #1885 - allow comparison to templated class string
2019-07-05 22:57:38 -04:00
Matthew Brown
457781bb02
Fix #1902 - template trait method when extended
2019-07-04 22:26:40 -04:00
Matthew Brown
6dd549b8a6
Fix #1900 - discard old references to code after an assignment
2019-07-04 17:35:33 -04:00
Matthew Brown
d0f6f85dba
Fix #1899 - detect dead code after array assignment
2019-07-04 16:38:31 -04:00
Brown
5c76b3c82d
Fix #1888 - add go-to-variable
2019-07-01 18:48:33 -04:00
Ilija Tovilo
67c3726254
Implement signature help - closes #1841 ( #1862 )
...
* Implement signature help - closes #1841
* Add explicit signature count
* [LSP] Do analysis for every signatureHelp request
See here: https://github.com/vimeo/psalm/pull/1862#issuecomment-507007346
* Don’t language server information when checking property for init
* Fix signature help for functions
* Add try-catch around signature help Functions::getStorage()
2019-07-01 15:54:32 -04:00
Matthew Brown
f5809ec24a
Only add node references to explicit locations
2019-07-01 11:12:12 -04:00
Matthew Brown
0e8fa0e73e
Return false in fewer places
2019-06-30 12:06:49 -04:00
Brown
62c37a84f2
Fix tokenising bug found while analysing Phan cc @TysonAndre
2019-06-28 12:29:39 -04:00
Brown
87e2300b65
Don’t stop analysing after class_exists
2019-06-28 11:22:58 -04:00
Brown
6514f2084c
Fix #1860 - be less restrictive about class_exists checks
2019-06-28 10:17:59 -04:00
Brown
6b32565a9b
Allow references to deprecated class inside the class
2019-06-27 13:36:39 -04:00
Brown
c4eb127f11
Fix treatment of class_exists
2019-06-27 10:17:11 -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
Brown
5ed49c0c03
Fixed #1848 - allow static class strings to be compared
2019-06-26 15:11:16 -04:00
Matthew Brown
c66a106622
Improve performance by doing less cloning
...
Ref #1837
2019-06-26 00:14:06 -04:00
Matthew Brown
d96246a824
Improve template handling robustness
2019-06-25 09:06:23 -04:00
Matthew Brown
5cb6fe14d7
Add support for doubly-extended non-template params
2019-06-24 23:57:19 -04:00
Matthew Brown
9d998bf3ac
Fix handling of inherited method call
2019-06-24 23:43:06 -04:00
Matthew Brown
c0b86bd40d
Use uppercase template_type_extends keys
2019-06-24 23:43:04 -04:00
Brown
69b05f5052
Improve handling of parent method calls
2019-06-24 17:45:10 -04:00
Brown
4baa4d70d8
Allow templated static type in fleshOutType
2019-06-24 15:08:55 -04:00
Matthew Brown
4735955829
Fix #1835 - move reference generation before argument analysis
2019-06-23 08:08:00 -04:00
Matthew Brown
31c8a2e4d7
Add offsets to type tokenisation
...
Ref #1832
2019-06-22 23:30:40 -04:00
Brown
aa6677a177
Add autocompletion for some classes
...
Ref #1822
2019-06-21 17:10:35 -04:00
Brown
a5a9da6e50
Fix #1818 - handle intersection when expanding template
2019-06-20 10:09:03 -04:00
Matthew Brown
d845cdf0c5
Fix #1458 by making instanceof static same as === static
2019-06-20 08:37:57 -04:00
Brown
bdf54ae1fa
Fix #1814 - warn about deprected ::class access
2019-06-19 12:42:51 -04:00
Brown
0246f600f4
Fix #1813 - convert object&Foo into Foo after template resolution
2019-06-19 12:00:19 -04:00
Matthew Brown
7155ed4e06
Fix #1811 - improve expected argument count
2019-06-19 09:05:07 -04:00
Brown
10613192c9
Fix #1803 - complain about DeprecatedClass when using its constants
2019-06-18 16:21:04 -04:00
Brown
250ef02687
Fix #1801 - add support for class_exists(Foo::class) too
2019-06-17 11:31:43 -04:00
Matthew Brown
f46ccf0a5d
Strip text from end of @psalm-type
2019-06-16 12:39:07 -04:00
Matthew Brown
c4551bd0df
Fix issue where extension_loaded stopped constructor being recognised
2019-06-15 18:49:58 -04:00
Matthew Brown
38cee39c22
Be more lenient returning false
2019-06-15 18:34:18 -04:00
Matthew Brown
9c03dfa1d3
Don’t quit after a bad run
2019-06-15 18:15:04 -04:00
Matthew Brown
56e66af6a2
Keep going even when function doesn’t exist
2019-06-15 16:14:36 -04:00
Matthew Brown
2d5f332ebf
Fix #1781 by improving handling of callmap options
2019-06-15 16:10:48 -04:00
Matthew Brown
06e913e37b
Fix #1791 - complain about missing class constants
2019-06-15 12:19:26 -04:00
Matthew Brown
5a64e97f0f
Fix #1793 - warn on deprecated function
2019-06-15 12:09:15 -04:00
Brown
58b6ce3483
Fix bugs when moving methods that reference each other
2019-06-14 14:41:44 -04:00
Matthew Brown
53506fb879
Fix #1770 - fix notice that should not be
2019-06-12 09:13:59 -04:00
Matthew Brown
0145e60e6a
Allow property default to include value-of option
2019-06-09 12:47:27 -04:00
Matthew Brown
c38108f95d
Fix byref array assignment
...
Fixes #1702
2019-06-08 10:32:46 -04:00
Matthew Brown
42cc201e9e
Fix #1698 - better understand inherited docblock return types
2019-06-08 09:44:22 -04:00
Matthew Brown
b0678bdc74
Improve treatment of key-of
...
Ref #1698
2019-06-07 21:27:50 -04:00
Brown
c81a9a8737
Fix #1742 - allow is_countable assertion to mean something
2019-06-07 15:49:10 -04:00
Brown
3c3c8cd3b9
Always analyse class constants
2019-06-07 13:23:52 -04:00
Brown
9aeaf1a4ed
Fix #1746 - allow DeprecatedInterface to be suppressed with referencedClass
2019-06-06 14:48:33 -04:00
Brown
b1d1ab974c
Preserve formatting of callable type
2019-06-06 14:27:49 -04:00
Matthew Brown
0287adfd44
Fix const replacements when moving classes
2019-06-06 07:05:30 -04:00
Matthew Brown
c6063d1378
Only replace same-file param docblock types
2019-06-05 19:32:27 -04:00
Brown
6f0a6201de
Fix static calls after moving
2019-06-05 11:22:09 -04:00
Brown
3e15fa8bfe
Fix bad namespacing
2019-06-05 11:15:52 -04:00
Matthew Brown
ad4e2f72e2
Add means to guess PSR4 file path
2019-06-05 08:50:24 -04:00
Brown
f309c755f8
Add ability to move classes
2019-06-05 08:50:24 -04:00
Brown
c7f35c263c
Fix #1737 properly
2019-06-04 14:08:49 -04:00
Brown
67c9851b95
Fix Psalm bug, and add test to capture it
2019-06-04 13:43:11 -04:00
Brown
778b95d335
Add support for moving class constants
2019-06-04 11:14:49 -04:00
Matthew Brown
a9809ab28a
Add property moving & renaming
2019-06-04 00:32:19 -04:00
Marco Pivetta
624c7bc6fb
Renamed Fn
to TFn
to allow for PHP 7.4 compatibility
2019-06-03 08:21:25 -04:00
Matthew Brown
2439a9f6a0
Allow instance method renaming, too
2019-06-02 12:02:39 -04:00
Matthew Brown
736f01c29e
Store more accurate return type location
2019-06-01 13:02:20 -04:00
Matthew Brown
909e02d441
Move var docblocks within function
2019-06-01 12:25:57 -04:00
Matthew Brown
dc5a5bcd9d
Simplify var docblock parsing signature
2019-06-01 11:53:32 -04:00
Matthew Brown
bee87c25eb
Add transformations for new A, param A
2019-06-01 10:32:49 -04:00
Matthew Brown
7e4de611bf
Migrate class references in static calls
2019-06-01 10:07:45 -04:00
Matthew Brown
a252fb84da
Fix namespaced method moving
2019-06-01 01:33:21 -04:00
Matthew Brown
cc89b9254d
Add initial ideas for moving static methods
...
Ref #1595
2019-06-01 00:56:54 -04:00
Matthew Brown
f5e4b9b45f
Fix #1713 - don’t crash when a property is unset
2019-05-31 19:49:24 -04:00
Brown
a060da95bf
Allow MissingParamType alteration to be done in multithreaded mode
2019-05-31 11:55:24 -04:00
Brown
534e4c034b
Fix replacement for inherited methods
2019-05-31 10:37:26 -04:00
Matthew Brown
4002504ff0
Allow trait_exists to inform type for ReflectionClass
2019-05-31 09:43:46 -04:00
Matthew Brown
cd969c51e5
Generate missing param types from callers
...
Fixes #1707
2019-05-31 01:47:35 -04:00
Ilija Tovilo
5a14e4b1cf
Progress bar ( #1709 )
...
* Revert "Revert "Implement better progress""
This reverts commit 4302596654
.
* Revert "Revert "Implement dots progress bar""
This reverts commit e41733d789
.
* Revert "Revert "Switch to VoidProgress by default""
This reverts commit 304ffeb0a3
.
* Revert "Revert "Pass success flag to progress""
This reverts commit 62a690ee4e
.
* Improve socket communication
* Use an underscore
* Add means to disable progress
* Add extra newline before progress bar
2019-05-30 10:30:41 -04:00
Matthew Brown
f961da53b7
Fix typos
2019-05-30 08:53:20 -04:00
Matthew Brown
0555bd9ff6
Prevent InternalMethod at implicit __get
2019-05-30 08:50:50 -04:00
Brown
e85794038f
Fix #1704 - improve type coercion complaints
2019-05-29 14:22:15 -04:00
Matthew Brown
4f48c6388d
Fix #1700 - interpret false===($a || $b) correctly
2019-05-29 07:47:31 -04:00
Brown
602bae3bb3
Allow class_exists(..., false) to inform class-string type
2019-05-28 13:16:09 -04:00
Brown
0e6d07c4e9
Add ancillary var types
2019-05-28 11:58:15 -04:00
Matthew Brown
a001616753
Remove object-like array under falsy assertion when it contains a sure key
2019-05-28 00:32:27 -04:00
Brown
cf02e9c22c
Fix access on matched T[K]
2019-05-27 18:36:34 -04:00
Matthew Brown
4302596654
Revert "Implement better progress"
...
This reverts commit 042070d0fd
.
2019-05-27 13:07:02 -04:00
Matthew Brown
5861476765
Don’t remove null after magic property fetch
2019-05-27 09:18:34 -04:00
Matthew Brown
c356c452ec
Fix #1692 - allow magic annotations on all interfaces without config flag
2019-05-26 23:35:03 -04:00
Ilija Tovilo
042070d0fd
Implement better progress
2019-05-26 23:18:48 -04:00
Matthew Brown
69150d503a
Fix #1682 - correct arg check
2019-05-26 16:26:47 -04:00
Matthew Brown
8b9de8bba6
class_esists check with false arg shouldn’t count
...
Fixes #1682
2019-05-26 13:16:44 -04:00
Matthew Brown
790bc53bfd
Fix #1681 - interpret parent annotation properly
2019-05-25 11:51:09 -04:00
Matthew Brown
9fb96793cd
Fix #1676 - don’t modify original param types with templated by-reference
2019-05-24 18:17:48 -04:00
Matthew Brown
569d82641d
Ignore PossiblyNullReference on synthetic method calls
2019-05-24 14:09:01 -04:00
Matthew Brown
7a48225184
Fix leaky template type
2019-05-24 13:35:14 -04:00
Matthew Brown
3e2b7163ca
Fix #1674 - treat intersections more equally regardless of order
2019-05-24 12:48:37 -04:00
Matthew Brown
13b9e133e4
Fix Psalm errors
2019-05-24 02:15:35 -04:00
Matthew Brown
c80f9d8ecd
Add class-based support for key-of
...
Ref #762
2019-05-24 02:12:58 -04:00
Matthew Brown
574545e149
Add initial support for key-of<T>
...
Ref #762
2019-05-23 23:53:48 -04:00
Brown
56daa390fc
Allow array access on @template T as array
...
Ref #1607
2019-05-23 18:06:22 -04:00
Brown
01dcf8f631
Fix erroneous update of existing variables
2019-05-23 18:04:12 -04:00
Brown
6ce5fefa4b
Fix #1664 - allow templated __get params
2019-05-23 12:59:09 -04:00
Brown
83fe545c94
Fix docblock
2019-05-22 18:09:36 -04:00
Brown
f728d797cf
Fix #1665 - allow -if-true & -if-false assertions on static methods
2019-05-22 17:49:38 -04:00
Brown
29c869ed67
Ignore nullable issues on just-coerced types
2019-05-21 12:59:06 -04:00
Brown
034ea725e8
Coerce generic types from empty
2019-05-21 12:12:13 -04:00
Brown
4ecf370900
Coerce mixed values when passed as arguments
2019-05-21 11:51:41 -04:00
Matthew Brown
ea930b8875
Fix interface_exists after class_exists check
2019-05-20 20:57:59 -04:00
Matthew Brown
1e853800a3
Fix #1657 - allow interface_exists to generate class-string assertion
2019-05-19 15:56:04 -04:00
Brown
963d5bb901
Fix #1656 - allow chained call completion
2019-05-17 12:38:29 -04:00
Brown
9a93525d33
Emit undefined docblock class error where appropriate on property fetcthes
2019-05-16 15:07:07 -04:00
Brown
4a434d9a2f
Add separate issue for undefined classes in docblocks
2019-05-15 18:41:26 -04:00
Barney Laurance
6fbe2b0837
Extract function NamespaceAnalyzer::nameSpaceRootsMatch
2019-05-14 18:54:16 -04:00
Barney Laurance
14843ed58a
psalm-internal - extract function NamespaceAnalyzer::isWithin
...
Also adjust behaviour so things can be internal to classes, not just to
namespace, and namespace comparision is case insensitive
2019-05-14 18:54:16 -04:00
Barney Laurance
cd673538f1
psalm-internal - refactor - use snake_case not camelCase
2019-05-14 18:54:16 -04:00
Barney Laurance
cd16dc7ac3
psalm-internal - PHPBCBF fixes
2019-05-14 18:54:16 -04:00
Barney Laurance
7b7683bdaf
psalm-internal - prevent setting internal property from other namespace
2019-05-14 18:54:16 -04:00
Barney Laurance
ce5d307f83
psalm-internal - present fetching internal property from other namespace
2019-05-14 18:54:16 -04:00
Barney Laurance
0ebcba3e02
psalm-internal - prevent instantiation of class from other namespace
2019-05-14 18:54:16 -04:00
Barney Laurance
059d1ef177
psalm-internal - prevent static call to psalm-internal class from other namespace
2019-05-14 18:54:16 -04:00
Tyson Andre
d4f1a4a75f
Remove unused variables/comment params
2019-05-11 22:11:38 -04:00
Brown
9b75683796
Search better, and avoid fatal error
2019-05-09 19:34:38 -04:00
Brown
d7ee952084
Infer closure param type for array_filter/array_map
...
Fixes #664
2019-05-07 16:27:25 -04:00
Matthew Brown
4f8d6a50d8
Don’t emit MissingClosureReturnType when inside call and type can be inferred
2019-05-06 20:47:55 -04:00
Brown
fec1a60e90
Ref #1600 - partial fix inferring param types when none is available
2019-05-06 18:44:10 -04:00
Brown
640c1d13a6
Fix unused variables now found in Psalm’s code
2019-05-02 17:21:23 -04:00
Brown
86bf159bd0
Avoid false positive for param
2019-05-02 15:33:47 -04:00
Brown
4f26c8d749
Fix #1597 - ternary else should only know about first conditional expression
2019-05-02 13:43:18 -04:00
Matthew Brown
ae531506de
Fix #1591 - allow variable typed to string to be compared to literal in reverse order
2019-05-02 00:50:35 -04:00
Matthew Brown
e08944cae0
Allow diff mode with --find-dead-code
2019-04-27 17:38:24 -04:00
Matthew Brown
59e53acd56
Fix new template class array key coercion to mixed - when we don’t know, assume bottom type
2019-04-26 07:54:21 -04:00
Tyson Andre
dbcedd300b
Fix error messages for $boolVar !== null
...
Seen for this example:
$b = rand() % 2 > 0;
if ($b !== null) { ... }
2019-04-26 00:19:46 -04:00
Brown
0e4c8ce482
Split apart TypeCoercion issues, allowing more granular issue filtering
2019-04-25 18:02:19 -04:00
Matthew Brown
3681762a9b
Add detection for callable variable use
2019-04-23 22:31:38 -04:00
Matthew Brown
9be8013633
Add a way to ignore variable method & property calls
2019-04-20 17:49:49 -04:00
Brown
205fa36fb7
Add better error messages to unused code issues
2019-04-19 11:45:22 -04:00
Brown
d6de6ca5d5
Prevent removing properties on classes with variable assignment
2019-04-18 14:47:58 -04:00
Brown
4807ebe04a
Always evaluate static calls when method call cannot
2019-04-18 13:51:34 -04:00
Brown
d51475bc03
Register magic property get/set propertyExists calls
2019-04-18 10:41:46 -04:00
Brown
a529f74473
Add support for tracking callables
2019-04-17 15:45:40 -04:00
Brown
80e28d6a4a
Add support for unused method & property automated removal
2019-04-17 11:12:18 -04:00
Brown
ff14f671b1
Add hopefully-more-portable method for evaluating method/property usage
2019-04-16 16:07:48 -04:00
Bruce Weirdan
8dda8a0ee4
cs fix
2019-04-13 12:35:49 -04:00
Bruce Weirdan
4daf94ca1d
Case-insensitive checks for var_dump and shell_exec
...
Fixes vimeo/psalm#1547
2019-04-13 12:35:49 -04:00
Brown
26e2de93c7
Prepare to enable paralellised use of --find-dead-code
...
References #1548
2019-04-12 18:28:07 -04:00
Brown
b6d0ee0777
Prevent impossible === false comparison
2019-04-12 10:30:56 -04:00
Matthew Brown
39af691d2f
Fix #1546 - catch impossible assertions to true
2019-04-12 09:38:56 -04:00
Matthew Brown
ea20a2bd04
Fix #1540 - use correct comparison for callable param types
2019-04-12 00:44:10 -04:00
Brown
be5a262deb
Add better handling for non-edge-case function calls
2019-04-11 14:53:21 -04:00
Brown
8f1dbc072d
Allow empty offset sets on arrayaccess objects
2019-04-10 17:25:25 -04:00
Brown
7f8b47c5cf
Fix buggy behaviour around callable tests
2019-04-09 18:09:57 -04:00
Brown
808522c36f
Add workaround SoapFault::__construct, fixing #1535
2019-04-09 15:06:10 -04:00
Brown
1348d634ed
Improve handling of variadic parameters
2019-04-09 13:58:49 -04:00
Brown
9447cd2d98
Prevent scalar property assertion error
2019-04-03 10:59:27 -04:00
Brown
21b1c04c1d
Fix #1526 - ignore files if they weren’t picked up in scanning step
2019-04-03 10:43:48 -04:00
Matthew Brown
ef8292cfc7
Fix #1510 - analyse mixed array offsets
2019-03-31 15:42:15 -04:00
bugreportuser
1a4b9ab25f
Allow suppressing exception issues inline
2019-03-31 14:22:19 -04:00
bugreportuser
4fc7e4affc
Give errors for all uncaught exceptions
2019-03-31 14:22:19 -04:00
Brown
1ab6345bac
Fix treatment of PDOStatement::setFetchMode
...
Fixes #1496
2019-03-29 13:26:13 -04:00
Matthew Brown
230680fd1c
Fix #1513 - use correct param types when examining abstract trait methods
2019-03-28 22:47:17 -04:00
Brown
937eb42e8b
Do not override parent return type
2019-03-28 10:43:49 -04:00
Matthew Brown
bd6fea0d57
Fix #1514 - catch static interface call
2019-03-28 08:22:44 -04:00
Matthew Brown
e9afd3a6f3
Examine arrays in unknown function calls
2019-03-27 22:13:06 -04:00
Matthew Brown
63a0e768b3
Improve type coverage in both good and bad ways
2019-03-25 22:30:40 -04:00
Brown
783f028f70
Fix #1498 - use template types from parent function
2019-03-25 11:25:43 -04:00