mirror of
https://github.com/barryvdh/laravel-ide-helper.git
synced 2026-08-18 01:57:13 +00:00
Improve replacement of return type for methods from Query\Builder (#1575)
* Add return type `|static` to Query\Builder methods (#1574) * Replace return type Query\Builder with Eloquent\Builder (#1574) * Replace return type Query\Builder only for facade Eloquent (#1574) * Add special return type replacement for Macros of \Eloquent * Restrict special return type to methods from Eloquent\Builder and Query\Builder * Do not overwrite return type in normalizeReturn() with conditional call of setType() * Use generic return type for builder methods in \Eloquent * composer fix-style --------- Co-authored-by: laravel-ide-helper <[email protected]>
This commit is contained in:
co-authored by
laravel-ide-helper
parent
64588afe8b
commit
e3ec773374
+29
-3
@@ -18,6 +18,7 @@ use Barryvdh\Reflection\DocBlock\Tag\MethodTag;
|
||||
use Closure;
|
||||
use Illuminate\Config\Repository as ConfigRepository;
|
||||
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
|
||||
use Illuminate\Database\Query\Builder as QueryBuilder;
|
||||
use Illuminate\Support\Facades\Facade;
|
||||
use ReflectionClass;
|
||||
use Throwable;
|
||||
@@ -333,7 +334,15 @@ class Alias
|
||||
|
||||
if (!in_array($magic, $this->usedMethods)) {
|
||||
if ($class !== $this->root) {
|
||||
$this->methods[] = new Method($method, $this->alias, $class, $magic, $this->interfaces, $this->classAliases);
|
||||
$this->methods[] = new Method(
|
||||
$method,
|
||||
$this->alias,
|
||||
$class,
|
||||
$magic,
|
||||
$this->interfaces,
|
||||
$this->classAliases,
|
||||
$this->getReturnTypeNormalizers($class)
|
||||
);
|
||||
}
|
||||
$this->usedMethods[] = $magic;
|
||||
}
|
||||
@@ -363,7 +372,8 @@ class Alias
|
||||
$reflection,
|
||||
$method->name,
|
||||
$this->interfaces,
|
||||
$this->classAliases
|
||||
$this->classAliases,
|
||||
$this->getReturnTypeNormalizers($reflection)
|
||||
);
|
||||
}
|
||||
$this->usedMethods[] = $method->name;
|
||||
@@ -386,7 +396,8 @@ class Alias
|
||||
$reflection,
|
||||
$macro_name,
|
||||
$this->interfaces,
|
||||
$this->classAliases
|
||||
$this->classAliases,
|
||||
$this->getReturnTypeNormalizers($reflection)
|
||||
);
|
||||
$this->usedMethods[] = $macro_name;
|
||||
}
|
||||
@@ -395,6 +406,21 @@ class Alias
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ReflectionClass $class
|
||||
* @return array<string, string>
|
||||
*/
|
||||
protected function getReturnTypeNormalizers($class)
|
||||
{
|
||||
if ($this->alias === 'Eloquent' && in_array($class->getName(), [EloquentBuilder::class, QueryBuilder::class])) {
|
||||
return [
|
||||
'$this' => '\\' . EloquentBuilder::class . ($this->config->get('ide-helper.use_generics_annotations') ? '<static>' : '|static'),
|
||||
];
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $macro_func
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user