Configurable macro return type defaults (#1711)

This commit is contained in:
erikn69
2025-05-15 09:56:31 +02:00
committed by GitHub
parent cdefaeed42
commit e0b2f86326
4 changed files with 30 additions and 9 deletions
+14
View File
@@ -274,6 +274,20 @@ return [
*/ */
'use_generics_annotations' => true, 'use_generics_annotations' => true,
/*
|--------------------------------------------------------------------------
| Default return types for macros
|--------------------------------------------------------------------------
|
| Define default return types for macros without explicit return types.
| e.g. `\Illuminate\Database\Query\Builder::class => 'static'`,
| `\Illuminate\Support\Str::class => 'string'`
|
*/
'macro_default_return_types' => [
\Illuminate\Http\Client\Factory::class => \Illuminate\Http\Client\PendingRequest::class,
],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Additional relation types | Additional relation types
+7 -3
View File
@@ -57,9 +57,13 @@ class Generator
// Find the drivers to add to the extra/interfaces // Find the drivers to add to the extra/interfaces
$this->detectDrivers(); $this->detectDrivers();
$this->extra = array_merge($this->extra, $this->config->get('ide-helper.extra'), []); $this->extra = array_merge($this->extra, $this->config->get('ide-helper.extra', []));
$this->magic = array_merge($this->magic, $this->config->get('ide-helper.magic'), []); $this->magic = array_merge($this->magic, $this->config->get('ide-helper.magic', []));
$this->interfaces = array_merge($this->interfaces, $this->config->get('ide-helper.interfaces'), []); $this->interfaces = array_merge($this->interfaces, $this->config->get('ide-helper.interfaces', []));
Macro::setDefaultReturnTypes($this->config->get('ide-helper.macro_default_return_types', [
\Illuminate\Http\Client\Factory::class => \Illuminate\Http\Client\PendingRequest::class,
]));
// Make all interface classes absolute // Make all interface classes absolute
foreach ($this->interfaces as &$interface) { foreach ($this->interfaces as &$interface) {
$interface = '\\' . ltrim($interface, '\\'); $interface = '\\' . ltrim($interface, '\\');
+7 -6
View File
@@ -5,14 +5,11 @@ namespace Barryvdh\LaravelIdeHelper;
use Barryvdh\Reflection\DocBlock; use Barryvdh\Reflection\DocBlock;
use Barryvdh\Reflection\DocBlock\Tag; use Barryvdh\Reflection\DocBlock\Tag;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Http\Client\PendingRequest;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
class Macro extends Method class Macro extends Method
{ {
protected $macroDefaults = [ protected static $macroDefaults = [];
\Illuminate\Http\Client\Factory::class => PendingRequest::class,
];
/** /**
* Macro constructor. * Macro constructor.
@@ -37,6 +34,10 @@ class Macro extends Method
parent::__construct($method, $alias, $class, $methodName, $interfaces, $classAliases, $returnTypeNormalizers); parent::__construct($method, $alias, $class, $methodName, $interfaces, $classAliases, $returnTypeNormalizers);
} }
public static function setDefaultReturnTypes(array $map = [])
{
static::$macroDefaults = array_merge(static::$macroDefaults, $map);
}
/** /**
* @param \ReflectionFunctionAbstract $method * @param \ReflectionFunctionAbstract $method
*/ */
@@ -84,8 +85,8 @@ class Macro extends Method
} }
$class = ltrim($this->declaringClassName, '\\'); $class = ltrim($this->declaringClassName, '\\');
if (!$this->phpdoc->hasTag('return') && isset($this->macroDefaults[$class])) { if (!$this->phpdoc->hasTag('return') && isset(static::$macroDefaults[$class])) {
$type = $this->macroDefaults[$class]; $type = static::$macroDefaults[$class];
$this->phpdoc->appendTag(Tag::createInstance("@return {$type}")); $this->phpdoc->appendTag(Tag::createInstance("@return {$type}"));
} }
} }
@@ -17,6 +17,7 @@ class Test extends AbstractGeneratorCommand
}); });
DB::macro('db_custom_macro', function () { DB::macro('db_custom_macro', function () {
}); });
$this->app['config']->set('ide-helper.macro_default_return_types', [Arr::class => 'Custom_Fake_Class']);
$command = $this->app->make(GeneratorCommand::class); $command = $this->app->make(GeneratorCommand::class);
@@ -26,6 +27,7 @@ class Test extends AbstractGeneratorCommand
$this->assertStringContainsString('A new helper file was written to _ide_helper.php', $tester->getDisplay()); $this->assertStringContainsString('A new helper file was written to _ide_helper.php', $tester->getDisplay());
$this->assertStringContainsString('public static function configure($basePath = null)', $this->mockFilesystemOutput); $this->assertStringContainsString('public static function configure($basePath = null)', $this->mockFilesystemOutput);
$this->assertStringContainsString('* @return \Custom_Fake_Class', $this->mockFilesystemOutput);
$this->assertStringContainsString('public static function arr_custom_macro()', $this->mockFilesystemOutput); $this->assertStringContainsString('public static function arr_custom_macro()', $this->mockFilesystemOutput);
$this->assertStringContainsString('public static function db_custom_macro()', $this->mockFilesystemOutput); $this->assertStringContainsString('public static function db_custom_macro()', $this->mockFilesystemOutput);
} }