Compare commits

..
11 Commits
Author SHA1 Message Date
Barry vd. Heuvel 692b223e94 5.3 array syntax
Fixes #183
2015-03-16 18:22:03 +01:00
Barry vd. Heuvel f321828778 Update readme 2015-03-16 14:57:14 +01:00
Barry vd. Heuvel 6eb797f5ff Remove contracts from L4 version 2015-03-16 14:28:03 +01:00
Barry vd. Heuvel 604d327277 More meta methods 2015-03-16 14:25:52 +01:00
Barry vd. Heuvel 6ed5367f6b Tweak meta methods 2015-03-16 14:16:41 +01:00
Barry vd. Heuvel 8c339bd6b0 Add actual command 2015-03-16 13:12:40 +01:00
Barry vd. Heuvel 52b9b52926 Add gist 2015-03-16 13:06:29 +01:00
Barry vd. Heuvel f909c82fcc Fix class imports 2015-03-16 12:52:26 +01:00
Barry vd. Heuvel e88c3669b7 Add note about meta file 2015-03-16 12:40:53 +01:00
Barry vd. Heuvel 5bd7eeda23 Add meta command for phpstorm 2015-03-16 12:13:15 +01:00
Barry vd. Heuvel dae0b55bef Update version
Fixes #164
2015-02-07 23:18:57 +01:00
4 changed files with 155 additions and 4 deletions
+17 -2
View File
@@ -14,11 +14,27 @@ If you don't want to generate it, you can add a pre-generated file to the root f
Note: You do need CodeIntel for Sublime Text: https://github.com/SublimeCodeIntel/SublimeCodeIntel
### New: PhpStorm Meta for Container instances
It's possible to generate a PhpStorm meta file, to [add support for factory design pattern](https://confluence.jetbrains.com/display/PhpStorm/PhpStorm+Advanced+Metadata). For Laravel, this means we can make PhpStorm understand what kind of object we are resolving from the IoC Container. For example, `events` will return ann `Illuminate\Events\Dispatcher` object, so with the meta file you can call `app('events')` and it will autocomplete the Dispatcher methods.
php artisan ide-helper:meta
app('events')->fire();
\App::make('events')->fire();
/** @var \Illuminate\Foundation\Application $app */
$app->make('events')->fire();
Pre-generated example: https://gist.github.com/barryvdh/bb6ffc5d11e0a75dba67
> Note: You might need to restart PhpStorm and make sure `.phpstorm.meta.php` is indexed.
### Automatic phpDoc generation for Laravel Facades
Require this package with composer using the following command:
composer require barryvdh/laravel-ide-helper
composer require barryvdh/laravel-ide-helper ~1.11
After updating composer, add the ServiceProvider to the providers array in app/config/app.php
@@ -52,7 +68,6 @@ You can use a in-memory sqlite driver, using the -M option.
You can choose to include helper files. This is not enabled by default, but you can override this with the --helpers (-H) option.
The Illuminate/Support/helpers.php is already set-up, but you can add/remove your own files in the config file.
### Automatic phpDocs for Models
> **Note:** Since v1.10 you need to require `doctrine/dbal: ~2.3` in your own composer.json.
+109
View File
@@ -0,0 +1,109 @@
<?php
/**
* Laravel IDE Helper Generator
*
* @author Barry vd. Heuvel <[email protected]>
* @copyright 2015 Barry vd. Heuvel / Fruitcake Studio (http://www.fruitcakestudio.nl)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link https://github.com/barryvdh/laravel-ide-helper
*/
namespace Barryvdh\LaravelIdeHelper\Console;
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
/**
* A command to generate phpstorm meta data
*
* @author Barry vd. Heuvel <[email protected]>
*/
class MetaCommand extends Command {
/**
* The console command name.
*
* @var string
*/
protected $name = 'ide-helper:meta';
protected $filename = '.phpstorm.meta.php';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Generate metadata for PhpStorm';
/** @var \Illuminate\Filesystem\Filesystem */
protected $files;
/** @var \Illuminate\View\Factory */
protected $view;
protected $methods = array(
'\Illuminate\Foundation\Application::make',
'\Illuminate\Container\Container::make',
'\App::make',
'app',
);
/**
*
* @param \Illuminate\Filesystem\Filesystem $files
* @param \Illuminate\View\Factory $view
*/
public function __construct($files, $view) {
$this->files = $files;
$this->view = $view;
parent::__construct();
}
/**
* Execute the console command.
*
* @return void
*/
public function fire()
{
$filename = $this->option('filename');
$bindings = array();
foreach ($this->laravel->getBindings() as $abstract => $options) {
try {
$concrete = $this->laravel->make($abstract);
if (is_object($concrete)) {
$bindings[$abstract] = get_class($concrete);
}
}catch (\Exception $e) {
$this->error("Cannot make $abstract: ".$e->getMessage());
}
}
$content = $this->view->make('laravel-ide-helper::meta', array(
'bindings' => $bindings,
'methods' => $this->methods,
))->render();
$written = $this->files->put($filename, $content);
if ($written !== false) {
$this->info("A new meta file was written to $filename");
} else {
$this->error("The meta file could not be created at $filename");
}
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions()
{
return array(
array('filename', 'F', InputOption::VALUE_OPTIONAL, 'The path to the meta file', $this->filename),
);
}
}
+9 -2
View File
@@ -11,8 +11,9 @@
namespace Barryvdh\LaravelIdeHelper;
use Illuminate\Support\ServiceProvider;
use Barryvdh\LaravelIdeHelper\Console\GeneratorCommand;
use Barryvdh\LaravelIdeHelper\Console\MetaCommand;
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Barryvdh\LaravelIdeHelper\Console\GeneratorCommand;
class IdeHelperServiceProvider extends ServiceProvider
{
@@ -52,8 +53,14 @@ class IdeHelperServiceProvider extends ServiceProvider
return new ModelsCommand();
}
);
$this->app['command.ide-helper.meta'] = $this->app->share(
function ($app) {
return new MetaCommand($app['files'], $app['view']);
}
);
$this->commands('command.ide-helper.generate', 'command.ide-helper.models');
$this->commands('command.ide-helper.generate', 'command.ide-helper.models', 'command.ide-helper.meta');
}
/**
+20
View File
@@ -0,0 +1,20 @@
<?= '<?php' ?> namespace PHPSTORM_META {
/**
* PhpStorm Meta file, to provide autocomplete information for PhpStorm
* Generated on <?= date("Y-m-d") ?>.
*
* @author Barry vd. Heuvel <[email protected]>
* @see https://github.com/barryvdh/laravel-ide-helper
* @noinspection PhpUnusedLocalVariableInspection
* @noinspection PhpIllegalArrayKeyTypeInspection
*/
$STATIC_METHOD_TYPES = [
<?php foreach($methods as $method): ?>
<?= $method ?>('') => [
<?php foreach($bindings as $abstract => $class): ?>
'<?= $abstract ?>' instanceof \<?= $class ?>,
<?php endforeach ?> ],
<?php endforeach ?>
];
}