Support variadic parameters in models command (#1234)

This commit is contained in:
Karel Faille
2021-08-04 11:13:23 +02:00
committed by GitHub
parent b162347aff
commit 3b75048d12
6 changed files with 82 additions and 1 deletions
+3
View File
@@ -10,6 +10,9 @@ All notable changes to this project will be documented in this file.
### Fixed ### Fixed
- Use platformName to determine db type when casting boolean types [\#1212 / stockalexander](https://github.com/barryvdh/laravel-ide-helper/pull/1212) - Use platformName to determine db type when casting boolean types [\#1212 / stockalexander](https://github.com/barryvdh/laravel-ide-helper/pull/1212)
### Added
- Add support of variadic parameters in `ide-helper:models` [\#1234 / shaffe-fr](https://github.com/barryvdh/laravel-ide-helper/pull/1234)
2021-04-09, 2.10.0 2021-04-09, 2.10.0
------------------ ------------------
### Added ### Added
+1
View File
@@ -166,6 +166,7 @@ php artisan ide-helper:models "App\Models\Post"
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post newQuery() * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post query() * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post whereTitle($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post whereTitle($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post forAuthors(\User ...$authors)
* … * …
*/ */
``` ```
+2 -1
View File
@@ -935,7 +935,8 @@ class ModelsCommand extends Command
$paramsWithDefault = []; $paramsWithDefault = [];
/** @var \ReflectionParameter $param */ /** @var \ReflectionParameter $param */
foreach ($method->getParameters() as $param) { foreach ($method->getParameters() as $param) {
$paramStr = '$' . $param->getName(); $paramStr = $param->isVariadic() ? '...$' . $param->getName() : '$' . $param->getName();
if ($paramType = $this->getParamType($method, $param)) { if ($paramType = $this->getParamType($method, $param)) {
$paramStr = $paramType . ' ' . $paramStr; $paramStr = $paramType . ' ' . $paramStr;
} }
@@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Variadic\Models;
use DateTime;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class Simple extends Model
{
public function scopeWhereVariadic(Builder $query, ...$values): void
{
}
public function scopeWhereTypedVariadic(Builder $query, int ...$values): void
{
}
}
@@ -0,0 +1,24 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Variadic;
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand;
class Test extends AbstractModelsCommand
{
public function test(): void
{
$command = $this->app->make(ModelsCommand::class);
$tester = $this->runCommand($command, [
'--write' => true,
]);
$this->assertSame(0, $tester->getStatusCode());
$this->assertStringContainsString('Written new phpDocBlock to', $tester->getDisplay());
$this->assertMatchesMockedSnapshot();
}
}
@@ -0,0 +1,32 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Variadic\Models;
use DateTime;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
/**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Variadic\Models\Simple
*
* @property integer $id
* @method static Builder|Simple newModelQuery()
* @method static Builder|Simple newQuery()
* @method static Builder|Simple query()
* @method static Builder|Simple whereId($value)
* @method static Builder|Simple whereTypedVariadic(int ...$values)
* @method static Builder|Simple whereVariadic(...$values)
* @mixin \Eloquent
*/
class Simple extends Model
{
public function scopeWhereVariadic(Builder $query, ...$values): void
{
}
public function scopeWhereTypedVariadic(Builder $query, int ...$values): void
{
}
}