mirror of
https://github.com/danog/psalm.git
synced 2025-01-10 15:09:04 +01:00
162 lines
2.9 KiB
PHP
162 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace Psalm\Storage;
|
|
|
|
use Psalm\CodeLocation;
|
|
use Psalm\Internal\Scanner\UnresolvedConstantComponent;
|
|
use Psalm\Type\Union;
|
|
|
|
final class FunctionLikeParameter implements HasAttributesInterface
|
|
{
|
|
use CustomMetadataTrait;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
public $name;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
public $by_ref;
|
|
|
|
/**
|
|
* @var Union|null
|
|
*/
|
|
public $type;
|
|
|
|
/**
|
|
* @var Union|null
|
|
*/
|
|
public $out_type;
|
|
|
|
/**
|
|
* @var Union|null
|
|
*/
|
|
public $signature_type;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
public $has_docblock_type = false;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
public $is_optional;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
public $is_nullable;
|
|
|
|
/**
|
|
* @var Union|UnresolvedConstantComponent|null
|
|
*/
|
|
public $default_type;
|
|
|
|
/**
|
|
* @var CodeLocation|null
|
|
*/
|
|
public $location;
|
|
|
|
/**
|
|
* @var CodeLocation|null
|
|
*/
|
|
public $type_location;
|
|
|
|
/**
|
|
* @var CodeLocation|null
|
|
*/
|
|
public $signature_type_location;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
public $is_variadic;
|
|
|
|
/**
|
|
* @var array<string>|null
|
|
*/
|
|
public $sinks;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
public $assert_untainted = false;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
public $type_inferred = false;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
public $expect_variable = false;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
public $promoted_property = false;
|
|
|
|
/**
|
|
* @var list<AttributeStorage>
|
|
*/
|
|
public $attributes = [];
|
|
|
|
/**
|
|
* @var ?string
|
|
*/
|
|
public $description;
|
|
|
|
/**
|
|
* @param Union|UnresolvedConstantComponent|null $default_type
|
|
*/
|
|
public function __construct(
|
|
string $name,
|
|
bool $by_ref,
|
|
?Union $type = null,
|
|
?CodeLocation $location = null,
|
|
?CodeLocation $type_location = null,
|
|
bool $is_optional = true,
|
|
bool $is_nullable = false,
|
|
bool $is_variadic = false,
|
|
$default_type = null
|
|
) {
|
|
$this->name = $name;
|
|
$this->by_ref = $by_ref;
|
|
$this->type = $type;
|
|
$this->signature_type = $type;
|
|
$this->is_optional = $is_optional;
|
|
$this->is_nullable = $is_nullable;
|
|
$this->is_variadic = $is_variadic;
|
|
$this->location = $location;
|
|
$this->type_location = $type_location;
|
|
$this->signature_type_location = $type_location;
|
|
$this->default_type = $default_type;
|
|
}
|
|
|
|
public function getId(): string
|
|
{
|
|
return ($this->type ? $this->type->getId() : 'mixed')
|
|
. ($this->is_variadic ? '...' : '')
|
|
. ($this->is_optional ? '=' : '');
|
|
}
|
|
|
|
public function __clone()
|
|
{
|
|
if ($this->type) {
|
|
$this->type = clone $this->type;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return list<AttributeStorage>
|
|
*/
|
|
public function getAttributeStorages(): array
|
|
{
|
|
return $this->attributes;
|
|
}
|
|
}
|