Alexandr Zolotukhin
e278b4fd93
Add failing test cases
2021-08-03 17:29:28 +03: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
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
orklah
d4bf17f323
fix test
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
ba9f7d09ac
fix CS
2021-07-30 22:22:38 +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
orklah
6fc55d7bff
add test
2021-07-29 20:41:08 +02:00
Jack Robertson
f0193f20fa
Consider print, and conditionally exit / die impure
2021-07-27 13:26:54 +01: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
c8574a6347
Simplify FQNs
2021-07-26 13:56:15 +01:00
Jack Robertson
8bec5fc743
Add expected behaviour tests
2021-07-26 08:50:12 +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
3a18ec0d51
Add expected behaviour tests
2021-07-25 10:42:40 +01:00
Bruce Weirdan
aa23aa5387
Merge pull request #6166 from orklah/StringIncrementOnNumericString
2021-07-24 23:27:17 +03:00
orklah
9189fa1745
add tests and code for handling LiteralString that are Numeric
2021-07-24 21:21:50 +02:00
Jack Robertson
3eea15e840
Add failing test
2021-07-24 16:02:13 +01:00
orklah
c225281d22
add test
2021-07-23 21:22:00 +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
cefa9b919e
change wording
2021-07-20 23:55:49 +02:00
orklah
58dd3f6f94
change wording
2021-07-20 23:53:04 +02:00
orklah
acfdb82856
Basic implementation
2021-07-20 23:34:38 +02: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
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
d1a4975e3d
remove test no longer applicable
2021-07-17 23:20:13 +02:00
orklah
79d0647d19
fix issue when setting a value to a global is considered unused
2021-07-17 22:00:54 +02: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
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
af5cdb4dd4
Check deprecated properties on $this->prop reads
...
Fixes vimeo/psalm#6118
2021-07-17 01:20:35 +03: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
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
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
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
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
Fran Moreno
decb397b8e
Add ReflectionProperty::getType() and hasType()
2021-07-10 13:05:57 +02:00
ElisDN
61b78e117f
Fix negative numbers
2021-07-08 19:17:31 +03:00
Bruce Weirdan
c27b51b91f
Merge pull request #6040 from j4nr6n/update_datetime_format
2021-07-04 08:54:58 +03:00
Justin
780c0307e7
Test should fail on 8.0, but not on 7.4
2021-07-03 05:01:10 -04:00
Justin
f7a2aaef6e
Update DateTime and DateTimeImmutable signatures
...
`DateTime::format` and `DateTimeImmutable::format` will always
return a string starting in PHP 8.0.
2021-07-03 04:29:54 -04: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
76be96ce53
Drop FakeFileProvider from tests folder
...
And use Psalm\Internal\Provider\FakeFileProvider
2021-07-02 03:57:57 +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
Barney Laurance
eff9acbd9a
Remove unecassary concatentation of string literals
2021-06-27 00:08:03 +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
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
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
Bruce Weirdan
f24f361a95
Add documentation and schema entry for inferPropertyTypesFromConstructor
...
Fixes vimeo/psalm#5974
2021-06-22 21:20:10 +03:00
Matt Brown
d8f4eb2d6d
Restrict type of implode to prevent Array-to-string conversion;
2021-06-21 19:55:27 -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
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
3140654a44
Experiment with implode literal tracking
2021-06-14 16:03:37 -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
Bruce Weirdan
a97bc06e6b
Test for boundary conditions
2021-06-13 13:40:54 +03:00
BafS
d395e00f18
Add assertion
2021-06-13 12:07:34 +02: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
dde0f1fb06
Fix Uncaught TypeError with some shifts
2021-06-11 20:03:23 +02:00
Matt Brown
06b89aa00a
Fix end-to-end tests
2021-06-10 18:07:41 -04:00
Matt Brown
4a9f35f0a8
Update ReportOutputTest.php
2021-06-10 17:59:41 -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
5c1d8489da
Improve test cases
2021-06-10 12:57:13 -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
Bruce Weirdan
689315b05f
Fix sscanf()
signature ( #5901 )
...
Fixes vimeo/psalm#5870
2021-06-07 13:19:17 -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
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
Matt Brown
be254efec6
Break out tests for readonly properties
2021-06-04 13:37:03 -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
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
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
Oliver Hader
b259296457
[BUGFIX] Continue processing psalm-flow graph after first taint sink ( #5832 )
...
Related: #5830
2021-05-26 16:04:22 -04:00
Oliver Hader
4898cd262e
[TASK] Enrich taint details for outputting core stubs ( #5827 )
...
Affects `printf`, `print_r`, `var_dump`, `var_export`
2021-05-24 16:42:18 -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
8f333337cb
Fix #5804 - don’t choke on conditional return types when converting to callables
2021-05-23 21:41:07 -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
Matt Brown
938afc5aea
Allow union of 0|positive-int to bypass PossiblyUndefinedIntArrayOffset error
2021-05-23 13:59:40 -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
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
964c91c502
Fix skipped test
2021-05-20 10:57:25 -04:00
Matt Brown
3a811f1fb5
Fix/suppress failures
2021-05-19 15:30:36 -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
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
orklah
ff0c1ce567
update hardcoded Psalm version ( #5783 )
...
* change hardcoded Psalm version to something more recent
* change hardcoded Psalm version to something more recent
2021-05-17 08:27:08 -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
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
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
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
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
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