1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-15 10:57:08 +01:00
Commit Graph

5922 Commits

Author SHA1 Message Date
Matthew Brown
f1fa5ca42f Add false vals referenced in https://github.com/etsy/phan/pull/316 2016-08-12 16:36:27 -04:00
Matthew Brown
a0dcabe4e1 Look once the vars have been set 2016-08-11 22:00:27 -04:00
Matthew Brown
a62a7899e0 Add overrides for some methods 2016-08-11 17:36:22 -04:00
Matthew Brown
300375c4bd Add preliminary call map 2016-08-10 19:37:40 -04:00
Matthew Brown
53b94f339e Fix errors found via self-inspection 2016-08-10 19:21:03 -04:00
Matthew Brown
8d6871d29e Remove underscores 2016-08-10 18:10:12 -04:00
Matthew Brown
cf90f5af4a Add support for static in return types 2016-08-10 13:52:16 -04:00
Matthew Brown
2adf377d94 Fix closure & elseif checks 2016-08-10 02:13:55 -04:00
Matthew Brown
1c3993eaf7 Improve $context->update again 2016-08-10 01:54:45 -04:00
Matthew Brown
8345526fc8 Simplify context update logic 2016-08-10 01:28:38 -04:00
Matthew Brown
b274c7dd68 Fix tests 2016-08-10 01:09:47 -04:00
Matthew Brown
8131f806d8 Protect possibility of bad get_class call 2016-08-09 19:14:50 -04:00
Matthew Brown
24d67e9615 Add support for special typeof types (used in get_class checks) 2016-08-09 18:10:46 -04:00
Matthew Brown
02ce85e383 Add support for bool checks 2016-08-09 18:10:17 -04:00
Matthew Brown
55f466b2ed Fix how params are set 2016-08-09 15:02:30 -04:00
Matthew Brown
b0f6a020da Exit early for invalid class or interface 2016-08-09 12:11:58 -04:00
Matthew Brown
588ae82ffb Do not skip if we want to check class methods 2016-08-09 12:07:50 -04:00
Matthew Brown
054032354d Exit early if ReflectionError 2016-08-09 12:07:26 -04:00
Matthew Brown
0d35f1c14b Allow suppression of type errors and add better treatment of static 2016-08-08 18:55:22 -04:00
Matthew Brown
daf49bdf0b Add separate undefined this property to demarcate those errors 2016-08-08 16:06:28 -04:00
Matthew Brown
902c05d3a7 Check traits in context of class 2016-08-08 14:36:18 -04:00
Matthew Brown
be5fc52da8 Use $context->self var instead of $this->_absolute_class 2016-08-08 11:28:14 -04:00
Matthew Brown
92134b60ec Add support for checking new self/parent/static 2016-08-07 16:27:00 -04:00
Matthew Brown
06891106fb Add clearer error messages 2016-08-07 16:13:36 -04:00
Matthew Brown
ccaea8fa51 Allow docblock param types in function checker 2016-08-07 16:13:08 -04:00
Matthew Brown
a881191f1d Be more lenient with certain assignments 2016-08-07 15:15:21 -04:00
Matthew Brown
b7dfb5e134 Skip empty arrays when looking inside foreach loops 2016-08-07 14:36:24 -04:00
Matthew Brown
c58458ed20 Add code to handle SimpleXMLElement 2016-08-07 13:58:46 -04:00
Matthew Brown
620d4afd68 Fix tokenisation of ? nullable shorthand 2016-08-07 12:50:21 -04:00
Matthew Brown
7a1cded329 Add better class visibiity checks 2016-08-07 12:23:29 -04:00
Matthew Brown
4d26b9b3af Add more issues to solve 2016-08-07 11:35:27 -04:00
Matthew Brown
d254bc0aa2 Improve type checking of properties 2016-08-06 20:27:13 -04:00
Matthew Brown
f72ad63dac Add beginnings of non-this property checks 2016-08-05 17:45:47 -04:00
Matthew Brown
81c72f2900 Evaluate parent classes proper-like 2016-08-05 15:11:20 -04:00
Matthew Brown
9d4271f023 Allow better handling of questionmark type annotations 2016-08-04 14:43:33 -04:00
Matthew Brown
944a8c24eb Add ability to suppress info output from command line 2016-08-04 14:38:43 -04:00
Matthew Brown
bff796ceb7 Add TooManyArguments to default suppressed list 2016-07-30 19:54:53 -04:00
Matthew Brown
9cb7a5feeb Fix #14 - add support for checking too many and too few arguments 2016-07-29 14:48:04 -04:00
Matthew Brown
f45e7c7539 Only load autoloader if provided 2016-07-26 15:03:43 -04:00
Matthew Brown
6b3fe14f1e Allow specification of custom autoloaders 2016-07-26 15:03:43 -04:00
Matthew Brown
c4a222171b Fix undefined var name 2016-07-26 15:03:43 -04:00
Matthew Brown
9718893232 Exit early if parent class cannot be found 2016-07-26 15:03:43 -04:00
Matthew Brown
7701a2ec23 Change config filename 2016-07-25 18:39:36 -04:00
Matthew Brown
df28d24803 Change name to Psalm 2016-07-25 18:37:44 -04:00
Matthew Brown
c32179f1a1 Improve type adjustment in switch statements 2016-07-25 18:30:49 -04:00
Matthew Brown
1ebe333bb2 Fix self-checking errors 2016-07-25 15:05:58 -04:00
Matthew Brown
08dd92ac00 Add numeric type support to properties 2016-07-25 12:03:21 -04:00
Matthew Brown
37e3e9d85a Protect implements checks 2016-07-25 09:23:38 -04:00
Matthew Brown
53f0e6ea8b Add case-sensitive class logging 2016-07-25 09:02:30 -04:00
Matthew Brown
967d3c8503 Add checks to prevent special types being tested as classes 2016-07-25 00:31:29 -04:00
Matthew Brown
f3d4e35a52 Add gotchas 2016-07-25 00:12:02 -04:00
Matthew Brown
e35c328e89 We can do more with boolean ors 2016-07-24 23:40:53 -04:00
Matthew Brown
bd90dd7ee9 Add better checks for subclassed type comparison 2016-07-24 23:40:23 -04:00
Matthew Brown
ef1d662882 Memoize common reflection tasks 2016-07-24 23:38:52 -04:00
Matthew Brown
0e77403625 Fix generic switch checks 2016-07-24 18:02:03 -04:00
Matthew Brown
94b7e0b01f Always return after UndefinedClass and UndefinedMethod issues 2016-07-24 17:10:16 -04:00
Matthew Brown
c195f48e35 Make sure generic type params are always unions 2016-07-24 17:08:40 -04:00
Matthew Brown
8844bd0c1e Do incremental processing of statements 2016-07-24 17:06:54 -04:00
Matthew Brown
03693e5cb8 Allow issue suppression in classchecker 2016-07-24 17:06:36 -04:00
Matthew Brown
479e93fd56 Improve return type checks on generic functions 2016-07-24 16:21:42 -04:00
Matthew Brown
94702bd914 Unify check method call format 2016-07-23 10:58:53 -04:00
Matthew Brown
079175532b Add deprecated method checks and issue suppression 2016-07-22 13:29:46 -04:00
Matthew Brown
840adbc4ce Fix fleshing out of variable type 2016-07-18 19:04:51 -04:00
Matthew Brown
0a7f39715c Add support for enumerating empty collections 2016-07-18 18:17:47 -04:00
Matthew Brown
13f35914c2 Do not die when reflected class cannot be loaded 2016-07-13 11:19:07 -04:00
Matthew Brown
c7dc5dd9f9 Add support for numeric type 2016-07-13 11:18:07 -04:00
Matthew Brown
00a6a54cf5 Allow empty arrays to change type after block 2016-07-12 01:28:41 -04:00
Matthew Brown
8e32c2eed6 Move methods around and improve scalar type handling 2016-07-12 00:50:16 -04:00
Matthew Brown
5ab4d0aa84 Allow support for generic object type 2016-07-11 20:11:00 -04:00
Matthew Brown
f2a53fa463 Add InvalidScalarArgument issue to warn about bad casts 2016-07-11 19:58:37 -04:00
Matthew Brown
24300cc8f6 Suppress mixed method call warnings 2016-07-11 19:57:39 -04:00
Matthew Brown
32f07fd823 Only update type from docblock if it gives more info 2016-07-11 19:57:01 -04:00
Matthew Brown
6e2fc6141a Add more robust fix for nullable kludge 2016-07-11 10:19:06 -04:00
Matthew Brown
04be1fb50e Add slight kludge if method is nullable 2016-07-11 10:15:32 -04:00
Matthew Brown
348e06ffb9 Fix treatment of param types 2016-07-10 16:09:09 -04:00
Matthew Brown
855ffbd9c1 Suppress mixed method call issues by default 2016-07-07 19:40:00 -04:00
Matthew Brown
70a92e006d Check for mixed method calls 2016-07-07 19:38:33 -04:00
Matthew Brown
a8501be75f Allow method chaining 2016-06-30 00:27:47 -04:00
Matthew Brown
4f8fa010a5 Allow more characters in classnames 2016-06-30 00:27:33 -04:00
Matthew Brown
d59739d9c7 use safer check for ending statments 2016-06-29 18:30:27 -04:00
Matthew Brown
e0c16308a8 Improve switch checking (again) and fix null arg types 2016-06-29 18:10:41 -04:00
Matthew Brown
a93c54da0d Improve type resolution of params 2016-06-29 16:42:30 -04:00
Matthew Brown
2e4e52f0f3 Reduce nesting 2016-06-29 10:57:15 -04:00
Matthew Brown
59acb5cfb7 Make sure to return bool where necessary 2016-06-29 10:57:02 -04:00
Matthew Brown
50aff4bcb7 Fix combination of type assertions 2016-06-28 15:43:21 -04:00
Matthew Brown
4bd0e7c90f Use the clever methods when evaluating expression 2016-06-28 15:36:35 -04:00
Matthew Brown
35e08f5cd2 Fix if/ternary negation 2016-06-28 15:28:05 -04:00
Matthew Brown
5b182fecea Support absolute files 2016-06-28 14:28:45 -04:00
Matthew Brown
71eea36b9c Improve switch type analysis 2016-06-28 13:56:44 -04:00
Matthew Brown
638c2999e3 Reove PHP 5.6 features 2016-06-27 15:10:13 -04:00
Matthew Brown
fdc4b0703f Only set to mixed if not yet set 2016-06-27 14:30:33 -04:00
Matthew Brown
16fda10e67 Only show variable errors where applicable 2016-06-27 13:22:16 -04:00
Matthew Brown
bd694459f3 Prepopulate all object properties 2016-06-27 10:46:27 -04:00
Matthew Brown
e4c590d7b7 Fix tests by adding a config flag for throwing exceptions 2016-06-26 22:40:57 -04:00
Matthew Brown
7f0139d27f Add pretty colours 2016-06-26 22:03:37 -04:00
Matthew Brown
eb9084dbad Add support for parsing bracket syntax 2016-06-26 22:02:23 -04:00
Matthew Brown
ad4943ead3 Allow custom config to be passed in 2016-06-26 15:33:51 -04:00
Matthew Brown
2ab3e3af40 Make sure IssueBuffer::finish is called after each public ProjectChecker method 2016-06-26 15:25:38 -04:00
Matthew Brown
5f60bc3a8b Actually rename file 2016-06-26 15:24:12 -04:00
Matthew Brown
2d9f39e3f4 Change IssueHandler to IssueBuffer 2016-06-26 15:18:40 -04:00
Matthew Brown
bf96b4de3a Add smart config identification 2016-06-26 13:45:20 -04:00
Matthew Brown
73eda1632e Add extra alerts for invalid docblocks 2016-06-24 18:18:11 -04:00
Matthew Brown
a1fb6294dc Add checking of object properties 2016-06-23 18:45:46 -04:00
Matthew Brown
9f20175b14 Change ExceptionHandler to IssueHandler and add error levels 2016-06-20 19:30:38 -04:00
Matthew Brown
6f9cb1d99c Use mixed type if we detect expression error 2016-06-20 18:10:55 -04:00
Matthew Brown
162a8a2c2b Search in while & try/catch 2016-06-20 18:10:24 -04:00
Matthew Brown
2b8c95a19d Use correct paths 2016-06-20 18:10:08 -04:00
Matthew Brown
f8fda8febb Do not check return types if we ignore for that file 2016-06-20 18:09:04 -04:00
Matthew Brown
66535fb225 Allow void return type reporting 2016-06-20 16:54:43 -04:00
Matthew Brown
cf101b0fe0 Mixed cannot be substituted 2016-06-20 16:54:30 -04:00
Matthew Brown
0ecbfdbd64 Improve handling of binary ops 2016-06-20 16:54:02 -04:00
Matthew Brown
2dc64aafe3 Add foreach possibly-in-scope vars back 2016-06-20 16:30:31 -04:00
Matthew Brown
a6eed85ba5 Add better scope analysis 2016-06-20 16:18:31 -04:00
Matthew Brown
08ce4dbbf9 Fix for/foreach context handling 2016-06-20 12:38:31 -04:00
Matthew Brown
9019530721 Simplify view checks for now 2016-06-20 01:29:30 -04:00
Matthew Brown
edd9a92d51 Dogfooding: fix codeinspector issues 2016-06-20 01:05:44 -04:00
Matthew Brown
444c39097f Create Context, new if checks & file extension support
Add Context  object to hold in-scope vars, rework if checks accordingly with copious use of clone, and finally add support for handling different filetypes
2016-06-20 00:38:13 -04:00
Matthew Brown
5f2d9a66ee Add plugin architecture 2016-06-18 14:45:55 -04:00
Matthew Brown
684455acf0 Make sure _fleshOutReturnTypes actually does stuff 2016-06-17 18:03:29 -04:00
Matthew Brown
4b0c37f8b4 Improve error messages 2016-06-17 17:34:52 -04:00
Matthew Brown
af3577aeee Fix support for $var ?: $other_var ternary form 2016-06-17 17:12:07 -04:00
Matthew Brown
4c0b50dab0 Protect against array assignment to strings 2016-06-17 16:58:15 -04:00
Matthew Brown
84fecaa2a5 Fix closure bug 2016-06-17 16:16:54 -04:00
Matthew Brown
5c1b7bb0bc Fix a few type inference bugs 2016-06-17 16:05:28 -04:00
Matthew Brown
433de5c799 Make use dictionary-keyed vars in union types 2016-06-17 13:21:57 -04:00
Matthew Brown
9cc8d485ca Fix a thing maybe 2016-06-16 19:02:29 -04:00
Matthew Brown
32e18aa29e Redo a bunch of if statement checking logic 2016-06-16 18:52:12 -04:00
Matthew Brown
53abce127a Exit early if method does not exist, fix ternary checks 2016-06-16 12:05:37 -04:00
Matthew Brown
fb56e3b757 Change returnType to inferredType 2016-06-16 12:04:55 -04:00
Matthew Brown
276889fc9a Fix negation bugs and add ternary type setting 2016-06-16 11:57:12 -04:00
Matthew Brown
7c62568ac5 Remove var_dump 2016-06-16 02:31:02 -04:00
Matthew Brown
12e23d8086 Re-enable property checks 2016-06-16 02:30:02 -04:00
Matthew Brown
218edb5bf4 Add numerous fixes 2016-06-16 01:19:52 -04:00
Matthew Brown
2cf5691fb0 Fix case bug 2016-06-15 20:22:57 -04:00
Matthew Brown
0c617f9519 Fix many many bugs 2016-06-15 20:16:40 -04:00
Matthew Brown
a17e1fb163 Create new system of storing types 2016-06-14 19:22:29 -04:00
Matthew Brown
4e614436b5 Add TypeParser 2016-06-14 01:23:57 -04:00
Matthew Brown
2449e9aaac Fix ref 2016-06-13 19:58:25 -04:00
Matthew Brown
933c60b06a Add array assignment checks and remove Error suffix 2016-06-13 19:57:32 -04:00
Matthew Brown
01247558d6 Add checkDir method 2016-06-13 15:33:18 -04:00
Matthew Brown
82bca7a8b4 Do not negate types unnecessarily 2016-06-13 01:48:29 -04:00
Matthew Brown
5507798077 Add support for is_a checks 2016-06-10 18:18:37 -04:00
Matthew Brown
cefb0f3021 Smarter type comparisons and cleaner error output 2016-06-10 17:20:04 -04:00
Matthew Brown
46005ddd29 Read more from config and fix switch snafu 2016-06-10 14:47:44 -04:00
Matthew Brown
4edd11cd44 Down with exceptions, up with issues 2016-06-09 18:08:25 -04:00
Matthew Brown
50a884a755 Add outline of config loader 2016-06-06 01:07:50 -04:00
Matthew Brown
38b43f2d46 Remove var dumps and class properties exceptions 2016-06-05 20:31:10 -04:00
Matthew Brown
7bcaa08db8 Remove check_nulls protection 2016-06-05 20:28:02 -04:00
Matthew Brown
d8854fd4ef Transition to more flexible error handling 2016-06-05 20:25:16 -04:00
Matthew Brown
281751d85c Check parent calls 2016-06-02 19:21:48 -04:00
Matthew Brown
14ca6c291e Be more diligent about assigning inherited methods 2016-06-02 19:21:35 -04:00
Matthew Brown
2ae893120e Ignore trailing slashes in user-supplied classes 2016-06-02 17:56:27 -04:00
Matthew Brown
9428941598 Do not break on coercion and mocks 2016-06-02 17:50:19 -04:00
Matthew Brown
d8404037be Be smarter about looping through params 2016-06-02 17:47:28 -04:00
Matthew Brown
57f289bb5f Ignore nulls where appropriate, and do not check closure method calls under certain circumstances 2016-06-02 17:44:50 -04:00
Matthew Brown
3bea4368e0 Add checking of function argument types 2016-05-24 12:11:17 -04:00
Matthew Brown
97cab3c14e Undo stupid 2016-05-24 10:21:22 -04:00
Matthew Brown
fc1ee03390 Prevent variable redefinition if it has already been typed 2016-05-22 18:09:10 -04:00
Matthew Brown
e8d207cd12 Support passing string types 2016-05-22 18:08:36 -04:00
Matthew Brown
39f459ac27 Isset treated as !null 2016-05-22 16:01:40 -04:00
Matthew Brown
c9b5554b69 Streamline reflection/registration checks to fix trait bug 2016-05-22 12:14:48 -04:00
Matthew Brown
ea9ab43229 Implementing methods not inherited methods 2016-05-20 19:07:05 -04:00
Matthew Brown
3112a40258 Make the right context get passed 2016-05-20 19:06:42 -04:00
Matthew Brown
d258e0debd Speed up deep checks by quite a bit 2016-05-20 00:24:26 -04:00
Matthew Brown
333caeaeaa Add a little caching 2016-05-16 18:10:59 -04:00
Matthew Brown
2ed9d2bff7 Add more useful return type data 2016-05-16 16:12:02 -04:00
Matthew Brown
316f2714b7 Added awareness of traits and deep method analysis 2016-05-15 23:06:03 -04:00
Matthew Brown
59c9ae6174 Allow suppression of null checks for certain files 2016-05-10 14:00:44 -04:00
Matthew Brown
7fd8955fea Add $this->var to be passed by ref 2016-05-10 11:46:36 -04:00
Matthew Brown
1bd61e89af Treat self as absolute calss 2016-05-09 15:58:48 -04:00
Matthew Brown
734aee73a5 More conservative post type assignment 2016-05-09 15:49:02 -04:00
Matthew Brown
a30901be48 Add $this->var analysis and improve else semantics 2016-05-09 08:56:07 -04:00
Matthew Brown
6046507578 Add better type inspection in loops 2016-05-05 21:20:15 -04:00
Matthew Brown
dfa7078937 Register all variables even if not checking 2016-04-30 17:31:49 -04:00
Matthew Brown
f24eea342c Fix nested calls 2016-04-30 15:43:06 -04:00
Matthew Brown
45d0d41ffa Remove effect checking 2016-04-30 15:22:20 -04:00
Matthew Brown
286158e07d Do not throw error when reflectionmethod fails 2016-04-30 15:02:16 -04:00
Matthew Brown
cb59baec87 Improve type resolution 2016-04-30 14:14:22 -04:00
Matthew Brown
d5545918d6 Fix return type application 2016-04-28 15:18:36 -04:00
Matthew Brown
43375c2908 Add return types 2016-04-26 18:42:48 -04:00
Matthew Brown
0ab3710213 Fix bad replace 2016-04-26 18:42:22 -04:00
Matthew Brown
67d05d8df5 Fix generation generation 2016-04-26 18:32:37 -04:00
Matthew Brown
a6afbe736d Add effect checking and new docblock generation 2016-04-26 18:18:49 -04:00
Matthew Brown
bd494daabd Do better checking of types 2016-04-26 18:17:47 -04:00
Matthew Brown
27891e87a1 Use elseif type assertions within body of elseif 2016-04-21 12:02:12 +01:00
Matthew Brown
4be345a007 Flesh out nested types 2016-04-20 18:36:46 +01:00
Matthew Brown
edecae7983 Reduce scope where statements_checker is live 2016-04-20 18:35:59 +01:00
Matthew Brown
8472233bd3 Obey my own rules 2016-04-20 18:35:22 +01:00
Matthew Brown
7c72465325 Remove ClassChecker and Traversable lookups 2016-04-20 15:23:46 +01:00
Matthew Brown
c770146bac Add void variable detection 2016-04-20 11:55:26 +01:00
Matthew Brown
2e6f518e48 Add detection of inaccessible methods 2016-04-18 13:31:59 -04:00
Matthew Brown
92a05355aa Make CodeExceptions all self-contained 2016-04-17 16:20:36 -04:00
Matthew Brown
b9b639e968 Add support for Yoda comparisons 2016-04-17 15:22:10 -04:00
Matthew Brown
acf16db64f View function declarations are not methods 2016-04-17 14:48:57 -04:00
Matthew Brown
079ddb66ee Be more conservative with how we inspect inherited methods 2016-04-17 12:27:47 -04:00
Matthew Brown
bac2ab6027 Port over method custom calls 2016-04-17 11:26:29 -04:00
Matthew Brown
851c6418d3 Register more methods to prevent namespacing difficulties when reflecting 2016-04-17 11:22:18 -04:00
Matthew Brown
4adae3eb06 Add checking of nested namespace nodes 2016-04-17 10:25:43 -04:00
Matthew Brown
56d4d1c684 Split code out from StatementsChecker so it isn't so monolithic 2016-04-16 16:28:25 -04:00
Matthew Brown
f4910b0b96 Remove Vimeo-specific code and improve class checking 2016-04-16 11:28:19 -04:00
Matthew Brown
14b6b3dae2 Do not empty out $new_vars if a return statement is found 2016-04-16 10:18:40 -04:00
Matthew Brown
278d2cb642 Comment out type coercion warnings 2016-04-15 13:24:20 -04:00
Matthew Brown
6684d80041 Add warning for type coercion 2016-04-15 13:11:49 -04:00
Matthew Brown
8c039151de Fix FQCN resolution for registerMethod 2016-04-15 12:57:35 -04:00
Matthew Brown
fbc6cdb346 Fix name resolution for subclasses 2016-04-15 12:48:41 -04:00
Matthew Brown
c82a3a00a9 Fix isMock check 2016-04-12 16:22:25 -04:00
Matthew Brown
2bfe45ce24 Add more lenient method checking and permit object traversal 2016-04-12 16:12:20 -04:00
Matthew Brown
27ef730836 Support nested generic types 2016-04-12 11:59:27 -04:00
Matthew Brown
e4846cd62f Add protective isset 2016-04-12 11:30:11 -04:00
Matthew Brown
ff578f8468 Add support for square bracket array declarations is_array checks 2016-04-12 11:28:36 -04:00
Matthew Brown
d07e340d66 Add support for iterator generics 2016-04-11 19:13:50 -04:00
Matthew Brown
283180115b Fix incorrect test & implementation 2016-04-04 16:33:26 -04:00
Matthew Brown
321a0b8288 Fix ternary checks and be more lenient with null issues 2016-04-04 15:00:57 -04:00
Matthew Brown
208b6e833b Remove var_dump 2016-04-04 14:29:32 -04:00
Matthew Brown
6ec754d21d Add redefined var scanning to switch statements 2016-04-04 14:29:02 -04:00
Matthew Brown
ba4d5e6376 Do not check deeply-nested concatenations 2016-04-04 14:06:29 -04:00
Matthew Brown
5c132274f4 Add support for $this->x vars 2016-04-04 01:21:28 -04:00
Matthew Brown
9032aa065a Fix variable redefinition 2016-04-04 00:17:19 -04:00
Matthew Brown
265df0f4cb Improve message 2016-04-03 20:20:46 -04:00
Matthew Brown
13e9923cd5 Fix ternary else check 2016-04-03 20:14:19 -04:00
Matthew Brown
f4dd4cb782 Support testing statements 2016-04-03 19:41:54 -04:00
Matthew Brown
83b7896d2b Move all files to PSR-4-compliant folder structure 2016-04-03 19:41:22 -04:00