Matt Brown
b4a46429df
Add FileChecker subclass analysis
2017-07-26 19:27:30 -04:00
Matthew Brown
e29dd140e3
Refactor scanning and analysis, introducing multithreading ( #191 )
...
* Add failing test
* Add visitor to soup up classlike references
* Move a whole bunch of code into the visitor
* Move some methods back, move onto analysis stage
* Use the getAliases method everywhere
* Fix refs
* Fix more refs
* Fix some tests
* Fix more tests
* Fix include tests
* Shift config class finding to project checker and fix bugs
* Fix a few more tests
* transition test to new syntax
* Remove var_dump
* Delete a bunch of code and fix mutation test
* Remove unnecessary visitation
* Transition to better mocked out file provider, breaking some cached statement loading
* Use different scheme for naming anonymous classes
* Fix anonymous class issues
* Refactor file/statement loading
* Add specific property types
* Fix mapped property assignment
* Improve how we deal with traits
* Fix trait checking
* Pass Psalm checks
* Add multi-process support
* Delay console output until the end
* Remove PHP 7 syntax
* Update file storage with classes
* Fix scanning individual files and add reflection return types
* Always turn XDebug off
* Add quicker method of getting method mutations
* Queue return types for crawling
* Interpret all strings as possible classes once we see a `get_class` call
* Check invalid return types again
* Fix template namespacing issues
* Default to class-insensitive file names for includes
* Don’t overwrite existing issues data
* Add var docblocks for scanning
* Add null check
* Fix loading of external classes in templates
* Only try to populate class when we haven’t yet seen it’s not a class
* Fix trait property accessibility
* Only ever improve docblock param type
* Make param replacement more robust
* Fix static const missing inferred type
* Fix a few more tests
* Register constant definitions
* Fix trait aliasing
* Skip constant type tests for now
* Fix linting issues
* Make sure caching is off for tests
* Remove unnecessary return
* Use emulative parser if on PHP 5.6
* Cache parser for faster first-time parse
* Fix constant resolution when scanning classes
* Remove test that’s beyond a practical scope
* Add back --diff support
* Add --help for --threads
* Remove unused vars
2017-07-25 16:11:02 -04:00
Matt Brown
1745518c2c
Fix #166 - prevent require loop
2017-06-06 10:11:34 -04:00
Matthew Brown
81223c45e0
Fix #166 - return instead of looping infinitely
2017-06-05 21:46:04 +01:00
Matthew Brown
22a716f4da
Improve formatting of phpdocs
2017-05-26 20:16:18 -04:00
Matthew Brown
d6909193ea
Add additional formatting changes
2017-05-26 20:05:57 -04:00
Matthew Brown
688a72c794
Fix #36 - emit issues on deprecated properties
2017-05-25 01:32:34 -04:00
Matthew Brown
f5fc91a506
Remove stray docblock
2017-05-24 22:32:52 -04:00
Matthew Brown
4fd46e1752
Improve formatting
2017-05-24 22:07:49 -04:00
Matthew Brown
7532e32b9d
Fixed spacing and use statement formatting
2017-05-19 00:48:26 -04:00
Jon Ursenbach
f65c618b2e
PSR-2 adjustments and adding PHPCS checks into the Travis config. ( #149 )
...
* PSR-2 adjustments and adding PHPCS checks into the Travis config.
* Reverting some CallChecker changes and no longer casting vars to null.
2017-04-28 00:31:55 -04:00
Matt Brown
14bb967c7d
Warn when doing === comparisons on incompatible types
2017-04-06 14:53:45 -04:00
Matt Brown
d65221fbe4
Fix nested requires in different directories
2017-04-05 14:37:22 -04:00
Matthew Brown
a89018d9ae
Only warn about issues in files that we’re trying to scan
2017-03-24 18:34:46 -04:00
Matthew Brown
caf72bda52
Shave off a little extra time by caching file_checker refs
2017-03-19 23:30:20 -04:00
Matthew Brown
7ed188fa52
Add support for conditional stubbed functions
2017-03-19 15:41:24 -04:00
Matt Brown
cecfe25df7
Update outer clauses in mic drop situation
2017-03-16 11:46:07 -04:00
Matt Brown
04363237c5
Fix #116 - be more lenient with static vars
2017-03-15 15:21:00 -04:00
Matt Brown
7fad81edac
Fix issue with unset var in loop
2017-03-15 11:38:23 -04:00
Matthew Brown
9b41bc9b37
Add slower (but more accurate) loop checks
2017-03-14 20:14:25 -04:00
Matthew Brown
6cfe540c98
Fix issue evaluating elseif empty assertions
2017-03-14 15:48:52 -04:00
Matt Brown
3d2be3410e
Infer loop types without @var comments
2017-03-13 18:06:56 -04:00
Matthew Brown
5cd1b6735f
Add even more references in docblocks
2017-03-01 22:27:52 -05:00
Matt Brown
864d242f13
Improve labelling of referencing expressions
2017-03-01 11:56:36 -05:00
Matthew Brown
cd5f727d2e
Collect explicit references to classes/methods
2017-02-26 23:09:18 -05:00
Matt Brown
c85b6b376b
Merge do vars in scope
2017-02-21 17:48:12 -05:00
Matthew Brown
30c5977825
Fix issue with do statement breaking
2017-02-18 17:49:34 -05:00
Matthew Brown
e61ea17db5
Move FileChecker functionality into separate, better-contained classes
2017-02-18 13:41:27 -05:00
Matthew Brown
e0e92785f8
Complain about unevaluated code in more concrete fashion
2017-02-12 16:49:32 -05:00
Matthew Brown
d2e92131f5
Always set global vars, even when it might be an error
2017-02-12 13:27:02 -05:00
Matthew Brown
59fa0977f9
Do not panic when encountering errant global var
2017-02-12 12:23:05 -05:00
Matthew Brown
8ff6634e7b
Add issue for possibly unused variables in public/private methods
...
also changed a lot of access
2017-02-11 18:56:38 -05:00
Matthew Brown
cdcacc395d
Rename DeadCode to UnusedVariable, UnusedMethod and UnusedClass
2017-02-08 00:28:26 -05:00
Matt Brown
6b2bb7d917
Store first code location for all variables in a statement list
2017-02-07 18:09:12 -05:00
Matthew Brown
ec65f31aaa
Improve dead code analysis and fix errors found
2017-02-02 00:20:58 -05:00
Matthew Brown
d3abc0011d
Fix #80 - add dead code checks via command line
2017-01-31 23:24:33 -05:00
Matthew Brown
1ece3071f9
Add reference counting for methods and remove dead code
2017-01-29 23:44:05 -05:00
Matthew Brown
a45c47776b
Fix #79 - check anonymous class statements
2017-01-29 13:20:12 -05:00
Matthew Brown
4fa0055092
Remove unnecessary var_dump
2017-01-25 17:09:31 -07:00
Matthew Brown
15e8c1b904
Fix simplifyUnionType so classes with __toString aren’t confused with string
2017-01-25 17:01:01 -07:00
Matthew Brown
27a018095b
Fix invalid InvalidParamDefault error when comparing to false
2017-01-19 01:12:19 -05:00
Matthew Brown
77c9d1ecbd
If extending FileChecker, inline included stmts
2017-01-18 23:35:23 -05:00
Matt Brown
875717bb96
Fix #63 by adding directory separators
2017-01-17 22:10:21 -05:00
Matthew Brown
9220b958eb
Fix phpcs errors
2017-01-16 19:06:39 -05:00
Matthew Brown
b3726c9de5
Use getcwd() for the project’s base, not the config file parent directory
2017-01-16 18:33:04 -05:00
Matthew Brown
e3a9cb98c3
Add extra issue for invalid clone and fix issue reporting;
2017-01-16 12:59:09 -05:00
Matthew Brown
4fd46fe2c8
Fix #59 - make functions aware of just-defined constants
2017-01-15 15:58:40 -05:00
Matthew Brown
03141e41c2
Move string-stored types into named classes
2017-01-15 10:22:05 -05:00
Matt Brown
c104736ead
Fix #42 - detect false and null defaults
2017-01-13 12:26:10 -05:00
Matthew Brown
56be346191
Add back mutation checks
2017-01-11 21:37:53 -05:00
Matthew Brown
03c5ea3cef
Store all class keys lowercased
2017-01-09 00:14:39 -05:00
Matthew Brown
46dbe83cbd
Allow functions to be included too
2017-01-07 19:33:33 -05:00
Matthew Brown
03db293ed9
Add include tests and modify treatment
2017-01-07 19:07:58 -05:00
Matthew Brown
17329015dc
Discriminate between checking, visiting and analyzing in method names
2017-01-07 15:09:47 -05:00
Matthew Brown
694da2cabd
Simplify a lot of APIs
2017-01-07 14:35:07 -05:00
Matthew Brown
6ee69e547f
Do more to separate out processing steps
2017-01-06 01:07:11 -05:00
Matthew Brown
7609ca02c0
Fix #32 by evaluating all class references in files lazily
2017-01-04 23:42:58 -05:00
Matthew Brown
93c1366bd8
Tighten up what array assignments can happen
2017-01-02 01:07:44 -05:00
Matthew Brown
f515327f16
Fix file_name/file_path mixup
2016-12-30 19:06:45 -05:00
Matthew Brown
c65a0bf181
Move function static arrays into FileStorage
2016-12-30 18:08:07 -05:00
Matthew Brown
c5622f1ed1
Fix nullref
2016-12-28 19:58:32 -05:00
Matthew Brown
2bf515be5f
Check return types of functions in namespaces
2016-12-28 19:57:18 -05:00
Matthew Brown
05834a0db3
Fix #13 by revamping how we treat type assertions in if statements and ternary expressions
2016-12-28 13:12:06 -05:00
Matthew Brown
c55870e26c
Allow generic TypeChecker::isContainedBy checks
2016-12-24 18:28:43 +00:00
Matthew Brown
9746c8972f
Fix MixedAssignment errors
2016-12-17 00:48:31 -05:00
Matt Brown
c7a758ceb1
Fix trait method call checks
2016-12-12 13:50:46 -05:00
Matthew Brown
0b06b3b09b
Fix #9 - updated docblocks are lowercased
2016-12-10 13:07:12 -05:00
Matt Brown
899250530e
Cast key to int
2016-12-09 13:27:59 -05:00
Matt Brown
b3106c68bb
Fix #6 - raise error with erroneous __toString
2016-12-09 12:48:02 -05:00
Matt Brown
af1a932655
Make code location more accurate
2016-12-06 18:27:22 -05:00
Matthew Brown
c0a3211f66
Support disabling file includes via the config
2016-12-06 16:41:42 -05:00
Matthew Brown
7cb6891a0b
Add support for class constant visibility
2016-12-04 01:44:33 -05:00
Matthew Brown
a1acbfec07
Show code snippets when reporting errors
...
This also introduces a new method of identifying specific code locations when creating issues
2016-12-03 19:11:30 -05:00
Matthew Brown
05a004c8bc
Add check for array access on invalid type
2016-11-21 16:44:35 -05:00
Matthew Brown
72071fb5ec
Add missing docblock params
2016-11-21 13:37:27 -05:00
Matthew Brown
6822f46a2c
Add suppprt for PHP 7.0 grouped uses
2016-11-20 22:40:19 -05:00
Matthew Brown
4b3f63c843
Fix missing properties
2016-11-20 22:02:26 -05:00
Matthew Brown
5a9f99c24e
Fix namespacing issues in PHP 5.6
2016-11-20 21:49:06 -05:00
Matthew Brown
31aa1c3ce5
Fix PHPDoc-style type parsing
2016-11-20 02:52:34 -05:00
Matthew Brown
3b1dfd0942
Fix issue combining generic and object-like
2016-11-13 11:54:40 -05:00
Matthew Brown
38daca5edd
Fix Psalm errors in Psalm
2016-11-13 11:24:46 -05:00
Matthew Brown
5cf95b42f2
--update-docblocks now works
2016-11-12 23:59:31 -05:00
Matthew Brown
264e77addd
Change a few more words
2016-11-07 19:16:51 -05:00
Matthew Brown
36fc49965b
Correct speling
2016-11-07 17:31:02 -05:00
Matthew Brown
622a0794c3
Swap in Fully-Qualified for Absolute terms
2016-11-07 17:29:51 -05:00
Matthew Brown
721e0d01e2
Get rid of var_dumps
2016-11-05 20:53:39 -04:00
Matthew Brown
7d6ac4719f
Fix offset assignment creation
2016-11-05 20:17:22 -04:00
Matthew Brown
b3f3a20928
Correctly evaluate $this and self in property/return types
2016-11-05 18:31:09 -04:00
Matthew Brown
c5591adf10
Add support for global in functions and mixed inferred return errors
2016-11-05 17:54:34 -04:00
Matthew Brown
7df4d74a7b
Fix Psalm errors
2016-11-04 21:14:04 -04:00
Jon Ursenbach
27c2db1d1d
PSR-2
2016-11-02 17:50:54 -04:00
Matthew Brown
712752d587
Split out asssignment methods
2016-11-01 11:37:58 -04:00
Matthew Brown
34af24a2b4
Add all the properties
2016-11-01 00:39:41 -04:00
Matthew Brown
604c875d0c
Fix more errors caught by Psalm
2016-10-30 12:46:18 -04:00
Matthew Brown
9f94add470
Update plugin interface to add $suppressed_issues
2016-10-28 16:49:42 -04:00
Matthew Brown
b31ac4a862
Removed object-like type descriptor in favour of array{} syntax
2016-10-28 13:24:06 -04:00
Matthew Brown
cc0c62fd23
Allow spaces in docblock types
2016-10-28 00:11:16 -04:00
Matthew Brown
ce95275878
Fix more Psalm bugs found by Psalm
2016-10-23 12:24:53 -04:00
Matthew Brown
d8b10a6c97
Fix errors caught by Psalm
2016-10-23 01:57:11 -04:00
Matthew Brown
f3f1ba1caa
Break out block checkers
2016-10-22 17:35:59 -04:00
Matthew Brown
2bea64ca52
Split out SwitchChecker
2016-10-22 13:37:06 -04:00
Matthew Brown
e4ba8b1abc
Make StatementsChecker much smaller
2016-10-22 13:28:40 -04:00
Matthew Brown
6174048354
Flesh out function params when evaluating args
2016-10-21 14:38:03 -04:00
Matthew Brown
6d8e722a77
Add support for anonymous classes
2016-10-20 20:54:17 -04:00
Matthew Brown
6283553d19
Properly clear cache
2016-10-20 18:16:17 -04:00
Matthew Brown
d71d439e25
Closure basically implements callable
2016-10-20 18:05:28 -04:00
Matthew Brown
8c23d0829a
Add typed support for spaceship operator
2016-10-20 14:28:16 -04:00
Matthew Brown
a4644a0e4a
Add support for Generator types
2016-10-20 14:28:16 -04:00
Matthew Brown
518e8bcbaf
Support PHP5.5 features (except yield, for now)
2016-10-20 00:13:35 -04:00
Matthew Brown
5e45a70ea8
Fix erroneous continue
2016-10-19 16:50:49 -04:00
Matthew Brown
451d97e0ed
Add support for variadic and packed variables
2016-10-19 00:31:32 -04:00
Matthew Brown
58bb10b948
Improve maths type resolution
2016-10-19 00:00:49 -04:00
Matthew Brown
98b4029ebd
Support PHP7 return types
2016-10-18 21:54:08 -04:00
Matthew Brown
900f86507d
Avoid TooManyArguments issues on mock classes
2016-10-18 18:27:16 -04:00
Matthew Brown
a1acaa231a
Allow @psalm-variadic to denote functions that use func_call_args
2016-10-18 17:55:07 -04:00
Matthew Brown
f916a6f9a3
Remove unused methods
2016-10-18 16:28:51 -04:00
Matthew Brown
935b9dfe07
Be more sensitive to function_exists checks, do not apply to whole function
2016-10-18 16:14:52 -04:00
Matthew Brown
b7ffd66211
Do not check methods after is_callable
2016-10-18 14:22:54 -04:00
Matthew Brown
d247cead09
Exit properly when encountering classes we cannot deal with
2016-10-18 11:25:15 -04:00
Matthew Brown
e6cc026d20
Add check for continue when not in loop context
2016-10-17 16:42:23 -04:00
Matthew Brown
31257634f4
Improve messages
2016-10-15 13:10:48 -04:00
Matthew Brown
ca3dfe6e39
Fix Psalm errors in Psalm
2016-10-15 00:12:57 -04:00
Matthew Brown
6201957f76
Add a ton of docblocks
2016-10-14 00:53:43 -04:00
Matthew Brown
3a92e29f59
Fix View checks
2016-10-13 21:30:27 -04:00
Matthew Brown
2406e0b190
Fix additional ref
2016-10-13 19:13:57 -04:00
Matthew Brown
9adc30ecd9
Fix use var
2016-10-13 19:08:28 -04:00
Matthew Brown
a444fd95c2
Fix miscellaneous var ids
2016-10-13 19:01:12 -04:00
Matthew Brown
ab2b3cea9e
Fix registerVariable call
2016-10-13 18:40:07 -04:00
Matthew Brown
cd69b0e5d6
Allow static property gets/sets
2016-10-13 18:27:23 -04:00
Matthew Brown
8da29add82
Delay expression checks until the end
2016-10-13 01:32:52 -04:00
Matthew Brown
14606bddbb
Set types on static property evaluation
2016-10-12 01:38:16 -04:00
Matthew Brown
c4648673bf
Rename @suppress to @psalm-suppress
2016-10-11 14:17:55 -04:00
Matthew Brown
f87e2ae4fc
Set type of mixed for magic get
2016-10-11 13:45:19 -04:00
Matthew Brown
6f1d042039
Emit issue on empty type
2016-10-11 10:47:31 -04:00
Matthew Brown
99fe265722
Add DOMDocument and DOMNode to list of classes to ignore properties on
2016-10-10 23:52:05 -04:00
Matthew Brown
64b4adfb22
Make UndefinedProperty issues more specific
2016-10-10 19:29:38 -04:00
Matthew Brown
a30c82e5d7
Fix bugs in refactor
2016-10-10 01:35:12 -04:00
Matthew Brown
5292467db0
Add @todo issues and fix errors in StatementsChecker
2016-10-09 17:54:58 -04:00
Matthew Brown
ae75296469
Use psalm-return in place of return if available
2016-10-03 21:36:42 -04:00
Matthew Brown
f3ee908232
Improve error message
2016-10-03 16:47:14 -04:00
Matthew Brown
c060a75b24
Throw error if we are accessing object-like array with int offset
2016-10-03 16:40:46 -04:00
Matthew Brown
936630892e
Fix reconciling of elseifs
2016-10-03 11:39:32 -04:00
Matthew Brown
89bc501e17
Make sure to set object-like property type if available
2016-10-03 10:41:21 -04:00
Matthew Brown
1d10d8e8a2
Add hasType check
2016-10-03 01:01:24 -04:00
Matthew Brown
41278260b8
Fix nested array adjust
2016-10-03 00:43:24 -04:00
Matthew Brown
575ee55d1b
Now make string dictionaries object-like
2016-10-02 22:00:42 -04:00
Matthew Brown
79d7a87539
Ignore classes checked in class_exists
2016-10-02 13:05:49 -04:00
Matthew Brown
a6f1eaeee2
Add support for -1 and +1 in property declarations
2016-10-02 10:30:44 -04:00
Matthew Brown
ff17dcf1ee
Fix while loop unset issue
2016-10-02 10:26:13 -04:00
Matthew Brown
91ea6844ba
Prevent error on string array assignment
2016-10-02 10:13:35 -04:00