Matthew Brown
9c629414a7
Fix #2138 - complain when inheriting from immutable interfaces without annotation
2019-09-21 22:52:30 -04:00
Matthew Brown
340b7b9752
Fix phpcs issue
2019-09-21 21:53:39 -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
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
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
Brown
a0f7e73aea
Fix #2127 - improve behaviour of suppression discovery in threaded mode
2019-09-16 11:58:42 -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
Joram Schrijver
0b39884974
Fix some return values in the language server ( #2134 )
...
* Fix return value of LSP shutdown
It is specified as a request that returns null. Returning void causes
the language server to crash.
* Fix empty responses of LSP textDocument/definition
It is specified to return either a Location, an array of Locations, or
null. Hovers are unrelated.
* Fix responses of LSP textDocument/hover
It is specified to either return Hover or null. Psalm could previously
return a success response containing a MarkedString, but with a null
value. MarkedString is not allowed to contain null.
2019-09-14 10:14:03 -04:00
SignpostMarv
943705ce0e
load an xdebug stub when required, re: vimeo/psalm#2118 ( #2133 )
...
* load an xdebug stub when required, re: vimeo/psalm#2118
* correcting case sensitivity of XDebug to Xdebug
* only load the Xdebug stub when needed
2019-09-14 10:13:39 -04:00
Brown
944531b73b
fix #2125 - Don’t assume function args are necessarily authoratative
2019-09-11 13:52:58 -04:00
LeSuisse
a8e58b0ba0
Fix signatures of \ldap_bind() and \ldap_bind_ext() ( #2122 )
...
Both functions accepts a null $bind_rdn parameter to do an
anonymous bind and they also accept a fourth optional
parameter.
References:
https://www.php.net/manual/en/function.ldap-bind.php
https://github.com/php/php-src/blob/php-7.3.9/ext/ldap/ldap.c#L1152
https://github.com/php/php-src/blob/php-7.3.9/ext/ldap/ldap.c#L1209
2019-09-11 12:01:53 -04:00
Fabien Villepinte
601827137a
Fix the signature of sodium_crypto_scalarmult_base() ( #2119 )
2019-09-10 18:11:15 -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
9afdff5017
Remove newline
2019-09-09 17:28:32 -04:00
Brown
28a954e623
Fix #2108 - don’t worry if config can’t be found when updating baseline
2019-09-09 17:03:23 -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
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
78175c9765
Support @psalm-readonly too
2019-09-08 15:12:30 -04:00
Matthew Brown
662f094886
Don’t complain about deprecated class inside itself
2019-09-08 14:55:45 -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
a032978a85
Use a better check for functional purity
2019-09-08 11:49:14 -04:00
Matthew Brown
3dbfedb51a
Make purity test more strict again
2019-09-08 11:34:16 -04:00
Matthew Brown
0fc8c9a9bb
Soften definition of purity to allow functions that return by-ref output
2019-09-08 11:32:04 -04:00
Matthew Brown
4cac8cd70f
Don’t complain about mutating call when it was inferred during reflection
2019-09-08 10:36:57 -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
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
Matthew Brown
e7a69f715d
Fix #2106 - add defining class to converted template
2019-09-07 13:44:47 -04:00
Matthew Brown
8be43398f0
Add better handling of print_r
2019-09-07 13:01:36 -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
ADmad
da23c2e73a
Fix callmap for PDO::lastInsertId() ( #2092 )
2019-09-02 08:38:05 -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
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
6ad5d31132
Fix how hideExternalErrors behaves to match expectation
...
Fixes #2074
2019-09-01 10:56:55 -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
Tobias Nyholm
5fa06059ee
We cannot use \Psalm\Internal\Fork\Pool
before we autoloaded ( #2082 )
2019-08-31 17:14:40 -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
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
e8500e5e51
Anything calling rand/mt_rand can’t be pure
2019-08-30 16:41:59 -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
aba3659311
Add more specific key coercion rules when assigning to arrays
2019-08-27 15:12:25 -04:00
Brown
5a5629b835
Mixed value object-likes should still have string keys
2019-08-27 14:40:40 -04:00
Brown
4db8ca6a1d
Cleanup extra issues from recent fixes
2019-08-27 14:16:34 -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
Matthew Brown
25487a5b63
Break out if conditional analysis
2019-08-26 22:55:01 -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
Niklas Keller
25fbd5ddf7
Fix Generator::throw parameter type ( #2059 )
2019-08-26 00:25:17 -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
Matthew Brown
e6a93b6d52
Revert "Added ArrayObject
to the array_key_exists
signature ( #2066 )" ( #2070 )
...
This reverts commit 431678c25d
.
2019-08-25 23:46:13 -04:00
Ivan Kurnosov
431678c25d
Added ArrayObject
to the array_key_exists
signature ( #2066 )
2019-08-25 21:40:53 -04:00
Matthew Brown
b4213a9035
Don’t lower-case resource when converting ( #2063 )
2019-08-25 13:02:58 -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
Ilija Tovilo
e0cd04d809
Add more impure functions to configuration ( #2053 )
...
* Add more impure functions to configuration
Closes #2050
* Change note
2019-08-23 08:50:13 -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
LeSuisse
0860727e64
Disable progress bar automatically when GitHub Actions is detected ( #2043 )
...
https://developer.github.com/actions/creating-github-actions/accessing-the-runtime-environment/#environment-variables
2019-08-22 15:28:05 -04:00
Brown
4fcbc0fdad
Fix #2028 - warn when using deprecated class in function signature
2019-08-22 11:25:13 -04:00
Brown
855ab359fe
Break up Atomic::check
2019-08-22 11:25:13 -04:00
Brown
7797bfd71c
Refactor FunctionLikeAnalyzer::analyze
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
Matthew Brown
4fff6c28a9
add slashes
2019-08-20 19:02:23 -04:00
Brown
9696fb8dce
Follow taint to source when reporting
2019-08-20 17:38:15 -04:00
Brown
86e5e50c1b
Prevent baaad behaviour
2019-08-20 14:26:32 -04:00
Brown
95c61db513
Add a PossibleRawObjectIteration issue
2019-08-20 12:06:02 -04:00
Brown
14584d6bae
Allow use without glue
2019-08-20 11:58:19 -04:00
Brown
32d5f0bb36
Remove accomodation for implode that’s deprecated in 7.4
...
Fixes #2036
2019-08-20 11:43:58 -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
80949b2b29
Improve object-with-methods assertions
2019-08-18 18:19:26 -04:00
Matthew Brown
b8bdaea09a
Fix reconciliation of mixed to Traversable
2019-08-18 18:06:57 -04:00
Matthew Brown
1b983babd0
Allow unset of potentially invalid array key type
2019-08-18 18:06:41 -04:00
Matthew Brown
9d62971006
Fix possible issue negating falsy assertion
2019-08-18 17:51:43 -04:00
Matthew Brown
43a9ff0735
Prevent erroneous unused suppressions from plugin
2019-08-18 17:18:03 -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
b6d0aeaa9c
Avoid erroneous issue suppression complaints
2019-08-18 14:56:47 -04:00
Matthew Brown
eb50aad3a1
Fix offsets when checking function suppressions
2019-08-18 14:44:45 -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
1e400c5e1d
Add slash
2019-08-18 11:24:14 -04:00
Matthew Brown
b098b4e3b2
Fix implicit cast
2019-08-18 11:21:26 -04:00
Matthew Brown
f5b9dfe543
Add support for @psalm-scope-this
...
Ref #2032
2019-08-18 11:18:10 -04:00
Tyson Andre
ce03be2dc0
Add BeforeAnalyzeFileInterface ( #2034 )
...
This is a prerequisite of the plugin I mentioned in #378
This may be useful for other types of plugins
(e.g. checking raw file contents or file names)
2019-08-18 10:40:07 -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
d236c2d5f1
Fix use of $method_id
2019-08-16 11:48:32 -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
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
01c876e9cb
Remove stray comma
2019-08-14 00:50:35 -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
3ff2a64e16
Don’t complain about untyped properties missing constructors
2019-08-13 13:38:15 -04:00
Brown
b5614d03f8
Add detection for unused function calls
2019-08-13 13:15:23 -04:00
Matthew Brown
7533949667
Preserve taintedness of str_replace
2019-08-13 08:07:16 -04:00
Matthew Brown
a4b9b7311b
Improve message a bit
2019-08-12 23:58:40 -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
Matthew Brown
2ed28764d6
Break apart negated assertion reconciler to be more manageable
2019-08-12 00:37:55 -04:00
Matthew Brown
d3f924a49e
Fix #2004 - remove useless unset
2019-08-11 17:17:03 -04:00
Tyson Andre
f1de94967b
Allow class constant names to begin with lower-case ( #2002 )
...
Followup to e58ade5803
2019-08-11 17:13:56 -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
Michael Telgmann
5722512180
Fix setting of current_dir with 'root' command parameter ( #2001 )
2019-08-11 15:12:18 -04:00
Matthew Brown
6397421215
Return mixed in special case
2019-08-11 08:27:56 -04:00
Matthew Brown
fac7df2ee0
Explicitly mixed properties need not be initialised
2019-08-11 00:25:30 -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
585fffaa1f
Refine previous fix
2019-08-10 17:25:07 -04:00
Matthew Brown
1586cb249d
Add protection for leaky assertions
2019-08-10 16:58:57 -04:00
Matthew Brown
034799773d
Remove unused var
2019-08-10 14:45:43 -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
3cf160cbe9
Separate out assertion negation reconciliation
2019-08-10 12:04:16 -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
Gert de Pagter
5b2f54bbcb
Allow setLocale to have 0 or null as parameters ( #1993 )
2019-08-09 08:41:28 -04:00
Matthew Brown
dec612a47e
Remove blank line
2019-08-08 23:06:52 -04:00
Matthew Brown
c77bcd1388
Remove extraneous line
2019-08-08 23:01:06 -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
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
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
Matthew Brown
50bd18c404
Fix #1985 - prevent complicatedExpressionException from breaking analysis
2019-08-06 22:58:53 -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
0051636a99
Expose code location raw line number
2019-08-06 17:11:25 -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
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
Matthew Brown
ea1f9874fb
Remove more memory leaks
2019-08-02 01:55:24 -04:00
Jeffrey Yoo
73a6fbe557
catch cases of invalid use of backslash ( #1983 )
2019-08-01 16:10:12 -04:00
Brown
3a1a3ebc47
Fix #1980 - don’t complain about UnusedVariable after continue
2019-07-31 17:35:56 -04:00
Brown
f9d99498a6
Remove unused var
2019-07-31 17:30:31 -04:00
Brown
c67e38aded
Rename var to be more uniform
2019-07-31 17:14:00 -04:00
Matthew Brown
f718c2fca1
Fix #1974 - prevent bad property defaults on static properties
2019-07-29 22:18:46 -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
e58ade5803
Allow lower-cased constant names
2019-07-28 10:06:47 -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
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
ea2074b19b
Allow suppression of unused variable issues
2019-07-24 17:01:41 -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
Pavel Batečko
90d020d6fc
Improve DOM extension types ( #1965 )
...
* Improve DOM extension types
* fixup! Improve DOM extension types
2019-07-23 22:53:31 -04:00
Matthew Brown
c76380174f
Fix infinite recursion on property types
2019-07-22 23:54:33 -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
d13d37b75d
Prefix constant
2019-07-21 16:38:39 -04:00
Matthew Brown
c5d1c9aa54
Add slash
2019-07-21 16:22:04 -04:00
Matthew Brown
272ab3519d
Normalise plugin path
2019-07-21 11:56:33 -04:00
Matthew Brown
3f098bafbc
Also convert \\ to / when scanning windows configs on macs
2019-07-21 11:34:32 -04:00
Matthew Brown
39c437a54a
Fix file path weirdness when scanning config files
2019-07-21 11:32:49 -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
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
Matthew Brown
210a0fc98d
Fix #1950 - improve class_parents return
2019-07-17 08:52:05 -04:00
Brown
eb1cd2ed46
Separate out error message producer
2019-07-16 15:34:02 -04:00
Matthew Brown
0163f92bfa
Fix typo
2019-07-15 01:31:43 -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
SignpostMarv
96429ff94f
apply pretty formatting when there are no issues ( #1946 )
2019-07-13 13:44:15 -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
SignpostMarv
9ac78b5d10
add psalm config attribute re: #1804 ( #1936 )
...
* add psalm config attribute for controlling the default inclusion of php & php extension version info in the error baseline
* using method recommended by @bdsl in https://github.com/vimeo/psalm/pull/1936#discussion_r302727993
2019-07-12 10:31:12 -04:00
Brown
12eeb8b320
Fix #1935 - clear stub grandchildren
2019-07-11 18:23:02 -04:00
Brown
7268558aa7
Prevent unnecessary warnings
2019-07-11 11:07:39 -04:00
Brown
976d3bf787
Create cache directory if it doesn’t exist
2019-07-11 10:46:12 -04:00
Brown
73b1571bd7
Remove php version from default baseline generation
2019-07-11 10:41:44 -04:00
Brown
96ba4ad7d3
Fix #1925 - prevent LogicException when scanning files
2019-07-10 18:59:02 -04:00
Brown
9aa0fd022c
Fix potential coercion gotcha
2019-07-10 14:48:15 -04:00
Brown
8e149461f0
Remove unnecessary references to had_template
2019-07-10 14:03:13 -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
Matthew Brown
1ae9ea5fed
Use object instead of by-ref params
2019-07-10 01:35:57 -04:00
Tim van Dijen
d424cb3ccd
Change signature on setcookie / setrawcookie ( #1924 )
...
Version Description
7.3.0 An alternative signature supporting an options array has been added. This signature supports also setting of the SameSite cookie attribute.
2019-07-09 15:36:41 -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
Matthew Brown
5c4ac97546
Fix #1915 - allow @psalm-assert-if-true to operate on $this
2019-07-07 15:06:03 -04:00
Matthew Brown
30ecde2272
Overwrite var when try exits
2019-07-07 14:00:49 -04:00
Matthew Brown
cd715a60fd
Fix #1909 - populate var scope if try always leaves
2019-07-07 13:52:43 -04:00
Matthew Brown
5f8d4edc73
Remove unused param
2019-07-07 09:39:21 -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
40a5194cce
Fix #1907 - exit expicitly when composer.json is invalid
2019-07-06 12:20:20 -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
11fbc15372
Fix missing class
2019-07-05 16:30:51 -04:00
Matthew Brown
da42be175f
Apply PHPCS fixes
...
Fixes #1880
2019-07-05 16:27:53 -04:00
SignpostMarv
fe797580e2
using regex to reformat the opening attributes for cleaner git diffs ( #1884 )
...
* using regex to reformat the opening attributes for cleaner git diffs
* satisfy phpcs
* preg_replace_callback can return null
* typehint parameter $matches
* Simplify passed docblock
* Change is_null to strict null comparison
2019-07-05 15:40:46 -04:00
Matthew Brown
216d8ae4ab
Make signature more specific cc @SignpostMarv
2019-07-05 10:44:20 -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
457781bb02
Fix #1902 - template trait method when extended
2019-07-04 22:26:40 -04:00
Matthew Brown
678d4e5286
Fix #1901 - improve loop-based handling of vars after continue
2019-07-04 20:38:52 -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
Matthew Brown
802016757c
Fix #1891 - don’t enter class_alias if the class doesn’t exist
2019-07-04 15:46:24 -04:00