mirror of
https://github.com/barryvdh/laravel-ide-helper.git
synced 2026-08-18 10:07:12 +00:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a41415f01 | ||
|
|
a7fc73e8e4 | ||
|
|
f343efa140 |
@@ -54,6 +54,7 @@
|
|||||||
- Fix type of hashed model property to `string`
|
- Fix type of hashed model property to `string`
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
- Update view "version" variable name to avoid potential conflicts
|
||||||
|
|
||||||
- Add support for EloquentBuilder generics introduced in Laravel 11.15.
|
- Add support for EloquentBuilder generics introduced in Laravel 11.15.
|
||||||
- Drop support for Laravel versions earlier than 11.15.
|
- Drop support for Laravel versions earlier than 11.15.
|
||||||
|
|||||||
@@ -33,42 +33,27 @@ Require this package with composer using the following command:
|
|||||||
composer require --dev barryvdh/laravel-ide-helper
|
composer require --dev barryvdh/laravel-ide-helper
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> If you encounter version conflicts with doctrine/dbal, please try:
|
|
||||||
> `composer require --dev barryvdh/laravel-ide-helper --with-all-dependencies`
|
|
||||||
|
|
||||||
This package makes use of [Laravels package auto-discovery mechanism](https://medium.com/@taylorotwell/package-auto-discovery-in-laravel-5-5-ea9e3ab20518), which means if you don't install dev dependencies in production, it also won't be loaded.
|
|
||||||
|
|
||||||
If for some reason you want manually control this:
|
|
||||||
- add the package to the `extra.laravel.dont-discover` key in `composer.json`, e.g.
|
|
||||||
```json
|
|
||||||
"extra": {
|
|
||||||
"laravel": {
|
|
||||||
"dont-discover": [
|
|
||||||
"barryvdh/laravel-ide-helper"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
- Add the following class to the `providers` array in `config/app.php` (`bootstrap/providers.php` for Laravel 11+):
|
|
||||||
```php
|
|
||||||
Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
|
|
||||||
```
|
|
||||||
If you want to manually load it only in non-production environments, instead you can add this to your `AppServiceProvider` with the `register()` method:
|
|
||||||
```php
|
|
||||||
public function register()
|
|
||||||
{
|
|
||||||
if ($this->app->isLocal()) {
|
|
||||||
$this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
|
|
||||||
}
|
|
||||||
// ...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
> Note: Avoid caching the configuration in your development environment, it may cause issues after installing this package; respectively clear the cache beforehand via `php artisan cache:clear` if you encounter problems when running the commands
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
### TL;DR
|
||||||
|
|
||||||
|
Run this to generate autocompletion for Facades. This creates _ide_helper.php
|
||||||
|
|
||||||
|
```
|
||||||
|
php artisan ide-helper:generate
|
||||||
|
```
|
||||||
|
|
||||||
|
Run this to add phpdocs for your models. Add -RW to Reset existing phpdocs and Write to the models directly.
|
||||||
|
```
|
||||||
|
php artisan ide-helper:models -RW
|
||||||
|
```
|
||||||
|
|
||||||
|
If you don't want the full _ide_helper.php file, you can run add `--write-eloquent-helper` to the model command to generate small version, which is required for the `@mixin \Eloquent` to be able to add the QueryBuilder methods.
|
||||||
|
|
||||||
|
If you don't want to add all the phpdocs to your Models directly, you can use `--nowrite` to create a seperate file. The `--write-mixin` option can be used to only add a `@mixin` to your models, but add the generated phpdocs in a seperate file. This avoids having the results marked as duplicate.
|
||||||
|
|
||||||
|
|
||||||
_Check out [this Laracasts video](https://laracasts.com/series/how-to-be-awesome-in-phpstorm/episodes/15) for a quick introduction/explanation!_
|
_Check out [this Laracasts video](https://laracasts.com/series/how-to-be-awesome-in-phpstorm/episodes/15) for a quick introduction/explanation!_
|
||||||
|
|
||||||
- `php artisan ide-helper:generate` - [PHPDoc generation for Laravel Facades ](#automatic-phpdoc-generation-for-laravel-facades)
|
- `php artisan ide-helper:generate` - [PHPDoc generation for Laravel Facades ](#automatic-phpdoc-generation-for-laravel-facades)
|
||||||
@@ -86,8 +71,6 @@ You can now re-generate the docs yourself (for future updates)
|
|||||||
php artisan ide-helper:generate
|
php artisan ide-helper:generate
|
||||||
```
|
```
|
||||||
|
|
||||||
> Note: `bootstrap/compiled.php` has to be cleared first, so run `php artisan clear-compiled` before generating.
|
|
||||||
|
|
||||||
This will generate the file `_ide_helper.php` which is expected to be additionally parsed by your IDE for autocomplete. You can use the config `filename` to change its name.
|
This will generate the file `_ide_helper.php` which is expected to be additionally parsed by your IDE for autocomplete. You can use the config `filename` to change its name.
|
||||||
|
|
||||||
You can configure your `composer.json` to do this each time you update your dependencies:
|
You can configure your `composer.json` to do this each time you update your dependencies:
|
||||||
@@ -149,6 +132,8 @@ The class name will be different from the model, avoiding the IDE duplicate anno
|
|||||||
|
|
||||||
> Please make sure to back up your models, before writing the info.
|
> Please make sure to back up your models, before writing the info.
|
||||||
|
|
||||||
|
> You need the _ide_helper.php file to add the QueryBuilder methods. You can add --write-eloquent-helper/-E to generate a minimal version. If this file does not exist, you will be prompted for it.
|
||||||
|
|
||||||
Writing to the models should keep the existing comments and only append new properties/methods. It will not update changed properties/methods.
|
Writing to the models should keep the existing comments and only append new properties/methods. It will not update changed properties/methods.
|
||||||
|
|
||||||
With the `--reset (-R)` option, the whole existing PHPDoc is replaced, including any comments that have been made.
|
With the `--reset (-R)` option, the whole existing PHPDoc is replaced, including any comments that have been made.
|
||||||
|
|||||||
+35
-31
@@ -14,31 +14,34 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A helper file for Laravel, to provide autocomplete information to your IDE
|
* A helper file for Laravel, to provide autocomplete information to your IDE
|
||||||
* Generated for Laravel <?= $version ?>.
|
* Generated for Laravel <?= app()->version() ?>.
|
||||||
*
|
*
|
||||||
* This file should not be included in your code, only analyzed by your IDE!
|
* This file should not be included in your code, only analyzed by your IDE!
|
||||||
*
|
*
|
||||||
* @author Barry vd. Heuvel <[email protected]>
|
* @author Barry vd. Heuvel <[email protected]>
|
||||||
* @see https://github.com/barryvdh/laravel-ide-helper
|
* @see https://github.com/barryvdh/laravel-ide-helper
|
||||||
*/
|
*/
|
||||||
|
<?php
|
||||||
|
$s1 = ' ';
|
||||||
|
$s2 = $s1 . $s1;
|
||||||
|
$s3 = $s1 . $s2;
|
||||||
|
?>
|
||||||
<?php foreach ($namespaces_by_extends_ns as $namespace => $aliases) : ?>
|
<?php foreach ($namespaces_by_extends_ns as $namespace => $aliases) : ?>
|
||||||
namespace <?= $namespace === '__root' ? '' : trim($namespace, '\\') ?> {
|
namespace <?= $namespace === '__root' ? '' : trim($namespace, '\\') ?> {
|
||||||
<?php foreach ($aliases as $alias) : ?>
|
<?php foreach ($aliases as $alias) : ?>
|
||||||
<?= trim($alias->getDocComment(' ')) ?>
|
<?php echo trim($alias->getDocComment($s1)) . "\n{$s1}" . $alias->getClassType() ?> <?= $alias->getExtendsClass() ?> {
|
||||||
<?= $alias->getClassType() ?> <?= $alias->getExtendsClass() ?> {
|
|
||||||
<?php foreach ($alias->getMethods() as $method) : ?>
|
<?php foreach ($alias->getMethods() as $method) : ?>
|
||||||
<?= trim($method->getDocComment(' ')) ?>
|
<?= trim($method->getDocComment($s2)) . "\n{$s2}" ?>public static function <?= $method->getName() ?>(<?= $method->getParamsWithDefault() ?>)
|
||||||
public static function <?= $method->getName() ?>(<?= $method->getParamsWithDefault() ?>)
|
|
||||||
{<?php if ($method->getDeclaringClass() !== $method->getRoot()) : ?>
|
{<?php if ($method->getDeclaringClass() !== $method->getRoot()) : ?>
|
||||||
//Method inherited from <?= $method->getDeclaringClass() ?>
|
<?= "\n" . $s3?>//Method inherited from <?= $method->getDeclaringClass() ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<?php if ($method->isInstanceCall()) : ?>
|
<?php if ($method->isInstanceCall()) : ?>
|
||||||
/** @var <?=$method->getRoot()?> $instance */
|
<?= $s3 ?>/** @var <?=$method->getRoot()?> $instance */
|
||||||
<?php endif?>
|
<?php endif?>
|
||||||
<?= $method->shouldReturn() ? 'return ' : '' ?><?= $method->getRootMethodCall() ?>;
|
<?= $s3 . ($method->shouldReturn() ? 'return ' : '') ?><?= $method->getRootMethodCall() ?>;
|
||||||
}
|
}
|
||||||
|
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
}
|
}
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
@@ -48,26 +51,27 @@ namespace <?= $namespace === '__root' ? '' : trim($namespace, '\\') ?> {
|
|||||||
|
|
||||||
<?php foreach ($namespaces_by_alias_ns as $namespace => $aliases) : ?>
|
<?php foreach ($namespaces_by_alias_ns as $namespace => $aliases) : ?>
|
||||||
namespace <?= $namespace === '__root' ? '' : trim($namespace, '\\') ?> {
|
namespace <?= $namespace === '__root' ? '' : trim($namespace, '\\') ?> {
|
||||||
<?php foreach ($aliases as $alias) : ?>
|
<?php foreach ($aliases as $alias) : ?>
|
||||||
<?php if ($alias->getExtendsNamespace() === '\Illuminate\Database\Eloquent') : ?>
|
<?php if ($alias->getExtendsNamespace() === '\Illuminate\Database\Eloquent') : ?>
|
||||||
<?= $alias->getPhpDocTemplates(' ') ?>
|
<?= "\n" . $alias->getPhpDocTemplates($s1) . "\n" ?>
|
||||||
<?php endif?>
|
<?php endif?>
|
||||||
<?= $alias->getClassType() ?> <?= $alias->getShortName() ?> extends <?= $alias->getExtends() ?> {<?php if ($alias->getExtendsNamespace() === '\Illuminate\Database\Eloquent') : ?>
|
<?= $s1 . $alias->getClassType() ?> <?= $alias->getShortName() ?> extends <?= $alias->getExtends() ?> {<?php if ($alias->getExtendsNamespace() === '\Illuminate\Database\Eloquent') : ?>
|
||||||
<?php foreach ($alias->getMethods() as $method) : ?>
|
<?php foreach ($alias->getMethods() as $method) : ?>
|
||||||
<?= trim($method->getDocComment(' ')) ?>
|
<?= $s2 . trim($method->getDocComment($s2)) . "\n" ?>
|
||||||
public static function <?= $method->getName() ?>(<?= $method->getParamsWithDefault() ?>)
|
<?= $s2 ?>public static function <?= $method->getName() ?>(<?= $method->getParamsWithDefault() ?>)
|
||||||
{<?php if ($method->getDeclaringClass() !== $method->getRoot()) : ?>
|
<?= $s2?>{<?php if ($method->getDeclaringClass() !== $method->getRoot()) : ?>
|
||||||
//Method inherited from <?= $method->getDeclaringClass() ?>
|
<?= $s2 ?>//Method inherited from <?= $method->getDeclaringClass() ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<?php if ($method->isInstanceCall()) : ?>
|
<?php if ($method->isInstanceCall()) : ?>
|
||||||
/** @var <?=$method->getRoot()?> $instance */
|
<?= $s3 ?>/** @var <?=$method->getRoot()?> $instance */
|
||||||
<?php endif?>
|
<?php endif?>
|
||||||
<?= $method->shouldReturn() ? 'return ' : '' ?><?= $method->getRootMethodCall() ?>;
|
<?= $s3 . ($method->shouldReturn() ? 'return ' : '') ?><?= $method->getRootMethodCall() ?>;
|
||||||
}
|
<?= $s2 ?>}
|
||||||
<?php endforeach; ?>
|
|
||||||
<?php endif; ?>}
|
<?php endforeach; ?>
|
||||||
<?php endforeach; ?>
|
<?php endif; ?>}
|
||||||
|
<?php endforeach; ?>
|
||||||
}
|
}
|
||||||
|
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
|
|||||||
@@ -84,7 +84,6 @@ class Generator
|
|||||||
->with('namespaces_by_alias_ns', $this->getAliasesByAliasNamespace())
|
->with('namespaces_by_alias_ns', $this->getAliasesByAliasNamespace())
|
||||||
->with('real_time_facades', $this->getRealTimeFacades())
|
->with('real_time_facades', $this->getRealTimeFacades())
|
||||||
->with('helpers', $this->helpers)
|
->with('helpers', $this->helpers)
|
||||||
->with('version', $app->version())
|
|
||||||
->with('include_fluent', $this->config->get('ide-helper.include_fluent', true))
|
->with('include_fluent', $this->config->get('ide-helper.include_fluent', true))
|
||||||
->with('factories', $this->config->get('ide-helper.include_factory_builders') ? Factories::all() : [])
|
->with('factories', $this->config->get('ide-helper.include_factory_builders') ? Factories::all() : [])
|
||||||
->render();
|
->render();
|
||||||
@@ -111,7 +110,6 @@ class Generator
|
|||||||
->with('namespaces_by_alias_ns', ['__root' => [$alias]])
|
->with('namespaces_by_alias_ns', ['__root' => [$alias]])
|
||||||
->with('real_time_facades', [])
|
->with('real_time_facades', [])
|
||||||
->with('helpers', '')
|
->with('helpers', '')
|
||||||
->with('version', $app->version())
|
|
||||||
->with('include_fluent', false)
|
->with('include_fluent', false)
|
||||||
->with('factories', [])
|
->with('factories', [])
|
||||||
->render();
|
->render();
|
||||||
|
|||||||
Reference in New Issue
Block a user