1
0
mirror of https://github.com/danog/psalm.git synced 2025-01-10 23:18:40 +01:00
Commit Graph

5606 Commits

Author SHA1 Message Date
ec11254316 Update 2022-12-19 14:27:41 +01:00
e923229204 Fix array_merge 2022-12-19 14:01:00 +01:00
326ba91812 Update 2022-12-19 13:49:42 +01:00
9d7dd20293 Fix some tests 2022-12-19 13:04:24 +01:00
b91ad2cb1d Begin fixing #8942 2022-12-19 12:55:32 +01:00
bde77f7a95 Fixes 2022-12-19 12:29:27 +01:00
b691219da5 cs-fix 2022-12-19 12:09:20 +01:00
4e7ff473a5 Fix #8940 2022-12-19 12:06:57 +01:00
Theodore Brown
0f4db694df Allow conditions inside loops to preserve or narrow int range
Fixes #7555, fixes #8020, fixes #8865
2022-12-18 17:35:14 -06:00
Jack Worman
1c19260cdd Require trailing commas 2022-12-18 13:20:31 -06:00
orklah
8223332185
Merge pull request #8926 from danog/fix_8925
Skip intersection of template types during inheritance check
2022-12-18 18:53:07 +01:00
orklah
da001c46cd
Merge pull request #8929 from danog/fix_8923
Fix #8923
2022-12-18 18:52:37 +01:00
2f5d0a4a9f Fix #8923 2022-12-18 18:19:22 +01:00
bccda92f31 Skip intersection of template types during inheritance check 2022-12-18 17:12:04 +01:00
c454a181cc Fixes 2022-12-18 15:00:15 +01:00
b83226a0db More array_merge improvements 2022-12-18 14:37:19 +01:00
orklah
a76a1d1a52
Merge pull request #8916 from jack-worman/Remove_useless_ifs
Remove useless ifs
2022-12-17 15:54:28 +01:00
orklah
62ced63375
Merge pull request #8910 from jack-worman/Last_property_typehints
Last property typehints
2022-12-17 15:53:36 +01:00
Jack Worman
2f677f600b CS fixes 2022-12-17 08:13:32 -06:00
Jack Worman
30a8f71958 Remove useless ifs 2022-12-16 22:00:34 -06:00
Bruce Weirdan
425d9fa8bf
Recognize casts from object-with-properties to array
Previously `(array)(object)['a' => 1, 'b' => 'foo']` would result in
`array<array-key, mixed>`. Now it would be inferred as
`array{a:1,b:foo,...<array-key,mixed>}`
2022-12-16 20:12:02 -04:00
Jack Worman
9ce31a7709 Re-add short closure sniff 2022-12-16 17:02:10 -06:00
orklah
5afc3282d4
Merge pull request #8902 from kkmuffme/fix-never-static-calls
fix return type never for static function calls
2022-12-16 22:06:19 +01:00
Jack Worman
a52f35e5e1 Even more property typehints 2022-12-16 13:24:21 -06:00
2c00c64304 Bypass bug 2022-12-16 19:18:33 +01:00
f5b6889c32 Fix 2022-12-16 18:39:35 +01:00
992f26a8e7 Fix array_merge edge case 2022-12-16 18:10:46 +01:00
Leo Viezens
0ef7ec100a #7387 Add asserting non-empty-string by strlen 2022-12-16 17:04:01 +01:00
kkmuffme
eeb0c06173 fix return type never for static function calls 2022-12-16 11:55:31 +01:00
Bruce Weirdan
e7a4fd98e5
Fix SA issues 2022-12-15 00:18:53 -04:00
Jack Worman
76a7c7da4a Added SlevomatCodingStandard.TypeHints.PropertyTypeHint sniff 2022-12-14 20:43:26 -06:00
Jack Worman
2b5407d2fb Added SlevomatCodingStandard.TypeHints.ParameterTypeHint sniff and removed php-cs-fixer 2022-12-14 20:26:17 -06:00
Jack Worman
69658e8315 SlevomatCodingStandard.Commenting.DocCommentSpacing 2022-12-14 13:34:41 -06:00
Jack Worman
0939e63323 Add @internal tag and fix php-cs-fixer mistake 2022-12-14 08:06:37 -06:00
Jack Worman
749ce58c27 Add more property typehints 2022-12-13 21:34:34 -06:00
Jack Worman
36fa162d6d Use php-cs-fixer to clean up docblocks 2022-12-13 20:46:43 -06:00
Jack Worman
fc2df8e8ae Add more property typehints 2022-12-13 20:20:15 -06:00
027354cabc
Improve parsing of list shapes (#8841)
* Improve parsing of list shapes

* Improve logic

* One more test

* Fix tests
2022-12-13 22:30:40 +01:00
6347a21546
Literal inferring for array_column, array_combine, array_fill_keys, array_fill (#8850)
* Squash

* Remove BC break

* Suppress

* Possibly fix

* Fixes

* Fix test

* Implement literal array_column

* Improve array_column inference

* Improve logic

* Add array_combine return type provider

* Cleanup

* Fix #8868 (add array_fill_keys/array_fill return type)

* cs-fix

* Fix
2022-12-13 22:29:35 +01:00
cca276768e
List refactoring v5 (#8820)
* Squash

* Remove BC break

* Suppress

* Possibly fix

* Fixes

* Fix test

* Trigger build

* Update psl

* Update psl

* Fixes

* Fixes

* Cleanup

* fix

* Fix build

* Do not consider never when getting the max count

* Add assertion

* Cleanup

* Fix

* Cleanup
2022-12-13 21:40:19 +01:00
orklah
794ca9362a
Merge pull request #8887 from jack-worman/Use_rector_to_add_property_typehints
Use rector to add property typehints
2022-12-13 19:58:43 +01:00
Bruce Weirdan
19a1005bc3
Forbid most magic methods on enums
Fixes vimeo/psalm#8889

Additionally this fixes case-sensitivity of
MethodSignatureMustOmitReturnType issue

Fixes vimeo/psalm#8888
2022-12-12 03:03:20 -04:00
Jack Worman
dd0d8300b1 Use rector to add property typehints 2022-12-11 17:25:23 -06:00
Bruce Weirdan
32eaf12d40
Prevent duplicate (Possibly)UnusedMethod/(Possibly)UnusedProperty
This also allows (Possibly)UnusedProperty to be suppressed with
`referencedProperty` attribute in psalm.xml

Fixes vimeo/psalm#8874
2022-12-11 05:49:09 -04:00
orklah
ef02ded050
Merge pull request #8833 from theofidry/feature/cpu-counter
Integrate FidryCpuCoreCounter
2022-12-10 12:14:50 +01:00
Bruce Weirdan
af549fa78a
Merge pull request #8854 from kkmuffme/fix-unsafe-file_get_contents 2022-12-09 23:20:10 -04:00
Bruce Weirdan
d19759cc23
Suppress irrelevant Psalm issue
We're not defining this property to use it, we're defining it to
suppress PHP deprecation warning
2022-12-09 21:57:03 -04:00
Bruce Weirdan
94003a3885
Fixed dynamic property on LanguageServer
Fixes vimeo/psalm#8873
2022-12-09 21:50:10 -04:00
Théo FIDRY
5d2b739a4e
Fix CS 2022-12-08 12:27:11 +01:00
Théo FIDRY
ba40e34947
Update to stable 2022-12-08 12:17:26 +01:00
Théo FIDRY
cfa570eba2
Merge remote-tracking branch 'upstream/master' into feature/cpu-counter 2022-12-08 12:15:09 +01:00
kkmuffme
d3ec894175 use safeFileGetContents in ProjectCacheProvider too 2022-12-07 19:57:52 +01:00
kkmuffme
1ee4b4aefa remove file_get_contents that was incorrectly put in v5 2022-12-07 11:47:59 +01:00
Alies Lapatsin
4b4b36df7d Extend impure_functions list by socket functions
all of them returns boolean and can be ignored.
This prevents UnusedFunctionCall.
Note, socket errors can be fetched by:
 - socket_strerror
 - socket_last_error
2022-12-05 00:25:19 +01:00
orklah
cc9c67d7ee
Merge pull request #8834 from danog/fix_class_string_unions
Fix parsing of class string of unions
2022-12-04 20:44:41 +01:00
orklah
f3e1a2c0e4 impossible constructor 2022-12-04 20:33:05 +01:00
4c277052e3 Fix parsing of class string of unions 2022-12-04 20:28:53 +01:00
Théo FIDRY
a444f286bb
Integrate FidryCpuCoreCounter 2022-12-04 20:24:18 +01:00
orklah
2490230f1f fix missing break handling in loop 2022-12-04 13:57:59 +01:00
Bruce Weirdan
a157743140
Prevent crashes on conditional traits
Fixes vimeo/psalm#7863
2022-12-03 01:21:10 -04:00
Bruce Weirdan
4d8af74d92
Don't crash when accessing immutable static property
Fixes vimeo/psalm#8313
2022-12-03 00:51:22 -04:00
Bruce Weirdan
7364988934
Fix crash when using phantom methods as first-class callable
Fixes vimeo/psalm#8377
2022-12-02 23:28:22 -04:00
Barney Laurance
386aa27f4c Improve issue level and type report 2022-12-01 23:00:48 +00:00
orklah
433e272149
Merge pull request #8809 from danog/fix_8806
Fix #8806
2022-12-01 21:00:40 +01:00
796462961d Fix 2022-12-01 20:18:07 +01:00
3150ad2b27 Fix #8806 2022-12-01 20:12:20 +01:00
orklah
b4aa951caa
Merge pull request #8798 from orklah/min_count
fix sealed combination
2022-12-01 18:35:02 +01:00
kkmuffme
694b7d8975 check "never" return type more strictly
* require explicit "never" return type when function always exits, except if it only throws
* error if function does not exit, but return type explicitly contains "never"
* Fix: https://github.com/vimeo/psalm/issues/8175
* Fix: https://github.com/vimeo/psalm/issues/8178
2022-12-01 14:51:58 +01:00
orklah
3957eb753a fix sealed array combination 2022-11-30 23:26:34 +01:00
orklah
40fa8282ee CS fix 2022-11-30 20:18:09 +01:00
orklah
229f613b8e handle true/false reconciliation consistently, fix #8795 2022-11-30 20:15:11 +01:00
Emmanuel GUITON
fcbd23c801 Style fix. 2022-11-30 17:33:28 +01:00
Emmanuel GUITON
0d9d0ed60d Fixes vimeo#8112 2022-11-30 17:17:38 +01:00
Bruce Weirdan
6b3dd56850
Defer cache directory creation until it's needed
Honestly, this is a bit of a hack, as we let `Config` to generate the
cache directory name and then reset it to null from the cli entrypoint.
Yet it's easier than passing a no-cache flag through so many layers of
static calls.

`$this->cache_directory_initialized` flag is used to make sure we
attempt to create the directory only once.

Fixes vimeo/psalm#4267
2022-11-29 04:16:59 -04:00
Bruce Weirdan
9d597cf370
Merge pull request #8782 from weirdan/check-runtime-requirements
Fixes https://github.com/vimeo/psalm/issues/7560
2022-11-27 20:00:28 -04:00
Bruce Weirdan
de96494fee
Allow omitting argument offsets for map-type overrides in phpstorm.meta
Fixes vimeo/psalm#8758
2022-11-27 16:36:34 -04:00
Bruce Weirdan
8fa35c2228
Variables should outlive namespaces (#8779)
Variables in PHP are not namespaced. In other words, namespaces share
the context with the file they are located in.

See https://3v4l.org/2qvrC

Fixes vimeo/psalm#8778
2022-11-27 10:45:40 -05:00
Bruce Weirdan
05b8e0eea6
Replace all references to static variables when moving class (#8780)
Previously `psalter` would only replace the first occurence of the
property access. Now it replaces all properties (by keeping the old name
unknown in the context).
2022-11-27 10:44:53 -05:00
Bruce Weirdan
03def00f27
Check runtime requirements
`vendor/autoload/check_platform.php` may be disabled by the user
`composer.json`, so we have to repeat the check for runtime
requirements.

Fixes vimeo/psalm#7560
2022-11-27 08:05:30 -04:00
Matthew Brown
1819a2d880
Add diagnostic message when shape fields are missing (#8762)
* Add a simple diagnostic for missing array shape fields

* Fix dumb mistakes

* Allow nested shape extra keys to prompt warning too
2022-11-26 11:26:36 -05:00
Bruce Weirdan
ee34d15b4d
SA and CS fixes 2022-11-26 00:18:45 -04:00
Bruce Weirdan
1555554d9f
Centralize version data access
Obtaining package version data from within a scoped PHAR file is a
complicated topic, and it's been alternatively broken and fixed multiple
times.

This change moves version data access to a single class, so that we can
fix it there should we need to.

The rest of the code can just rely on PSALM_VERSION constant (which will
be made unscoped in a further commit) or call `VersionUtils` methods.
2022-11-25 23:48:54 -04:00
orklah
b9a532db26
Merge pull request #8754 from orklah/#8041
improve docs and phrasing about NoValue
2022-11-25 20:18:40 +01:00
orklah
2856ab1cdc
typo
Co-authored-by: Bruce Weirdan <weirdan@gmail.com>
2022-11-25 20:18:27 +01:00
Matthew Brown
a0e4468a9a
Simplify assertions generated by an array_key_exists check (#8763) 2022-11-25 12:16:37 -05:00
orklah
4d358c4be9 improve docs and phrasing about NoValue 2022-11-24 20:49:34 +01:00
orklah
583dabee99
Merge pull request #8753 from orklah/8745
Fix #8745
2022-11-24 20:21:28 +01:00
orklah
ea4b099c66 Fix #8745 2022-11-24 20:02:04 +01:00
orklah
bca202bf5e
Merge pull request #8749 from Nicelocal/fix_8748
Fix #8748
2022-11-24 19:44:44 +01:00
orklah
203d2c2b3d Fix #8747 2022-11-24 19:17:23 +01:00
85071b61a3 Fix #8748 2022-11-24 11:28:00 +01:00
Bruce Weirdan
262c7ffa2b
Correct Clause::$hash type 2022-11-23 12:59:13 -04:00
orklah
3b6faf9638
Merge pull request #8737 from weirdan/enforce-arrow-function-formatting
Enforce arrow function formatting
2022-11-23 06:58:34 +01:00
54db59682d
Allow parameter types to be contained by a class template type (#8731)
* Allow parameter types to be contained by a class template type in function calls

* Specify PHP version of tests

* Fix tests
2022-11-23 00:14:30 -05:00
Bruce Weirdan
026354a18e
Enforce arrow function formatting 2022-11-23 00:08:29 -04:00
kkmuffme
ce84a80c6d include CLI args in PHP errors to more quickly identify run issues in CI 2022-11-20 11:15:45 +01:00
Bruce Weirdan
6554aa05a7
Emit MixedMethodCall when calling new on object 2022-11-19 17:29:35 -04:00
Bruce Weirdan
d7561919b2
Allow new on objects
Fixes vimeo/psalm#8355
2022-11-19 16:53:07 -04:00
orklah
4e17585093
Merge pull request #8714 from kkmuffme/dont-rewrite-config-hash-to-cache-when-unchanged
Fix cache race condition due to missing repopulation of lock files cache
2022-11-18 22:08:37 +01:00
orklah
4a83f88881
Merge pull request #8707 from kkmuffme/improve-cache-flush-debug-info
improve cache flush debug info and code if cache disabled
2022-11-18 22:07:13 +01:00
orklah
48c0df6a8c
Merge pull request #8708 from annervisser/allow-using-imported-type-in-other-type
Allow using imported types in other types within the same file
2022-11-18 22:06:17 +01:00
kkmuffme
ff49dfca1d Fix lock files not updated when cache is cleared race condition 2022-11-17 09:31:02 +01:00
kkmuffme
3068d38c3c only write config to cache when config hash changed 2022-11-17 09:20:16 +01:00
Bruce Weirdan
8e1f129701
Reject @psalm-consistent-constructor in function docblocks
Fixes vimeo/psalm#8712
2022-11-16 19:14:13 -04:00
kkmuffme
ad90cc2744 add missing use statement 2022-11-15 19:49:15 +01:00
kkmuffme
11a6ff9b4f add --no-progress to psalter
like exists in Psalm.php
2022-11-15 15:02:48 +01:00
Anner Visser
d10b1f91bb
Allow using imported types in other types within the same file
In the test case (from issue #7116) both the type definition and the
import of the typed lived in the same file. This caused `OpeningTypes`
to be an `InlineTypeAlias` instead of a `LinkableTypeAlias`, in turn
causing an 'Invalid type alias' exception[^1].

By replacing the array union (+) with an array_merge, the import of the
type overrides the initial type declaration within the `Main` class.
This means type imports within one file act more like they would when in
separate files.

Fixes #7116

[^1]: [src/Psalm/Type/Atomic.php:407](1986c8b4a8/src/Psalm/Type/Atomic.php (L407))
2022-11-15 14:46:31 +01:00
kkmuffme
17c246b827 code style 2022-11-15 10:51:44 +01:00
kkmuffme
d410c9d4bc improve cache flush debug info and code if cache disabled 2022-11-15 10:39:52 +01:00
Anner Visser
5bafc9512c
Add support for type aliases in @psalm-assert(-*) annotations
Fixes #8263
2022-11-14 16:03:35 +01:00
Matthew Brown
ec94001749
improve annotation 2022-11-11 20:17:05 -05:00
Matthew Brown
8d36bdc3ed
Make array shapes strict by default (#8701)
* Make array shapes strict by default

* Fix PSL tests
2022-11-11 20:14:21 -05:00
Andrii Dembitskyi
5704087422 Cleanup outdated comment 2022-11-11 07:38:33 +02:00
Bruce Weirdan
c613e47c55
Merge pull request #8693 from weirdan/fix-8267
Fixes https://github.com/vimeo/psalm/issues/8267
2022-11-10 21:13:12 -04:00
Bruce Weirdan
f49ff60172
Merge pull request #8688 from weirdan/fix-stringable-object
Fixes https://github.com/vimeo/psalm/issues/8575
2022-11-10 20:27:49 -04:00
Bruce Weirdan
55933a5309
Merge pull request #8692 from weirdan/fix-8602
Fixes https://github.com/vimeo/psalm/issues/8602
2022-11-10 20:27:07 -04:00
Bruce Weirdan
80750fd579 Implement subtype checks for stringable-object 2022-11-10 19:55:36 -04:00
Bruce Weirdan
512ad832f3 TObjectWithProperties::$methods have lowercase keys
Method names in PHP are case-insensitive.
2022-11-10 19:55:36 -04:00
Bruce Weirdan
d122cef1ca Mark inferred mutation-free constructor as such
Previously Psalm treated those constructors as explicitly mutation-free,
and thus required descendant constructors to be explicitly marked too.

Fixes vimeo/psalm#8602
2022-11-10 19:55:25 -04:00
Bruce Weirdan
6effd1bd2d Flag invalid enum case value types
Fixes vimeo/psalm#8267
2022-11-10 19:55:18 -04:00
Bruce Weirdan
290b65f6dd Allow enum cases to reference constants
Fixes vimeo/psalm#8242
2022-11-10 19:54:45 -04:00
Matthew Brown
d63da1f66e
Prevent array{a: Foo} going cleanly into array<Foo> (#8691)
* Prevent array{a: Foo} going cleanly into array<Foo>

* Add test for new behaviour

* Fix code style issues

* Allow unions to be cloned again

* Simplify params properties
2022-11-10 09:18:27 -05:00
Bruce Weirdan
d81543f83e
Emit DeprecatedInterface when an interface is referenced in a generic
Fixes vimeo/psalm#8617
2022-11-08 20:34:08 -04:00
3c7e5be703 Mark as internal 2022-11-08 10:55:14 +01:00
65d6a469b6 Fix tests 2022-11-08 10:45:21 +01:00
fc00b6338a Fix tests 2022-11-08 10:37:48 +01:00
68a5511057 Merge remote-tracking branch 'origin/4.x' into HEAD 2022-11-08 10:25:04 +01:00
Vincent Langlet
6916d414e2 Add support for phpstan-param-out 2022-11-07 10:22:33 +01:00
1986c8b4a8
Add support for strict arrays, fix type alias intersection, fix array_is_list assertion on non-lists (#8395)
* Immutable CodeLocation

* Remove excess clones

* Remove external clones

* Remove leftover clones

* Fix final clone issue

* Immutable storages

* Refactoring

* Fixes

* Fixes

* Fix

* Fix

* Fixes

* Simplify

* Fixes

* Fix

* Fixes

* Update

* Fix

* Cache global types

* Fix

* Update

* Update

* Fixes

* Fixes

* Refactor

* Fixes

* Fix

* Fix

* More caching

* Fix

* Fix

* Update

* Update

* Fix

* Fixes

* Update

* Refactor

* Update

* Fixes

* Break one more test

* Fix

* FIx

* Fix

* Fix

* Fix

* Fix

* Improve performance and readability

* Equivalent logic

* Fixes

* Revert

* Revert "Revert"

This reverts commit f9175100c8452c80559234200663fd4c4f4dd889.

* Fix

* Fix reference bug

* Make default TypeVisitor immutable

* Bugfix

* Remove clones

* Partial refactoring

* Refactoring

* Fixes

* Fix

* Fixes

* Fixes

* cs-fix

* Fix final bugs

* Add test

* Misc fixes

* Update

* Fixes

* Experiment with removing different property

* revert "Experiment with removing different property"

This reverts commit ac1156e077fc4ea633530d51096d27b6e88bfdf9.

* Uniform naming

* Uniform naming

* Hack hotfix

* Clean up $_FILES ref #8621

* Undo hack, try fixing properly

* Helper method

* Remove redundant call

* Partially fix bugs

* Cleanup

* Change defaults

* Fix bug

* Fix (?, hope this doesn't break anything else)

* cs-fix

* Review fixes

* Bugfix

* Bugfix

* Improve logic

* Add support for list{} and callable-list{} types, properly implement array_is_list assertions (fixes #8389)

* Default to sealed arrays

* Fix array_merge bug

* Fixes

* Fix

* Sealed type checks

* Properly infer properties-of and get_object_vars on final classes

* Fix array_map zipping

* Fix tests

* Fixes

* Fixes

* Fix more stuff

* Recursively resolve type aliases

* Fix typo

* Fixes

* Fix array_is_list assertion on keyed array

* Add BC docs

* Fixes

* fix

* Update

* Update

* Update

* Update

* Seal arrays with count assertions

* Fix #8528

* Fix

* Update

* Improve sealed array foreach logic

* get_object_vars on template properties

* Fix sealed array assertion reconciler logic

* Improved reconciler

* Add tests

* Single source of truth for test types

* Fix tests

* Fixup tests

* Fixup tests

* Fixup tests

* Update

* Fix tests

* Fix tests

* Final fixes

* Fixes

* Use list syntax only when needed

* Fix tests

* Cs-fix

* Update docs

* Update docs

* Update docs

* Update docs

* Update docs

* Document missing types

* Update docs

* Improve class-string-map docs

* Update

* Update

* I love working on psalm :)

* Keep arrays unsealed by default

* Fixup tests

* Fix syntax mistake

* cs-fix

* Fix typo

* Re-import missing types

* Keep strict types only in return types

* argc/argv fixes

* argc/argv fixes

* Fix test

* Comment-out valinor code, pinging @romm pls merge https://github.com/CuyZ/Valinor/pull/246 so we can add valinor to the psalm docs :)
2022-11-05 22:34:42 +01:00
orklah
205e8cc73e
Merge pull request #8670 from danog/fix_8669
Fix #8669
2022-11-05 22:29:37 +01:00
923f1d2eb7 Possible fix 2022-11-05 22:23:31 +01:00
5a44522efb Fix #8669 2022-11-05 22:12:55 +01:00
Bruce Weirdan
81423dc12b
Remove argc and argv elements from $_ENV
Fixes vimeo/psalm#8662
2022-11-05 15:19:21 -04:00
da21229cab Fix #8664 2022-11-05 19:15:46 +01:00
d0be59e16e
Immutable unions (#8627)
* Immutable CodeLocation

* Remove excess clones

* Remove external clones

* Remove leftover clones

* Fix final clone issue

* Immutable storages

* Refactoring

* Fixes

* Fixes

* Fix

* Fix

* Fixes

* Simplify

* Fixes

* Fix

* Fixes

* Update

* Fix

* Cache global types

* Fix

* Update

* Update

* Fixes

* Fixes

* Refactor

* Fixes

* Fix

* Fix

* More caching

* Fix

* Fix

* Update

* Update

* Fix

* Fixes

* Update

* Refactor

* Update

* Fixes

* Break one more test

* Fix

* FIx

* Fix

* Fix

* Fix

* Fix

* Improve performance and readability

* Equivalent logic

* Fixes

* Revert

* Revert "Revert"

This reverts commit f9175100c8452c80559234200663fd4c4f4dd889.

* Fix

* Fix reference bug

* Make default TypeVisitor immutable

* Bugfix

* Remove clones

* Partial refactoring

* Refactoring

* Fixes

* Fix

* Fixes

* Fixes

* cs-fix

* Fix final bugs

* Add test

* Misc fixes

* Update

* Fixes

* Experiment with removing different property

* revert "Experiment with removing different property"

This reverts commit ac1156e077fc4ea633530d51096d27b6e88bfdf9.

* Uniform naming

* Uniform naming

* Hack hotfix

* Clean up $_FILES ref #8621

* Undo hack, try fixing properly

* Helper method

* Remove redundant call

* Partially fix bugs

* Cleanup

* Change defaults

* Fix bug

* Fix (?, hope this doesn't break anything else)

* cs-fix

* Review fixes

* Bugfix

* Bugfix

* Improve logic

* Update
2022-11-04 19:04:23 +01:00
Arnout Boks
2387d5eef0
Mark hash_update functions as impure
This prevents Psalm from marking calls to them as UnusedFunctionCall.
2022-11-04 09:05:29 +01:00
orklah
3daad0c32d
Merge pull request #8652 from VincentLanglet/improveSerializeSupport
serialize is not pure for array of object
2022-11-03 20:29:09 +01:00
Vincent Langlet
c02ed9da0a Fix cs 2022-11-03 20:24:15 +01:00
Vincent Langlet
fbaf6afb30 Try 2022-11-03 18:11:01 +01:00
Vincent Langlet
dc977964c6 Refacto 2022-11-03 16:05:40 +01:00
Vincent Langlet
6382af1c97 Add support for phpstan assertions 2022-11-03 14:26:27 +01:00
Vincent Langlet
4a27322144 serialize is not pure for array of object 2022-11-03 11:48:33 +01:00
Vincent Langlet
0bdfc4b60b Mark serialize as impure only for object 2022-11-02 23:08:03 +01:00
Vincent Langlet
ef0a17ee11 Do not report serialize as unused 2022-11-02 22:52:42 +01:00
Alies Lapatsin
d9a08ec047 Add stubs for ext-random (PHP 8.2) 2022-11-02 15:59:56 +03:00
Fran Moreno
933caa8f69
Allow to set PHP 8.2 2022-11-01 16:25:03 +01:00
Alies Lapatsin
855eef9205 Increment PHP_MINOR_VERSION (to load delta for PHP 8.2) 2022-10-31 12:44:34 +03:00
kkmuffme
de52e42d5f keep literal string for simple str_replace 2022-10-27 09:23:25 +02:00
kkmuffme
87eb83616e add basename return type provider
Like dirname return type provider of https://github.com/vimeo/psalm/pull/8611
2022-10-26 13:03:53 +02:00
Chauncey McAskill
0afd873787
Fix dirname return type provider
Changed:
- Replaced extraction of `$dir_level` literal value to be from the NodeTypeProvider instead of from the statement; based on similar logic in `RoundReturnTypeProvider`.
- Replaced `new` return type creation with `Type` method creation.
- Replaced `null` return with string type.

Fixed:
- Typo on variable name for extracted `StatementsSource`.
- Edge case where `$dir_level` is less than 1.
- Broken unit tests.
2022-10-23 12:11:58 -04:00
Chauncey McAskill
1dfadfa9ec
Add dirname return type provider 2022-10-23 11:56:02 -04:00
orklah
b739b67080
Merge pull request #8594 from kkmuffme/callable-invalidargument-required-param-mismatch-missing-error
ensure callbacks have the required number of params
2022-10-22 12:20:29 +02:00
kkmuffme
edeff148b4 handle variadic 2022-10-22 08:28:56 +02:00
orklah
48b8efde99
Merge pull request #8584 from boesing/feature/8521
Enhance type detection for internal php functions `key`, `current`, `end` and `reset`
2022-10-18 00:07:13 +02:00
kkmuffme
41fbb14586 fix wrong php version id in $_FILES 2022-10-17 23:05:50 +02:00
c9ff8c2c67 Prevent re-resolution of static 2022-10-17 20:31:11 +02:00
abb0e2e3f9 Fix #8560 2022-10-17 20:31:11 +02:00
Maximilian Bösing
7f35bff0d9
feature: enhance type detection for internal php functions key, current, end and reset
Signed-off-by: Maximilian Bösing <2189546+boesing@users.noreply.github.com>
2022-10-17 20:24:40 +02:00
kkmuffme
25b01ce3a3 ensure callbacks have the required number of params
Fix https://github.com/vimeo/psalm/issues/8593
2022-10-17 16:03:55 +02:00
3b3afd5369 Fixes 2022-10-17 13:10:12 +02:00
7b6e09afc9 Merge branch 'merge_4.x' into immutable_readonly_3 2022-10-17 12:58:41 +02:00
1abade3c30 Skip 2022-10-17 12:14:07 +02:00
150be5ca22 Update 2022-10-17 10:45:18 +02:00
8518372cad Fixes 2022-10-16 14:23:31 +02:00
34000ca90d Fixes 2022-10-16 13:59:15 +02:00
4912651a9a Fix 2022-10-16 13:48:45 +02:00
b79c43a288 Merge remote-tracking branch 'origin/4.x' into merge_4.x 2022-10-16 13:42:43 +02:00
748a74bb2c Merge remote-tracking branch 'origin/4.x' into HEAD 2022-10-16 13:41:27 +02:00
Greg Hargreaves
b89ff32b7a Remove duplicated numeric type declaration 2022-10-14 02:00:25 +01:00
Greg Hargreaves
06581ce4b0 Add additional checks for concat of non-empty strings to return non-falsy 2022-10-14 01:54:06 +01:00
a2b03e4f52 cs-fix 2022-10-13 13:54:18 +02:00
6e32dc02fc Improvements 2022-10-13 13:53:03 +02:00
8c9558c92b Fix #6983, #8564 2022-10-13 13:42:35 +02:00
orklah
bb9aabe5b1
Merge pull request #8570 from Nicelocal/fix_8569
Fix #8569
2022-10-12 20:59:04 +02:00
e43c6c1a13 cs-fix 2022-10-12 19:54:52 +02:00
a7af027645 Fix #8562 2022-10-12 11:40:29 +02:00
3ac0bce203 Fix #8569 2022-10-12 11:24:42 +02:00
Steven Dickinson
68f6ba873e Fix MinMaxReturnTypeProvider when handling TDependentListKeys 2022-10-11 14:13:40 +01:00
orklah
60129819f5
add import 2022-10-10 18:10:49 +02:00
orklah
0f6891c757
fix typo 2022-10-10 18:07:26 +02:00
kkmuffme
3a420f4f7a phpunit bool|string 2022-10-10 17:06:00 +02:00
kkmuffme
0da493b5bb fix docs to match example 2022-10-10 16:28:46 +02:00
kkmuffme
1e6019ddde size and error in $_FILES more specific 2022-10-10 16:18:27 +02:00
kkmuffme
fa53050483 fix $_FILES 2022-10-10 16:07:14 +02:00
kkmuffme
b5f6da7285 add common phpunit $_SERVER values bool
Fix https://github.com/vimeo/psalm/issues/8556
2022-10-10 14:31:35 +02:00
264e146cef cs-fix 2022-10-10 13:03:02 +02:00
26f9b2cd6a Add suppresses 2022-10-10 13:00:46 +02:00
deaa6bd2ea Add purity issues to baseline 2022-10-10 12:53:13 +02:00
8a7b201b2c Update 2022-10-10 12:38:57 +02:00
fe17720441 Revert 2022-10-10 11:43:04 +02:00
f06c459415 Bugfix 2022-10-07 13:18:57 +02:00
Gregory Hargreaves
41a6afda32 Add check for const with reserved word class 2022-10-07 09:44:10 +01:00
0155ad7472 Immutable readonly 3 2022-10-03 15:13:47 +02:00
45452c7125 Immutable readonly 2 2022-10-03 14:02:41 +02:00
5984ccd908 Fix 2022-10-03 12:53:44 +02:00
79b13fab04 Cleanup 2022-10-03 12:09:42 +02:00
c2ce7e63da Immutable readonly 1 2022-10-03 11:53:05 +02:00
f11ed46f26 Immutable assertions 2022-10-03 11:32:15 +02:00
ef60a0c88c Fix properties-of on generics&intersections 2022-10-03 11:28:01 +02:00
3abd0b961f Immutable Unions 2022-10-03 10:45:36 +02:00
orklah
313ebf428b
Merge pull request #8502 from kkmuffme/option-to-only-report-errors-for-passed-file
add hideAllErrorsExceptPassedFiles config option
2022-09-25 13:02:00 +02:00
kkmuffme
b1c0c2d8a1 add hideAllErrorsExceptPassedFiles config option
for files only (not directories, since that wouldn't make practical sense)
2022-09-24 10:44:01 +02:00
kkmuffme
e803af4cd4 use cache for declared function when available before falling back to stubs
fixes return type issues reported for the wrong file
2022-09-22 02:10:51 +02:00
kkmuffme
d69be4b9a2 objects even with __toString methods cannot be cast to int/float 2022-09-19 21:54:16 +02:00
Ricardo Boss
bf1c0320fd Cherry-pick: Try to provide literal int types when possible (fixes #6966) (#7071)
* Fixed vimeo/psalm#6966

* Only accept >= 0 values for mode argument in round()

* Made round() only return float or literal float values and remove unneeded test

* Registered RoundReturnTypeProvider

* Updated cast analyzer to handle single string literal int values as literal ints

* Fixed psalm errors

* Fix invalid property accesses

* Addressed comments

* Added Tests

* Marked RoundReturnTypeProvider as internal

* Fixed CS
2022-09-19 21:54:16 +02:00
kkmuffme
da68e9d739 fix psalm-internal risky casts 2022-09-19 21:54:16 +02:00
kkmuffme
7cdad99645 add RiskyCast 2022-09-19 21:54:16 +02:00
kkmuffme
c3eebe2579 be less strict for generic string type 2022-09-19 21:54:16 +02:00
kkmuffme
d32efb0619 float/int always 1 on "error", no PossiblyInvalidCasts by default 2022-09-19 21:54:16 +02:00
kkmuffme
39ec75523e same for float 2022-09-19 21:54:16 +02:00
kkmuffme
3bec76acb8 fix invalid casts for int
https://psalm.dev/r/0d284c6f48
2022-09-19 21:54:16 +02:00
kkmuffme
e4b7cdf26f fix type for (string) true 2022-09-19 21:54:16 +02:00
dennis
ab690df4da Improved class name generation for @throws annotation 2022-09-19 21:09:45 +02:00
dennis
844d7999c5 Ensure @throws annotations reference valid Exception classes 2022-09-19 21:09:45 +02:00
orklah
3b7e508c78
Merge pull request #8473 from kkmuffme/detailed-superglobal-types
make superglobals more specific
2022-09-19 10:48:44 +02:00
kkmuffme
e2e6265ba1 ignore nullable issues for $argv/$argc 2022-09-19 09:45:55 +02:00
Peter van Dommelen
2eb4ca0e3b Within the reconciler's fast path, do not require the existing type to include mixed when handling an Any assertion. 2022-09-18 17:07:30 +02:00
Peter van Dommelen
05f28ce8cd Do not widen type to mixed and lose the existing type information when an Any assertion is used.
Fixes #8084.
2022-09-18 17:02:09 +02:00
orklah
5db59910bd
Merge pull request #8491 from HypeMC/array-column-fix
Fix array_column with object and column name null
2022-09-18 11:25:42 +02:00
HypeMC
602e26edd4 Fix array_column with object and column name null 2022-09-17 21:21:33 +02:00
hirokinoue
9071e877a8 fix according to psalm analysis 2022-09-18 01:15:09 +09:00
hirokinoue
2cf131fb45 allow StaticPropertyFetch node to behave like Variable node 2022-09-17 23:08:29 +09:00
hirokinoue
faf4e8ef84 allow PropertyFetch node to behave like Variable node 2022-09-17 22:36:16 +09:00
kkmuffme
a3cb10c085 make $_SERVER more detailed 2022-09-15 19:39:02 +02:00
kkmuffme
7bc29a91eb make superglobals more specific
Update VariableFetchAnalyzer.php
2022-09-15 19:38:51 +02:00
Vincent Langlet
fec5c8ab03 Fix cs 2022-09-14 00:55:32 +02:00
Vincent Langlet
32aedbac58 Add dateTimeModify return type provider 2022-09-14 00:53:12 +02:00
Matthew Brown
d957ff2015
Fix mixed type hole when sending Foo<string> to Foo<mixed> (#8481)
* Fix mixed type hole when sending Foo<string> to Foo<mixed>

* Fix ifThisIs test

* Suppress bugs highlighted with fix

* Fix PHPDoc parsing
2022-09-13 13:13:06 -04:00
Matt Brown
6f298d2af2 Fix phpcs violations 2022-09-13 12:33:47 -04:00
kkmuffme
8ac86f0a4d use consistent race condition dir creation code in all places in cache 2022-09-11 10:28:16 +02:00
kkmuffme
4726454f49 update leftover md5 in provider to commonly used hash
Revert "update leftover md5 in provider to commonly used hash"

This reverts commit 66337ecf50446dca8650a0812ebfe516d1993e06.

partially put back

Update StatementsProvider.php
2022-09-11 10:22:48 +02:00
kkmuffme
8da5f5eb1a use exceptions instead of error_log for ParserCacheProvider
* use exceptions instead of error_log for ParserCacheProvider like all other cache providers do
* remove duplicate code in ParserCacheProvider
* use same hash as other cache providers
* update Config.php cache directory creation to use same code as ParserCacheProvider
2022-09-11 10:22:48 +02:00
kkmuffme
c450d95727 fix inconsistent function naming 2022-09-08 21:33:06 +02:00
kkmuffme
249d61ec1b classlike_alias incorrect casing not handled correctly 2022-09-08 21:33:06 +02:00
orklah
76cfb911b2
Merge pull request #8469 from kkmuffme/strictify-anchored-preg-replace
preg_replace with anchor will always only have 1 replacement
2022-09-08 20:01:16 +02:00
kkmuffme
d0984f4e47 fix psalm internal errors reported by new checks 2022-09-08 19:35:44 +02:00
kkmuffme
15046c932b preg_replace with anchor will always only have 1 replacement, add limit for clarity and performance 2022-09-08 18:51:33 +02:00
kkmuffme
a17fa249ac report invalidCasing when using a class that is not user defined too (e.g. new DateTime) 2022-09-08 13:28:43 +02:00
Semyon
f0a8810cf5 Fix ctype_digit assertion bug 2022-09-07 15:49:35 +03:00
Semyon
969c7a098b Make ctype_digit and ctype_lower work as assertions 2022-09-02 17:37:10 +03:00
Vincent Langlet
6bc714c867 Add support for callable in array_reduce 2022-08-24 16:04:22 +02:00
orklah
7ee3a81bce
Merge pull request #8370 from someniatko/issue-8363
Ensure we recognize inherited static methods for the first-class callables
2022-08-18 21:50:20 +02:00
979091d2ab
Optimize 2022-08-17 13:38:11 +02:00
0220da0b32
Add tests 2022-08-17 13:30:36 +02:00
95ef63ece9
Update 2022-08-17 13:25:00 +02:00
24b008ee40
Fix 2022-08-17 13:19:25 +02:00
1401bf94db
Fix #8414 2022-08-17 13:11:27 +02:00
orklah
7e010a7a4f
Merge pull request #8372 from kkmuffme/safely-read-write-cache-data
always use lock when writing/reading cache data to/from file
2022-08-11 18:06:56 +02:00
kkmuffme
8ca594a34d always use lock when writing/reading cache data to/from file 2022-08-11 13:12:47 +02:00
Teemu Koskinen
fefd4861d6
Use $codebase->classlike_storage_provider only if it has the required data. Fixes #8373 2022-08-08 23:49:14 +03:00