mirror of
https://github.com/barryvdh/laravel-ide-helper.git
synced 2026-08-18 01:57:13 +00:00
Merge pull request #906 from mfn/mfn-return-reflection
Infer return type from reflection if no phpdoc given
This commit is contained in:
@@ -10,20 +10,20 @@
|
|||||||
|
|
||||||
namespace Barryvdh\LaravelIdeHelper\Console;
|
namespace Barryvdh\LaravelIdeHelper\Console;
|
||||||
|
|
||||||
|
use Barryvdh\Reflection\DocBlock;
|
||||||
|
use Barryvdh\Reflection\DocBlock\Context;
|
||||||
|
use Barryvdh\Reflection\DocBlock\Serializer as DocBlockSerializer;
|
||||||
|
use Barryvdh\Reflection\DocBlock\Tag;
|
||||||
use Composer\Autoload\ClassMapGenerator;
|
use Composer\Autoload\ClassMapGenerator;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Database\Eloquent\Collection;
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
use Illuminate\Database\Eloquent\Relations\Relation;
|
use Illuminate\Database\Eloquent\Relations\Relation;
|
||||||
use Illuminate\Support\Str;
|
|
||||||
use Illuminate\Filesystem\Filesystem;
|
use Illuminate\Filesystem\Filesystem;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
use ReflectionClass;
|
use ReflectionClass;
|
||||||
use Symfony\Component\Console\Input\InputOption;
|
|
||||||
use Symfony\Component\Console\Input\InputArgument;
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
use Barryvdh\Reflection\DocBlock;
|
|
||||||
use Barryvdh\Reflection\DocBlock\Context;
|
|
||||||
use Barryvdh\Reflection\DocBlock\Tag;
|
|
||||||
use Barryvdh\Reflection\DocBlock\Serializer as DocBlockSerializer;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A command to generate autocomplete information for your IDE
|
* A command to generate autocomplete information for your IDE
|
||||||
@@ -440,7 +440,7 @@ class ModelsCommand extends Command
|
|||||||
$name = Str::snake(substr($method, 3, -9));
|
$name = Str::snake(substr($method, 3, -9));
|
||||||
if (!empty($name)) {
|
if (!empty($name)) {
|
||||||
$reflection = new \ReflectionMethod($model, $method);
|
$reflection = new \ReflectionMethod($model, $method);
|
||||||
$type = $this->getReturnTypeFromDocBlock($reflection);
|
$type = $this->getReturnType($reflection);
|
||||||
$this->setProperty($name, $type, true, null);
|
$this->setProperty($name, $type, true, null);
|
||||||
}
|
}
|
||||||
} elseif (Str::startsWith($method, 'set') && Str::endsWith(
|
} elseif (Str::startsWith($method, 'set') && Str::endsWith(
|
||||||
@@ -826,6 +826,16 @@ class ModelsCommand extends Command
|
|||||||
return $this->laravel['config']->get('ide-helper.model_camel_case_properties', false);
|
return $this->laravel['config']->get('ide-helper.model_camel_case_properties', false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getReturnType(\ReflectionMethod $reflection): ?string
|
||||||
|
{
|
||||||
|
$type = $this->getReturnTypeFromDocBlock($reflection);
|
||||||
|
if ($type) {
|
||||||
|
return $type;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->getReturnTypeFromReflection($reflection);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get method return type based on it DocBlock comment
|
* Get method return type based on it DocBlock comment
|
||||||
*
|
*
|
||||||
@@ -845,6 +855,29 @@ class ModelsCommand extends Command
|
|||||||
return $type;
|
return $type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getReturnTypeFromReflection(\ReflectionMethod $reflection): ?string
|
||||||
|
{
|
||||||
|
$returnType = $reflection->getReturnType();
|
||||||
|
if (!$returnType) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$type = $returnType instanceof \ReflectionNamedType
|
||||||
|
? $returnType->getName()
|
||||||
|
: (string)$returnType;
|
||||||
|
|
||||||
|
if (!$returnType->isBuiltin()) {
|
||||||
|
$type = '\\' . $type;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($returnType->allowsNull()) {
|
||||||
|
$type .= '|null';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $type;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates methods provided by the SoftDeletes trait
|
* Generates methods provided by the SoftDeletes trait
|
||||||
* @param \Illuminate\Database\Eloquent\Model $model
|
* @param \Illuminate\Database\Eloquent\Model $model
|
||||||
|
|||||||
@@ -47,11 +47,58 @@ class Simple extends Model
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAttributeReturnsImportedClass(): DateTime
|
public function getAttributeReturnsImportedClassAttribute(): DateTime
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAttributeReturnsFqnClass(): \Illuminate\Support\Facades\Date
|
public function getAttributeReturnsFqnClassAttribute(): \Illuminate\Support\Facades\Date
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsArrayAttribute(): array
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsNullableArrayAttribute(): ?array
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsStdClassAttribute(): \stdClass
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsNullableStdClassAttribute(): ?\stdClass
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsBoolAttribute(): bool
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsNullableBoolAttribute(): ?bool
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsFloatAttribute(): bool
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsNullableFloatAttribute(): ?bool
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsCallableAttribute(): callable
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsNullableCallableAttribute(): ?callable
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Doesn't make sense, but…
|
||||||
|
*/
|
||||||
|
public function getAttributeReturnsVoidAttribute(): void
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,12 +62,25 @@ use Illuminate\Database\Eloquent\Model;
|
|||||||
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Getter\Models\Simple
|
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Getter\Models\Simple
|
||||||
*
|
*
|
||||||
* @property integer $id
|
* @property integer $id
|
||||||
* @property-read mixed $attribute_return_type_int_or_null
|
* @property-read int|null $attribute_return_type_int_or_null
|
||||||
|
* @property-read array $attribute_returns_array
|
||||||
|
* @property-read bool $attribute_returns_bool
|
||||||
|
* @property-read callable $attribute_returns_callable
|
||||||
|
* @property-read bool $attribute_returns_float
|
||||||
|
* @property-read \Illuminate\Support\Facades\Date $attribute_returns_fqn_class
|
||||||
|
* @property-read \DateTime $attribute_returns_imported_class
|
||||||
|
* @property-read array|null $attribute_returns_nullable_array
|
||||||
|
* @property-read bool|null $attribute_returns_nullable_bool
|
||||||
|
* @property-read callable|null $attribute_returns_nullable_callable
|
||||||
|
* @property-read bool|null $attribute_returns_nullable_float
|
||||||
|
* @property-read \stdClass|null $attribute_returns_nullable_std_class
|
||||||
|
* @property-read \stdClass $attribute_returns_std_class
|
||||||
|
* @property-read void $attribute_returns_void
|
||||||
* @property-read \what|\ever|\we-write/here $attribute_takes_phpdoc_literal
|
* @property-read \what|\ever|\we-write/here $attribute_takes_phpdoc_literal
|
||||||
* @property-read int $attribute_with_int_return_phpdoc
|
* @property-read int $attribute_with_int_return_phpdoc
|
||||||
* @property-read string $attribute_with_int_return_type_and_but_phpdoc_string
|
* @property-read string $attribute_with_int_return_type_and_but_phpdoc_string
|
||||||
* @property-read int $attribute_with_int_return_type_and_phpdoc
|
* @property-read int $attribute_with_int_return_type_and_phpdoc
|
||||||
* @property-read mixed $attribute_with_int_return_type
|
* @property-read int $attribute_with_int_return_type
|
||||||
* @property-read mixed $attribute_without_type
|
* @property-read mixed $attribute_without_type
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Getter\Models\Simple newModelQuery()
|
* @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Getter\Models\Simple newModelQuery()
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Getter\Models\Simple newQuery()
|
* @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Getter\Models\Simple newQuery()
|
||||||
@@ -117,11 +130,58 @@ class Simple extends Model
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAttributeReturnsImportedClass(): DateTime
|
public function getAttributeReturnsImportedClassAttribute(): DateTime
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAttributeReturnsFqnClass(): \Illuminate\Support\Facades\Date
|
public function getAttributeReturnsFqnClassAttribute(): \Illuminate\Support\Facades\Date
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsArrayAttribute(): array
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsNullableArrayAttribute(): ?array
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsStdClassAttribute(): \stdClass
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsNullableStdClassAttribute(): ?\stdClass
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsBoolAttribute(): bool
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsNullableBoolAttribute(): ?bool
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsFloatAttribute(): bool
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsNullableFloatAttribute(): ?bool
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsCallableAttribute(): callable
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttributeReturnsNullableCallableAttribute(): ?callable
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Doesn't make sense, but…
|
||||||
|
*/
|
||||||
|
public function getAttributeReturnsVoidAttribute(): void
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user