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
e8618371fb
Refine isset checks
2019-10-17 01:09:21 -04:00
Matthew Brown
54a31f8cff
Be more scrupulous about mixed vars
2019-10-17 00:29:51 -04:00
Matthew Brown
29902c8b99
Fix #2237 - suppress reconciling issues when inherited clauses couldn’t be resolved into types
2019-10-16 21:55:11 -04:00
Brown
d52d9b6552
Fix #2234 - treat continuous assertions on interfaces as redundant
2019-10-16 18:43:03 -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
aa5d82d30d
Fix #2228 - load functions defined on traits included in a class
2019-10-15 12:09:08 -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
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
1a1b3a10a9
Fix #2225 - iterator_to_array can return a list
2019-10-10 23:47:11 -04:00
Matthew Brown
0556f28a9f
Fix #2224 - make sure literal strings are put into appropriate arrays when templating
2019-10-10 23:38:57 -04:00
Matthew Brown
c419e0e798
Fix #2222 - check for @throws docblock inheritance
2019-10-10 22:44:21 -04:00
Brown
3658771bff
Fix #2221 - variadic args are lists
2019-10-10 17:46:20 -04:00
Brown
67b32f463e
Support assertions on lists
2019-10-10 10:57:43 -04:00
Brown
ead2e38985
fix test
2019-10-09 13:51:25 -04:00
Brown
e822ec7541
Unsetting list elements should turn to an array
2019-10-09 12:49:31 -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
Matthew Brown
c7600fde10
Fix #2217 - interpret callable self return type references properly
2019-10-09 07:40:42 -04:00
Matthew Brown
6a07757b9a
Fix tests
2019-10-08 22:41:23 -04:00
Matthew Brown
38de68f507
array_values should preserve array non-emptiness
2019-10-08 22:22:58 -04:00
Matthew Brown
e620c2cfa4
Fix issue creating empty array offsets
2019-10-08 21:23:16 -04:00
Brown
23fcbec584
Add a few more list types
2019-10-08 19:06:16 -04:00
Brown
16c33d1565
Add support for list type
...
Fixes #2209
2019-10-08 18:44:46 -04:00
Brown
5265aee278
Process reconciliation more aptly
2019-10-08 14:33:06 -04:00
Brown
f175050837
Fix #2214 - use better way for marking types as changed
2019-10-07 16:59:05 -04:00
Guuzen
50df2868f2
Fix issue #2201 ( #2212 )
2019-10-06 15:28:41 -04:00
bugreportuser
064d4886c3
Track exception suppressions ( #2211 )
2019-10-04 14:01:58 -04:00
Brown
3de056cdc2
Remove test that’s a bit broken
2019-10-04 14:00:53 -04:00
Brown
94001aad4a
Fix #2208 - handle templated property types appropriately
2019-10-04 13:51:36 -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
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
60214ab0c7
Allow assertions on arbitrary offsets without isset
2019-10-03 18:40:47 -04:00
Brown
ebe8bedb20
Allow assertions on class constants
2019-10-03 18:13:04 -04:00
Brown
ca06277f30
Add better support for previous key types
2019-10-03 15:43:17 -04:00
Brown
549aee47f1
Fix bug asserting array emptiness
2019-10-03 15:27:55 -04:00
Matthew Brown
3182aa51ee
Add currently-broken test
2019-10-02 01:18:57 -04:00
Matthew Brown
24977fb021
Fix small bug
2019-10-02 01:17:45 -04:00
Bruce Weirdan
ff7b46435c
Disable composer plugins for end-to-end tests ( #2194 )
...
When Psalm is installed with `composer global require vimeo/psalm` it
brings in `ocramius/package-versions`, effectively making it a global
composer plugin (so it runs for all `composer install`s, even for
totally unrelated projects).
However `ocramius/package-versions` has a peculiar quirk: it fails when
there's no `composer.lock` present, and there's no `composer.lock` for
projects that have no dependencies (like the end-to-end test projects).
The net result is that end-to-end tests always fail wherever Psalm is
installed globally.
This PR fixes it by disabling composer plugins for end-to-end tests.
2019-10-01 20:26:55 -04:00
Brown
d225374d6d
Fix #2156 - do better inference after isset
2019-10-01 19:31:08 -04:00
Brown
56856f3da0
Break up assert tests
2019-10-01 17:09:34 -04:00
Matthew Brown
325579a0b8
Skip broken test
2019-10-01 09:14:26 -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
0f7925e769
Fix #2183 - evaluate return after do with break inside
2019-09-29 16:12:52 -04:00
Matthew Brown
4ec22cffca
Fix #2184 - execute __invoke methods explicitly
2019-09-29 16:01:33 -04:00
Matthew Brown
9af8a9ac38
Fix #2181 - prevent class template types being wiped by anonymous class use
2019-09-27 12:58:32 -04:00
Brown
0972debfdd
Add test for array assertion type
2019-09-26 15:57:51 -04:00
Brown
73eb71bada
I think I understand strpos/strrpos a little better now
2019-09-26 15:31:56 -04:00
Brown
4832aa6075
Fix incorrect location for substitution
2019-09-26 15:22:33 -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
5e47cda6e5
Fix #2170 - allow @method annotations to override inherited immutable ones
2019-09-25 17:39:32 -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
2d621f185a
Fix #2166 - inherit twice from docblocks
2019-09-25 12:02:59 -04:00
Brown
267ae3a568
Move docblock inheritance tests into separate place
2019-09-25 12:02:59 -04:00
Matthew Brown
3205d1b752
Fix #2158 - loose equality should not imply equivalence
2019-09-22 10:54:17 -04:00
Matthew Brown
a5f79353ed
Fix #2157 - don’t merge closures and callable params
2019-09-22 00:58:30 -04:00
Matthew Brown
9c629414a7
Fix #2138 - complain when inheriting from immutable interfaces without annotation
2019-09-21 22:52:30 -04:00
Matthew Brown
0ae04c9743
Fix #2148 - support arrays properly
2019-09-21 21:50:11 -04:00
Matthew Brown
264131c211
Fix #2121 - no internal error on funk assertion syntax
2019-09-21 21:22:31 -04:00
Matthew Brown
ae46c9e132
Fix #2114 - make builtin constructors mutation free
2019-09-21 21:07:27 -04:00
Matthew Brown
fdbea45534
Fix #2159 - only apply elseif conditions to vars that exist in main context
2019-09-21 16:58:31 -04:00
Matthew Brown
d387a1966c
Fix array_slice return type
2019-09-21 15:50:37 -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
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
Brown
0ac9108814
Fix #2139 - allow comprehension of constant ternaries
2019-09-17 11:29:41 -04:00
Brown
6423a5e68a
Fix #2145 - complain make byref params passed to closures mixed afterwards
2019-09-16 18:42:44 -04:00
Matthew Brown
0b4981f01b
Fix #1551 - do better at inferring class constant types
2019-09-14 14:26:31 -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
Matthew Brown
deb36e8b27
Allow array_map alone when it uses a closure
2019-09-09 21:28:56 -04:00
Brown
a6baa2d04c
Allow callables to be understood as pure
...
Fixes #2112
2019-09-09 12:11:04 -04:00
Brown
3c7fd94503
Add more test cases for @psalm-external-mutation-free
2019-09-09 11:23:51 -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
Brown
21aa162d0a
Make assert() pure
...
Fixes #2113
2019-09-09 10:43:10 -04:00
Brown
56c884845f
Static methods inside @psalm-immutable class should be permitted
...
Fixes #2109
2019-09-09 10:38:55 -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
d27935d109
Improve accuracy around array addition
2019-09-08 10:23:12 -04:00
Matthew Brown
b61d0c6dcd
Fix #2104 - only treat @method returns as separate if attached to method name
2019-09-07 22:30:09 -04:00
Matthew Brown
85ae8f93d2
Clear out property assignments when necessary
2019-09-07 18:34:18 -04:00
Matthew Brown
e7a69f715d
Fix #2106 - add defining class to converted template
2019-09-07 13:44:47 -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
Matthew Brown
44838fce21
Fix test example
2019-09-01 22:13:16 -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
5f0514b3da
Remove stray comma
2019-09-01 16:55:03 -04:00
Matthew Brown
9cbe389285
Fix #910 - dead code issues with abstract vendor method
2019-09-01 16:52:40 -04:00
Matthew Brown
b4178c7ee1
Fix #2013 - don’t add more specific return type when @inheritdoc present
2019-09-01 16:00:52 -04:00
Matthew Brown
914ef5a5dd
Fix #2091 - $this properties should be replaced in trait types
2019-09-01 15:45:28 -04:00
Matthew Brown
da1f36b57f
Fix #2089 - properly coerce arguments
2019-09-01 10:10:38 -04:00
Matthew Brown
0279c6f6d9
Allow mutation-free method calls in pure functions
2019-08-31 22:03:37 -04:00
Matthew Brown
dee2cf3281
Detect use of static inside pure function
2019-08-31 21:31:53 -04:00
Matthew Brown
dcc4de59df
Change @immutable to @psalm-immutable
2019-08-31 18:43:45 -04:00
Matthew Brown
37d09cdefa
Fix call to impure function
2019-08-31 15:01:53 -04:00
Matthew Brown
f20dc16295
Make @immutable work properly
2019-08-31 10:07:23 -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
7886d5a408
Add support for @psalm-mutation-free annotation on methods
2019-08-31 00:47:12 -04:00
Matthew Brown
504ccdab8c
$a++, $a-- etc should be treated as assignments
2019-08-30 18:06:45 -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
9bd7f21a9d
Fix #2083 - don’t bludgeon method_exists first type
2019-08-29 14:27:25 -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
1cb8c3f6c4
Infer missing docblock-supplied types from constructor
...
Fixes #2071
2019-08-27 10:37:39 -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
853e92e7fc
Fix #2073 - better understand assignments inside elseif
2019-08-26 22:55:28 -04:00
Brown
febd60dade
Add better handling of catch-reassigned vars
...
Ref #2052
2019-08-26 11:41:15 -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
d09a427214
Don’t make test reliant on knowing about Exception
2019-08-26 00:24:56 -04:00
Matthew Brown
781e711243
Allow use of namespaced Resource class
...
Ref #2052
2019-08-26 00:08:18 -04:00
Matthew Brown
03f59ae05e
Check other arguments of array_unshift/array_push
...
Ref #2052
2019-08-25 23:52:38 -04:00
Brown
80d9b5dc29
Add support for iterating over SimpleXMLElement
2019-08-23 14:15:20 -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
4fcbc0fdad
Fix #2028 - warn when using deprecated class in function signature
2019-08-22 11:25:13 -04:00
Thomas Bley
149402abda
Extend impure functions ( #2042 )
...
* extended impure functions, fixes #2038
* extended UnusedCodeTest #2038
2019-08-21 13:12:13 -04:00
Brown
9835943294
Fix #2041 - make sure property is always set
2019-08-21 11:25:08 -04:00
Brown
3001eb9d34
Move taint location to end
2019-08-21 09:53:00 -04:00
Brown
9696fb8dce
Follow taint to source when reporting
2019-08-20 17:38:15 -04:00
Brown
95c61db513
Add a PossibleRawObjectIteration issue
2019-08-20 12:06:02 -04:00
Matthew Brown
302ed4b21b
Support existing concatenation more better
2019-08-20 00:33:59 -04:00
Matthew Brown
73f245f91d
Allow compounding method_exists types with ||
2019-08-20 00:00:20 -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
Brown
a3e9dec925
Allow multiple method_exists checks to inform type
2019-08-19 10:08:21 -04:00
Matthew Brown
920c2d83c3
Use types for method_exists checks in some places
2019-08-18 22:27:19 -04:00
Matthew Brown
b8bdaea09a
Fix reconciliation of mixed to Traversable
2019-08-18 18:06:57 -04:00
Matthew Brown
9d62971006
Fix possible issue negating falsy assertion
2019-08-18 17:51:43 -04:00
Matthew Brown
6ea68e9f7f
Clean up more unused @psalm-suppress annotations
2019-08-18 16:59:56 -04:00
Matthew Brown
c5f62d261d
Remove redundant @psalm-suppress in Psalm’s codebsae
2019-08-18 16:10:12 -04:00
Matthew Brown
5d94e340ee
Remove unused suppressions in tests
2019-08-18 15:34:32 -04:00
Matthew Brown
2a5e0d8f39
Fix #1444 - track unused suppressions
2019-08-18 14:27:50 -04:00
Matthew Brown
2146f73782
Prepare for tracking unused suppressions
...
Ref #1444
2019-08-18 12:25:48 -04:00
Matthew Brown
f5b9dfe543
Add support for @psalm-scope-this
...
Ref #2032
2019-08-18 11:18:10 -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
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
236a7ffd15
Fix #2027 - fix improperly retained callable check
2019-08-16 10:32:03 -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
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
a4d57e5524
Fix #2018 - prevent fatal error on class_aliased class reference
2019-08-15 10:17:27 -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
7622f11a20
Add a couple of skipped tests
2019-08-14 17:15:35 -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
2b2988b072
Fix #2019 - allow union in @throws
2019-08-13 15:44:18 -04:00
Brown
d6e084ec9c
Remove false-positive for callmap function arg
2019-08-13 14:53:31 -04:00
Brown
55cfbdcd5f
Fix erroneous complaint for str_replace
2019-08-13 14:26:25 -04:00
Brown
0468d11158
Detect function in array access op
2019-08-13 14:07:45 -04:00
Brown
da230bc9f1
Change the type of @throws error to UndefinedDocblockClass
2019-08-13 13:41:12 -04:00
Brown
b5614d03f8
Add detection for unused function calls
2019-08-13 13:15:23 -04:00
Matthew Brown
ef3771d643
Fix #2015 - complain about invalid @throws classes
2019-08-12 23:42:51 -04:00
Matthew Brown
d5b026839c
Add support for different taint types ref #1990
2019-08-12 23:16:05 -04:00
Brown
58b6d8bed4
Fix #2012 - count(callable-array) is fine and always equals 2
2019-08-12 16:17:55 -04:00
Brown
10b8a94564
Fix #2007 - improve unused variable detection in always-entered loops
2019-08-12 16:01:24 -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
62451762fa
Preserve type params when negating array on iterable type
...
Fixes #2005
2019-08-12 00:44:26 -04:00
Tyson Andre
b88fe2cfe0
Fix typos ( #2003 )
2019-08-11 17:13:43 -04:00
Matthew Brown
7ed30cd5b0
Add support for @readonly annotation
2019-08-11 16:01:37 -04:00
Matthew Brown
7c6b1581d3
Add warnings about uninitialised properties to mixed as well
2019-08-11 00:22:28 -04:00
Matthew Brown
e32b92be6b
Fix #1986 - do better inference after isset on array offsets
2019-08-10 23:22:48 -04:00
Matthew Brown
1586cb249d
Add protection for leaky assertions
2019-08-10 16:58:57 -04:00
Matthew Brown
af0331c251
Fix #1997 - fix reconciliation of arrays and traversables
2019-08-10 14:39:14 -04:00
Matthew Brown
60c0133fff
Break apart reconciler
2019-08-10 13:22:21 -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
Matthew Brown
53817ed40b
Fix #1991 - allow overlapping code to subsume manipulations inside
2019-08-08 22:58:54 -04:00
Brown
cf53f5d825
Ignore spaces when array keys have $ at start
2019-08-08 18:01:08 -04:00
Brown
bdac01582d
Fix #1989 - support fully-qualified params in @method annotations
2019-08-08 17:25:56 -04:00
Brown
955899ade0
Builtin functions are assumed to be pure
2019-08-07 15:21:15 -04:00
Matthew Brown
b5eb63bb2d
Revert "Coerce value with array-offset to array|ArrayAccess"
...
This reverts commit a8a67bc7e7
.
2019-08-07 00:36:45 -04:00
Matthew Brown
a8a67bc7e7
Coerce value with array-offset to array|ArrayAccess
...
Fixes #1986
2019-08-07 00:31:53 -04:00
Brown
14b37b95af
Fix potential recursion
2019-08-06 17:29:44 -04:00
Brown
37d93141c4
Only register taints on known magic properties
2019-08-06 13:05:34 -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
Brown
87bf907c1e
Fix echo checks
2019-08-05 10:21:23 -04:00
Matthew Brown
b2c0993cdc
Add framework for taint analysis to Psalm
...
Ref #611
2019-08-04 10:37:36 -04:00
Jeffrey Yoo
73a6fbe557
catch cases of invalid use of backslash ( #1983 )
2019-08-01 16:10:12 -04:00
Brown
6a213a60aa
Make test name align with tested thing
2019-07-31 17:42:01 -04:00
Brown
3a1a3ebc47
Fix #1980 - don’t complain about UnusedVariable after continue
2019-07-31 17:35:56 -04:00
Matthew Brown
f718c2fca1
Fix #1974 - prevent bad property defaults on static properties
2019-07-29 22:18:46 -04:00
Matthew Brown
c887d907e3
Add missing return type
2019-07-28 20:42:35 -04:00
Matthew Brown
90854c4094
Fix broken behaviour when analysing interface test methods
2019-07-28 19:44:36 -04:00
Matthew Brown
f432cc0884
Fix #1846 - warn about missing interface return types
2019-07-28 19:03:12 -04:00
Matthew Brown
c356b579fd
Prevent empty @template-extends docblock from being a fatal error
...
Fixes #1963
2019-07-28 16:47:06 -04:00
Matthew Brown
de932c4c18
Fix #1972 - improve understanding of how setcookie works
2019-07-28 16:40:35 -04:00
Matthew Brown
2f400381a5
Fix #1973 - bust method mutation cache when reloading language server
2019-07-28 10:05:51 -04:00
Brown
8cb5d012d9
Check expressions in variable name static calls
2019-07-25 09:45:11 -04:00
Matthew Brown
2c89a97f91
Fix #1970 - make sure reconciled types are templated
2019-07-25 08:33:27 -04:00
Matthew Brown
5a4a133f50
Fix #1970 - allow comparison to templated param class
2019-07-24 22:13:51 -04:00
Brown
5770a6c904
Add support for compact
2019-07-24 17:24:23 -04:00
Brown
ea2074b19b
Allow suppression of unused variable issues
2019-07-24 17:01:41 -04:00
Brown
862f48503f
Fix tests
2019-07-24 17:00:27 -04:00
Brown
e22e0ac92c
Fix unused ref in assign op
...
Fixes #1968
2019-07-24 16:53:14 -04:00
Jeffrey Yoo
ed61bcafda
Issue 1926 unused variable ( #1967 )
...
* add support for Psalter to remove UnusedVariable
* fix issues found by Psalm
* fix stylistic issues found by phpcs
* added more stylistic changes and suppressed UndefinedClass error for Psalm
* suppress TypeDoesNotContainType error for CheckTrivialExprVisitor
* fix whitespace issue raised by phpcs
* fix bug where partial removal of assignment by ref does not process '&' symbol
* Remove workspace files
* remove 'Array_' and 'ArrayItem' classes from blacklist and add 'New_' class to the blacklist
2019-07-24 16:48:54 -04:00
Brown
c283f0877d
Analyse binary ops always
2019-07-22 18:04:52 -04:00
2e3s
f15cc7dd5b
Mark private properties unused when referenced only in constructor ( #1962 )
...
* Mark private properties unused when referenced only in constructor
If a private property is used only in constructor then most likely
it's a dead code since there is no need to have the class property.
But such static properties can be accessed between the calls.
* Ignore the private property issue on alter
* Fix the related dead code psalm
* Add a missing condition into the test
2019-07-21 23:29:16 -04:00
Matthew Brown
76508e6d64
Improve behaviour of templated template assertions
...
Fixes #1956
2019-07-21 01:40:19 -04:00
Matthew Brown
3516b48173
Break out templated assertion tests
2019-07-21 01:10:33 -04:00
Bruce Weirdan
e0a59ce117
Fixed PHP 7.4 related issues ( #1957 )
...
- s/fn/f/g (fn is a reserved keyword in 7.4)
- ReflectionType::__toString() warning (this method is deprecated in 7.4)
Note that some issues are caused by `phpspec/propecy` code and will be
fixed when phpspec/propecy#432 lands. Most were caused by
`ReflectionType::__toString()` usage in
`Psalm\Internal\Codebase\Reflection` though.
2019-07-18 23:36:39 -04:00
Matthew Brown
8d63d5dc4e
Add lookup for builtin functions
2019-07-18 23:30:44 -04:00
Matthew Brown
5583ae842e
Refactor signature selection a little
2019-07-18 23:08:54 -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
Matthew Brown
74e1b521a5
Add support for completing builtin class names
...
Fixes #1863
2019-07-17 22:50:57 -04:00
Matthew Brown
ab50c6ce2e
Fix #1949 - check that aliased name doesn’t exist before transforming
2019-07-17 20:33:44 -04:00
Brown
59dd6393f5
Fix #1953 - support third arg for explode
2019-07-17 14:13:34 -04:00
Brown
28fbafa207
Break out tests for algebra
2019-07-15 16:08:38 -04:00
Matthew Brown
18da84c713
Fix #1937 - allow proper reconciliation on templated values
2019-07-15 01:26:08 -04:00
Sergey Melesh
af875439e7
Inherit throws docblock from parent class by default ( #1947 )
2019-07-14 17:29:04 -04:00
Sergey Melesh
ee1387473f
Fix throws docblock inheritance ( #1945 )
2019-07-13 10:10:51 -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
12eeb8b320
Fix #1935 - clear stub grandchildren
2019-07-11 18:23:02 -04:00
Brown
7d05568e22
Add skipped test for broken stubbing behaviour
...
Ref #1935
2019-07-11 12:51:43 -04:00
Brown
73b1571bd7
Remove php version from default baseline generation
2019-07-11 10:41:44 -04:00
Brown
9aa0fd022c
Fix potential coercion gotcha
2019-07-10 14:48:15 -04:00
Brown
2cb7625515
Fix #1932 - coerce empty array passed as template param to general
2019-07-10 13:54:06 -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
Brown
884a03078b
Fix #1886 - derived types from templates in new calls should be coercable
2019-07-09 14:48:26 -04:00
Matthew Brown
6cbf499f14
Fix #1922 - ignore iterable/array when transforming assertions
2019-07-09 07:38:37 -04:00
Bruce Weirdan
173a40e769
Deprecated Psalm\isAbsolutPath in favor of Webmozart\PathUtil\Path::isAbsolute ( #1921 )
2019-07-07 21:20:12 -04:00
Bruce Weirdan
6a74cf96a1
Allow backslash after drive name ( #1917 )
...
* Allow backslash after drive name
Before, paths like `C:/path/to/something` were considered absolute, but
`C:\path/to/something` were not
Refs vimeo/psalm#1913
* Revert "Mark testPluginFilenameCanBeAbsolute incomplete on Windows (#1914 )"
This reverts commit 210ac39d00
.
2019-07-07 19:06:31 -04:00
Barney Laurance
210ac39d00
Mark testPluginFilenameCanBeAbsolute incomplete on Windows ( #1914 )
2019-07-07 15:21:25 -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
820eba1151
Add test for null init
2019-07-07 14:01:33 -04:00
Matthew Brown
cd715a60fd
Fix #1909 - populate var scope if try always leaves
2019-07-07 13:52:43 -04:00
Matthew Brown
bceb4efde9
Fix #1911 - allow proper namespaces in union assertions
2019-07-07 09:14:23 -04:00
Barney Laurance
ea83068deb
Allow resolving directories from config file location (continued) ( #1910 )
...
* Extract function getPsalmHelpText() from psalm.php
* Extract initialiseConfig from psalm.php
* Add -c as valid short option for psalter and psalm-refactor
* Use initialiseConfig in psalter, psalm-refactor and psalm-language-server as well as psalm
* Rely on psalm --alter resolving directory from config file in test
* Remove erronous condition for config file path
This code was based on me wrongly thinking that the config file location
was seprated from the argument name with a space instead of an equals
sign
* Use config dir as current dir in psalm and psalm-refactor, as with psalter and psalm-language-server
* Remove redundant duplicated code
* Refactor: move calls to \Psalm\Config::setComposerClassLoader inside initialiseConfig
* PHPCS fix
* Extract function get_path_to_config from command scripts
* Refactor - extract functions from \Psalm\Config::loadFromXML
* Refactor - reduce verbosity of config loading code
* Allow running e2e tests on windows
* Fix testCompactReport on Windows
* convert line endings to make testCompactReport pass on Windows
2019-07-07 08:55:53 -04:00
Barney Laurance
94f934627c
Work in progress - resolve directories from config file location ( #1904 )
...
* Add resolveFromConfigFile config option
Treats all paths as relative to the location of the config file, not
the current working directory of the process.
This commit just changes psalm, further commits will be needed to
apply the change to psalter and the LSP server.
* Copy asset xml files into project root for testing, delete during teardown
Needed since paths are now resolved relative to the position of the
file.
Not sure why I only saw a test failre for 1.xml - would have expected it
for all eight files.
* Fix following rebase
* Move psalm --init handly code above working directory setting code
If there's no psalm.xml yet we can't use the location of psalm.xml to
set our working directory
* Move Psalm version output code above working directory resolution
Working directory doesn't need to be known to output version constant
* Rely on new config file based working directory in end to end test
* Dont use rely on config dir for --alter - not currently working
* Fix code style error
* Add failing test for supporting config without `resolveFromConfigFile="true"`
* Don't treat config directory as a path to check
* Document resolveFromConfigFile setting
2019-07-06 12:21:39 -04:00
Matthew Brown
e6bd30cc0b
Allow closures to contain templated @var docblocks
...
Fixes #1865
2019-07-06 00:18:53 -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
b4f03abca6
Fix #1886 - allow empty array to be coerced to a mixed one
2019-07-05 17:44:22 -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
422d9944d8
Fix #1903 - inherit @method from parent interfaces
2019-07-04 22:39:28 -04:00
Matthew Brown
20b7ff1f9d
Add unused test
2019-07-04 22:25:49 -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
9c95dfad44
Skip failing test
2019-07-04 16:44:06 -04:00
Matthew Brown
d0f6f85dba
Fix #1899 - detect dead code after array assignment
2019-07-04 16:38:31 -04:00
Matthew Brown
802016757c
Fix #1891 - don’t enter class_alias if the class doesn’t exist
2019-07-04 15:46:24 -04:00
Matthew Brown
efe096c7ab
Fix #1897 - add support for unions in @psalm-assert annotations
2019-07-04 15:05:55 -04:00
Matthew Brown
df3d7e1d2c
Make line endings mostly all the same
2019-07-03 16:58:27 -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
220fa31404
Fix suppression
2019-06-30 11:14:05 -04:00
Matthew Brown
36e2ea6881
Fix #1822 - update use statements with classes
2019-06-30 11:12:50 -04:00
Matthew Brown
8aadf93402
Fix return type
2019-06-29 21:56:34 -04:00
Matthew Brown
62fb86aef0
Fix #1875 - improve printing of iterable type
2019-06-29 21:46:01 -04:00
Matthew Brown
ca53019d6b
Simplify class completion lookup
...
Ref #1822
2019-06-29 21:32:26 -04:00
Matthew Brown
622ad800cc
Don’t rescan if the problem is unbalanced braces
2019-06-29 00:22:41 -04:00
Matthew Brown
cb28c44228
Fix #1873 - allow spread operators in inferred property types
2019-06-28 22:28:35 -04:00
Brown
5943f6036e
Fix #1859 - allow function_exists introspection when function exists
2019-06-28 10:48:30 -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
ba121a94e7
Allow union of class-strings in signature
...
Ref #1851
2019-06-27 11:44:35 -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
1864d9a2be
Allow templated @var on return docblocks
2019-06-26 16:26:14 -04:00
Brown
5ed49c0c03
Fixed #1848 - allow static class strings to be compared
2019-06-26 15:11:16 -04:00
Matthew Brown
372a512a86
Don’t convert trait self to trait name
2019-06-26 00:28:43 -04:00
Matthew Brown
c66a106622
Improve performance by doing less cloning
...
Ref #1837
2019-06-26 00:14:06 -04:00
Matthew Brown
70a1696a04
Limit template expansion of possibly-mixed vars
2019-06-25 23:43:25 -04:00
Matthew Brown
3a52ccd5a6
Add tests for things that should work
2019-06-25 21:46:18 -04:00
Matthew Brown
41837eb62c
Run in directory
2019-06-25 20:55:30 -04:00
Matthew Brown
0da801fee1
Prevent failure in end-to-end test from affecting others
2019-06-25 20:38:44 -04:00
Brown
16bf5f11e1
Fix #1845 - prevent string return when expecting template
2019-06-25 15:06:02 -04:00
Brown
6cb52d2d0e
Move strings that reference T::class
2019-06-25 14:15:58 -04:00
Brown
e5016a4ffc
Break out function class-string tests in a separate file
2019-06-25 14:13:00 -04:00
Brown
91686bef4b
Improve robustness of template checks
2019-06-25 13:20:30 -04:00