orklah
a1bd339cc1
add PropertyTypeProvider for DomDocument
2021-09-18 08:40:34 +02:00
Bruce Weirdan
37362b333c
Merge pull request #6503 from orklah/TClassString_inference
2021-09-17 21:54:54 +03:00
orklah
e9f3d5ba06
assert from TClassString
2021-09-17 20:05:25 +02:00
Morris Jobke
cf49eea09e
Catch ComplicatedExpressionException in ArrayFilterReturnTypeProvider
...
Many errors like this happened:
```
Uncaught Exception: Psalm\Exception\ComplicatedExpressionException
Stack trace in the forked worker:
#0 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Algebra.php(606): Psalm\Internal\Algebra::groupImpossibilities(Array)
#1 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Algebra/FormulaGenerator.php(255): Psalm\Internal\Algebra::negateFormula(NULL)
#2 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Provider/ReturnTypeProvider/ArrayFilterReturnTypeProvider.php(249): Psalm\Internal\Algebra\FormulaGenerator::getFormula(2818034, 2818034, Object(PhpParser\Node\Expr\BinaryOp\Identical), 'Guzzle\\Plugin\\C...', Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(Psalm\Codebase))
#3 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Provider/FunctionReturnTypeProvider.php(159): Psalm\Internal\Provider\ReturnTypeProvider\ArrayFilterReturnTypeProvider::getFunctionReturnType(Object(Psalm\Plugin\EventHandler\Event\FunctionReturnTypeProviderEvent))
#4 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallReturnTypeFetcher.php(59): Psalm\Internal\Provider\FunctionReturnTypeProvider->getReturnType(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), 'array_filter', Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context), Object(Psalm\CodeLocation))
#5 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallAnalyzer.php(197): Psalm\Internal\Analyzer\Statements\Expression\Call\FunctionCallReturnTypeFetcher::fetch(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(Psalm\Codebase), Object(PhpParser\Node\Expr\FuncCall), Object(PhpParser\Node\Name), 'array_filter', true, false, NULL, Object(Psalm\Type\Atomic\TCallable), Object(Psalm\Internal\Type\TemplateResult), Object(Psalm\Context))
#6 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(263): Psalm\Internal\Analyzer\Statements\Expression\Call\FunctionCallAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context))
#7 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(43): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::handleExpression(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context), false, NULL, false)
#8 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/ArgumentsAnalyzer.php(200): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context))
#9 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallAnalyzer.php(149): Psalm\Internal\Analyzer\Statements\Expression\Call\ArgumentsAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Array, Array, 'array_values', true, Object(Psalm\Context))
#10 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(263): Psalm\Internal\Analyzer\Statements\Expression\Call\FunctionCallAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context))
#11 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(43): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::handleExpression(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context), false, NULL, false)
#12 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ReturnAnalyzer.php(144): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context))
#13 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/StatementsAnalyzer.php(517): Psalm\Internal\Analyzer\Statements\ReturnAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Stmt\Return_), Object(Psalm\Context))
#14 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/StatementsAnalyzer.php(185): Psalm\Internal\Analyzer\StatementsAnalyzer::analyzeStatement(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Stmt\Return_), Object(Psalm\Context), Object(Psalm\Context))
#15 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/FunctionLikeAnalyzer.php(433): Psalm\Internal\Analyzer\StatementsAnalyzer->analyze(Array, Object(Psalm\Context), Object(Psalm\Context), true)
#16 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ClassAnalyzer.php(1782): Psalm\Internal\Analyzer\FunctionLikeAnalyzer->analyze(Object(Psalm\Context), Object(Psalm\Internal\Provider\NodeDataProvider), Object(Psalm\Context))
#17 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ClassAnalyzer.php(404): Psalm\Internal\Analyzer\ClassAnalyzer->analyzeClassMethod(Object(PhpParser\Node\Stmt\ClassMethod), Object(Psalm\Storage\ClassLikeStorage), Object(Psalm\Internal\Analyzer\ClassAnalyzer), Object(Psalm\Context), Object(Psalm\Context))
#18 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/FileAnalyzer.php(214): Psalm\Internal\Analyzer\ClassAnalyzer->analyze(Object(Psalm\Context), Object(Psalm\Context))
#19 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(348): Psalm\Internal\Analyzer\FileAnalyzer->analyze(NULL)
#20 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php(194): Psalm\Internal\Codebase\Analyzer->Psalm\Internal\Codebase\{closure}(369, '/Users/morris/P...')
#21 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(414): Psalm\Internal\Fork\Pool->__construct(Array, Object(Closure), Object(Closure), Object(Closure), Object(Closure))
#22 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(277): Psalm\Internal\Codebase\Analyzer->doAnalysis(Object(Psalm\Internal\Analyzer\ProjectAnalyzer), 7)
#23 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(640): Psalm\Internal\Codebase\Analyzer->analyzeFiles(Object(Psalm\Internal\Analyzer\ProjectAnalyzer), 7, false, true)
#24 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(359): Psalm\Internal\Analyzer\ProjectAnalyzer->check('/Users/morris/P...', true)
#25 /Users/morris/Projects/abc/vendor/vimeo/psalm/psalm(4): Psalm\Internal\Cli\Psalm::run(Array)
#26 {main} in /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php:366
Stack trace:
#0 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php(400): Psalm\Internal\Fork\Pool->readResultsFromChildren()
#1 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(488): Psalm\Internal\Fork\Pool->wait()
#2 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(277): Psalm\Internal\Codebase\Analyzer->doAnalysis(Object(Psalm\Internal\Analyzer\ProjectAnalyzer), 7)
#3 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(640): Psalm\Internal\Codebase\Analyzer->analyzeFiles(Object(Psalm\Internal\Analyzer\ProjectAnalyzer), 7, false, true)
#4 /Users/morris/Projects/abc/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(359): Psalm\Internal\Analyzer\ProjectAnalyzer->check('/Users/morris/P...', true)
#5 /Users/morris/Projects/abc/vendor/vimeo/psalm/psalm(4): Psalm\Internal\Cli\Psalm::run(Array)
#6 {main}
(Psalm 4.10.0@916b098b008f6de4543892b1e0651c1c3b92cbfa crashed due to an uncaught Throwable)
```
This change catches the exception and just omits the results here.
Disclaimer: I just added the code like @orklah said in https://github.com/vimeo/psalm/pull/6489#issuecomment-921057199 .
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2021-09-17 09:41:05 +02:00
Morris Jobke
14acc115a7
Print exception class in case of an uncaught exception
...
Before it just stated:
```
Uncaught Exception:
Stack trace in the forked worker:
...
```
With this change it also prints the class name (in case there is no message or the message is not unambiguous.
```
Uncaught Exception: Psalm\Exception\ComplicatedExpressionException:
Stack trace in the forked worker:
...
```
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2021-09-16 12:46:04 +02:00
whsv26
fd4eeaae2e
Fix phpcs issue for is_null function.
2021-09-14 00:52:32 +03:00
whsv26
6ac29fc965
Fix code style.
2021-09-14 00:50:23 +03:00
whsv26
8b54cca3a8
Fix different context templates invalid argument bug for trait.
2021-09-13 23:43:09 +03:00
orklah
96adb96dab
fix or suppress cases in Psalm
2021-09-12 23:12:23 +02:00
orklah
44bfa2c21c
flag alwaysTruthy conditions as redundant
2021-09-12 22:53:44 +02:00
S.M. Ataur Rahman
c13ed7cc28
type of "$http_response_header" is "list<string>" now
2021-09-09 01:36:07 +06:00
Bruce Weirdan
b4f024b1fe
Basic enum checks
...
* Duplicate cases
* Duplicate case values
* Invalid case values: value on a pure enum case, missing value on a
backed enum case, backing type / case type mismatch
* Literal expression evaluation for case values
Fixes vimeo/psalm#6426
Fixes vimeo/psalm#6427
2021-09-07 12:35:38 +03:00
Tyson Andre
f4f989d1e5
Use different in-array-*
check for non-literals
...
Negating this would not contradict the original condition if the
variables were different. A string can be in one array of strings but
not be in a different array of strings.
2021-09-06 21:48:08 -04:00
Tyson Andre
7df819e585
Unrelated: Use strict_equality instead of loose_equality for ===
checks
...
(`=` is strict equality, `~` is loose equality)
2021-09-06 21:44:19 -04:00
Tyson Andre
f69a255611
Fix false positive ParadoxicalCondition in negation of in_array
...
For #6439
2021-09-06 21:15:04 -04:00
Bruce Weirdan
0f2152ac97
Merge pull request #6434 from weirdan/flag-invalid-enum-backing-type
...
Flag invalid backing types for enums
2021-09-05 20:30:01 +03:00
Bruce Weirdan
7b11024886
Flag invalid backing types for enums
...
Fixes vimeo/psalm#6428
2021-09-05 20:12:24 +03:00
Bruce Weirdan
abf557da44
Encode XML output consistently
...
This fixes test failures when running on PHP 8.1, due to changed
`htmlspecialchars()` defaults
2021-09-05 20:06:59 +03:00
Bruce Weirdan
5dfd157d72
Merge pull request #6420 from orklah/ternary-override-type
...
Ternary override type when reassigning
2021-09-04 21:58:32 +03:00
Bruce Weirdan
b710aab148
Merge pull request #6419 from TysonAndre/in_array-fix
2021-09-04 21:56:36 +03:00
Bruce Weirdan
3a3fde332e
Merge pull request #6392 from orklah/control-action-test
2021-09-04 21:38:08 +03:00
orklah
0825f220fe
allow ternary to override previous type when reassigning
2021-09-04 20:22:06 +02:00
Tyson Andre
58e7ae1809
Also support non-literal types in strict in_array() check
...
Modified approach to #6396 by orklah
Fixes #6333
Co-Authored-By: orklah <ronan_morin@hotmail.com>
2021-09-04 12:34:49 -04:00
Bruce Weirdan
d9ceb8779f
Merge pull request #6398 from orklah/array_is_list
2021-09-04 15:55:23 +03:00
orklah
f9b37cea5b
name error
2021-09-04 14:08:04 +02:00
orklah
c8cf503367
introduce isAlwaysFalsy and isAlwaysTruthy
2021-09-04 13:56:13 +02:00
orklah
9cd8917b88
create callmap for 8.1 and introduce array_is_list
2021-09-04 13:25:23 +02:00
orklah
e99c1951ae
Make Psalm understand infinite while loop in control actions
2021-09-02 22:28:01 +02:00
Bruce Weirdan
a655ca81c1
Merge pull request #6391 from ro0NL/6388
2021-09-02 23:23:32 +03:00
orklah
854858a3bc
this should have less impact
2021-09-02 20:55:50 +02:00
Roland Franssen :)
27faf9502e
😓
2021-09-02 20:39:03 +02:00
Roland Franssen :)
a4356089ef
fix
2021-09-02 20:37:21 +02:00
Roland Franssen :)
4bf4d8e451
Forbid empty()
2021-09-02 20:32:05 +02:00
orklah
58e578e6a7
fix Generator giving templates to Iterator
2021-09-02 20:12:32 +02:00
Bruce Weirdan
eb973ab2e1
Merge pull request #6335 from boesing/bugfix/recursive-class-aliases
2021-08-31 23:51:19 +03:00
Bruce Weirdan
b713140cc1
Merge pull request #6326 from piporoid/issue/2164
...
Prevent @property annotations on class properties
2021-08-31 23:46:56 +03:00
Bruce Weirdan
cbcc38aab8
Merge pull request #6339 from niconoe-/allow-object-on-array_walk
2021-08-31 23:45:10 +03:00
Bruce Weirdan
103b2b7244
Warn about array_walk_recursive over objects
2021-08-31 23:18:20 +03:00
Bruce Weirdan
624246b996
Merge pull request #6376 from orklah/use-variable-in-backtick
2021-08-29 04:39:13 +03:00
orklah
27b6d5ad3b
fix psalm errors
2021-08-29 00:39:36 +02:00
orklah
10c20dc8f3
mark variable used in backticks as used
2021-08-29 00:26:52 +02:00
Bruce Weirdan
b370ce92aa
Report RawObjectIteration
when array_walk
is used on objects
2021-08-20 01:43:49 +03:00
Bruce Weirdan
9222b24ea1
Merge pull request #6321 from orklah/analyze-dynamic-classConstFetch
2021-08-20 01:06:56 +03:00
orklah
dbf3512b70
introduce $definite_class flag and use it to avoid using final keyword for simple inference
2021-08-19 23:19:59 +02:00
Bruce Weirdan
65f34d0d9f
Merge pull request #6346 from orklah/id-cache
...
remove cache after unsetting a key from a TKeyedArray
2021-08-19 22:01:44 +03:00
orklah
6ba8876153
remove cache after unsetting a key from a TKeyedArray
2021-08-19 20:40:25 +02:00
Bruce Weirdan
3cb28e6399
Merge pull request #6344 from orklah/vendor-suppressions
...
don't report UnusedSuppressions in non project dirs
2021-08-19 20:53:21 +03:00
Bruce Weirdan
230bdb43ad
Merge pull request #6345 from orklah/multiple_properties
...
use better solution to check for project dir paths
2021-08-19 20:53:07 +03:00
orklah
d416d46900
fix CS
2021-08-19 19:36:01 +02:00
orklah
ef34cbd321
use better solution to check for project dir paths
2021-08-19 18:49:28 +02:00
orklah
3e236fc2fe
don't report UnusedSuppressions in non project dirs
2021-08-19 18:43:29 +02:00
Maximilian Bösing
c9aebe3082
bugfix: resolve recursive aliases in multiple methods
...
- `ClassLikes#hasFullyQualifiedClassName`
- `ClassLikes#hasFullyQualifiedInterfaceName`
- `ClassLikes#hasFullyQualifiedEnumName`
- `ClassLikes#hasFullyQualifiedTraitName`
- `ClassLikes#classExtends`
- `ClassLikes#classImplements`
Signed-off-by: Maximilian Bösing <2189546+boesing@users.noreply.github.com>
2021-08-18 16:37:08 +02:00
Maximilian Bösing
4e0484f283
bugfix: resolve recursive aliases
...
Signed-off-by: Maximilian Bösing <2189546+boesing@users.noreply.github.com>
2021-08-18 16:18:58 +02:00
orklah
2b37bdf253
get rid of the final check that was there only for static:: before
2021-08-17 23:40:03 +02:00
orklah
ee53c57952
add back alter blocks but remove renaming the $stmt->class part when it's a variable
2021-08-17 23:11:28 +02:00
Bruce Weirdan
e5b797c764
Merge pull request #6327 from boesing/bugfix/class-alias
2021-08-17 23:35:25 +03:00
Maximilian Bösing
158f2144b5
qa: use ClassLikes#getUnAliasedName
instead of accessing the classlike_aliases
...
Signed-off-by: Maximilian Bösing <2189546+boesing@users.noreply.github.com>
2021-08-17 21:43:58 +02:00
Maximilian Bösing
5ef606a5f6
qa: avoid array_keys
...
Signed-off-by: Maximilian Bösing <2189546+boesing@users.noreply.github.com>
2021-08-17 21:39:53 +02:00
Barney Laurance
88276d7f1e
Fix error message for call to internal method from root namespace
2021-08-17 18:54:57 +01:00
orklah
1bf7447685
small refactor, add LiteralClassString, remove alter code blocks
2021-08-17 18:51:59 +02:00
Maximilian Bösing
f8db5a0461
bugfix: enable ClassLikes
to properly detect implementing class aliases
...
Signed-off-by: Maximilian Bösing <2189546+boesing@users.noreply.github.com>
2021-08-17 18:40:18 +02:00
piporoid
1df5f3012a
Prevent @property annotations on class properties
2021-08-17 23:40:26 +09:00
Maximilian Bösing
cb244d5c1e
bugfix: add missing TNonEmptyMixed
to Atomic#create
...
Signed-off-by: Maximilian Bösing <2189546+boesing@users.noreply.github.com>
2021-08-17 10:46:45 +02:00
orklah
7308c86bb2
fix build
2021-08-16 21:56:37 +02:00
orklah
9264ea5cbb
Allow type inference on dynamic ClassConstFetch
2021-08-16 21:20:20 +02:00
Bruce Weirdan
f245c4ace7
Prevent failures when parsing in-array assertions
...
Fixes vimeo/psalm#6309
2021-08-16 01:23:48 +03:00
orklah
1e17069c24
Change > assertion back to @ and put back a perf threshold
2021-08-15 10:13:05 +02:00
Bruce Weirdan
a9ead63ae1
Revert "Assertions for Integer Range"
2021-08-14 18:06:41 +03:00
Matthew Brown
6cc5ba970a
Fix tests
2021-08-14 10:45:32 -04:00
Matthew Brown
a4479761a7
Fix #3660 - ensure mixed percentage for file never drops below 0
2021-08-14 10:35:31 -04:00
Thomas Bley
04177496cc
Fixed ReflectionException: Class \LanguageServerProtocol\TextDocumentContentChangeEvent does not exist
2021-08-14 05:54:36 +02:00
Bruce Weirdan
7ff2a660dd
Merge pull request #6233 from supersmile2009/fix-in-array-assert
2021-08-13 01:39:31 +03:00
Bruce Weirdan
568a9e0412
Prevented empty assertions
...
and simplified the code a bit.
2021-08-13 00:39:24 +03:00
Bruce Weirdan
6294e06955
Improve constant array inference
...
This fixes int offset inference and adds handling for array unpacks in
constant arrays. Mostly it's copy/pasted from `ArrayAnalyzer` with
further adjustments.
Fixes vimeo/psalm#6263
Fixes vimeo/psalm#6289
2021-08-12 20:39:21 +03:00
Bruce Weirdan
8f85f580da
Extract item handling
2021-08-11 01:18:23 +03:00
Bruce Weirdan
f9a75983f9
Use ArrayCreationInfo for is_list flag
2021-08-11 00:47:45 +03:00
Bruce Weirdan
b6ade31dd0
Use ArrayCreationInfo for can_create_objectlike flag
2021-08-11 00:39:56 +03:00
Bruce Weirdan
ba4f1db2cd
Use ArrayCreationInfo for class strings
2021-08-11 00:29:14 +03:00
Bruce Weirdan
47d3d31c47
Use ArrayCreationInfo for property types
2021-08-11 00:19:18 +03:00
Bruce Weirdan
abe5ef774c
Use ArrayCreationInfo for key and value types
2021-08-11 00:05:00 +03:00
Bruce Weirdan
a64a30cdda
Combine value types at once
2021-08-10 21:30:57 +03:00
Bruce Weirdan
a41d5c5b4f
Combine offset types at once
2021-08-10 21:23:13 +03:00
Bruce Weirdan
cf28859faf
Extract array type inference
2021-08-10 20:48:45 +03:00
Alexandr Zolotukhin
d7f83c3b5e
Fix issues detected by psalm
2021-08-10 20:07:53 +03:00
Bruce Weirdan
5dc748d372
Merge pull request #6273 from VincentLanglet/nonEmptyConstant
...
Constants are non empty strings
2021-08-09 23:36:41 +03:00
Bruce Weirdan
868a1672c1
Merge pull request #6253 from orklah/unusedSuppress
2021-08-09 23:34:14 +03:00
Bruce Weirdan
94f034b7ad
Merge pull request #6272 from orklah/sealed-array-combination
2021-08-09 23:33:00 +03:00
orklah
b975dd7f73
add documentation
2021-08-09 21:59:29 +02:00
Vincent Langlet
b28316c27c
Declare some constant as non empty
2021-08-09 21:39:49 +02:00
orklah
5134747edd
CS
2021-08-09 20:46:15 +02:00
orklah
e688781383
seal the result of two sealed KeyedArrays
2021-08-09 20:43:17 +02:00
Bruce Weirdan
2431d162a9
Merge pull request #6251 from TysonAndre/reset-cache-level
...
Use different psalm cache for different error levels
2021-08-08 21:28:27 +03:00
bjscharp
07d48d779a
Merge branch 'master' into callmap-delta-inconsistencies
2021-08-08 10:41:42 +02:00
bjscharp
96056d329f
Add simple test to verify outout of getCallMap method
...
Convert deltafile format to new style proposed by weirdan
Modify CallMapTest to use new format
Modify InternalCallMapHandler to use new format
Move assertions to base testcase
2021-08-08 10:39:54 +02:00
orklah
2253667bd5
fix CS, remove redundant vars
2021-08-07 00:22:47 +02:00
orklah
b194291bb3
try to fix offsets
2021-08-07 00:08:19 +02:00
Maximilian Bösing
9d59fbe6bb
feature: introduce literal float methods to Union
type
...
- Added `Psalm\Type\Union#isSingleFloatLiteral`
- Added `Psalm\Type\Union#getSingleFloatLiteral`
- Added `Psalm\Type\Union#hasLiteralFloat`
Signed-off-by: Maximilian Bösing <2189546+boesing@users.noreply.github.com>
2021-08-06 21:05:26 +02:00
Tyson Andre
3486490080
Use different psalm cache for different error levels
...
Fixes #4952
2021-08-06 12:46:15 -04:00
Alexandr Zolotukhin
65a129e3c2
Fix type reconciliation for complex cases with union types
2021-08-06 00:13:26 +03:00
Alexandr Zolotukhin
9687836519
Fix intersection calculation for unions of scalar types
2021-08-05 23:15:58 +03:00
orklah
3fe678b914
ignore UnnecessaryVarAnnotation
2021-08-05 21:05:44 +02:00
orklah
c706497cbd
restrict types
2021-08-04 19:45:25 +02:00
orklah
0c75ac89d0
refactor arithmetics
2021-08-04 19:43:27 +02:00
Alexandr Zolotukhin
6dd24285c5
Return Empty type if there's no intersection between existing and assertion type
2021-08-03 21:10:59 +03:00
Bruce Weirdan
2ecd1d8bd3
Merge pull request #6238 from orklah/unused-foreach-fixable
...
don't flag UnusedForeachValue as fixable
2021-08-03 19:37:07 +03:00
Alexandr Zolotukhin
586e8a157e
Fix tests with loose types. Fix return type in the reconciler.
2021-08-03 19:34:35 +03:00
orklah
006088d578
don't flag UnusedForeachValue as fixable
2021-08-03 18:24:53 +02:00
Alexandr Zolotukhin
097e88a7cb
Improved in_array assertion extraction
...
Extract non-literal type assertion from in_array
Extract false, true and null assertion
Fix assertion against arrays with union-typed values
Fix assertion against non-sealed arrays
2021-08-03 17:29:32 +03:00
Bruce Weirdan
9d68e2e39c
Merge pull request #6231 from tm1000/patch-get-position-from-offset-error-php80
2021-08-03 04:06:02 +03:00
Your Name
9f3f366cf3
Fixes: PHP 8.0: Argument #3 ($offset) must be contained in argument #1 ($haystack)
2021-08-02 16:49:09 -07:00
Bruce Weirdan
caaff6e3b4
Merge pull request #6210 from orklah/int-range3
2021-08-01 16:37:15 +03:00
Bruce Weirdan
3a1714e732
Merge pull request #6215 from weirdan/fix-6211
...
Use fully-qualified name for virtual class strings
2021-08-01 16:36:25 +03:00
Matthew Brown
00c062267d
Fix space
2021-07-31 21:15:26 -04:00
Matthew Brown
a205a23ccb
Fix #6212 - remove untested code, add test for reasonable behaviour
2021-07-31 19:50:56 -04:00
Bruce Weirdan
e4ead74879
Use fully-qualified name for virtual class strings
...
Fixes vimeo/psalm#6211
2021-08-01 02:22:16 +03:00
Bruce Weirdan
2562e37e60
Scan preloaded stubs earlier
...
This should prevent Psalm from sometimes marking user-defined classes as
built-in.
Fixes vimeo/psalm#5126
Fixes vimeo/psalm#5626
2021-08-01 01:36:37 +03:00
orklah
d22b4b3c23
forgot an occurence of >
2021-07-31 22:24:07 +02:00
orklah
2a9ddab738
replace +/- by >/<
2021-07-31 22:06:36 +02:00
orklah
5f764b9d8f
replace > by @
2021-07-31 21:59:35 +02:00
orklah
059eb5e29d
break the > assertion thing to see what start to fall apart
2021-07-31 21:54:15 +02:00
orklah
565336febd
fix mistake
2021-07-31 18:52:28 +02:00
orklah
a6431c4055
fix comment
2021-07-31 18:47:17 +02:00
orklah
3230ee8bcb
fix mistakes
2021-07-31 17:57:07 +02:00
orklah
f3fb20efc5
threshold for too heavy conditions
2021-07-31 16:54:27 +02:00
orklah
67318b33f7
fix reconciliation when a bound is null
2021-07-31 16:02:58 +02:00
orklah
a8efe58784
fix isset assertion
2021-07-31 15:47:12 +02:00
orklah
c5165710d3
fix comparison
2021-07-31 15:47:12 +02:00
orklah
a6fa63a0cf
allow checking if an int is contained inside a range
2021-07-31 15:47:12 +02:00
orklah
128a811174
add internal assertions for superior and inferior
2021-07-31 15:47:12 +02:00
orklah
7e137f5b95
Improve internals of TIntRange ( #6208 )
...
* Improve internals of TIntRange
* fix PositiveInt aliasing
2021-07-31 09:19:20 -04:00
orklah
ba9f7d09ac
fix CS
2021-07-30 22:22:38 +02:00
orklah
0252a65e0d
fix syntax
2021-07-30 21:46:11 +02:00
orklah
1e3e6a85e4
introduce basic integer range
2021-07-30 21:44:51 +02:00
Bruce Weirdan
9414b11c2f
Merge pull request #6204 from orklah/class-string-attributes
2021-07-29 22:35:42 +03:00
Bruce Weirdan
4cb9d8ceec
Merge pull request #6205 from orklah/typos
...
fix typos
2021-07-29 22:31:03 +03:00
orklah
d0fe1528b6
fix typos
2021-07-29 20:59:52 +02:00
orklah
a1c4ece7bd
Create a virtual ClassConstFetch when encountering a TLiteralClassString
2021-07-29 20:23:53 +02:00
Bruce Weirdan
7aa5564047
Merge pull request #6192 from orklah/array_replace_not_nullable
...
make array_replace and array_replace_recursive not nullable
2021-07-28 00:20:46 +03:00
orklah
d9df3211c5
make array_replace and array_replace_recursive not nullable
2021-07-27 23:02:41 +02:00
Jack Robertson
f0193f20fa
Consider print, and conditionally exit / die impure
2021-07-27 13:26:54 +01:00
Bruce Weirdan
ae0c8f57fd
Merge pull request #6187 from orklah/wrong-nullable-type
2021-07-27 00:52:20 +03:00
orklah
06af927f12
fix an error I made a few months ago
2021-07-26 23:09:27 +02:00
orklah
72d60249a9
Inaccurate error with different types in PHPDoc and typehint
2021-07-26 23:03:00 +02:00
Bruce Weirdan
4d99fbcce0
Merge pull request #6185 from orklah/typo
...
fix wrong wording from #6083
2021-07-26 23:00:42 +03:00
orklah
2259113727
fix wrong wording
2021-07-26 21:09:12 +02:00
Bruce Weirdan
358f83d66b
Merge pull request #6181 from Jack97/date-time-interface-type-reconciliation
2021-07-26 16:28:10 +03:00
Jack Robertson
0e6160c1e0
Update DateTimeInterface type reconciliation
2021-07-26 13:41:52 +01:00
Bruce Weirdan
82dfbbc12e
Merge pull request #6167 from orklah/non-div-with-numeric-and-int
2021-07-25 13:56:48 +03:00
orklah
55245cf558
Arithmetic operation between numeric and int or float gives int|float
2021-07-25 12:29:11 +02:00
Bruce Weirdan
783dc610df
Merge pull request #6172 from Jack97/malformed-parentheses
2021-07-25 13:08:23 +03:00
Jack Robertson
ce6642d1aa
Handle malformed parentheses
2021-07-25 10:43:34 +01:00
Bruce Weirdan
aa23aa5387
Merge pull request #6166 from orklah/StringIncrementOnNumericString
2021-07-24 23:27:17 +03:00
orklah
f63f1b5d2a
use is_numeric for checking if a Literal is numeric
2021-07-24 21:44:12 +02:00
orklah
9189fa1745
add tests and code for handling LiteralString that are Numeric
2021-07-24 21:21:50 +02:00
orklah
b48a42ffab
don't try to handle preinc/postinc
2021-07-24 21:18:11 +02:00
Jack Robertson
1c0de36795
Support array_slice template parameter return type inference
2021-07-24 16:09:29 +01:00
Bruce Weirdan
3caceb7131
Merge pull request #6169 from orklah/numeric-strictBinaryOperands
2021-07-24 15:45:42 +03:00
orklah
1a41ee4dd4
keep wording consistency
2021-07-24 11:18:50 +02:00
orklah
7146c646e3
Trigger InvalidOperand when processing two numeric types in strict operands mode
2021-07-24 11:04:09 +02:00
orklah
4b660aa941
handle every increment/decrement
2021-07-24 10:51:10 +02:00
orklah
8189409bd4
refine documentation
2021-07-23 21:41:31 +02:00
orklah
c8ee73ce30
Allow increment on numeric-string
2021-07-23 21:10:29 +02:00
Bruce Weirdan
198fdf876e
Merge pull request #6142 from orklah/trigger_error
2021-07-23 09:22:55 +03:00
Matthew Brown
43cff22b25
Add support for native PHP readonly
2021-07-21 13:29:07 -04:00
Bruce Weirdan
052c7478cc
Unary plus and minus mark operand as used
...
Fixes vimeo/psalm#6145
2021-07-21 01:15:51 +03:00
orklah
58dd3f6f94
change wording
2021-07-20 23:53:04 +02:00
orklah
9ff0fceb71
CS changes
2021-07-20 23:41:11 +02:00
orklah
9160a4e8a6
review
2021-07-20 23:37:34 +02:00
orklah
acfdb82856
Basic implementation
2021-07-20 23:34:38 +02:00
Bruce Weirdan
b149097086
Replace array cast with get_object_vars() which Psalm understands
2021-07-20 23:26:15 +03:00
Nathan Dench
39555a2df8
add type signature in XmlReport
2021-07-20 21:54:44 +10:00
Nathan Dench
ca2c125218
fix: Handle DataFlowNodeData in XmlReport
2021-07-20 21:39:09 +10:00
Bruce Weirdan
7bcefb783a
Simplify InstancePropertyAssignmentAnalyzer::analyzeAtomicAssignment()
...
... to fix build issues.
2021-07-20 00:08:49 +03:00
Bruce Weirdan
0317f1dbec
Merge pull request #6130 from weirdan/forbid-dynamic-access-to-static-props
2021-07-19 16:11:29 +03:00
Bruce Weirdan
d992331125
Expand magic properties
...
Fixes vimeo/psalm#4344
Fixes vimeo/psalm#5663
Fixes vimeo/psalm#5639
Fixes vimeo/psalm#5955
Fixes vimeo/psalm#3272
2021-07-18 23:43:33 +03:00
Bruce Weirdan
b589525eb1
Merge pull request #6131 from orklah/bindtextdomain
...
makes bindtextdomain impure
2021-07-18 16:53:59 +03:00
Bruce Weirdan
7418e6e167
grammar
2021-07-18 16:52:00 +03:00
orklah
f1269d2425
makesbindtextdomain impure
2021-07-18 14:24:43 +02:00
Bruce Weirdan
a180dc6099
Flag staticness mismatch
...
This handles two new cases:
1. Accessing static property with `->` (produces notices and warnings: https://3v4l.org/TiGan )
2. Accessing non-static property with `::` (causes fatal error: https://3v4l.org/IdYSh )
Fixes vimeo/psalm#6117
2021-07-18 02:51:33 +03:00
Bruce Weirdan
53ae7764e9
Merge pull request #6129 from orklah/unused-global
2021-07-18 02:33:50 +03:00
orklah
fcbd443bc8
initialize array
2021-07-17 22:04:22 +02:00
orklah
79d0647d19
fix issue when setting a value to a global is considered unused
2021-07-17 22:00:54 +02:00
Bruce Weirdan
2127da387b
Merge pull request #3903 from greg0ire/redundant-not-identical-with-false
...
Add negated identity with false case
2021-07-17 04:07:40 +03:00
Grégoire Paris
26f8e5b333
Add negated identity with false case
...
This is the opposite of === true and works the same.
2021-07-17 03:20:23 +03:00
Bruce Weirdan
4c197afc09
Merge pull request #5512 from ngmy/shepherd-envvar
...
Add the environment variable for using Shepherd
2021-07-17 02:50:15 +03:00
Yuta Nagamiya
bcd5fc4b6a
Add the environment variable for using Shepherd
2021-07-17 02:26:13 +03:00
Joshua Behrens
0c6031f7f2
Use same working directory for preparing cache directory as it used in running analysis
2021-07-17 01:55:41 +03:00
Bruce Weirdan
c9f52c449b
Merge pull request #6127 from weirdan/deprecated-properties
...
Check deprecated properties on $this->prop reads
2021-07-17 01:43:08 +03:00
Matthew Brown
88c4e2468e
Support interface-string<Foo> as temporary alias of class-string<Foo> ( #6106 )
2021-07-16 18:38:39 -04:00
Bruce Weirdan
a6a261b537
Merge pull request #6123 from caugner/codeclimate-relative-paths
...
fix(CodeClimateReport): use relative path
2021-07-17 01:29:26 +03:00
Bruce Weirdan
af5cdb4dd4
Check deprecated properties on $this->prop reads
...
Fixes vimeo/psalm#6118
2021-07-17 01:20:35 +03:00
Claas Augner
d0df69afb5
Fix CodeClimateReport to use relative paths
...
Both GitLab and the Code Climate Engine Specification require the code
climate report to contain the *relative* path to the source code file.
2021-07-16 22:39:47 +02:00
Bruce Weirdan
4a516005a3
Allow 0 for all bitmask types
...
Fixes vimeo/psalm#6119
2021-07-16 23:20:33 +03:00
orklah
0bd8b03f7a
Fix usage of gettype in a switch with closed resource
2021-07-14 12:49:46 +02:00
Bruce Weirdan
601c8cac5b
Merge pull request #6086 from orklah/cleanup
2021-07-14 09:08:18 +03:00
orklah
c3a4e513f9
add more detailed phpdoc for $conditional and remove unused code
2021-07-14 00:02:36 +02:00
orklah
bcd22335b6
add some detailed phpdoc for $conditional
2021-07-13 22:35:57 +02:00
orklah
874b8ed7ae
fix doc
2021-07-13 22:29:27 +02:00
orklah
647b9b78dc
cleanup and refactor AssertionFinder
2021-07-13 20:54:47 +02:00
Ruslan Karimov
8a08489dcc
Merge branch 'master' into fix-5957
...
# Conflicts:
# tests/UnusedVariableTest.php
2021-07-13 10:15:35 +05:00
Ruslan Karimov
cfaca07c6d
added dataflow to stringy bitwise op, bitwise not op (fix 5957)
2021-07-13 10:05:21 +05:00
Bruce Weirdan
6729f4db01
Merge pull request #6083 from orklah/falsable-argument
2021-07-13 02:13:39 +03:00
orklah
52033f4b69
fix condition when scalar is allowed
2021-07-13 00:34:22 +02:00
orklah
1fc8982ca9
fix condition when bool is allowed
2021-07-13 00:19:13 +02:00
orklah
688367de38
Always emit InvalidArgument when the parameter is always false and not accepted
2021-07-13 00:06:36 +02:00
Matthew Brown
f2bc6913db
Fix #6061 — delay analysis of array value except when unpacking ( #6081 )
2021-07-12 17:05:33 -04:00
Bruce Weirdan
e93b37a225
Merge pull request #6060 from VincentLanglet/statement
2021-07-11 22:12:10 +03:00
Matthew Brown
acc7ee261c
Fix #6066 - introduce more robust system for capturing template constraints ( #6072 )
...
* Fix #6066 - add better system for capturing template constraints
* Fix comment
2021-07-11 12:03:21 -04:00
Vincent Langlet
3339ce1379
Use stmt instead of args
2021-07-11 11:22:13 +02:00
Bruce Weirdan
83bf9b8ed9
Merge pull request #5608 from paxal/patch/preg_replace_callback
...
Allow to use string key for preg_replace_callback callable argument
2021-07-11 04:55:03 +03:00
Bruce Weirdan
d1f894a5a0
Merge pull request #6068 from caugner/make-ClassLikeNodeScanner-resilient-against-missing-class-storage
...
Make ClassLikeNodeScanner resilient against missing class storage
2021-07-11 03:18:31 +03:00
Matthew Brown
d883d73991
Fix template bound terminology
...
I had this flipped by mistake
2021-07-10 14:08:09 -04:00
Claas Augner
c6ccf61a5c
Make ClassLikeNodeScanner resilient against missing class storage
2021-07-09 16:56:45 +02:00
Bruce Weirdan
f94f3b8691
Merge pull request #6054 from caugner/6050-FunctionLikeAnalyzer-extract-setParams-addParam
2021-07-09 08:21:36 +03:00
Claas Augner
9a78b2fbc8
Mark FunctionLikeStorage::setParams()/addParam() as internal
2021-07-09 00:58:29 +02:00
ElisDN
61b78e117f
Fix negative numbers
2021-07-08 19:17:31 +03:00
Simon Podlipsky
8568798747
Skip argv when --config file.xml is passed
2021-07-08 10:19:58 +02:00
Vincent Langlet
49ed7b045f
Pass statement to MethodReturnTypeProviderEvent
2021-07-08 00:02:36 +02:00
Andrew Nagy
81bd44b714
didChangeWatchedFiles should continue not return
...
didChangeWatchedFiles should continue not return per each watched file in the $changes array
2021-07-06 16:52:46 -07:00
Claas Augner
b91e00b03f
Always keep FunctionLikeStorage->param_lookup in sync
2021-07-06 11:58:58 +02:00
Claas Augner
601a981898
Extract FunctionLikeStorage::setParams()/addParam()
2021-07-06 11:52:42 +02:00
Bruce Weirdan
e8f1acb9b6
Revert "Don't attempt to read baseline before it was generated ( #5961 )"
...
This reverts commit 52d2692497
.
2021-07-06 09:54:00 +03:00
orklah
f8644fb508
Improve resolution of __METHOD__ and __FUNCTION__
2021-07-03 10:01:53 +02:00
Bruce Weirdan
6db79be207
Keep generic part of shape on array_map return type
...
Fixes vimeo/psalm#6038
2021-07-03 06:33:37 +03:00
Bruce Weirdan
4b31058234
Separate memory limit formatting from retrieval
...
This addresses https://github.com/vimeo/psalm/pull/6030#issuecomment-872611832
Previously PHP would allow to set memory limit to be below current
memory usage, and the test changed in this PR abused that. As we
actually don't need to test `ini_get()` value decoding was split into
its own method, and we're testing that decoding instead.
2021-07-02 02:59:43 +03:00
Bruce Weirdan
248a07fd35
Ship FakeFileProvider even with dist dev releases
...
Refs psalm/psalm.dev#60
2021-07-02 00:26:20 +03:00
Matt Brown
667dcc2e49
No false-positives for tainting through array keys
2021-06-29 17:05:39 -04:00
Ruslan Karimov
79b61c3b61
Added support for self & static keywords in array_reduce callables
2021-06-29 22:27:50 +05:00
Bruce Weirdan
0196afc758
Merge pull request #6014 from tm1000/feature/6013-1
2021-06-29 05:39:16 +03:00
Andrew Nagy
468e474f44
Update src/Psalm/Internal/LanguageServer/Server/Workspace.php
...
Co-authored-by: Bruce Weirdan <weirdan@gmail.com>
2021-06-28 19:08:02 -07:00
Bruce Weirdan
5ea98d6324
Merge pull request #6010 from tm1000/feature/6008
2021-06-29 04:40:00 +03:00
Your Name
79fbaa2252
Fixes #6013 , implement workspace/didChangeWatchedFiles
2021-06-28 17:34:43 -07:00
Bruce Weirdan
3080140061
Drop superfluous docblock types
2021-06-29 03:10:19 +03:00
Bruce Weirdan
63286714e6
Merge pull request #6012 from tm1000/bugfix/6011
...
Fixes #6011 , move placement of version call
2021-06-29 03:00:03 +03:00
Your Name
4d91c6ecc5
Fixes # 6011, move placement of version call
2021-06-28 15:09:50 -07:00
Your Name
46c3f1cbf3
fix styling issues
2021-06-28 14:31:48 -07:00
Your Name
4ae5d50f56
Fixes #6008 , Enabled onSave and onOpen textDocument
2021-06-28 14:23:43 -07:00
Bruce Weirdan
9e9413da6d
Merge pull request #6007 from tm1000/bugfix/5997-1
...
Fixes #5997 by intentionally sending Success responses from shutdown method
2021-06-28 23:12:29 +03:00
Matt Brown
d18a4f4ccc
Don’t stop scanning loop contents due to possibly-null iterator
2021-06-28 13:13:12 -04:00
Your Name
2e05377323
Fixes #5997 by intentionally sending Success response from shutdown method
2021-06-28 10:02:18 -07:00
Barney Laurance
140cf01a91
Trim issue snippet at time of comparison with baseline, not in IssueData constructor
2021-06-27 10:36:33 +01:00
Barney Laurance
097ccf16b4
Mention Psalm 5 in comment
...
Co-authored-by: Bruce Weirdan <weirdan@gmail.com>
2021-06-27 10:18:42 +01:00
Barney Laurance
0722401aaf
Trim code snippets on both sides when comparing current issues against baseline
...
Should fix issue #5979
We could also trim code issues when writing to baseline, but I think
that's a minor BC break, so probably shouldn't happen until Psalm 9.
2021-06-26 22:37:29 +01:00
Matt Brown
19cc4cb4ee
Simplify lots of usage checks
2021-06-25 10:14:49 -04:00
Matt Brown
67d68a5dc0
Use more accurate variable name
2021-06-25 09:54:39 -04:00
Bruce Weirdan
6d4262edbd
Mark return values in as throw
argument as used ( #5989 )
...
Fixes vimeo/psalm#5975
2021-06-25 09:11:27 -04:00
Abdul Malik Ikhsan
3376f3cdfa
Add ob_get_clean to impure function
2021-06-24 20:34:38 +07:00
Oliver Hader
38d3b15f8d
[BUGFIX] Specialize TaintSink in IncludeAnalyzer ( #5986 )
...
* [TEST] Assert more details in TaintTest
* [TEST] Add test for multiple tainted includes
* [BUGFIX] Specialize TaintSink in IncludeAnalyzer
Fixes : #5986
2021-06-23 08:27:03 -04:00
Oliver Hader
b07de1fefd
[BUGFIX] Avoid crash during interface checks on non-existing classes ( #5984 )
...
`ClassLikes::classImplements(NonExisting::class, WellKnown::class)`
now returns `false` instead of throwing an exception for non-existing
classes.
Fixes : #5983
2021-06-22 18:04:47 -04:00
Bruce Weirdan
260faee29e
Mark set_include_path()
as impure
2021-06-22 22:00:05 +03:00
Matt Brown
d8f4eb2d6d
Restrict type of implode to prevent Array-to-string conversion;
2021-06-21 19:55:27 -04:00
Bruce Weirdan
52d2692497
Don't attempt to read baseline before it was generated ( #5961 )
...
Fixes vimeo/psalm#5960
2021-06-20 21:59:54 -04:00
Matt Brown
f73f2299db
Fix #5960 - catch exception when baseline cannot be located
2021-06-20 19:03:20 -04:00
Bruce Weirdan
0a57c86549
Announce removal of deprecated methods ( #5956 )
...
Refs vimeo/psalm#4700
2021-06-20 14:12:20 -04:00
orklah
3c9476bdf6
Prevent infinite loop in case a TClassConstant is expanded to itself ( #5951 )
2021-06-18 08:51:19 -04:00
orklah
79478a60b1
Allow class constant as offset key ( #5943 )
...
* allow class-constant as an array offset when the type match
* remove object with __toString as a possible offset as it's not valid
2021-06-17 18:15:57 -04:00
orklah
872f1c232c
allow Psalter to fix RedundantCast ( #5948 )
...
* allow Psalter to fix RedundantCast
* fix test
2021-06-17 18:15:45 -04:00
Matthew Brown
c2f7422e80
Prevent crash with non-UTF-8 string
...
Fixes #5945
2021-06-17 12:26:18 -04:00
Bruce Weirdan
e552925af6
Emit separate type of issue when foreach value is unused ( #5932 )
...
* Emit separate type of issue when foreach value is unused
Fixes vimeo/psalm#5929
* Fixed var name case sensitivity
2021-06-17 00:40:24 -04:00
orklah
cfa5492286
Remove redundant namespaced phpdoc ( #5936 )
...
* remove array-key from generated phpdoc
* remove mixed value too
* fix tests
* fix mixed suppression
* revert back to array to prevent breaking refactoring
2021-06-16 11:16:20 -04:00
Matt Brown
9dde8eed9d
Add support for literal-int annotations as well
2021-06-14 23:24:09 -04:00
Matt Brown
c3fdfc5795
Support literal ints in encapsed strings
2021-06-14 16:30:45 -04:00
Matt Brown
4941b9e5d2
Rename class and make it type-hintable
2021-06-14 16:02:59 -04:00
Matt Brown
5ae8b2a23f
Add preliminary support for literal-string
2021-06-14 15:30:25 -04:00
Bruce Weirdan
24d45a50de
Merge pull request #5924 from BafS/fix-type-error-patch-1
2021-06-13 21:19:43 +03:00
BafS
d395e00f18
Add assertion
2021-06-13 12:07:34 +02:00
Matt Brown
aade5d0def
Add slash
2021-06-12 17:17:27 -04:00
Matt Brown
b678461f5c
Improve detection of fluent methods
2021-06-12 17:09:42 -04:00
Matt Brown
23b7ff86b7
Mark interface methods as unused even when inherited
2021-06-12 16:13:29 -04:00
BafS
eb4ecc20d4
Fix style
2021-06-11 20:11:21 +02:00
BafS
07cf6012f7
Use assert() instead of phpdoc
2021-06-11 20:07:59 +02:00
BafS
dde0f1fb06
Fix Uncaught TypeError with some shifts
2021-06-11 20:03:23 +02:00
Matt Brown
884043b47b
Fix style
2021-06-10 18:29:08 -04:00
Matt Brown
f2f5f1eaa2
Revert fix and tests
2021-06-10 17:44:34 -04:00
Matt Brown
47bf5ed567
Fix #5918 - add new issue to detect unquoted strings
2021-06-10 17:43:04 -04:00
Matt Brown
e661c5fb55
Fix erroneous use when comparing methods
2021-06-10 14:39:01 -04:00
Matthew Brown
6d09418a23
Detect unused return values ( #5917 )
...
* Detect unused return values
* Allow static-returning instance methods (presumed to be fluent)
* Make $is_used the default for Codebase::methodExists
2021-06-10 14:18:15 -04:00
Matt Brown
542fa77896
Remove unused use
2021-06-10 12:59:37 -04:00
Matt Brown
34c1f9dccf
Nest conditional for more accurate flow
2021-06-10 12:52:23 -04:00
Matt Brown
a6d79fd409
Clean up more unused return values
2021-06-10 12:23:53 -04:00
Matt Brown
8509999f3f
Remove some unused return values
2021-06-10 12:09:46 -04:00
Matthew Brown
e5a7478b38
Fix order
2021-06-10 09:07:15 -04:00
Matt Brown
f5bc841295
Prevent nested literal coercion
2021-06-09 16:01:45 -04:00
Matthew Brown
d12cf88e83
Add back supported for templated index assignment
2021-06-09 12:55:37 -04:00
Matthew Brown
0a7d254689
Fix #5911 - improve non-terminating switch type inference
2021-06-09 09:06:23 -04:00
Bruce Weirdan
6abce3525a
Enforce use
sort ( #5900 )
2021-06-07 22:55:21 -04:00
Bruce Weirdan
5bfb841072
Prevent crashes when class constant references missing class ( #5902 )
...
Fixes vimeo/psalm#5861
2021-06-07 13:20:07 -04:00
Matthew Brown
7301e3a35f
Fix redundant cast
2021-06-07 13:19:00 -04:00
Bruce Weirdan
80e8d40013
Deprecate legacy hook interfaces ( #5898 )
...
Refs vimeo/psalm#4700
2021-06-07 10:46:56 -04:00
Bruce Weirdan
86050df4d0
Formally deprecate allowCoercionFromStringToClassConst
( #5897 )
...
* Mark allowCoercionFromStringToClassConst as deprecated in xml schema
* Emit deprecation warning for `allowCoercionFromStringToClassConst`
2021-06-07 10:46:26 -04:00
Bruce Weirdan
a5080f2cf6
Do not provide mixed return type on unrelated methods ( #5895 )
...
Fixes vimeo/psalm#5894
2021-06-07 10:45:43 -04:00
Andrey Klimenko
3ad3375777
Fix generic destruction in assertion ( #5888 )
2021-06-04 15:33:37 -04:00
Oliver Hader
e457a7d5af
[FEATURE] Allow plugins to declare their custom scanner or analyzer ( #5883 )
...
* [FEATURE] Allow plugins to declare their custom scanner or analyzer
Related: #5882
* [TEST] Check plugin declaring own scanner/analyzer
* [TASK] Document plugins declaring scanner or analyzer
* [TEST] Clean up code
* [!!!][TASK] Extend Psalm\Plugin\RegistrationInterface
* add method `addFileTypeScanner(string $fileExtension, string $className): void`
* add method `addFileTypeAnalyzer(string $fileExtension, string $className): void`
* [TASK] Ignore IntelliJ/PhpStorm workspace folder in VCS
* [TASK] Remove superfluous class import
2021-06-04 15:32:53 -04:00
Matt Brown
b33f87f68d
Treat all assignment operations as equivalent binary ops
2021-06-04 14:39:38 -04:00
Andrey Klimenko
e5e397a6c5
Type negation in generic context ( #5879 )
...
* Type negation in generic context
* Fix cs
2021-06-03 01:06:25 -04:00
Matthew Brown
1a2e761918
Remove incorrectly-committed code
2021-06-02 17:26:40 -04:00
Matthew Brown
577ae090c4
Bump LS memory to Psalm’s
2021-06-02 10:49:04 -04:00
Barney Laurance
e0eb8f88e5
Apply De Morgan's to output copy ( #5872 )
2021-06-02 06:32:50 -04:00
Matt Brown
f3fc112bae
Fix #4523 - fix short-circuiting for properties and method calls
2021-06-01 16:06:12 -04:00
Bruce Weirdan
448534fd7c
Cli command classes ( #5858 )
...
* Move psalm entry-point to a Cli command class
* Moved psalter to the CLI command class
* Moved psalm-language-server to the CLI command class
* Moved psalm-refactor to the CLI command class
* Moved psalm_plugin to the CLI command class
* Use CLI commands directly and deprecate trampolines
* Require CLI commands directly and don't use trampolines
* Announce isAbsolutePath() removal
* Deprecate \Psalm\requireAutoloaders() function
* Deprecate \Psalm\getVendorDir() function
* Deprecate Psalm\getArguments() function
* Deprecate \Psalm\getPathsToCheck() function
* Deprecate \Psalm\getPsalmHelpText() function
* Deprecate \Psalm\initialiseConfig() function
* Deprecate Psalm\update_config_file() function
* Deprecate \Psalm\get_path_to_config() function
* Deprecate Psalm\getMemoryLimitInBytes() function
* CS fix
* Untangle Psalm entrypoint
* Untangle Psalter entrypoint
* Drop command_functions.php references
* Adjust phar build
2021-05-31 22:23:54 -04:00
orklah
0e8ca1d852
fix wrong version used in psalter ( #5855 )
2021-05-28 18:49:12 -04:00
Bruce Weirdan
e6607935a9
Encode control characters in literal strings ( #5846 )
...
Fixes vimeo/psalm#5733
2021-05-28 09:48:04 -04:00
Bruce Weirdan
c98b20247b
Flag unexpected tags on function docblocks ( #5845 )
...
* Flag unexpected tags on function docblocks
Fixes vimeo/psalm#5782
* Document new issue
* Fix spacing
Co-authored-by: Matthew Brown <github@muglug.com>
2021-05-28 09:47:39 -04:00
orklah
3bcfd2e726
allow psalter to add literal string/int in psalm phpdoc ( #5844 )
...
* allow psalter to add literal string/int in psalm phpdoc
* fix CS
2021-05-28 09:46:11 -04:00
Bruce Weirdan
0c77ccc238
Check whether constructor is internal on new
call ( #5843 )
...
Fixes vimeo/psalm#5841
2021-05-28 09:44:07 -04:00
orklah
276d355ebb
fix issue reporting when baseline already exists ( #5838 )
2021-05-28 09:43:15 -04:00
Oliver Hader
b259296457
[BUGFIX] Continue processing psalm-flow graph after first taint sink ( #5832 )
...
Related: #5830
2021-05-26 16:04:22 -04:00
Matt Brown
38c452ae58
Add example given in ticket and ensure that works too
2021-05-24 00:09:51 -04:00
Matt Brown
c258303f78
Fix test
2021-05-23 22:03:43 -04:00
Matt Brown
8f333337cb
Fix #5804 - don’t choke on conditional return types when converting to callables
2021-05-23 21:41:07 -04:00
orklah
aaab522a98
update baseline and fix issues ( #5821 )
2021-05-23 16:49:46 -04:00
orklah
de1bb954cf
Handle the case where a switch return on each case ( #5819 )
...
* Handle the case where a switch return on each case
* introduce a "hybrid" case exit type for cases where there's both "none" and something else
2021-05-23 16:24:29 -04:00
Matt Brown
7354ec9903
Fix #5298 - improve handling of method that may write properties
2021-05-23 16:22:52 -04:00
orklah
350df114f3
Transform bad offsets ( #5817 )
...
* Transform bad offset access
* fix build
2021-05-23 14:43:30 -04:00
Matt Brown
d1262b0bec
Fix #5799 — improve expansion of templated types
2021-05-23 14:39:59 -04:00
orklah
89f815ff62
Add assertions for >=0 ( #5815 )
2021-05-23 14:24:15 -04:00
Matt Brown
938afc5aea
Allow union of 0|positive-int to bypass PossiblyUndefinedIntArrayOffset error
2021-05-23 13:59:40 -04:00
Fran Moreno
e89f7e3960
Add mongodb Cursor and CursorInterface stubs and fix WriteConcern::__construct ( #5813 )
...
* Add mongodb Cursor and CursorInterface stubs
* Use proper variable name
* Update WriteConcern constructor
Based on https://www.php.net/manual/es/mongodb-driver-writeconcern.construct.php
2021-05-22 19:03:07 -04:00
orklah
c69cf9a849
Allow empty-string in first position of an type ( #5814 )
2021-05-22 12:36:02 -04:00
Matt Brown
6a61298074
Fix #5810 - detect properties that are never read
2021-05-21 09:25:57 -04:00
Matt Brown
4f9067f5c8
Fix unused properties in Psalm’s own codebase
2021-05-21 09:15:23 -04:00
orklah
4d6be66d98
Prioritize TCallableString handling to avoid simpler checks for TLowercaseString vs TString ( #5811 )
2021-05-21 07:44:26 -04:00
Matt Brown
4b17cc9a4b
Fix #5809 - remove unnecessary issue suppression
2021-05-21 07:35:01 -04:00
Matt Brown
bbbde2ffa1
Fix empty line
2021-05-19 15:20:28 -04:00
Matt Brown
ccd50fdb34
Fix ##5795 - array casts should always be lists
2021-05-19 15:17:50 -04:00
orklah
f62b83a190
Assert intersection type when two variables are compared ( #5774 )
2021-05-18 16:14:58 -04:00
Matt Brown
3c43bc1522
Fix #5789 - prevent incorrect return type inference when all cases return
2021-05-18 08:52:41 -04:00
pawel-slowik
d82f02879c
Don't migrate virtual nodes ( #5780 )
...
* Add a failing test for issue #5002
* Don't try to migrate virtual nodes
Fixes #5002
2021-05-17 22:21:32 -04:00
Matt Brown
9eda9f9bbf
Fix cs
2021-05-17 19:44:55 -04:00
Matt Brown
21456f51e6
Only call ScopeAnalyzer once on whole function body
2021-05-17 18:52:25 -04:00
Matt Brown
787c0f30d6
Fix #5784 - only real-asserted variables from context knowledge
...
Any assertions added in the addNestedAssertions method should not illegitimise current knowledge
2021-05-17 15:11:27 -05:00
Matt Brown
836587ec1d
Fix combination of end states with never
2021-05-17 12:35:27 -05:00
Matt Brown
9635ca620c
Correctly interpret continue 2 in nested loops
2021-05-17 08:26:38 -05:00
orklah
4c4d574bed
better inference of string increment ( #5777 )
...
* better inference of string increment
* fix combination
2021-05-17 07:44:53 -05:00
Matt Brown
f6bdeb6234
Fix switch-with-continue bug
2021-05-17 07:27:58 -05:00
olsavmic
2f6d2e8ef7
Fix CS ( #5781 )
2021-05-17 07:27:46 -05:00
orklah
6501ca7b95
Redundant cast to Int preserve type ( #5773 )
...
* Redundant cast to Int preserve type
* add test
2021-05-15 07:19:18 -04:00
Matt Brown
1195335078
Fix #5768 - call methods with proper params
2021-05-14 22:50:11 -04:00
Samuel Parkinson
264c454ad0
Add issue link to GitHub Actions report ( #5759 )
...
If an issue link is available, include it in the annotations on GitHub.
2021-05-14 20:24:19 -04:00
orklah
55079e92fe
Mixed contains everything ( #5763 )
2021-05-14 20:23:54 -04:00
olsavmic
4fb2b65164
Fix ArrayFillReturnTypeProvider - consider second param ( #5770 )
...
Add test
Fix
2021-05-14 20:12:39 -04:00
Matt Brown
5f780e7ef7
Improve count
inference
2021-05-14 20:12:28 -04:00
Matt Brown
c4aea7c82c
Fix #5434 - prevent crash with class-string-map
2021-05-14 19:44:11 -04:00
orklah
1bb4a05725
NullsafeMethodCall makes the variable not null for the rest of the scope ( #5771 )
2021-05-14 19:21:01 -04:00
orklah
0b96f40198
quote offset value ( #5760 )
2021-05-14 17:19:23 -04:00
Matthew Brown
5e8219b613
Fix #5327 - add check to prevent OOMing on very large conditionals
2021-05-14 14:53:53 -04:00
Marco Pivetta
641587635d
Fix #5761 by marking all opcache_
functions as impure, as they are affected by runtime/engine ( #5762 )
...
Quoting original issue (fixes #5761 ):
> Given this snippet ( https://psalm.dev/r/4d51eeab35 ):
>
> ```php
> <?php
>
> function invalidate_cache_for(string $path): void {
> opcache_invalidate($path);
> }
>
> invalidate_cache_for('foo');
> ```
>
> Psalm reports the `opcache_invalidate()` call as `UnusedFunctionCall`. I'm wondering if `opcache_invalidate()` is perhaps inferred as a pure function? The only reference to it that I could find is in 1a59e81808/dictionaries/CallMap.php
, but no purity markers are there.
>
> I'd gladly fix these, if I could get a pointer to where purity is determined.
2021-05-13 21:18:00 -04:00
Matthew Brown
3797d7920f
Add slashes
2021-05-13 21:14:54 -04:00
Matthew Brown
bb8ce8817d
Simplify a bit of logic in switch analysis
2021-05-13 17:31:17 -04:00
Matthew Brown
18931295c4
Fix #5073 — don’t crash when templates cannot be resolved
2021-05-13 16:55:22 -04:00
Matthew Brown
2ebf97b4cb
Fix #4910 - don’t allow array_merge to create massive keyed arrays
2021-05-13 16:27:05 -04:00
Matthew Brown
78ed9404cb
Fix #4107 - resolve reference to static in class constant
2021-05-13 12:49:33 -04:00
Matthew Brown
cc7ff94f7c
Prevent crash when method being called does not exist in reflection
...
Crash seen when running this test in PHP 7.4 because the method does not exist, but the call map includes it in 8.0
2021-05-13 12:40:39 -04:00
Matthew Brown
4873f53f69
Fix issue when two continue/break statements write same variable
2021-05-13 09:39:25 -04:00
orklah
1a59e81808
allow scalar values in return to be accepted, even when the branch has no inferred types ( #5749 )
2021-05-12 18:47:05 -04:00
orklah
ab1732de66
combining never/empty twice gives never ( #5756 )
2021-05-12 18:46:37 -04:00
40bc7cf294
callable-string is always a non-empty-string ( #5741 )
2021-05-10 11:47:32 -04:00
orklah
72022139fa
improve array_splice inference ( #5738 )
2021-05-10 11:45:52 -04:00
Matthew Brown
859b4a2caa
Fix #5725 – don’t transform non-docblock types unnecessarily
2021-05-09 12:03:42 -04:00
Vincent Langlet
587b144f0e
Check for ParamName even for method with only one param ( #5732 )
...
* Check for ParamName even for method with only one param
* Fix tests
2021-05-08 19:33:48 -04:00
Bruce Weirdan
aa854ae338
Link to SARIF JSON schema ( #5718 )
...
Fixes vimeo/psalm#5716
2021-05-05 21:47:36 -04:00
Bruce Weirdan
f5a58adcac
Prefer @psalm-template
over @phpstan-template
( #5713 )
...
* Prefer `@psalm-template` over `@phpstan-template`
Fixes vimeo/psalm#5590
* Prefer `@psalm` templates for methods as well
2021-05-05 21:47:01 -04:00
Bruce Weirdan
58c8e75db3
Suppress issues emitted by MethodComparator at class level ( #5711 )
...
Fixes vimeo/psalm#5698
2021-05-05 21:46:29 -04:00
Bruce Weirdan
9e19653a72
Infer never
return type ( #5710 )
...
* Allow __toString to return never
Fixes vimeo/psalm#5653
* Push $return_is_exit down
* Produce unique control actions
* Test suggesting `@return never`
2021-05-05 01:22:29 -04:00
Matt Brown
ed43c739e3
Prevent another unsafe template situation, skipping key-of tests for now
2021-05-05 01:06:53 -04:00
Matt Brown
f95458be61
Setting values on templated arrays should corrupt them
2021-05-05 00:46:43 -04:00
Matt Brown
ba90267ea7
Fix bad subtyping rule
2021-05-05 00:42:06 -04:00
Bruce Weirdan
27ea40eda0
Fix notice for certain invalid docblocks ( #5709 )
...
Fixes vimeo/psalm#5680
2021-05-03 22:28:17 -04:00
Bruce Weirdan
0189420814
Inherit class-level suppressions when checking methods ( #5708 )
...
Fixes vimeo/psalm#5687
May fix vimeo/psalm#3357
2021-05-03 22:26:56 -04:00
Matthew Brown
832a190dd4
Support enums ( #5699 )
...
* Add initial enum preparation
* Support cases method
* Ignore bad use error
cc @weirdan
* Fix type
2021-05-03 17:54:09 -04:00
Bruce Weirdan
105c6f3a1c
Remove (and prevent) unused uses ( #5704 )
...
* Updates `slevomat/coding-standard`
* Removes unused uses
* Prevents unused uses
* Fixes a number of symbol case mismatches
2021-05-03 17:22:15 -04:00
Matt Brown
0c30a94b4a
Remove unused variable
2021-05-03 15:13:24 -04:00
Matt Brown
881dbf86e1
Fix inference for empty arrays
2021-05-03 12:40:14 -04:00
Matt Brown
eb71506a59
Fix #5697 - don’t consider docblocks when checking for invariant properties
2021-05-02 10:45:55 -04:00
Matt Brown
12844621b4
Fix #5693 - revert fix for #2048
...
The original fix was just a bit too narrow, and led to this bug
2021-05-01 21:13:42 -04:00
Matt Brown
0f7aaa5405
Fix #5696 - combinations of scalars should remove empty-scalar
2021-05-01 20:13:49 -04:00
Matt Brown
3a87f18b5a
Fix #5685 - properly negate complex conditionals
2021-05-01 20:00:01 -04:00
Matt Brown
83a0325c0a
Always run legacy plugins first
...
Legacy plugins are more likely to be custom-made, non-legacy ones like the PHPStorm meta scanner contain more generic info
2021-05-01 16:56:25 -04:00
Matt Brown
0f5b117534
Migrate ClassLikeName options to object
2021-04-30 15:01:33 -04:00
AndrolGenhald
79fcf79219
Kill children on error and check if stream is closed before writing from child. ( #5682 )
...
* Kill children on error and check if stream is closed before writing from child.
* Use SIGTERM to kill children, reap children on error.
2021-04-30 09:01:24 -04:00
Vincent Langlet
fb5c5a9c59
Fix array<empty, empty> not in array{foo?: mixed}<string, mixed> ( #5677 )
...
* Fix array<empty, empty> not in array{foo?: mixed}<string, mixed>
* Add tests
2021-04-30 09:00:49 -04:00
Matt Brown
cd53e047a5
Improve messages
2021-04-25 17:26:25 -04:00
Matt Brown
4f5c205c57
Improve error message for #5489
2021-04-25 16:02:00 -04:00
Bruce Weirdan
933822e400
Do not consider isset checks on static properties as redundant ( #5525 )
...
* Do not consider isset checks on static properties as redundant
Unlike normal properties, static properties do not have a prescribed
initialization sequence, so they can always be uninitialized (or unset).
Thus `isset()` checks on them are never redundant.
Fixes vimeo/psalm#5489
* Fix issue with nullable is_static
2021-04-25 15:53:07 -04:00
Matthew Brown
85a0ef0456
Revert "Do not consider isset checks on static properties as redundant ( #5525 )" ( #5670 )
...
This reverts commit cd002e6a87
.
2021-04-25 15:46:13 -04:00
Matt Brown
67c5dc3c79
Fix #5517 - don’t let a variable’s by-refness be overwritten by a @var docblock
2021-04-25 15:11:23 -04:00
Matt Brown
7b7354efa3
Fix #5518 - add type for property with variable name
2021-04-25 14:49:43 -04:00
Matt Brown
2fa55d147a
Allow parent class to call child protected method
2021-04-25 12:44:53 -04:00
Matt Brown
64fdac33e8
Fix #5641 - types should always be comparable to themselves
2021-04-25 10:45:43 -04:00
Matt Brown
419114e1f0
Fix #5662 — prevent crash when reporting mixed issue on virtual arg
2021-04-23 15:34:35 -04:00
Matt Brown
ecd5e3b7ae
Fix #5652 - use accurate type combination rules when replacing templated union
2021-04-22 00:33:49 -04:00
Vincent Langlet
39e61ae942
Add support for phpstan import-type and type annotations ( #5648 )
...
* Add support for phpstan import-type and type annotations
* Add test
* Fix cs
2021-04-19 22:56:08 -04:00
Matt Brown
40b6860881
Workaround Phar compaction error
2021-04-18 23:28:34 -04:00
Matt Brown
642f2f435c
Fix #5640 - improve handling of assignments in conditional
2021-04-18 16:16:54 -04:00
Matt Brown
bb0bfda7c5
Improve mic drop variable name
2021-04-18 15:50:50 -04:00
Matt Brown
0acc02e184
Use more descriptive names for properties & variables of if/else handling
2021-04-18 15:38:12 -04:00
Alexander Makarov
ff00255c19
Fix excluding binary path under Windows ( #5628 )
...
* Fix excluding binary path under Windows
* Fix CS
2021-04-15 06:55:45 -04:00
Bruce Weirdan
93946d0827
Forbid rejecting named arguments when parent allows them ( #5627 )
...
Fixes vimeo/psalm#5622
2021-04-15 06:55:13 -04:00
Matthew Brown
e505cd58b4
Add use
2021-04-12 23:52:50 -04:00
Matt Brown
f874740c83
Fix phpcs
2021-04-10 22:01:07 -04:00