Skip to content

Commit

Permalink
Adhere to the IDE-helper config (#278)
Browse files Browse the repository at this point in the history
* Adhere to the IDE-helper config

* fix: existing PHPStan issues

* fix: ignore errors to keep matching original ide-helper code

* Remove comments

* Refactoring

* Refactoring

---------

Co-authored-by: Jonas Staudenmeir <[email protected]>
  • Loading branch information
Bloemendaal and staudenmeir authored Jan 25, 2025
1 parent 414aa77 commit 3518f87
Show file tree
Hide file tree
Showing 10 changed files with 47 additions and 17 deletions.
2 changes: 1 addition & 1 deletion src/Eloquent/Relations/BelongsToManyOfDescendants.php
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ public function getEagerLoadingAccessor()
*
* @param \Staudenmeir\LaravelAdjacencyList\Eloquent\Builder<TRelatedModel> $query
* @param \Staudenmeir\LaravelAdjacencyList\Eloquent\Builder<TDeclaringModel> $parentQuery
* @param list<string|\Illuminate\Database\Query\Expression>|string|\Illuminate\Database\Query\Expression $columns
* @param list<string|\Illuminate\Database\Query\Expression<*>>|string|\Illuminate\Database\Query\Expression<*> $columns
* @return \Staudenmeir\LaravelAdjacencyList\Eloquent\Builder<TRelatedModel>
*/
public function getRelationExistenceQuery(Builder $query, Builder $parentQuery, $columns = ['*'])
Expand Down
2 changes: 1 addition & 1 deletion src/Eloquent/Relations/Descendants.php
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ protected function buildDictionary(Collection $results)
*
* @param \Illuminate\Database\Eloquent\Builder<TRelatedModel> $query
* @param \Illuminate\Database\Eloquent\Builder<TDeclaringModel> $parentQuery
* @param list<string|\Illuminate\Database\Query\Expression>|string|\Illuminate\Database\Query\Expression $columns
* @param list<string|\Illuminate\Database\Query\Expression<*>>|string|\Illuminate\Database\Query\Expression<*> $columns
* @return \Illuminate\Database\Eloquent\Builder<TRelatedModel>
*/
public function getRelationExistenceQuery(Builder $query, Builder $parentQuery, $columns = ['*'])
Expand Down
4 changes: 2 additions & 2 deletions src/Eloquent/Relations/Graph/Ancestors.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ protected function buildDictionary(Collection $results)
*
* @param \Illuminate\Database\Eloquent\Builder<TRelatedModel> $query
* @param \Illuminate\Database\Eloquent\Builder<TDeclaringModel> $parentQuery
* @param list<string|\Illuminate\Database\Query\Expression>|string|\Illuminate\Database\Query\Expression $columns
* @param list<string|\Illuminate\Database\Query\Expression<*>>|string|\Illuminate\Database\Query\Expression<*> $columns
* @return \Illuminate\Database\Eloquent\Builder<TRelatedModel>
*/
public function getRelationExistenceQuery(Builder $query, Builder $parentQuery, $columns = ['*'])
Expand Down Expand Up @@ -126,7 +126,7 @@ public function getRelationExistenceQuery(Builder $query, Builder $parentQuery,
* Add the constraints for a relationship query on the same table.
*
* @param \Illuminate\Database\Eloquent\Builder<TRelatedModel> $query
* @param list<string|\Illuminate\Database\Query\Expression>|string|\Illuminate\Database\Query\Expression $columns
* @param list<string|\Illuminate\Database\Query\Expression<*>>|string|\Illuminate\Database\Query\Expression<*> $columns
* @return \Illuminate\Database\Eloquent\Builder<TRelatedModel>
*/
public function getRelationExistenceQueryForSelfRelation(
Expand Down
4 changes: 2 additions & 2 deletions src/Eloquent/Relations/Graph/Descendants.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ protected function buildDictionary(Collection $results)
*
* @param \Illuminate\Database\Eloquent\Builder<TRelatedModel> $query
* @param \Illuminate\Database\Eloquent\Builder<TDeclaringModel> $parentQuery
* @param list<string|\Illuminate\Database\Query\Expression>|string|\Illuminate\Database\Query\Expression $columns
* @param list<string|\Illuminate\Database\Query\Expression<*>>|string|\Illuminate\Database\Query\Expression<*> $columns
* @return \Illuminate\Database\Eloquent\Builder<TRelatedModel>
*/
public function getRelationExistenceQuery(Builder $query, Builder $parentQuery, $columns = ['*'])
Expand Down Expand Up @@ -126,7 +126,7 @@ public function getRelationExistenceQuery(Builder $query, Builder $parentQuery,
* Add the constraints for a relationship query on the same table.
*
* @param \Illuminate\Database\Eloquent\Builder<TRelatedModel> $query
* @param list<string|\Illuminate\Database\Query\Expression>|string|\Illuminate\Database\Query\Expression $columns
* @param list<string|\Illuminate\Database\Query\Expression<*>>|string|\Illuminate\Database\Query\Expression<*> $columns
* @return \Illuminate\Database\Eloquent\Builder<TRelatedModel>
*/
public function getRelationExistenceQueryForSelfRelation(
Expand Down
4 changes: 2 additions & 2 deletions src/Eloquent/Relations/Graph/Traits/IsRecursiveRelation.php
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,8 @@ public function __call($method, $parameters)
* Replace table hash with expression name in self-relation aggregate queries.
*
* @param \Illuminate\Database\Eloquent\Builder<*> $query
* @param \Illuminate\Database\Query\Expression $expression
* @return \Illuminate\Database\Query\Expression
* @param \Illuminate\Database\Query\Expression<*> $expression
* @return \Illuminate\Database\Query\Expression<*>
*/
protected function replaceTableHash(Builder $query, Expression $expression): Expression
{
Expand Down
2 changes: 1 addition & 1 deletion src/Eloquent/Relations/Traits/IsOfDescendantsRelation.php
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ abstract public function getExpressionForeignKeyName();
*
* @param \Staudenmeir\LaravelAdjacencyList\Eloquent\Builder<TRelatedModel> $query
* @param \Staudenmeir\LaravelAdjacencyList\Eloquent\Builder<TDeclaringModel> $parentQuery
* @param list<string|\Illuminate\Database\Query\Expression>|string|\Illuminate\Database\Query\Expression $columns
* @param list<string|\Illuminate\Database\Query\Expression<*>>|string|\Illuminate\Database\Query\Expression<*> $columns
* @return \Staudenmeir\LaravelAdjacencyList\Eloquent\Builder<TRelatedModel>
*/
public function getRelationExistenceQuery(Builder $query, Builder $parentQuery, $columns = ['*'])
Expand Down
4 changes: 2 additions & 2 deletions src/Eloquent/Relations/Traits/IsRecursiveRelation.php
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ public function __call($method, $parameters)
* Replace table hash with expression name in self-relation aggregate queries.
*
* @param \Illuminate\Database\Eloquent\Builder<*> $query
* @param \Illuminate\Database\Query\Expression $expression
* @return \Illuminate\Database\Query\Expression
* @param \Illuminate\Database\Query\Expression<*> $expression
* @return \Illuminate\Database\Query\Expression<*>
*/
protected function replaceTableHash(Builder $query, Expression $expression)
{
Expand Down
2 changes: 1 addition & 1 deletion src/Eloquent/Traits/BuildsAdjacencyListQueries.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ trait BuildsAdjacencyListQueries
/**
* Get the hydrated models without eager loading.
*
* @param list<string|\Illuminate\Database\Query\Expression>|string $columns
* @param list<string|\Illuminate\Database\Query\Expression<*>>|string $columns
* @return list<\Illuminate\Database\Eloquent\Model>
*/
public function getModels($columns = ['*'])
Expand Down
20 changes: 17 additions & 3 deletions src/IdeHelper/RecursiveRelationsHook.php
Original file line number Diff line number Diff line change
Expand Up @@ -127,12 +127,19 @@ class RecursiveRelationsHook implements ModelHookInterface

public function run(ModelsCommand $command, Model $model): void
{
/** @var \Illuminate\Contracts\Config\Repository $config */
$config = $command->getLaravel()->make('config');

$traits = class_uses_recursive($model);

$useGenericsSyntax = $config->get('ide-helper.use_generics_annotations', true);

if (in_array(HasRecursiveRelationships::class, $traits)) {
foreach (static::$treeRelationships as $relationship) {
$type = $relationship['manyRelation']
? '\\' . TreeCollection::class . '|\\' . $model::class . '[]'
? ($useGenericsSyntax
? '\\' . TreeCollection::class . '<int, \\' . $model::class . '>'
: '\\' . TreeCollection::class . '|\\' . $model::class . '[]')
: '\\' . $model::class;

$this->addRelationship($command, $relationship, $type);
Expand All @@ -141,7 +148,9 @@ public function run(ModelsCommand $command, Model $model): void

if (in_array(HasGraphRelationships::class, $traits)) {
foreach (static::$graphRelationships as $relationship) {
$type = '\\' . GraphCollection::class . '|\\' . $model::class . '[]';
$type = $useGenericsSyntax
? '\\' . GraphCollection::class . '<int, \\' . $model::class . '>'
: '\\' . GraphCollection::class . '|\\' . $model::class . '[]';

$this->addRelationship($command, $relationship, $type);
}
Expand All @@ -153,6 +162,9 @@ public function run(ModelsCommand $command, Model $model): void
*/
protected function addRelationship(ModelsCommand $command, array $relationship, string $type): void
{
/** @var \Illuminate\Contracts\Config\Repository $config */
$config = $command->getLaravel()->make('config');

$command->setProperty(
$relationship['name'],
$type,
Expand All @@ -162,7 +174,9 @@ protected function addRelationship(ModelsCommand $command, array $relationship,
!$relationship['manyRelation']
);

if ($relationship['manyRelation']) {
$addCountProperties = $config->get('ide-helper.write_model_relation_count_properties', true);

if ($relationship['manyRelation'] && $addCountProperties) {
$command->setProperty(
Str::snake($relationship['name']) . '_count',
'int',
Expand Down
20 changes: 18 additions & 2 deletions tests/IdeHelper/RecursiveRelationsHookTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
namespace Staudenmeir\LaravelAdjacencyList\Tests\IdeHelper;

use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Illuminate\Contracts\Config\Repository;
use Illuminate\Contracts\Foundation\Application;
use Mockery;
use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration;
use PHPUnit\Framework\TestCase;
Expand All @@ -16,11 +18,18 @@ class RecursiveRelationsHookTest extends TestCase

public function testTreeRelations(): void
{
$config = Mockery::mock(Repository::class);
$config->shouldReceive('get')->andReturn(true);

$app = Mockery::mock(Application::class);
$app->shouldReceive('make')->andReturn($config);

$command = Mockery::mock(ModelsCommand::class);
$command->shouldReceive('getLaravel')->andReturn($app);
$command->shouldReceive('setProperty')->times(2);
$command->shouldReceive('setProperty')->once()->with(
'ancestorsAndSelf',
'\Staudenmeir\LaravelAdjacencyList\Eloquent\Collection|\Staudenmeir\LaravelAdjacencyList\Tests\IdeHelper\Models\User[]',
'\Staudenmeir\LaravelAdjacencyList\Eloquent\Collection<int, \Staudenmeir\LaravelAdjacencyList\Tests\IdeHelper\Models\User>',
true,
false,
"The model's recursive parents and itself.",
Expand Down Expand Up @@ -51,11 +60,18 @@ public function testTreeRelations(): void

public function testGraphRelations(): void
{
$config = Mockery::mock(Repository::class);
$config->shouldReceive('get')->andReturn(true);

$app = Mockery::mock(Application::class);
$app->shouldReceive('make')->andReturn($config);

$command = Mockery::mock(ModelsCommand::class);
$command->shouldReceive('getLaravel')->andReturn($app);
$command->shouldReceive('setProperty')->times(2);
$command->shouldReceive('setProperty')->once()->with(
'ancestorsAndSelf',
'\Staudenmeir\LaravelAdjacencyList\Eloquent\Graph\Collection|\Staudenmeir\LaravelAdjacencyList\Tests\IdeHelper\Models\Node[]',
'\Staudenmeir\LaravelAdjacencyList\Eloquent\Graph\Collection<int, \Staudenmeir\LaravelAdjacencyList\Tests\IdeHelper\Models\Node>',
true,
false,
"The node's recursive parents and itself.",
Expand Down

0 comments on commit 3518f87

Please sign in to comment.