mirror of
https://github.com/danog/psalm.git
synced 2024-11-26 20:34:47 +01:00
ed2cde1b93
This will highlight unused code. Ref: https://github.com/php/php-src/pull/5412 Ref: https://wiki.php.net/rfc/make-reflection-setaccessible-no-op Ref: https://github.com/php/php-src/pull/5411 Example https://3v4l.org/PNeeZ ```php <?php class Foo { private $bar = 'baz'; private function taz() { return 'waz'; } } //var_dump((new ReflectionProperty(Foo::class, 'bar'))->getValue(new Foo)); //var_dump((new ReflectionMethod(Foo::class, 'taz'))->invoke(new Foo)); ``` Produces (starting from PHP 8.1): ``` string(3) "baz" string(3) "waz" ```
112 lines
2.7 KiB
PHP
112 lines
2.7 KiB
PHP
<?php
|
|
namespace {
|
|
interface UnitEnum {
|
|
/** @var non-empty-string $name */
|
|
public readonly string $name;
|
|
|
|
/**
|
|
* @psalm-pure
|
|
* @return list<static>
|
|
*/
|
|
public static function cases(): array;
|
|
}
|
|
|
|
interface BackedEnum extends UnitEnum
|
|
{
|
|
public readonly int|string $value;
|
|
|
|
/**
|
|
* @psalm-pure
|
|
*/
|
|
public static function from(string|int $value): static;
|
|
|
|
/**
|
|
* @psalm-pure
|
|
*/
|
|
public static function tryFrom(string|int $value): ?static;
|
|
}
|
|
|
|
class ReflectionClass implements Reflector {
|
|
/** @psalm-pure */
|
|
public function isEnum(): bool {}
|
|
}
|
|
|
|
class ReflectionProperty implements Reflector
|
|
{
|
|
/**
|
|
* Starting from PHP 8.1, this method is pure, and has no effect.
|
|
*
|
|
* @psalm-pure
|
|
*/
|
|
public function setAccessible(bool $accessible): void {}
|
|
}
|
|
|
|
class ReflectionMethod extends ReflectionFunctionAbstract
|
|
{
|
|
/**
|
|
* Starting from PHP 8.1, this method is pure, and has no effect.
|
|
*
|
|
* @psalm-pure
|
|
*/
|
|
public function setAccessible(bool $accessible): void {}
|
|
}
|
|
|
|
/** @psalm-immutable */
|
|
class ReflectionEnum extends ReflectionClass implements Reflector
|
|
{
|
|
public function getBackingType(): ?ReflectionType;
|
|
public function getCase(string $name): ReflectionEnumUnitCase;
|
|
/** @return list<ReflectionEnumUnitCase> */
|
|
public function getCases(): array;
|
|
public function hasCase(string $name): bool;
|
|
public function isBacked(): bool;
|
|
}
|
|
|
|
/** @psalm-immutable */
|
|
class ReflectionEnumUnitCase extends ReflectionClassConstant implements Reflector
|
|
{
|
|
public function getEnum(): ReflectionEnum;
|
|
public function getValue(): UnitEnum;
|
|
}
|
|
|
|
/** @psalm-immutable */
|
|
class ReflectionEnumBackedCase extends ReflectionEnumUnitCase implements Reflector
|
|
{
|
|
public function getBackingValue(): int|string;
|
|
}
|
|
|
|
/** @psalm-immutable */
|
|
class ReflectionIntersectionType extends ReflectionType {
|
|
/** @return non-empty-list<ReflectionNamedType> */
|
|
public function getTypes(): array {}
|
|
|
|
/** @return false */
|
|
public function allowsNull(): bool {}
|
|
}
|
|
}
|
|
|
|
namespace FTP {
|
|
final class Connection {}
|
|
}
|
|
|
|
namespace IMAP {
|
|
final class Connection {}
|
|
}
|
|
|
|
namespace LDAP {
|
|
final class Connection {}
|
|
final class Result {}
|
|
final class ResultEntry {}
|
|
}
|
|
|
|
namespace PgSql {
|
|
final class Connection {}
|
|
final class Result {}
|
|
final class Lob {}
|
|
}
|
|
|
|
namespace PSpell {
|
|
final class Config {}
|
|
final class Dictionary {}
|
|
}
|