mirror of
https://github.com/barryvdh/laravel-ide-helper.git
synced 2026-08-18 18:13:11 +00:00
Add phpstorm meta argument hints (#1640)
* Add phpstorm meta hints * composer fix-style * Use php-templates from vs-code * Fix view instance * composer fix-style * Add translations * composer fix-style * map to string * composer fix-style * Fix test --------- Co-authored-by: laravel-ide-helper <[email protected]>
This commit is contained in:
co-authored by
laravel-ide-helper
parent
66ea6aa57b
commit
4e4da0825a
+112
-16
@@ -16,6 +16,7 @@ use Illuminate\Console\Command;
|
||||
use Illuminate\Contracts\Config\Repository;
|
||||
use Illuminate\Contracts\View\Factory;
|
||||
use Illuminate\Filesystem\Filesystem;
|
||||
use Illuminate\Support\Collection;
|
||||
use RuntimeException;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
@@ -51,19 +52,29 @@ class MetaCommand extends Command
|
||||
protected $config;
|
||||
|
||||
protected $methods = [
|
||||
'new \Illuminate\Contracts\Container\Container',
|
||||
'\Illuminate\Container\Container::makeWith(0)',
|
||||
'\Illuminate\Contracts\Container\Container::get(0)',
|
||||
'\Illuminate\Contracts\Container\Container::make(0)',
|
||||
'\Illuminate\Contracts\Container\Container::makeWith(0)',
|
||||
'\App::get(0)',
|
||||
'\App::make(0)',
|
||||
'\App::makeWith(0)',
|
||||
'\app(0)',
|
||||
'\resolve(0)',
|
||||
'\Psr\Container\ContainerInterface::get(0)',
|
||||
'new \Illuminate\Contracts\Container\Container',
|
||||
'\Illuminate\Container\Container::makeWith(0)',
|
||||
'\Illuminate\Contracts\Container\Container::get(0)',
|
||||
'\Illuminate\Contracts\Container\Container::make(0)',
|
||||
'\Illuminate\Contracts\Container\Container::makeWith(0)',
|
||||
'\App::get(0)',
|
||||
'\App::make(0)',
|
||||
'\App::makeWith(0)',
|
||||
'\app(0)',
|
||||
'\resolve(0)',
|
||||
'\Psr\Container\ContainerInterface::get(0)',
|
||||
];
|
||||
|
||||
protected $configMethods = [
|
||||
'\config()',
|
||||
'\Illuminate\Config\Repository::get()',
|
||||
'\Illuminate\Config\Repository::set()',
|
||||
'\Illuminate\Support\Facades\Config::get()',
|
||||
'\Illuminate\Support\Facades\Config::set()',
|
||||
];
|
||||
|
||||
protected $templateCache = [];
|
||||
|
||||
/**
|
||||
*
|
||||
* @param Filesystem $files
|
||||
@@ -108,7 +119,7 @@ class MetaCommand extends Command
|
||||
}
|
||||
|
||||
$reflectionClass = new \ReflectionClass($concrete);
|
||||
if (is_object($concrete) && !$reflectionClass->isAnonymous()) {
|
||||
if (is_object($concrete) && !$reflectionClass->isAnonymous() && $abstract !== get_class($concrete)) {
|
||||
$bindings[$abstract] = get_class($concrete);
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
@@ -120,10 +131,18 @@ class MetaCommand extends Command
|
||||
|
||||
$this->unregisterClassAutoloadExceptions($ourAutoloader);
|
||||
|
||||
$content = $this->view->make('meta', [
|
||||
'bindings' => $bindings,
|
||||
'methods' => $this->methods,
|
||||
'factories' => $factories,
|
||||
$configValues = $this->loadTemplate('configs')->pluck('value', 'name')->map(function ($value, $key) {
|
||||
return gettype($value);
|
||||
});
|
||||
|
||||
$content = $this->view->make('ide-helper::meta', [
|
||||
'bindings' => $bindings,
|
||||
'methods' => $this->methods,
|
||||
'factories' => $factories,
|
||||
'configMethods' => $this->configMethods,
|
||||
'configValues' => $configValues,
|
||||
'expectedArgumentSets' => $this->getExpectedArgumentSets(),
|
||||
'expectedArguments' => $this->getExpectedArguments(),
|
||||
])->render();
|
||||
|
||||
$filename = $this->option('filename');
|
||||
@@ -167,6 +186,83 @@ class MetaCommand extends Command
|
||||
return $autoloader;
|
||||
}
|
||||
|
||||
protected function getExpectedArgumentSets()
|
||||
{
|
||||
return [
|
||||
'configs' => $this->loadTemplate('configs')->pluck('name')->filter()->toArray(),
|
||||
'routes' => $this->loadTemplate('routes')->pluck('name')->filter()->toArray(),
|
||||
'views' => $this->loadTemplate('views')->pluck('key')->filter()->map(function ($value) {
|
||||
return (string) $value;
|
||||
})->toArray(),
|
||||
'translations' => $this->loadTemplate('translations')->filter()->keys()->toArray(),
|
||||
];
|
||||
}
|
||||
|
||||
protected function getExpectedArguments()
|
||||
{
|
||||
return [
|
||||
'\config()' => [
|
||||
0 => 'configs',
|
||||
],
|
||||
'\Illuminate\Config\Repository::get()' => [
|
||||
0 => 'configs',
|
||||
],
|
||||
'\Illuminate\Config\Repository::set()' => [
|
||||
0 => 'configs',
|
||||
],
|
||||
'\Illuminate\Support\Facades\Config::get()' => [
|
||||
0 => 'configs',
|
||||
],
|
||||
'\Illuminate\Support\Facades\Config::set()' => [
|
||||
0 => 'configs',
|
||||
],
|
||||
'\route()' => [
|
||||
0 => 'routes',
|
||||
],
|
||||
'\Illuminate\Support\Facades\Route::get()' => [
|
||||
0 => 'routes',
|
||||
],
|
||||
'\Illuminate\Routing\Router::get()' => [
|
||||
0 => 'routes',
|
||||
],
|
||||
'\view()' => [
|
||||
0 => 'views',
|
||||
],
|
||||
'\Illuminate\Support\Facades\View::make()' => [
|
||||
0 => 'views',
|
||||
],
|
||||
'\Illuminate\View\Factory::make()' => [
|
||||
0 => 'views',
|
||||
],
|
||||
'\__()' => [
|
||||
0 => 'translations',
|
||||
],
|
||||
'\trans()' => [
|
||||
0 => 'translations',
|
||||
],
|
||||
'\Illuminate\Contracts\Translation\Translator::get()' => [
|
||||
0 => 'translations',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection
|
||||
*/
|
||||
protected function loadTemplate($name)
|
||||
{
|
||||
if (!isset($this->templateCache[$name])) {
|
||||
$file = __DIR__ . '/../../php-templates/' . basename($name) . '.php';
|
||||
$value = $this->files->requireOnce($file) ?: [];
|
||||
if (!$value instanceof Collection) {
|
||||
$value = collect($value);
|
||||
}
|
||||
$this->templateCache[$name] = $value;
|
||||
}
|
||||
|
||||
return $this->templateCache[$name];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the console command options.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user