Matt Brown
3cc549384f
Type explode more accurately
2018-04-16 16:03:04 -04:00
Matt Brown
3cf5345728
Improve codebase mixed coverage calculation by ignoring initial loops
2018-04-13 17:26:07 -04:00
Matt Brown
6502eba658
Don’t invalidate object vars after callmap functions
2018-04-13 11:24:59 -04:00
Radosław Kowalewski
0ea053bda1
Fix detecting relative paths on windows
...
Fixes vimeo/psalm#655
2018-04-12 16:08:50 -04:00
Matthew Brown
f9b6027bbc
Fix relative path includes on windows
2018-04-11 20:56:11 -04:00
Matt Brown
6e6ae7aaa6
Only complain about redundant conditions when check_variables is true
2018-04-11 14:37:01 -04:00
Matt Brown
6426dbbf0e
Propagate array key updates after assertions to base array
2018-04-11 14:19:42 -04:00
Matt Brown
fe46e4e63d
Make tests a bit more specific
2018-04-10 15:47:04 -04:00
Matthew Brown
f15c26d7f4
Change how type impossibilities are treated to improve message types
2018-04-10 01:27:26 -04:00
Matthew Brown
5f47374606
Fix indentation
2018-04-09 21:50:38 -04:00
Matt Brown
7640b00635
Only check functionlike arguments match if we know params
2018-04-09 18:49:11 -04:00
Matt Brown
47255fb19b
Fix array key check after direct assignment
2018-04-09 18:02:45 -04:00
Matt Brown
af63d28b56
isset always returns bool
2018-04-09 10:20:18 -04:00
Matt Brown
cf6326f5e6
Fix #658 - empty always returns bool
2018-04-09 10:19:23 -04:00
Matthew Brown
3fe9a0606e
Fix #654 - warn about MixedArgument when inferredType property does not exist
...
And handle str_replace more leniently when args unknown
2018-04-07 15:16:46 -04:00
Matthew Brown
0f0f405b9f
Allow mixed property assignment when the user wants it
...
Fixes #652
2018-04-07 12:13:30 -04:00
Matt Brown
60c6bb4021
Fix #650 - be more judicious about inserting mixed into places
2018-04-06 18:28:22 -04:00
Matt Brown
c932ed7764
Fix #651 - allow Psalm to understand assertions on properties of array objects
2018-04-06 16:23:10 -04:00
Matt Brown
4927dfd337
Fix issue with InvalidArrayOffset from falsable
2018-04-05 13:57:01 -04:00
Matt Brown
24f307d568
Fix #645 - add isa- prefix for strings as well as class constants
2018-04-05 12:03:36 -04:00
Matthew Brown
03b3a764e3
Fix #641 - allow is_a to operate on strings as well
2018-04-03 23:14:23 -04:00
Matthew Brown
4552e69ef2
Allow classes to be instantiated by their name only
...
Ref #641
2018-04-03 22:20:00 -04:00
Matthew Brown
ef37f0cfe8
Fix #626 - check __invoke methods
2018-03-31 18:57:13 -04:00
Matthew Brown
6a6d6465f5
Fix #619 - don’t use capitalised letters to discriminate classes
2018-03-30 19:04:21 -04:00
Matthew Brown
c8c216edb2
Fix #610 - add slightly hacky check for multiple callmap options
2018-03-30 18:51:59 -04:00
Matt Brown
fd9e783a37
Emit InvalidDocblock for bad static keyword in @var
...
Ref #623
2018-03-27 11:34:48 -04:00
Matthew Brown
44cccb5b3d
Fix build
2018-03-27 01:05:11 -04:00
Matthew Brown
fb802540d6
Fix variadic format cc @TysonAndre and allow callable param types
...
Ref #580
2018-03-27 00:12:41 -04:00
Matthew Brown
58115599a1
Add support for callable(...) syntax
...
Ref #580
2018-03-26 22:13:10 -04:00
Matthew Brown
ccbe9980f5
Fix issue with nested trait methods
2018-03-21 17:39:01 -04:00
Matthew Brown
49c4dd8a5d
Fix trait method aliasing
2018-03-21 16:55:31 -04:00
Matthew Brown
1f57876e48
Allow extract array to be passed by ref
2018-03-21 11:14:05 -04:00
Matthew Brown
452fd2e7c9
Make UndefinedClass an explicit class-related issue
2018-03-21 10:17:57 -04:00
Matthew Brown
49820b06dd
Prevent variadic args disrupting required closure param count
2018-03-21 09:04:07 -04:00
Matthew Brown
9404de699d
Allow list vars to have array keys
2018-03-21 08:48:30 -04:00
Matthew Brown
be72423980
Check for magic __call when analysing callables
2018-03-21 00:13:57 -04:00
Matthew Brown
7a5d4b8516
Fix the right thing
2018-03-20 23:55:26 -04:00
Matthew Brown
75e76eb327
Perform more granular scan for PossiblyInvalidPropertyAssignmentValue
2018-03-20 23:44:26 -04:00
Matthew Brown
f47012823e
Fix incorrect issue type emitted for static properties
2018-03-20 23:19:26 -04:00
Matthew Brown
b634e1a1b7
Add more refined treatment of InvalidIterator
2018-03-20 22:59:22 -04:00
Matthew Brown
5384f193d1
Allow class and method issues to be suppressed by their identifiers
...
Ref #603
2018-03-20 22:36:03 -04:00
Matthew Brown
d17058e7d5
Fix #608 - only check callable type if string/array is not also there
2018-03-20 08:58:05 -04:00
Matthew Brown
8dcb878af4
Fix #606 - fatal error when evaluating array_key_exists
2018-03-19 19:14:55 -04:00
Matthew Brown
8b102d891c
Allow intersection types in callable args
2018-03-18 20:29:41 -04:00
Matthew Brown
0defe84e01
Allow use of $argv and $argc in function use statements
2018-03-18 17:11:14 -04:00
Matthew Brown
80cf80dbda
Reduce number of InvalidOperand issues further
2018-03-18 16:58:54 -04:00
Matthew Brown
e0bdfeb625
Fix erroneous message for invalid right operands
2018-03-18 16:46:26 -04:00
Matthew Brown
d7a585160f
Add more granular error messages for invalid operands
2018-03-18 16:39:34 -04:00
Matthew Brown
33be97b1f8
Check for to-string casts in strict operands mode
2018-03-18 14:42:23 -04:00
Matthew Brown
4b014eaee1
Fix #600 - don’t implicitly convert object name to string
2018-03-18 14:16:47 -04:00
Matthew Brown
025b7049fd
Allow $argv/$argc to be accessed from namespace
2018-03-18 10:38:08 -04:00
Matthew Brown
28522c4f94
Fix #588 - allow anonymous classes to call $this functions
2018-03-18 01:07:14 -04:00
Matthew Brown
2e0aded816
Fix issue with empty checks and array_key_exists for property keys
2018-03-17 19:28:01 -04:00
Matthew Brown
b0b3c9287e
Fix array_key_exists calls on possibly undefined objectlike
2018-03-17 19:03:46 -04:00
Matthew Brown
4175d1a887
Add PossiblyUndefinedVariable warning when using possibly undefined array key
2018-03-17 17:35:36 -04:00
Matthew Brown
61af2a924c
Fix #575 - generated possibly-undefined keys when scanning objectlike return types
...
Ref #458
2018-03-17 16:53:11 -04:00
Matthew Brown
eb3750d8f3
Remove unnecessary @var annotations
2018-03-17 00:19:55 -04:00
Matt Brown
e5e0c56abc
Don’t remove clauses on mixed, just substitute for wedges
2018-03-15 16:40:22 -04:00
Matt Brown
651b375c62
Fix #579 - improve checks for meta-type negation
2018-03-15 14:25:04 -04:00
Matthew Brown
5cd8b3cccd
Don’t ignore @function calls
...
Fixes #570
2018-03-12 23:48:10 -04:00
Matt Brown
19ee843d6c
Emit InvalidOperand if both sides are not numeric
2018-03-08 14:30:40 -05:00
Matt Brown
56bdb924f5
Fix #563 - improve error message and ignore falsable issues for strtotime
2018-03-08 14:04:00 -05:00
Matt Brown
4873228e52
Fix #561 - add all the do-defined vars before checking loop
2018-03-08 11:17:27 -05:00
Matt Brown
cd521e7ba5
Also flesh out object like array types
2018-03-07 13:54:46 -05:00
Matt Brown
4bf652863b
Also check for non-false returns on LessSpecificReturnType
2018-03-07 11:16:56 -05:00
Matt Brown
4248cacbaf
Flesh out template type before replacing
2018-03-06 14:23:41 -05:00
Matt Brown
6d767de043
Ignore nullable class strings where appropriate
2018-03-06 14:11:32 -05:00
Matt Brown
fac5554e13
Fix errors around static class constants in template vars
2018-03-06 13:59:59 -05:00
Matt Brown
b664c85642
Add new issue conditional on config flag
2018-03-06 12:19:50 -05:00
Matt Brown
357ad1aa82
Add config flags to allow stricter class invocation checks
2018-03-06 11:20:59 -05:00
Matt Brown
57bbdc8034
Replace classlike name with more accurate context self
2018-03-05 18:05:12 -05:00
Matt Brown
7c5986de01
Add return type checks for missing classes
2018-03-05 17:46:13 -05:00
Matt Brown
aff689deea
Add support for __CLASS__ in template types
2018-03-05 17:36:08 -05:00
Matt Brown
57c2adb923
Fix #558 - add extra tests around functionality
2018-03-05 17:10:52 -05:00
Matt Brown
850998ed1a
Add class-string type for enforcing use of ::class constants
2018-03-05 16:06:06 -05:00
Matt Brown
d8825701f5
Fix #556 - closure params with defaults can still accept extra
2018-03-05 10:29:19 -05:00
Matthew Brown
67cad2063d
Fix #555 - fix function name mapping class
2018-03-05 09:01:24 -05:00
Matthew Brown
806b032b13
Downgrade UndefinedMethod to PossiblyUndefinedMethod issue when one type has __call defined
2018-03-04 13:23:40 -05:00
Matthew Brown
ecef628e21
Prevent iterating over undefined class
2018-03-03 16:52:04 -05:00
Matthew Brown
d94abc42e8
Fix array location
2018-03-02 08:38:16 -05:00
Matthew Brown
ee6a9b98fb
Allow arrays to be called (ugh)
2018-03-02 00:49:53 -05:00
Matthew Brown
154341577d
Give expected/actual argument counts
2018-03-02 00:07:19 -05:00
Matthew Brown
799e81bc96
Improve callable issue message
2018-03-02 00:03:07 -05:00
Matthew Brown
6fbd8753d5
Fix $function_id when checking for method existence
2018-03-01 23:52:11 -05:00
Matthew Brown
cc19f50c04
Prevent missing classes from confounding callable arg checks
2018-03-01 23:43:52 -05:00
Matthew Brown
6660aa8a00
Fix #548 - check array_map/array_filter args for param matches
2018-03-01 23:33:21 -05:00
Matt Brown
1f358e36ef
Fix #544 - remove possibly assigned try vars from catch initialisations
2018-02-27 11:25:27 -05:00
Matthew Brown
47cb74ddd1
Fix issue where namespaced function could be treated as root
2018-02-25 11:13:00 -05:00
Matt Brown
ad3fe0974f
Fix indentation
2018-02-23 15:41:07 -05:00
Matt Brown
441506ad6f
Fix #216 - scan assert* functions for assertions, then apply to current context
2018-02-23 15:39:33 -05:00
Matt Brown
09d708981a
Add mixed checks to property __set calls
2018-02-21 19:34:21 -05:00
Matt Brown
e04c4f866c
Fix #524 - prevent fatal error when checking stubbed function from namespace
2018-02-21 11:32:52 -05:00
Tyson Andre
7aeacebba4
Fix possible typos in comments and issue messages
2018-02-19 15:35:13 -05:00
Tyson Andre
aea3779c96
Fix unused imports in psalm, wrong param order doc comments ( #523 )
...
(Some of the imports appear as strings elsewhere in the same file)
2018-02-18 17:55:11 -05:00
Matthew Brown
59dc239c89
Fix #522 - prevent interface instantiation
2018-02-17 18:53:02 -05:00
Matthew Brown
a0e88cb16f
Fix #518 - improve dead code detection to cover variable method calls
2018-02-17 17:23:57 -05:00
Matthew Brown
b041797cd0
Fix #519 - warn about variable calls on non-objects
2018-02-17 17:16:22 -05:00
Matthew Brown
af1155239e
Fix bug when assigning nested arrays with variable offsets
2018-02-17 12:32:19 -05:00
Matthew Brown
09f86ceee7
Introduce MissingDependency issue, separate from UndefinedClass
...
Ref #511
2018-02-17 11:36:20 -05:00
Matthew Brown
88ca7d2fa7
Fix #515 - make Psalm aware of variable array keys
2018-02-17 11:24:08 -05:00
Matthew Brown
f56edd3c04
Fix issue found by better analysis
2018-02-17 11:21:45 -05:00
Matthew Brown
a6b54a3607
Fix #513 - make sure numeric is treated like a number
2018-02-15 19:50:50 -05:00
Matt Brown
279b0bc16e
Fix #511 - check all class references for missing dependencies
2018-02-14 13:34:16 -05:00
Matt Brown
be75c143d4
Fix #510 - check that constructor parent classes and interfaces exist
2018-02-14 11:21:43 -05:00
Matthew Brown
affcaebc3d
Use classes, not full method ids, for plugin execution
2018-02-11 22:49:19 -05:00
Matthew Brown
f159cd5146
Add declaring/appearing method ids to method check plugin
2018-02-11 21:07:19 -05:00
Matthew Brown
e862e4ddb1
Make all plugin methods static
...
cc @TysonAndre
2018-02-11 20:56:34 -05:00
Matthew Brown
f17ba65731
Fix #438 - assign both sides of by-ref vars to mixed
2018-02-11 10:39:21 -05:00
Matthew Brown
217233472c
Fix #457 - fix objectlike property isset check
2018-02-10 23:30:40 -05:00
Matthew Brown
24416feb62
Improve handling of unset calls with possibly undefined variables
2018-02-10 10:30:08 -05:00
Nicky Robinson
8e77ff1ce9
Throw error if magic getter or setter called for undefined property or invalid type specified with annotations ( #500 )
...
* Fix path to psalm
* If a magic getter or setter is used to access a property on a class
that is not defined but a `@property` annotation for the property
exists, throw an error. If no `@property` annotation exists, it's not
an error because you're allowed to make magic getters and setters do
crazy things.
Fixes #480
* Move logic to a better place to avoid duplicate checks
* Move logic into function
* Remove some nesting
* Check psalm-seal-properties and property type correctly
2018-02-09 19:37:09 -05:00
Matthew Brown
40efa9e8aa
Fix #503 - make sure mixed array type is set for MixedMethodCall
2018-02-08 23:22:29 -05:00
Matt Brown
283e0a6af2
Migrate class constant handling into codebase classes
2018-02-08 18:18:34 -05:00
Matt Brown
6f7903716d
Move property lookup api into codebase class
2018-02-08 18:14:28 -05:00
Matt Brown
78cc1786c8
Don’t check newly-scoped vars in conditional
2018-02-08 14:46:06 -05:00
Matt Brown
72675cb5a0
Be more rigorous about atomic docblock type reconciliation
2018-02-08 13:01:39 -05:00
Matthew Brown
6955f77e2e
Fix #493 - add support for multiple @var lines per docblock
2018-02-07 23:33:31 -05:00
Matthew Brown
24e03edefa
Fix #485 when return type is a generator
2018-02-07 22:29:32 -05:00
Matthew Brown
1ae58f0386
Fix #501 - allow analysis to continue after bad constant check
2018-02-07 20:26:26 -05:00
Matt Brown
7f4be858c2
Fix #498 - add better issue type for docblock contradiction
2018-02-07 15:20:47 -05:00
Matt Brown
685ea29ebe
Move asserted var creation after conditional reconciliation
2018-02-07 14:13:57 -05:00
Matt Brown
b4281748bc
Remove redundant code found by Psalm
2018-02-07 13:57:45 -05:00
Matthew Brown
970ceab396
Check loop context var exists
...
This can happen if the parent has been reassigned
2018-02-06 21:03:36 -05:00
Matt Brown
1df4c3d196
Add DocblockTypeContradiction to find possible issues with docblock types
...
Fixes #491
2018-02-06 18:44:53 -05:00
Matt Brown
1d46124bab
Fix issues found by detecting docblock type inconsistencies
2018-02-06 13:40:28 -05:00
Matt Brown
4b87612bb4
Add better issue message for bad array offset
...
Fixes #492
2018-02-06 11:27:01 -05:00
Matt Brown
d88eadbb0e
Fix #486 - skip first reconciliation in loop checker for do stmts
2018-02-06 11:07:52 -05:00
Matt Brown
8747d78c39
Suppress RedundantCondition when analysing first loop of do
...
Ref #486
2018-02-05 17:29:13 -05:00
Matthew Brown
8e0998e081
Break apart the Codebase class
2018-02-03 18:56:54 -05:00
Matthew Brown
e5bc0e6129
Fix #431 - report invalid return types before invalid nullable/falsable ones
2018-02-02 19:08:10 -05:00
Matthew Brown
861d907845
Add more information to TooMany/TooFewArguments issues
...
Fixes #481
2018-02-02 11:26:55 -05:00
Matthew Brown
d8fb14e6f7
Fix incorrect template types being passed through
2018-02-01 01:52:20 -05:00
Matthew Brown
fb300baa6d
Move a bunch of code into Codebase
2018-02-01 00:50:01 -05:00
Matthew Brown
cf8734a480
Add support for generic classes
2018-01-31 23:27:25 -05:00
Matt Brown
fc805a926e
Add code coverage message at the end of a scan
2018-01-31 16:08:52 -05:00
Matt Brown
b2b2572e4d
Fix #478 - allow is_a checks with string arg
2018-01-30 16:45:29 -05:00
Matt Brown
c7b2ae4e0e
Fix do while nullability issue
2018-01-29 17:18:03 -05:00
Matt Brown
4099bf24ce
Make sure new $class args are always evaluated
2018-01-29 12:22:50 -05:00
Matt Brown
66c8637b5b
Fix unused code checks for possibly undefined vars
2018-01-29 12:13:44 -05:00
Matthew Brown
e0fa3adb6f
Split up CallChecker to speed up Psalm
2018-01-28 18:29:38 -05:00
Matthew Brown
ed5245bc47
Go easy on unknown invocations
2018-01-28 18:13:38 -05:00
Matthew Brown
44b8b22995
Improve checks for unused variables and params
2018-01-28 17:28:34 -05:00
Matthew Brown
4a672fade8
Add a couple of optimisations suggested by Scrutinizer
2018-01-28 17:26:09 -05:00
Matthew Brown
8b740110f4
Remove more ? from docblocks
2018-01-28 17:07:09 -05:00
Matthew Brown
7ce053bd8a
Make docblocks sligtly more phpdoc-compatible
2018-01-28 16:52:57 -05:00
Matthew Brown
eb2870562b
Remove last two that Psalm found
2018-01-28 16:06:42 -05:00
Matthew Brown
8799b856cb
Add a couple more unused code locations
2018-01-28 13:50:41 -05:00
Matthew Brown
dd32452d90
Remove more dead code found by Psalm
2018-01-28 12:43:19 -05:00
Matthew Brown
f628187de9
Remove dead code found by improved Psalm checks
2018-01-28 12:01:51 -05:00
Matt Brown
a2d11cce51
Fix static/self return type handling
2018-01-26 13:51:00 -05:00