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