1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-13 09:47:29 +01:00
Commit Graph

1071 Commits

Author SHA1 Message Date
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
Brown
16bf5f11e1 Fix #1845 - prevent string return when expecting template 2019-06-25 15:06:02 -04:00
Brown
91686bef4b Improve robustness of template checks 2019-06-25 13:20:30 -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
23a3b0dbc0 Fix #1842 - prevent bad templated object returns 2019-06-24 19:07:29 -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
Brown
2a1ed6ca6a Prevent incorrect template being passed to function 2019-06-24 10:54:03 -04:00
Matthew Brown
766b1b0384 Add reference, not type
Ref #1835
2019-06-23 09:10:43 -04:00
Matthew Brown
37ffd6dad6 Fix #1832 - add references to docblock types 2019-06-23 08:47:49 -04:00
Matthew Brown
4735955829 Fix #1835 - move reference generation before argument analysis 2019-06-23 08:08:00 -04:00
Matthew Brown
ec104be6e2 Add offset to atomic type
Ref #1832
2019-06-23 00:19:41 -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
Matthew Brown
2a4072b1be Resolve docblock self refs as soon as possible
Fixes #1827
2019-06-20 23:38:10 -04:00
Brown
7b4dbb1c85 Fix #1826 - don’t allow mixed unions when combining with object-like array 2019-06-20 20:13:36 -04:00
Brown
ac06ea659e Fix #1825 - improve behaviour of callable reconciliation 2019-06-20 19:46:42 -04:00
Brown
db38270a6a Clone closure param types before combining 2019-06-20 19:09:10 -04:00
Brown
c93c2a4843 Don’t modify AST when analyzing array_filter 2019-06-20 14:14:48 -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
84e002e9a7 Fix #1816 - convert array_filter strings to full closures 2019-06-19 17:42:42 -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
b12f05185a Fix #1799 - support trailing commas in object-like docblock types 2019-06-18 17:47:06 -04:00
Brown
1bdd444ce6 Fix #1802 - ensure directory exists before moving file 2019-06-18 17:16:10 -04:00
Brown
10613192c9 Fix #1803 - complain about DeprecatedClass when using its constants 2019-06-18 16:21:04 -04:00
Matthew Lewinski
ac0a9d1514 Add a 'sonarqube' report type (#1808)
This JSON report is suitable for import into either SonarCloud or
SonarQube as Generic Issue Data (also known as an External Issue
Report).

https://docs.sonarqube.org/latest/analysis/generic-issue/
2019-06-17 21:17:09 -04:00
Barney Laurance
5ab5ec261c Speed up CircleCI build (#1805)
* Use multiple threads to speed up psalm self analysis in CicleCi

* Use non-zero exit code when pcntl needed and not loaded

* Merge install and static analysis jobs in CircleCI

Saves about 20 seconds of 'spin up environment' time
2019-06-17 16:42:47 -04:00
Brown
250ef02687 Fix #1801 - add support for class_exists(Foo::class) too 2019-06-17 11:31:43 -04:00
Matthew Brown
a0866da88e Strip extranous data 2019-06-16 12:45:02 -04:00
Matthew Brown
f46ccf0a5d Strip text from end of @psalm-type 2019-06-16 12:39:07 -04:00
Matthew Brown
7fc11af49e Fix docblocks with @andrew-demb’s suggestions 2019-06-16 09:12:32 -04:00
Matthew Brown
c4551bd0df Fix issue where extension_loaded stopped constructor being recognised 2019-06-15 18:49:58 -04:00
Matthew Brown
d7f5fa29df Suppress extra thing 2019-06-15 18:36:45 -04:00
Matthew Brown
38cee39c22 Be more lenient returning false 2019-06-15 18:34:18 -04:00
Matthew Brown
69a2fa3bf9 Experiment with calling closure in method 2019-06-15 18:29:24 -04:00
Matthew Brown
55aa1f78cb Add more specific types to closures 2019-06-15 18:24:43 -04:00
Matthew Brown
9c03dfa1d3 Don’t quit after a bad run 2019-06-15 18:15:04 -04:00
Matthew Brown
41cdde514f Fix #1784 - detect missing end brackets 2019-06-15 17:57:40 -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
afc2f18d18 Allow ImplicitToStringCast when sending an object to scalar-accepting param 2019-06-15 12:11:42 -04:00
Matthew Brown
5a64e97f0f Fix #1793 - warn on deprecated function 2019-06-15 12:09:15 -04:00
Matthew Brown
fbd8faadaf Fix #1792 - allow scalar for sprintf 2019-06-15 11:56:59 -04:00
Brown
d1630863ad Fix #1787 - prevent initialisation when nullable isn’t set 2019-06-14 16:53:40 -04:00
Brown
edf3307f84 Fix Psalm errors 2019-06-14 15:55:23 -04:00
Brown
1bc1af140f Move method calls outside classes and __CLASS__ constants 2019-06-14 15:54:15 -04:00
Brown
58b6ce3483 Fix bugs when moving methods that reference each other 2019-06-14 14:41:44 -04:00
Brown
7a6395490c Allow @property to contain union types 2019-06-14 10:45:00 -04:00
Brown
2fba2e42a9 Fix #1771 - allow psalm-refactor to manipulate namespaces 2019-06-13 18:28:46 -04:00
Brown
a341e867da Add explanation for return 2019-06-13 16:28:21 -04:00
Brown
24eadc865f Get out if method already analysed and not diffing methods 2019-06-13 16:15:29 -04:00
Brown
844442e039 Fix #1780 - set open file contents on save 2019-06-13 15:25:55 -04:00
Josh Di Fabio
78a9d1aa9b Ensure any queued file analyses are done before completion
Language Server
---------------

When typing quickly, the LSP client can send multiple messages
in a group, including didChange messages followed by completion
messages. Currently, LanguageServer::doAnalysis() is only called
after a message group is processed. This can result in completion
being done with outdated file contents for example:

Message group with two messages is received
  1. `didChange`: file analysis is queued for modified file
  2. `completion`: completion attempted on stale file contents
  3. `messageGroupRead`: analysis is done, but too late for completion

This commit ensures that any queued file analyses are done prior
to serving completion requests.
2019-06-13 09:04:52 -04:00
Matthew Brown
53506fb879 Fix #1770 - fix notice that should not be 2019-06-12 09:13:59 -04:00
Brown
9c4599a0f0 Add better support for inheriting docblocks 2019-06-11 11:19:57 -04:00
Brown
7cf8c362f0 Fix #1766 - interpret interface parent extends properly 2019-06-11 10:49:39 -04:00
Brown
010f911d22 Fix replacement of local types 2019-06-11 10:33:52 -04:00
Brown
45f2d986e6 Allow multiple class renames at once 2019-06-10 17:09:34 -04:00
Brown
c21e9917fa Add config flag to prevent inferring property types from constructor 2019-06-10 14:41:21 -04:00
Brown
aa2fde521a Fix #1703 - infer properties from class params 2019-06-10 12:00:32 -04:00
Matthew Brown
e1255db32a Prevent if checking unless we’re in a top-level if 2019-06-10 00:02:36 -04:00
Matthew Brown
158a2150a7 Fix #1752 - don’t enter if/else when class/interfaces/functions don’t exist 2019-06-09 23:50:28 -04:00
Matthew Brown
c0a9ccb385 Fix handling of unused params in threaded mode 2019-06-09 17:02:21 -04:00
Matthew Brown
348ed24881 Remove unused things 2019-06-09 13:12:08 -04:00
Matthew Brown
0145e60e6a Allow property default to include value-of option 2019-06-09 12:47:27 -04:00
Matthew Brown
b5cbc84351 Fix #1617 - add option to only show errors in reports 2019-06-09 12:37:28 -04:00
Matthew Brown
93f81f599e Fix #1764 - prevent UndefinedInterfaceMethod error when checking initialisation 2019-06-09 09:18:05 -04:00
Matthew Brown
537fbf059a Allow moving instance method into subclass 2019-06-08 16:59:19 -04:00
Matthew Brown
395057c6df Fix #1738 - constrain template type when class-string<T> is a param 2019-06-08 11:08:08 -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
Matthew Brown
2fa0f27872 Prevent LessSpecificImplementedReturnType with extended template 2019-06-07 18:42:26 -04:00
Brown
c81a9a8737 Fix #1742 - allow is_countable assertion to mean something 2019-06-07 15:49:10 -04:00
Brown
4660beb28e Still look at param defaults even without param types 2019-06-07 14:24:15 -04:00
Brown
3c3c8cd3b9 Always analyse class constants 2019-06-07 13:23:52 -04:00
Brown
b00d51b7db Allow misplaced required params so Psalm still inspects the code 2019-06-07 09:25:12 -04:00
Matthew Brown
20c66f693e Fix handling of class const types 2019-06-06 18:46:40 -04:00
Matthew Brown
36ac342496 Fix handling of property type with default 2019-06-06 17:42:23 -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
Brown
0221282074 Be resilient to docblock spaces 2019-06-06 13:57:00 -04:00
Matthew Brown
0287adfd44 Fix const replacements when moving classes 2019-06-06 07:05:30 -04:00
Matthew Brown
4fc5d1d5c8 Rewrite use statements 2019-06-05 22:13:33 -04:00
Matthew Brown
c6063d1378 Only replace same-file param docblock types 2019-06-05 19:32:27 -04:00
Brown
ddd287fb3d Move exception classes 2019-06-05 11:33:04 -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
f327d75116 Add actual file moving 2019-06-05 08:50:24 -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
Matthew Brown
13779e760e Fix #1736 - forbid | in @psalm-assert 2019-06-05 00:46:55 -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
Brown
20422cf223 Fix #1730 - parse @param * $foo properly 2019-06-03 15:46:25 -04:00
Brown
523ad144a2 Fix @psalm-suppress with newline 2019-06-03 15:02:28 -04:00
Brown
9d1b620f55 Fix too-long line 2019-06-03 11:26:25 -04:00
Brown
ae8ccdbcd7 Add add info notification to progress 2019-06-03 11:20:42 -04:00
Brown
6eecb46b34 Fix #1725 - mcrypt_get_cipher_name was incorrect 2019-06-03 10:35:16 -04:00
Brown
29eda50ed9 Fix #1716 - no notice when using single arg in min 2019-06-03 10:33:54 -04:00
Brown
2f29dcce93 Fix #1728 - remove extra data in template-extends annotation 2019-06-03 10:28:54 -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
fc0f625f62 Add safeguards to prevent bad refactor input 2019-06-02 23:33:57 -04:00
Matthew Brown
2439a9f6a0 Allow instance method renaming, too 2019-06-02 12:02:39 -04:00
Bruce Weirdan
1c03d6f076 Implemented multiple composer roots for plugins (#1723)
Refs vimeo/psalm#1710
2019-06-02 11:23:56 -04:00
Matthew Brown
5eb7cb9b04 Improve file update progress output 2019-06-02 09:59:45 -04:00
Matthew Brown
2b0a17c1c8 Add simple tool to move static methods 2019-06-02 01:10:50 -04:00
Matthew Brown
a8046376dd Use existing method in functiondocblockmanipulator 2019-06-01 18:46:24 -04:00
Matthew Brown
c569f3932c Use separate method for parsing docblocks 2019-06-01 18:44:59 -04:00
Matthew Brown
22b6c8120a Fix spacing issue 2019-06-01 17:22:33 -04:00
Matthew Brown
08544b8af9 Fix build 2019-06-01 17:10:53 -04:00
Matthew Brown
62be1cc1b0 Add rest of files 2019-06-01 16:57:33 -04:00
Matthew Brown
736f01c29e Store more accurate return type location 2019-06-01 13:02:20 -04:00
Matthew Brown
e438387149 Shorten too-long line 2019-06-01 12:26:48 -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
Jørn Åne
0420865f72 Mark passphrase in openssl as nullable (#1718) 2019-06-01 08:53:11 -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
5d39158787 Buffer messages a little, to reduce inter-process communication 2019-05-31 12:14:53 -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
84c0554595 Get function analyser once per method 2019-05-31 01:49:54 -04:00
Matthew Brown
cd969c51e5 Generate missing param types from callers
Fixes #1707
2019-05-31 01:47:35 -04:00
Brown
9d7cf66279 Attempt to buffer unsent messages 2019-05-30 16:54:15 -04:00
Brown
8fd59674a2 Disable progress bar when forking processes 2019-05-30 15:15:12 -04:00
Brown
1774d4029b Disable progressbar in threaded mode 2019-05-30 14:56:11 -04:00
Brown
1321b44e9f Improve logic for Psalm 2019-05-30 14:47:31 -04:00
Brown
7839da14e0 Add some basic retry logic 2019-05-30 14:29:15 -04:00
Brown
2975642a7a Ignore task done message error 2019-05-30 14:10:22 -04:00
Brown
76bdfb7c7b Ignore range issues with serialised message 2019-05-30 13:50:00 -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
Matthew Brown
962d8f30a1 Fix #710 - treat keyed intersections of iterators properly 2019-05-29 19:58:54 -04:00
Brown
e85794038f Fix #1704 - improve type coercion complaints 2019-05-29 14:22:15 -04:00
Matthew Brown
e31cdf3be5 Fix #1701 - allow count to be called on SimpleXMLElement 2019-05-29 07:56:06 -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
Brown
7df88197ef Fix #762 - support key-of and value-of types 2019-05-28 10:44:04 -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
ADmad
2eae79060f Fix argument type for sprintf(). (#1697)
* Fix argument type for sprintf().

* Fix argument types for mail().
2019-05-27 17:51:37 -04:00
Matthew Brown
518330dcf4 Fix class constant assertions on self/static 2019-05-27 13:33:14 -04:00
Matthew Brown
c5e682d312 Fix #1696 - decrease memory usage by keeping parser 2019-05-27 13:14:50 -04:00
Matthew Brown
4302596654 Revert "Implement better progress"
This reverts commit 042070d0fd.
2019-05-27 13:07:02 -04:00
Matthew Brown
e41733d789 Revert "Implement dots progress bar"
This reverts commit 0c5837b246.
2019-05-27 13:05:06 -04:00
Matthew Brown
304ffeb0a3 Revert "Switch to VoidProgress by default"
This reverts commit 63b46be361.
2019-05-27 13:04:38 -04:00
Matthew Brown
62a690ee4e Revert "Pass success flag to progress"
This reverts commit 5e8acf0b0e.
2019-05-27 13:04:33 -04:00
Barney Laurance
04ef20da1f Add error message when psalter asked to work beyond its abilities; allow fixing all issues and output list of fixable issues (#1687)
* Oputput error message when asked to fix non-fixable issue

* Document ability to fix function PossiblyUndefinedGlobalVariable

* Add --issues=all option to fix all possible issues

* Add --list-supported-issues option to psalter

* Fix psalm issues

* Add newline to end of psalter help output

* Adjust messages output from psalter

* Use fwrite(STDERR, instead of die( for issue list related errors in psalter

* Restore missing exits in psalter
2019-05-27 10:05:15 -04:00
Matthew Brown
5861476765 Don’t remove null after magic property fetch 2019-05-27 09:18:34 -04:00
Matthew Brown
e512bc7ef6 Fix #1693 - use instanceof instead of assert 2019-05-27 08:34:03 -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
5e8acf0b0e Pass success flag to progress 2019-05-26 23:18:48 -04:00
Ilija Tovilo
63b46be361 Switch to VoidProgress by default 2019-05-26 23:18:48 -04:00
Ilija Tovilo
0c5837b246 Implement dots progress bar 2019-05-26 23:18:48 -04:00
Ilija Tovilo
042070d0fd Implement better progress 2019-05-26 23:18:48 -04:00
Matthew Brown
fafe73de0a Suppress issue where we don’t want to autoload 2019-05-26 16:40:02 -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
0bcf61dee7 Remove more commas 2019-05-25 12:18:12 -04:00
Matthew Brown
857314e095 Remove trailing comma 2019-05-25 12:11:46 -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
Matthew Brown
a18a564ad9 Add parser support for key-of and indexed access 2019-05-23 23:52: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
c64a654ece Fix #1666 - complain about properties in interfaces 2019-05-23 10:21:56 -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
Matthew Brown
ec2ee04fe8 Allow coercion from empty to array param 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
Brown
8c653b0312 Improve dead code detection a little more 2019-05-20 18:25:11 -04:00
Brown
2637156f45 Properly fix #1128 with additional check 2019-05-20 12:01:18 -04:00