mirror of
https://github.com/barryvdh/laravel-ide-helper.git
synced 2026-08-18 18:13:11 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8740a9a158 | ||
|
|
d344cdc842 | ||
|
|
5e411ef104 | ||
|
|
499a2113b3 | ||
|
|
f8a8cb18e0 | ||
|
|
16eb4f65ee | ||
|
|
0edf8f750e | ||
|
|
1b15d2930b | ||
|
|
3668e3821a | ||
|
|
7b4cef1ea4 | ||
|
|
cd2a71d43c | ||
|
|
c9132b28a6 | ||
|
|
8ab6e0536b | ||
|
|
87ebe458e9 | ||
|
|
9ef14f83be | ||
|
|
39c148ad42 | ||
|
|
2b3c9a2449 | ||
|
|
725711022b | ||
|
|
881f77156c | ||
|
|
0fad511954 | ||
|
|
754bb4d075 | ||
|
|
bcb881b20d | ||
|
|
d00600d769 | ||
|
|
858dd40844 | ||
|
|
4cd11a4d33 | ||
|
|
5439781e7c | ||
|
|
190bf07c05 | ||
|
|
3d7f124089 | ||
|
|
32df0a3bc6 | ||
|
|
2f8283a746 | ||
|
|
2a63b31475 | ||
|
|
494d1593c8 | ||
|
|
e513fb34dc | ||
|
|
5db82752ef | ||
|
|
1f555bc194 | ||
|
|
b0ce5325de | ||
|
|
aeae59d0af | ||
|
|
001719245c | ||
|
|
99226c92b7 | ||
|
|
dda63bf8df | ||
|
|
3d7f45479e | ||
|
|
7905dd3926 | ||
|
|
8d135a1dea | ||
|
|
858e730c00 | ||
|
|
2ab961e734 | ||
|
|
981ff45b43 | ||
|
|
8174730714 | ||
|
|
ae5b623cf2 | ||
|
|
eff51d41b3 | ||
|
|
b14d983f74 | ||
|
|
1fdc866fb0 | ||
|
|
d7359b86d4 | ||
|
|
5d8d93273f | ||
|
|
30e5300e49 | ||
|
|
593e0d4aa7 | ||
|
|
e7d4cb322f | ||
|
|
5318f485e2 | ||
|
|
7db1843473 | ||
|
|
1989d0e794 | ||
|
|
09db8c9a76 | ||
|
|
4aa43fa613 | ||
|
|
d55b48476e | ||
|
|
45e84b9070 | ||
|
|
f472c26601 | ||
|
|
1deadced46 | ||
|
|
e1d1352ac5 | ||
|
|
65e3278c86 | ||
|
|
efd7e51566 | ||
|
|
2a5dda6a27 | ||
|
|
6577af8464 | ||
|
|
6c7bc371f9 | ||
|
|
217b8989c2 | ||
|
|
c003eb40d7 | ||
|
|
1a3d32f0d1 | ||
|
|
bd733b7b7c | ||
|
|
93630fdf62 | ||
|
|
f64ed52205 | ||
|
|
ba28841870 | ||
|
|
b02a0bc6c9 | ||
|
|
a665961fb9 | ||
|
|
83852e9de0 | ||
|
|
d2f29d997b | ||
|
|
cbacb28f19 | ||
|
|
930e5bd301 | ||
|
|
930d258cd4 | ||
|
|
94248adae8 | ||
|
|
50ecd8b815 | ||
|
|
1b70277203 | ||
|
|
87a03fd9c4 | ||
|
|
b8a73bcab9 | ||
|
|
0556991c69 | ||
|
|
be78ac62cd | ||
|
|
265f00c322 | ||
|
|
bbd96d3616 | ||
|
|
8d913089db | ||
|
|
9a2588cb3a | ||
|
|
e7fa36bdc3 | ||
|
|
b1e868c5fc | ||
|
|
203d60dc8c | ||
|
|
f5275b700a | ||
|
|
046a9bcc77 | ||
|
|
c6191830ab | ||
|
|
cfff7721bc | ||
|
|
4691bc5fbd | ||
|
|
b1b05b694b | ||
|
|
98d6087a1e | ||
|
|
c7b7ebf1b5 | ||
|
|
17982029f0 | ||
|
|
bda5120e9a | ||
|
|
d961482d22 | ||
|
|
8852b1ca9d | ||
|
|
b644e48801 | ||
|
|
09610da602 | ||
|
|
2d56afce8e | ||
|
|
8ab907f219 | ||
|
|
e29e035135 | ||
|
|
7b2786ac2b | ||
|
|
76bd86dbaf | ||
|
|
7b067198a6 | ||
|
|
b6f525b320 | ||
|
|
d65f1cedcd | ||
|
|
df6b1b6f82 | ||
|
|
76a1952c41 | ||
|
|
d45b02efb1 | ||
|
|
b0abafb8c7 | ||
|
|
6b0e9ec48d | ||
|
|
721a7cd3f7 |
+4
-8
@@ -1,10 +1,9 @@
|
|||||||
language: php
|
language: php
|
||||||
|
|
||||||
php:
|
php:
|
||||||
- 5.5
|
|
||||||
- 5.6
|
|
||||||
- 7.0
|
- 7.0
|
||||||
- 7.1
|
- 7.1
|
||||||
|
- 7.2
|
||||||
|
|
||||||
# This triggers builds to run on the new TravisCI infrastructure.
|
# This triggers builds to run on the new TravisCI infrastructure.
|
||||||
# See: http://docs.travis-ci.com/user/workers/container-based-infrastructure/
|
# See: http://docs.travis-ci.com/user/workers/container-based-infrastructure/
|
||||||
@@ -17,15 +16,12 @@ cache:
|
|||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- php: 5.5
|
- php: 7.0
|
||||||
env: 'COMPOSER_FLAGS="--prefer-stable --prefer-lowest"'
|
env: 'COMPOSER_FLAGS="--prefer-stable --prefer-lowest"'
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- travis_retry composer update ${COMPOSER_FLAGS} --no-interaction --prefer-dist
|
- travis_wait 20 travis_retry composer update ${COMPOSER_FLAGS} --no-interaction --prefer-dist
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- vendor/bin/phpcs --standard=psr2 src/
|
- vendor/bin/phpcs --standard=psr2 src/
|
||||||
- vendor/bin/phpunit --coverage-text --coverage-clover=coverage.clover
|
- vendor/bin/phpunit
|
||||||
|
|
||||||
after_script:
|
|
||||||
- if [[ $TRAVIS_PHP_VERSION != 'hhvm' && $TRAVIS_PHP_VERSION != '7.0' ]]; then php vendor/bin/ocular code-coverage:upload --format=php-clover coverage.clover; fi
|
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
# The MIT License (MIT)
|
# The MIT License (MIT)
|
||||||
|
|
||||||
Copyright (c) 2016 Barry vd. Heuvel <barryvdh@gmail.com>
|
Copyright (c) Barry vd. Heuvel <barryvdh@gmail.com>
|
||||||
|
|
||||||
> Permission is hereby granted, free of charge, to any person obtaining a copy
|
> Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
> of this software and associated documentation files (the "Software"), to deal
|
> of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -18,4 +18,4 @@ Copyright (c) 2016 Barry vd. Heuvel <[email protected]>
|
|||||||
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
> THE SOFTWARE.
|
> THE SOFTWARE.
|
||||||
|
|||||||
+17
-18
@@ -10,23 +10,21 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.4.0",
|
"php": ">=7",
|
||||||
"illuminate/support": "^5.0,<5.7",
|
"illuminate/support": "^5.5|^6",
|
||||||
"illuminate/console": "^5.0,<5.7",
|
"illuminate/console": "^5.5|^6",
|
||||||
"illuminate/filesystem": "^5.0,<5.7",
|
"illuminate/filesystem": "^5.5|^6",
|
||||||
"barryvdh/reflection-docblock": "^2.0.4",
|
"barryvdh/reflection-docblock": "^2.0.6",
|
||||||
"symfony/class-loader": "^2.3|^3.0"
|
"composer/composer": "^1.6",
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"illuminate/config": "^5.0,<5.7",
|
|
||||||
"illuminate/view": "^5.0,<5.7",
|
|
||||||
"phpunit/phpunit" : "4.*",
|
|
||||||
"scrutinizer/ocular": "~1.1",
|
|
||||||
"squizlabs/php_codesniffer": "~2.3",
|
|
||||||
"doctrine/dbal": "~2.3"
|
"doctrine/dbal": "~2.3"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"require-dev": {
|
||||||
"doctrine/dbal": "Load information from the database about models for phpdocs (~2.3)"
|
"illuminate/config": "^5.5|^6",
|
||||||
|
"illuminate/view": "^5.5|^6",
|
||||||
|
"phpro/grumphp": "^0.14",
|
||||||
|
"phpunit/phpunit" : "4.*",
|
||||||
|
"scrutinizer/ocular": "~1.1",
|
||||||
|
"squizlabs/php_codesniffer": "^3"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
@@ -35,16 +33,17 @@
|
|||||||
},
|
},
|
||||||
"autoload-dev": {
|
"autoload-dev": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
":vendor\\:package_name\\": "tests"
|
"Barryvdh\\LaravelIdeHelper\\": "tests"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "phpunit",
|
"test": "phpunit",
|
||||||
"cs": "phpcs --standard=psr2 src/"
|
"check-style": "phpcs -p --standard=PSR2 src/",
|
||||||
|
"fix-style": "phpcbf -p --standard=PSR2 src/"
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "2.3-dev"
|
"dev-master": "2.6-dev"
|
||||||
},
|
},
|
||||||
"laravel": {
|
"laravel": {
|
||||||
"providers": [
|
"providers": [
|
||||||
|
|||||||
+34
-18
@@ -38,6 +38,21 @@ return array(
|
|||||||
|
|
||||||
'write_model_magic_where' => true,
|
'write_model_magic_where' => true,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Write Eloquent Model Mixins
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This will add the necessary DocBlock mixins to the model class
|
||||||
|
| contained in the Laravel Framework. This helps the IDE with
|
||||||
|
| auto-completion.
|
||||||
|
|
|
||||||
|
| Please be aware that this setting changes a file within the /vendor directory.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'write_eloquent_model_mixins' => false,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Helper files to include
|
| Helper files to include
|
||||||
@@ -83,18 +98,7 @@ return array(
|
|||||||
'Session' => array('Illuminate\Session\Store'),
|
'Session' => array('Illuminate\Session\Store'),
|
||||||
),
|
),
|
||||||
|
|
||||||
'magic' => array(
|
'magic' => array(),
|
||||||
'Log' => array(
|
|
||||||
'debug' => 'Monolog\Logger::addDebug',
|
|
||||||
'info' => 'Monolog\Logger::addInfo',
|
|
||||||
'notice' => 'Monolog\Logger::addNotice',
|
|
||||||
'warning' => 'Monolog\Logger::addWarning',
|
|
||||||
'error' => 'Monolog\Logger::addError',
|
|
||||||
'critical' => 'Monolog\Logger::addCritical',
|
|
||||||
'alert' => 'Monolog\Logger::addAlert',
|
|
||||||
'emergency' => 'Monolog\Logger::addEmergency',
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@@ -153,13 +157,13 @@ return array(
|
|||||||
|
|
|
|
||||||
| For example, normally you would see this:
|
| For example, normally you would see this:
|
||||||
|
|
|
|
||||||
| * @property \Carbon\Carbon $created_at
|
| * @property \Illuminate\Support\Carbon $created_at
|
||||||
| * @property \Carbon\Carbon $updated_at
|
| * @property \Illuminate\Support\Carbon $updated_at
|
||||||
|
|
|
|
||||||
| With this enabled, the properties will be this:
|
| With this enabled, the properties will be this:
|
||||||
|
|
|
|
||||||
| * @property \Carbon\Carbon $createdAt
|
| * @property \Illuminate\Support\Carbon $createdAt
|
||||||
| * @property \Carbon\Carbon $updatedAt
|
| * @property \Illuminate\Support\Carbon $updatedAt
|
||||||
|
|
|
|
||||||
| Note, it is currently an all-or-nothing option.
|
| Note, it is currently an all-or-nothing option.
|
||||||
|
|
|
|
||||||
@@ -174,8 +178,20 @@ return array(
|
|||||||
| Cast the given "real type" to the given "type".
|
| Cast the given "real type" to the given "type".
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
'type_overrides' => array(
|
'type_overrides' => array(
|
||||||
'integer' => 'int',
|
'integer' => 'int',
|
||||||
'boolean' => 'bool',
|
'boolean' => 'bool',
|
||||||
),
|
),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Include DocBlocks from classes
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Include DocBlocks from classes to allow additional code inspection for
|
||||||
|
| magic methods and properties.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'include_class_docblocks' => false,
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
parameters:
|
||||||
|
git_dir: .
|
||||||
|
bin_dir: vendor/bin
|
||||||
|
tasks:
|
||||||
|
phpunit:
|
||||||
|
config_file: ~
|
||||||
|
testsuite: ~
|
||||||
|
group: []
|
||||||
|
always_execute: false
|
||||||
|
phpcs:
|
||||||
|
standard: PSR2
|
||||||
|
warning_severity: ~
|
||||||
|
ignore_patterns:
|
||||||
|
- tests/
|
||||||
|
triggered_by: [php]
|
||||||
+2
-9
@@ -10,7 +10,7 @@
|
|||||||
processIsolation="false"
|
processIsolation="false"
|
||||||
stopOnFailure="false">
|
stopOnFailure="false">
|
||||||
<testsuites>
|
<testsuites>
|
||||||
<testsuite name=":vendor Test Suite">
|
<testsuite name="Unit Tests">
|
||||||
<directory>tests</directory>
|
<directory>tests</directory>
|
||||||
</testsuite>
|
</testsuite>
|
||||||
</testsuites>
|
</testsuites>
|
||||||
@@ -19,11 +19,4 @@
|
|||||||
<directory suffix=".php">src/</directory>
|
<directory suffix=".php">src/</directory>
|
||||||
</whitelist>
|
</whitelist>
|
||||||
</filter>
|
</filter>
|
||||||
<logging>
|
</phpunit>
|
||||||
<log type="tap" target="build/report.tap"/>
|
|
||||||
<log type="junit" target="build/report.junit.xml"/>
|
|
||||||
<log type="coverage-html" target="build/coverage" charset="UTF-8" yui="true" highlight="true"/>
|
|
||||||
<log type="coverage-text" target="build/coverage.txt"/>
|
|
||||||
<log type="coverage-clover" target="build/logs/clover.xml"/>
|
|
||||||
</logging>
|
|
||||||
</phpunit>
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
## Laravel 5 IDE Helper Generator
|
## Laravel IDE Helper Generator
|
||||||
|
|
||||||
[![Latest Version on Packagist][ico-version]][link-packagist]
|
[![Latest Version on Packagist][ico-version]][link-packagist]
|
||||||
[![Software License][ico-license]](LICENSE.md)
|
[![Software License][ico-license]](LICENSE.md)
|
||||||
@@ -29,7 +29,7 @@ Note: You do need CodeComplice for Sublime Text: https://github.com/spectacles/C
|
|||||||
Require this package with composer using the following command:
|
Require this package with composer using the following command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
composer require barryvdh/laravel-ide-helper
|
composer require --dev barryvdh/laravel-ide-helper
|
||||||
```
|
```
|
||||||
|
|
||||||
After updating composer, add the service provider to the `providers` array in `config/app.php`
|
After updating composer, add the service provider to the `providers` array in `config/app.php`
|
||||||
@@ -37,12 +37,7 @@ After updating composer, add the service provider to the `providers` array in `c
|
|||||||
```php
|
```php
|
||||||
Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
|
Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
|
||||||
```
|
```
|
||||||
|
**Laravel 5.5** uses Package Auto-Discovery, so doesn't require you to manually add the ServiceProvider.
|
||||||
To install this package on only development systems, add the `--dev` flag to your composer command:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
composer require --dev barryvdh/laravel-ide-helper
|
|
||||||
```
|
|
||||||
|
|
||||||
In Laravel, instead of adding the service provider in the `config/app.php` file, you can add the following code to your `app/Providers/AppServiceProvider.php` file, within the `register()` method:
|
In Laravel, instead of adding the service provider in the `config/app.php` file, you can add the following code to your `app/Providers/AppServiceProvider.php` file, within the `register()` method:
|
||||||
|
|
||||||
@@ -66,7 +61,7 @@ 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 (and `php artisan optimize` after).
|
Note: `bootstrap/compiled.php` has to be cleared first, so run `php artisan clear-compiled` before generating.
|
||||||
|
|
||||||
You can configure your composer.json to do this after each commit:
|
You can configure your composer.json to do this after each commit:
|
||||||
|
|
||||||
@@ -75,8 +70,7 @@ You can configure your composer.json to do this after each commit:
|
|||||||
"post-update-cmd": [
|
"post-update-cmd": [
|
||||||
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
|
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
|
||||||
"php artisan ide-helper:generate",
|
"php artisan ide-helper:generate",
|
||||||
"php artisan ide-helper:meta",
|
"php artisan ide-helper:meta"
|
||||||
"php artisan optimize"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
```
|
```
|
||||||
@@ -97,11 +91,11 @@ The `Illuminate/Support/helpers.php` is already set up, but you can add/remove y
|
|||||||
|
|
||||||
### Automatic phpDocs for models
|
### Automatic phpDocs for models
|
||||||
|
|
||||||
> You need to require `doctrine/dbal: ~2.3` in your own composer.json to get database columns.
|
> You need to add `doctrine/dbal: ~2.3` to require-dev in your own composer.json to get database columns.
|
||||||
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
composer require doctrine/dbal
|
composer require --dev doctrine/dbal
|
||||||
```
|
```
|
||||||
|
|
||||||
If you don't want to write your properties yourself, you can use the command `php artisan ide-helper:models` to generate
|
If you don't want to write your properties yourself, you can use the command `php artisan ide-helper:models` to generate
|
||||||
@@ -122,8 +116,8 @@ php artisan ide-helper:models Post
|
|||||||
* @property integer $author_id
|
* @property integer $author_id
|
||||||
* @property string $title
|
* @property string $title
|
||||||
* @property string $text
|
* @property string $text
|
||||||
* @property \Carbon\Carbon $created_at
|
* @property \Illuminate\Support\Carbon $created_at
|
||||||
* @property \Carbon\Carbon $updated_at
|
* @property \Illuminate\Support\Carbon $updated_at
|
||||||
* @property-read \User $author
|
* @property-read \User $author
|
||||||
* @property-read \Illuminate\Database\Eloquent\Collection|\Comment[] $comments
|
* @property-read \Illuminate\Database\Eloquent\Collection|\Comment[] $comments
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,4 +1,14 @@
|
|||||||
<?= '<?php' ?>
|
<?= '<?php' ?>
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @var \Barryvdh\LaravelIdeHelper\Alias[][] $namespaces_by_alias_ns
|
||||||
|
* @var \Barryvdh\LaravelIdeHelper\Alias[][] $namespaces_by_extends_ns
|
||||||
|
* @var bool $include_fluent
|
||||||
|
* @var string $helpers
|
||||||
|
*/
|
||||||
|
?>
|
||||||
|
|
||||||
|
// @formatter:off
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A helper file for Laravel 5, to provide autocomplete information to your IDE
|
* A helper file for Laravel 5, to provide autocomplete information to your IDE
|
||||||
@@ -15,6 +25,7 @@
|
|||||||
namespace <?= $namespace == '__root' ? '' : trim($namespace, '\\') ?> {
|
namespace <?= $namespace == '__root' ? '' : trim($namespace, '\\') ?> {
|
||||||
<?php foreach($aliases as $alias): ?>
|
<?php foreach($aliases as $alias): ?>
|
||||||
|
|
||||||
|
<?= trim($alias->getDocComment(' ')) ?>
|
||||||
<?= $alias->getClassType() ?> <?= $alias->getExtendsClass() ?> {
|
<?= $alias->getClassType() ?> <?= $alias->getExtendsClass() ?> {
|
||||||
<?php foreach($alias->getMethods() as $method): ?>
|
<?php foreach($alias->getMethods() as $method): ?>
|
||||||
|
|
||||||
@@ -25,7 +36,10 @@ namespace <?= $namespace == '__root' ? '' : trim($namespace, '\\') ?> {
|
|||||||
//Method inherited from <?= $method->getDeclaringClass() ?>
|
//Method inherited from <?= $method->getDeclaringClass() ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<?= $method->shouldReturn() ? 'return ': '' ?><?= $method->getRoot() ?>::<?= $method->getName() ?>(<?= $method->getParams() ?>);
|
<?php if($method->isInstanceCall()):?>
|
||||||
|
/** @var <?=$method->getRoot()?> $instance */
|
||||||
|
<?php endif?>
|
||||||
|
<?= $method->shouldReturn() ? 'return ': '' ?><?= $method->getRootMethodCall() ?>;
|
||||||
}
|
}
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
}
|
}
|
||||||
@@ -46,8 +60,11 @@ namespace <?= $namespace == '__root' ? '' : trim($namespace, '\\') ?> {
|
|||||||
|
|
||||||
//Method inherited from <?= $method->getDeclaringClass() ?>
|
//Method inherited from <?= $method->getDeclaringClass() ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<?= $method->shouldReturn() ? 'return ': '' ?><?= $method->getRoot() ?>::<?= $method->getName() ?>(<?= $method->getParams() ?>);
|
<?php if($method->isInstanceCall()):?>
|
||||||
|
/** @var <?=$method->getRoot()?> $instance */
|
||||||
|
<?php endif?>
|
||||||
|
<?= $method->shouldReturn() ? 'return ': '' ?><?= $method->getRootMethodCall() ?>;
|
||||||
}
|
}
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
<?php endif; ?>}
|
<?php endif; ?>}
|
||||||
@@ -71,7 +88,7 @@ namespace Illuminate\Support {
|
|||||||
* @method Fluent charset(string $charset) Add the character set modifier
|
* @method Fluent charset(string $charset) Add the character set modifier
|
||||||
* @method Fluent collation(string $collation) Add the collation modifier
|
* @method Fluent collation(string $collation) Add the collation modifier
|
||||||
* @method Fluent comment(string $comment) Add comment
|
* @method Fluent comment(string $comment) Add comment
|
||||||
* @method Fluent default(mixed $value) Add the default modifier
|
* @method Fluent default($value) Add the default modifier
|
||||||
* @method Fluent first() Select first row
|
* @method Fluent first() Select first row
|
||||||
* @method Fluent index(string $name = null) Add the in dex clause
|
* @method Fluent index(string $name = null) Add the in dex clause
|
||||||
* @method Fluent on(string $table) `on` of a foreign key
|
* @method Fluent on(string $table) `on` of a foreign key
|
||||||
@@ -79,10 +96,11 @@ namespace Illuminate\Support {
|
|||||||
* @method Fluent onUpdate(string $action) `on update` of a foreign key
|
* @method Fluent onUpdate(string $action) `on update` of a foreign key
|
||||||
* @method Fluent primary() Add the primary key modifier
|
* @method Fluent primary() Add the primary key modifier
|
||||||
* @method Fluent references(string $column) `references` of a foreign key
|
* @method Fluent references(string $column) `references` of a foreign key
|
||||||
* @method Fluent nullable() Add the nullable modifier
|
* @method Fluent nullable(bool $value = true) Add the nullable modifier
|
||||||
* @method Fluent unique(string $name = null) Add unique index clause
|
* @method Fluent unique(string $name = null) Add unique index clause
|
||||||
* @method Fluent unsigned() Add the unsigned modifier
|
* @method Fluent unsigned() Add the unsigned modifier
|
||||||
* @method Fluent useCurrent() Add the default timestamp value
|
* @method Fluent useCurrent() Add the default timestamp value
|
||||||
|
* @method Fluent change() Add the change modifier
|
||||||
*/
|
*/
|
||||||
class Fluent {}
|
class Fluent {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
<?= '<?php' ?>
|
<?= '<?php' ?>
|
||||||
|
|
||||||
|
// @formatter:off
|
||||||
|
|
||||||
namespace PHPSTORM_META {
|
namespace PHPSTORM_META {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+138
-21
@@ -10,6 +10,14 @@
|
|||||||
|
|
||||||
namespace Barryvdh\LaravelIdeHelper;
|
namespace Barryvdh\LaravelIdeHelper;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
use ReflectionClass;
|
||||||
|
use Barryvdh\Reflection\DocBlock;
|
||||||
|
use Barryvdh\Reflection\DocBlock\Context;
|
||||||
|
use Barryvdh\Reflection\DocBlock\Tag\MethodTag;
|
||||||
|
use Illuminate\Config\Repository as ConfigRepository;
|
||||||
|
use Barryvdh\Reflection\DocBlock\Serializer as DocBlockSerializer;
|
||||||
|
|
||||||
class Alias
|
class Alias
|
||||||
{
|
{
|
||||||
protected $alias;
|
protected $alias;
|
||||||
@@ -27,18 +35,24 @@ class Alias
|
|||||||
protected $valid = false;
|
protected $valid = false;
|
||||||
protected $magicMethods = array();
|
protected $magicMethods = array();
|
||||||
protected $interfaces = array();
|
protected $interfaces = array();
|
||||||
|
protected $phpdoc = null;
|
||||||
|
|
||||||
|
/** @var ConfigRepository */
|
||||||
|
protected $config;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $alias
|
* @param ConfigRepository $config
|
||||||
* @param string $facade
|
* @param string $alias
|
||||||
* @param array $magicMethods
|
* @param string $facade
|
||||||
* @param array $interfaces
|
* @param array $magicMethods
|
||||||
|
* @param array $interfaces
|
||||||
*/
|
*/
|
||||||
public function __construct($alias, $facade, $magicMethods = array(), $interfaces = array())
|
public function __construct($config, $alias, $facade, $magicMethods = array(), $interfaces = array())
|
||||||
{
|
{
|
||||||
$this->alias = $alias;
|
$this->alias = $alias;
|
||||||
$this->magicMethods = $magicMethods;
|
$this->magicMethods = $magicMethods;
|
||||||
$this->interfaces = $interfaces;
|
$this->interfaces = $interfaces;
|
||||||
|
$this->config = $config;
|
||||||
|
|
||||||
// Make the class absolute
|
// Make the class absolute
|
||||||
$facade = '\\' . ltrim($facade, '\\');
|
$facade = '\\' . ltrim($facade, '\\');
|
||||||
@@ -53,10 +67,17 @@ class Alias
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->addClass($this->root);
|
$this->addClass($this->root);
|
||||||
|
$this->detectFake();
|
||||||
$this->detectNamespace();
|
$this->detectNamespace();
|
||||||
$this->detectClassType();
|
$this->detectClassType();
|
||||||
$this->detectExtendsNamespace();
|
$this->detectExtendsNamespace();
|
||||||
|
|
||||||
|
if (!empty($this->namespace)) {
|
||||||
|
//Create a DocBlock and serializer instance
|
||||||
|
$this->phpdoc = new DocBlock(new ReflectionClass($alias), new Context($this->namespace));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if ($facade === '\Illuminate\Database\Eloquent\Model') {
|
if ($facade === '\Illuminate\Database\Eloquent\Model') {
|
||||||
$this->usedMethods = array('decrement', 'increment');
|
$this->usedMethods = array('decrement', 'increment');
|
||||||
}
|
}
|
||||||
@@ -107,7 +128,7 @@ class Alias
|
|||||||
{
|
{
|
||||||
return $this->extends;
|
return $this->extends;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the class short name which this alias extends
|
* Get the class short name which this alias extends
|
||||||
*
|
*
|
||||||
@@ -117,7 +138,7 @@ class Alias
|
|||||||
{
|
{
|
||||||
return $this->extendsClass;
|
return $this->extendsClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the namespace of the class which this alias extends
|
* Get the namespace of the class which this alias extends
|
||||||
*
|
*
|
||||||
@@ -158,15 +179,43 @@ class Alias
|
|||||||
/**
|
/**
|
||||||
* Get the methods found by this Alias
|
* Get the methods found by this Alias
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array|Method[]
|
||||||
*/
|
*/
|
||||||
public function getMethods()
|
public function getMethods()
|
||||||
{
|
{
|
||||||
|
if (count($this->methods) > 0) {
|
||||||
|
return $this->methods;
|
||||||
|
}
|
||||||
|
|
||||||
$this->addMagicMethods();
|
$this->addMagicMethods();
|
||||||
$this->detectMethods();
|
$this->detectMethods();
|
||||||
return $this->methods;
|
return $this->methods;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect class returned by ::fake()
|
||||||
|
*/
|
||||||
|
protected function detectFake()
|
||||||
|
{
|
||||||
|
$facade = $this->facade;
|
||||||
|
|
||||||
|
if (!method_exists($facade, 'fake')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$real = $facade::getFacadeRoot();
|
||||||
|
|
||||||
|
try {
|
||||||
|
$facade::fake();
|
||||||
|
$fake = $facade::getFacadeRoot();
|
||||||
|
if ($fake !== $real) {
|
||||||
|
$this->addClass(get_class($fake));
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
$facade::swap($real);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Detect the namespace
|
* Detect the namespace
|
||||||
*/
|
*/
|
||||||
@@ -180,7 +229,7 @@ class Alias
|
|||||||
$this->short = $this->alias;
|
$this->short = $this->alias;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Detect the extends namespace
|
* Detect the extends namespace
|
||||||
*/
|
*/
|
||||||
@@ -267,13 +316,13 @@ class Alias
|
|||||||
{
|
{
|
||||||
foreach ($this->magicMethods as $magic => $real) {
|
foreach ($this->magicMethods as $magic => $real) {
|
||||||
list($className, $name) = explode('::', $real);
|
list($className, $name) = explode('::', $real);
|
||||||
if (!class_exists($className) && !interface_exists($className)) {
|
if ((!class_exists($className) && !interface_exists($className)) || !method_exists($className, $name)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$method = new \ReflectionMethod($className, $name);
|
$method = new \ReflectionMethod($className, $name);
|
||||||
$class = new \ReflectionClass($className);
|
$class = new \ReflectionClass($className);
|
||||||
|
|
||||||
if (!in_array($method->name, $this->usedMethods)) {
|
if (!in_array($magic, $this->usedMethods)) {
|
||||||
if ($class !== $this->root) {
|
if ($class !== $this->root) {
|
||||||
$this->methods[] = new Method($method, $this->alias, $class, $magic, $this->interfaces);
|
$this->methods[] = new Method($method, $this->alias, $class, $magic, $this->interfaces);
|
||||||
}
|
}
|
||||||
@@ -319,20 +368,88 @@ class Alias
|
|||||||
$properties = $reflection->getStaticProperties();
|
$properties = $reflection->getStaticProperties();
|
||||||
$macros = isset($properties['macros']) ? $properties['macros'] : [];
|
$macros = isset($properties['macros']) ? $properties['macros'] : [];
|
||||||
foreach ($macros as $macro_name => $macro_func) {
|
foreach ($macros as $macro_name => $macro_func) {
|
||||||
$function = new \ReflectionFunction($macro_func);
|
if (!in_array($macro_name, $this->usedMethods)) {
|
||||||
// Add macros
|
// Add macros
|
||||||
$this->methods[] = new Macro(
|
$this->methods[] = new Macro(
|
||||||
$function,
|
$this->getMacroFunction($macro_func),
|
||||||
$this->alias,
|
$this->alias,
|
||||||
$reflection,
|
$reflection,
|
||||||
$macro_name,
|
$macro_name,
|
||||||
$this->interfaces
|
$this->interfaces
|
||||||
);
|
);
|
||||||
|
$this->usedMethods[] = $macro_name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $macro_func
|
||||||
|
*
|
||||||
|
* @return \ReflectionFunctionAbstract
|
||||||
|
* @throws \ReflectionException
|
||||||
|
*/
|
||||||
|
protected function getMacroFunction($macro_func)
|
||||||
|
{
|
||||||
|
if (is_array($macro_func) && is_callable($macro_func)) {
|
||||||
|
return new \ReflectionMethod($macro_func[0], $macro_func[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_object($macro_func) && is_callable($macro_func) && !$macro_func instanceof Closure) {
|
||||||
|
return new \ReflectionMethod($macro_func, '__invoke');
|
||||||
|
}
|
||||||
|
|
||||||
|
return new \ReflectionFunction($macro_func);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the docblock for this alias
|
||||||
|
*
|
||||||
|
* @param string $prefix
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getDocComment($prefix = "\t\t")
|
||||||
|
{
|
||||||
|
$serializer = new DocBlockSerializer(1, $prefix);
|
||||||
|
|
||||||
|
if ($this->phpdoc) {
|
||||||
|
if ($this->config->get('ide-helper.include_class_docblocks')) {
|
||||||
|
// if a class doesn't expose any DocBlock tags
|
||||||
|
// we can perform reflection on the class and
|
||||||
|
// add in the original class DocBlock
|
||||||
|
if (count($this->phpdoc->getTags()) === 0) {
|
||||||
|
$class = new ReflectionClass($this->root);
|
||||||
|
$this->phpdoc = new DocBlock($class->getDocComment());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->removeDuplicateMethodsFromPhpDoc();
|
||||||
|
return $serializer->getDocComment($this->phpdoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes method tags from the doc comment that already appear as functions inside the class.
|
||||||
|
* This prevents duplicate function errors in the IDE.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function removeDuplicateMethodsFromPhpDoc()
|
||||||
|
{
|
||||||
|
$methodNames = array_map(function (Method $method) {
|
||||||
|
return $method->getName();
|
||||||
|
}, $this->getMethods());
|
||||||
|
|
||||||
|
foreach ($this->phpdoc->getTags() as $tag) {
|
||||||
|
if ($tag instanceof MethodTag && in_array($tag->getMethodName(), $methodNames)) {
|
||||||
|
$this->phpdoc->deleteTag($tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Output an error.
|
* Output an error.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -115,7 +115,10 @@ class GeneratorCommand extends Command
|
|||||||
|
|
||||||
if ($written !== false) {
|
if ($written !== false) {
|
||||||
$this->info("A new helper file was written to $filename");
|
$this->info("A new helper file was written to $filename");
|
||||||
Eloquent::writeEloquentModelHelper($this, $this->files);
|
|
||||||
|
if ($this->option('write_mixins')) {
|
||||||
|
Eloquent::writeEloquentModelHelper($this, $this->files);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$this->error("The helper file could not be created at $filename");
|
$this->error("The helper file could not be created at $filename");
|
||||||
}
|
}
|
||||||
@@ -159,9 +162,11 @@ class GeneratorCommand extends Command
|
|||||||
protected function getOptions()
|
protected function getOptions()
|
||||||
{
|
{
|
||||||
$format = $this->config->get('ide-helper.format');
|
$format = $this->config->get('ide-helper.format');
|
||||||
|
$writeMixins = $this->config->get('ide-helper.write_eloquent_model_mixins');
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
array('format', "F", InputOption::VALUE_OPTIONAL, 'The format for the IDE Helper', $format),
|
array('format', "F", InputOption::VALUE_OPTIONAL, 'The format for the IDE Helper', $format),
|
||||||
|
array('write_mixins', "W", InputOption::VALUE_OPTIONAL, 'Write mixins to Laravel Model?', $writeMixins),
|
||||||
array('helpers', "H", InputOption::VALUE_NONE, 'Include the helper files'),
|
array('helpers', "H", InputOption::VALUE_NONE, 'Include the helper files'),
|
||||||
array('memory', "M", InputOption::VALUE_NONE, 'Use sqlite memory driver'),
|
array('memory', "M", InputOption::VALUE_NONE, 'Use sqlite memory driver'),
|
||||||
array('sublime', "S", InputOption::VALUE_NONE, 'DEPRECATED: Use different style for SublimeText CodeIntel'),
|
array('sublime', "S", InputOption::VALUE_NONE, 'DEPRECATED: Use different style for SublimeText CodeIntel'),
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ class MetaCommand extends Command
|
|||||||
|
|
||||||
protected $methods = [
|
protected $methods = [
|
||||||
'new \Illuminate\Contracts\Container\Container',
|
'new \Illuminate\Contracts\Container\Container',
|
||||||
|
'\Illuminate\Container\Container::makeWith(0)',
|
||||||
'\Illuminate\Contracts\Container\Container::make(0)',
|
'\Illuminate\Contracts\Container\Container::make(0)',
|
||||||
'\Illuminate\Contracts\Container\Container::makeWith(0)',
|
'\Illuminate\Contracts\Container\Container::makeWith(0)',
|
||||||
'\App::make(0)',
|
'\App::make(0)',
|
||||||
@@ -87,10 +88,11 @@ class MetaCommand extends Command
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$concrete = $this->laravel->make($abstract);
|
$concrete = $this->laravel->make($abstract);
|
||||||
if (is_object($concrete)) {
|
$reflectionClass = new \ReflectionClass($concrete);
|
||||||
|
if (is_object($concrete) && !$reflectionClass->isAnonymous()) {
|
||||||
$bindings[$abstract] = get_class($concrete);
|
$bindings[$abstract] = get_class($concrete);
|
||||||
}
|
}
|
||||||
} catch (\Exception $e) {
|
} catch (\Throwable $e) {
|
||||||
if ($this->output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) {
|
if ($this->output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) {
|
||||||
$this->comment("Cannot make '$abstract': ".$e->getMessage());
|
$this->comment("Cannot make '$abstract': ".$e->getMessage());
|
||||||
}
|
}
|
||||||
@@ -122,7 +124,11 @@ class MetaCommand extends Command
|
|||||||
$abstracts = $this->laravel->getBindings();
|
$abstracts = $this->laravel->getBindings();
|
||||||
|
|
||||||
// Return the abstract names only
|
// Return the abstract names only
|
||||||
return array_keys($abstracts);
|
$keys = array_keys($abstracts);
|
||||||
|
|
||||||
|
sort($keys);
|
||||||
|
|
||||||
|
return $keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -131,7 +137,7 @@ class MetaCommand extends Command
|
|||||||
protected function registerClassAutoloadExceptions()
|
protected function registerClassAutoloadExceptions()
|
||||||
{
|
{
|
||||||
spl_autoload_register(function ($class) {
|
spl_autoload_register(function ($class) {
|
||||||
throw new \Exception("Class '$class' not found.");
|
throw new \ReflectionException("Class '$class' not found.");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,14 +10,15 @@
|
|||||||
|
|
||||||
namespace Barryvdh\LaravelIdeHelper\Console;
|
namespace Barryvdh\LaravelIdeHelper\Console;
|
||||||
|
|
||||||
|
use Composer\Autoload\ClassMapGenerator;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Database\Eloquent\Relations\Relation;
|
use Illuminate\Database\Eloquent\Relations\Relation;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Filesystem\Filesystem;
|
use Illuminate\Filesystem\Filesystem;
|
||||||
|
use ReflectionClass;
|
||||||
use Symfony\Component\Console\Input\InputOption;
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
use Symfony\Component\Console\Input\InputArgument;
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
use Symfony\Component\ClassLoader\ClassMapGenerator;
|
|
||||||
use Barryvdh\Reflection\DocBlock;
|
use Barryvdh\Reflection\DocBlock;
|
||||||
use Barryvdh\Reflection\DocBlock\Context;
|
use Barryvdh\Reflection\DocBlock\Context;
|
||||||
use Barryvdh\Reflection\DocBlock\Tag;
|
use Barryvdh\Reflection\DocBlock\Tag;
|
||||||
@@ -56,6 +57,7 @@ class ModelsCommand extends Command
|
|||||||
protected $write = false;
|
protected $write = false;
|
||||||
protected $dirs = array();
|
protected $dirs = array();
|
||||||
protected $reset;
|
protected $reset;
|
||||||
|
protected $keep_text;
|
||||||
/**
|
/**
|
||||||
* @var bool[string]
|
* @var bool[string]
|
||||||
*/
|
*/
|
||||||
@@ -86,12 +88,15 @@ class ModelsCommand extends Command
|
|||||||
$model = $this->argument('model');
|
$model = $this->argument('model');
|
||||||
$ignore = $this->option('ignore');
|
$ignore = $this->option('ignore');
|
||||||
$this->reset = $this->option('reset');
|
$this->reset = $this->option('reset');
|
||||||
|
if ($this->option('smart-reset')) {
|
||||||
|
$this->keep_text = $this->reset = true;
|
||||||
|
}
|
||||||
$this->write_model_magic_where = $this->laravel['config']->get('ide-helper.write_model_magic_where', true);
|
$this->write_model_magic_where = $this->laravel['config']->get('ide-helper.write_model_magic_where', true);
|
||||||
|
|
||||||
//If filename is default and Write is not specified, ask what to do
|
//If filename is default and Write is not specified, ask what to do
|
||||||
if (!$this->write && $filename === $this->filename && !$this->option('nowrite')) {
|
if (!$this->write && $filename === $this->filename && !$this->option('nowrite')) {
|
||||||
if ($this->confirm(
|
if ($this->confirm(
|
||||||
"Do you want to overwrite the existing model files? Choose no to write to $filename instead? (Yes/No): "
|
"Do you want to overwrite the existing model files? Choose no to write to $filename instead"
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
$this->write = true;
|
$this->write = true;
|
||||||
@@ -136,6 +141,7 @@ class ModelsCommand extends Command
|
|||||||
array('write', 'W', InputOption::VALUE_NONE, 'Write to Model file'),
|
array('write', 'W', InputOption::VALUE_NONE, 'Write to Model file'),
|
||||||
array('nowrite', 'N', InputOption::VALUE_NONE, 'Don\'t write to Model file'),
|
array('nowrite', 'N', InputOption::VALUE_NONE, 'Don\'t write to Model file'),
|
||||||
array('reset', 'R', InputOption::VALUE_NONE, 'Remove the original phpdocs instead of appending'),
|
array('reset', 'R', InputOption::VALUE_NONE, 'Remove the original phpdocs instead of appending'),
|
||||||
|
array('smart-reset', 'r', InputOption::VALUE_NONE, 'Refresh the properties/methods list, but keep the text'),
|
||||||
array('ignore', 'I', InputOption::VALUE_OPTIONAL, 'Which models to ignore', ''),
|
array('ignore', 'I', InputOption::VALUE_OPTIONAL, 'Which models to ignore', ''),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -145,6 +151,8 @@ class ModelsCommand extends Command
|
|||||||
|
|
||||||
|
|
||||||
$output = "<?php
|
$output = "<?php
|
||||||
|
|
||||||
|
// @formatter:off
|
||||||
/**
|
/**
|
||||||
* A helper file for your Eloquent Models
|
* A helper file for your Eloquent Models
|
||||||
* Copy the phpDocs from this file to the correct Model,
|
* Copy the phpDocs from this file to the correct Model,
|
||||||
@@ -179,10 +187,9 @@ class ModelsCommand extends Command
|
|||||||
if (class_exists($name)) {
|
if (class_exists($name)) {
|
||||||
try {
|
try {
|
||||||
// handle abstract classes, interfaces, ...
|
// handle abstract classes, interfaces, ...
|
||||||
$reflectionClass = new \ReflectionClass($name);
|
$reflectionClass = new ReflectionClass($name);
|
||||||
|
|
||||||
if (!$reflectionClass->isSubclassOf('Illuminate\Database\Eloquent\Model')
|
if (!$reflectionClass->isSubclassOf('Illuminate\Database\Eloquent\Model')) {
|
||||||
|| $reflectionClass->isSubclassOf('Illuminate\Database\Eloquent\Relations\Pivot')) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -210,7 +217,7 @@ class ModelsCommand extends Command
|
|||||||
$output .= $this->createPhpDocs($name);
|
$output .= $this->createPhpDocs($name);
|
||||||
$ignore[] = $name;
|
$ignore[] = $name;
|
||||||
$this->nullableColumns = [];
|
$this->nullableColumns = [];
|
||||||
} catch (\Exception $e) {
|
} catch (\Throwable $e) {
|
||||||
$this->error("Exception: " . $e->getMessage() . "\nCould not analyze class $name.");
|
$this->error("Exception: " . $e->getMessage() . "\nCould not analyze class $name.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -277,13 +284,13 @@ class ModelsCommand extends Command
|
|||||||
break;
|
break;
|
||||||
case 'date':
|
case 'date':
|
||||||
case 'datetime':
|
case 'datetime':
|
||||||
$realType = '\Carbon\Carbon';
|
$realType = '\Illuminate\Support\Carbon';
|
||||||
break;
|
break;
|
||||||
case 'collection':
|
case 'collection':
|
||||||
$realType = '\Illuminate\Support\Collection';
|
$realType = '\Illuminate\Support\Collection';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$realType = 'mixed';
|
$realType = class_exists($type) ? ('\\' . $type) : 'mixed';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -291,6 +298,10 @@ class ModelsCommand extends Command
|
|||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
$this->properties[$name]['type'] = $this->getTypeOverride($realType);
|
$this->properties[$name]['type'] = $this->getTypeOverride($realType);
|
||||||
|
|
||||||
|
if (isset($this->nullableColumns[$name])) {
|
||||||
|
$this->properties[$name]['type'] .= '|null';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -337,7 +348,7 @@ class ModelsCommand extends Command
|
|||||||
foreach ($columns as $column) {
|
foreach ($columns as $column) {
|
||||||
$name = $column->getName();
|
$name = $column->getName();
|
||||||
if (in_array($name, $model->getDates())) {
|
if (in_array($name, $model->getDates())) {
|
||||||
$type = '\Carbon\Carbon';
|
$type = '\Illuminate\Support\Carbon';
|
||||||
} else {
|
} else {
|
||||||
$type = $column->getType()->getName();
|
$type = $column->getType()->getName();
|
||||||
switch ($type) {
|
switch ($type) {
|
||||||
@@ -433,11 +444,19 @@ class ModelsCommand extends Command
|
|||||||
array_shift($args);
|
array_shift($args);
|
||||||
$this->setMethod($name, '\Illuminate\Database\Eloquent\Builder|\\' . $reflection->class, $args);
|
$this->setMethod($name, '\Illuminate\Database\Eloquent\Builder|\\' . $reflection->class, $args);
|
||||||
}
|
}
|
||||||
|
} elseif (in_array($method, ['query', 'newQuery', 'newModelQuery'])) {
|
||||||
|
$reflection = new \ReflectionClass($model);
|
||||||
|
|
||||||
|
$builder = get_class($model->newModelQuery());
|
||||||
|
|
||||||
|
$this->setMethod($method, "\\{$builder}|\\" . $reflection->getName());
|
||||||
} elseif (!method_exists('Illuminate\Database\Eloquent\Model', $method)
|
} elseif (!method_exists('Illuminate\Database\Eloquent\Model', $method)
|
||||||
&& !Str::startsWith($method, 'get')
|
&& !Str::startsWith($method, 'get')
|
||||||
) {
|
) {
|
||||||
//Use reflection to inspect the code, based on Illuminate/Support/SerializableClosure.php
|
//Use reflection to inspect the code, based on Illuminate/Support/SerializableClosure.php
|
||||||
$reflection = new \ReflectionMethod($model, $method);
|
$reflection = new \ReflectionMethod($model, $method);
|
||||||
|
// php 7.x type or fallback to docblock
|
||||||
|
$type = (string) ($reflection->getReturnType() ?: $this->getReturnTypeFromDocBlock($reflection));
|
||||||
|
|
||||||
$file = new \SplFileObject($reflection->getFileName());
|
$file = new \SplFileObject($reflection->getFileName());
|
||||||
$file->seek($reflection->getStartLine() - 1);
|
$file->seek($reflection->getStartLine() - 1);
|
||||||
@@ -452,26 +471,39 @@ class ModelsCommand extends Command
|
|||||||
$code = substr($code, $begin, strrpos($code, '}') - $begin + 1);
|
$code = substr($code, $begin, strrpos($code, '}') - $begin + 1);
|
||||||
|
|
||||||
foreach (array(
|
foreach (array(
|
||||||
'hasMany',
|
'hasMany' => '\Illuminate\Database\Eloquent\Relations\HasMany',
|
||||||
'hasManyThrough',
|
'hasManyThrough' => '\Illuminate\Database\Eloquent\Relations\HasManyThrough',
|
||||||
'belongsToMany',
|
'belongsToMany' => '\Illuminate\Database\Eloquent\Relations\BelongsToMany',
|
||||||
'hasOne',
|
'hasOne' => '\Illuminate\Database\Eloquent\Relations\HasOne',
|
||||||
'belongsTo',
|
'belongsTo' => '\Illuminate\Database\Eloquent\Relations\BelongsTo',
|
||||||
'morphOne',
|
'morphOne' => '\Illuminate\Database\Eloquent\Relations\MorphOne',
|
||||||
'morphTo',
|
'morphTo' => '\Illuminate\Database\Eloquent\Relations\MorphTo',
|
||||||
'morphMany',
|
'morphMany' => '\Illuminate\Database\Eloquent\Relations\MorphMany',
|
||||||
'morphToMany'
|
'morphToMany' => '\Illuminate\Database\Eloquent\Relations\MorphToMany',
|
||||||
) as $relation) {
|
'morphedByMany' => '\Illuminate\Database\Eloquent\Relations\MorphToMany'
|
||||||
|
) as $relation => $impl) {
|
||||||
$search = '$this->' . $relation . '(';
|
$search = '$this->' . $relation . '(';
|
||||||
if ($pos = stripos($code, $search)) {
|
if (stripos($code, $search) || stripos($impl, (string)$type) !== false) {
|
||||||
//Resolve the relation's model to a Relation object.
|
//Resolve the relation's model to a Relation object.
|
||||||
|
$methodReflection = new \ReflectionMethod($model, $method);
|
||||||
|
if ($methodReflection->getNumberOfParameters()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$relationObj = $model->$method();
|
$relationObj = $model->$method();
|
||||||
|
|
||||||
if ($relationObj instanceof Relation) {
|
if ($relationObj instanceof Relation) {
|
||||||
$relatedModel = '\\' . get_class($relationObj->getRelated());
|
$relatedModel = '\\' . get_class($relationObj->getRelated());
|
||||||
|
|
||||||
$relations = ['hasManyThrough', 'belongsToMany', 'hasMany', 'morphMany', 'morphToMany'];
|
$relations = [
|
||||||
if (in_array($relation, $relations)) {
|
'hasManyThrough',
|
||||||
|
'belongsToMany',
|
||||||
|
'hasMany',
|
||||||
|
'morphMany',
|
||||||
|
'morphToMany',
|
||||||
|
'morphedByMany',
|
||||||
|
];
|
||||||
|
if (strpos(get_class($relationObj), 'Many') !== false) {
|
||||||
//Collection or array of models (because Collection is Arrayable)
|
//Collection or array of models (because Collection is Arrayable)
|
||||||
$this->setProperty(
|
$this->setProperty(
|
||||||
$method,
|
$method,
|
||||||
@@ -479,6 +511,12 @@ class ModelsCommand extends Command
|
|||||||
true,
|
true,
|
||||||
null
|
null
|
||||||
);
|
);
|
||||||
|
$this->setProperty(
|
||||||
|
Str::snake($method) . '_count',
|
||||||
|
'int|null',
|
||||||
|
true,
|
||||||
|
false
|
||||||
|
);
|
||||||
} elseif ($relation === "morphTo") {
|
} elseif ($relation === "morphTo") {
|
||||||
// Model isn't specified because relation is polymorphic
|
// Model isn't specified because relation is polymorphic
|
||||||
$this->setProperty(
|
$this->setProperty(
|
||||||
@@ -575,13 +613,19 @@ class ModelsCommand extends Command
|
|||||||
protected function createPhpDocs($class)
|
protected function createPhpDocs($class)
|
||||||
{
|
{
|
||||||
|
|
||||||
$reflection = new \ReflectionClass($class);
|
$reflection = new ReflectionClass($class);
|
||||||
$namespace = $reflection->getNamespaceName();
|
$namespace = $reflection->getNamespaceName();
|
||||||
$classname = $reflection->getShortName();
|
$classname = $reflection->getShortName();
|
||||||
$originalDoc = $reflection->getDocComment();
|
$originalDoc = $reflection->getDocComment();
|
||||||
|
$keyword = $this->getClassKeyword($reflection);
|
||||||
|
|
||||||
if ($this->reset) {
|
if ($this->reset) {
|
||||||
$phpdoc = new DocBlock('', new Context($namespace));
|
$phpdoc = new DocBlock('', new Context($namespace));
|
||||||
|
if ($this->keep_text) {
|
||||||
|
$phpdoc->setText(
|
||||||
|
(new DocBlock($reflection, new Context($namespace)))->getText()
|
||||||
|
);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$phpdoc = new DocBlock($reflection, new Context($namespace));
|
$phpdoc = new DocBlock($reflection, new Context($namespace));
|
||||||
}
|
}
|
||||||
@@ -661,7 +705,7 @@ class ModelsCommand extends Command
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$output = "namespace {$namespace}{\n{$docComment}\n\tclass {$classname} extends \Eloquent {}\n}\n\n";
|
$output = "namespace {$namespace}{\n{$docComment}\n\t{$keyword}class {$classname} extends \Eloquent {}\n}\n\n";
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -764,4 +808,21 @@ class ModelsCommand extends Command
|
|||||||
$this->setMethod('onlyTrashed', '\Illuminate\Database\Query\Builder|\\' . get_class($model), []);
|
$this->setMethod('onlyTrashed', '\Illuminate\Database\Query\Builder|\\' . get_class($model), []);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param ReflectionClass $reflection
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function getClassKeyword(ReflectionClass $reflection)
|
||||||
|
{
|
||||||
|
if ($reflection->isFinal()) {
|
||||||
|
$keyword = 'final ';
|
||||||
|
} elseif ($reflection->isAbstract()) {
|
||||||
|
$keyword = 'abstract ';
|
||||||
|
} else {
|
||||||
|
$keyword = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $keyword;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-9
@@ -198,25 +198,25 @@ class Generator
|
|||||||
// Get all aliases
|
// Get all aliases
|
||||||
foreach ($this->getAliases() as $name => $facade) {
|
foreach ($this->getAliases() as $name => $facade) {
|
||||||
// Skip the Redis facade, if not available (otherwise Fatal PHP Error)
|
// Skip the Redis facade, if not available (otherwise Fatal PHP Error)
|
||||||
if ($facade == 'Illuminate\Support\Facades\Redis' && !class_exists('Predis\Client')) {
|
if ($facade == 'Illuminate\Support\Facades\Redis' && $name == 'Redis' && !class_exists('Predis\Client')) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$magicMethods = array_key_exists($name, $this->magic) ? $this->magic[$name] : array();
|
$magicMethods = array_key_exists($name, $this->magic) ? $this->magic[$name] : array();
|
||||||
$alias = new Alias($name, $facade, $magicMethods, $this->interfaces);
|
$alias = new Alias($this->config, $name, $facade, $magicMethods, $this->interfaces);
|
||||||
if ($alias->isValid()) {
|
if ($alias->isValid()) {
|
||||||
//Add extra methods, from other classes (magic static calls)
|
//Add extra methods, from other classes (magic static calls)
|
||||||
if (array_key_exists($name, $this->extra)) {
|
if (array_key_exists($name, $this->extra)) {
|
||||||
$alias->addClass($this->extra[$name]);
|
$alias->addClass($this->extra[$name]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$aliases[] = $alias;
|
$aliases[] = $alias;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $aliases;
|
return $aliases;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Regroup aliases by namespace of extended classes
|
* Regroup aliases by namespace of extended classes
|
||||||
*
|
*
|
||||||
@@ -228,7 +228,7 @@ class Generator
|
|||||||
return $alias->getExtendsNamespace();
|
return $alias->getExtendsNamespace();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Regroup aliases by namespace of alias
|
* Regroup aliases by namespace of alias
|
||||||
*
|
*
|
||||||
@@ -265,15 +265,20 @@ class Generator
|
|||||||
'Schema' => 'Illuminate\Support\Facades\Schema',
|
'Schema' => 'Illuminate\Support\Facades\Schema',
|
||||||
'Session' => 'Illuminate\Support\Facades\Session',
|
'Session' => 'Illuminate\Support\Facades\Session',
|
||||||
'Storage' => 'Illuminate\Support\Facades\Storage',
|
'Storage' => 'Illuminate\Support\Facades\Storage',
|
||||||
//'Validator' => 'Illuminate\Support\Facades\Validator',
|
'Validator' => 'Illuminate\Support\Facades\Validator',
|
||||||
|
'Gate' => 'Illuminate\Support\Facades\Gate',
|
||||||
];
|
];
|
||||||
|
|
||||||
$facades = array_merge($facades, $this->config->get('app.aliases', []));
|
$facades = array_merge($facades, $this->config->get('app.aliases', []));
|
||||||
|
|
||||||
// Only return the ones that actually exist
|
// Only return the ones that actually exist
|
||||||
return array_filter($facades, function ($alias) {
|
return array_filter(
|
||||||
return class_exists($alias);
|
$facades,
|
||||||
});
|
function ($alias) {
|
||||||
|
return class_exists($alias);
|
||||||
|
},
|
||||||
|
ARRAY_FILTER_USE_KEY
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -37,8 +37,10 @@ class IdeHelperServiceProvider extends ServiceProvider
|
|||||||
*/
|
*/
|
||||||
public function boot()
|
public function boot()
|
||||||
{
|
{
|
||||||
$viewPath = __DIR__.'/../resources/views';
|
if ($this->app->has('view')) {
|
||||||
$this->loadViewsFrom($viewPath, 'ide-helper');
|
$viewPath = __DIR__ . '/../resources/views';
|
||||||
|
$this->loadViewsFrom($viewPath, 'ide-helper');
|
||||||
|
}
|
||||||
|
|
||||||
$configPath = __DIR__ . '/../config/ide-helper.php';
|
$configPath = __DIR__ . '/../config/ide-helper.php';
|
||||||
if (function_exists('config_path')) {
|
if (function_exists('config_path')) {
|
||||||
|
|||||||
+23
-24
@@ -10,38 +10,37 @@ class Macro extends Method
|
|||||||
/**
|
/**
|
||||||
* Macro constructor.
|
* Macro constructor.
|
||||||
*
|
*
|
||||||
* @param \ReflectionFunction $method
|
* @param \ReflectionFunctionAbstract $method
|
||||||
* @param string $alias
|
* @param string $alias
|
||||||
* @param \ReflectionClass $class
|
* @param \ReflectionClass $class
|
||||||
* @param null $methodName
|
* @param null $methodName
|
||||||
* @param array $interfaces
|
* @param array $interfaces
|
||||||
*/
|
*/
|
||||||
public function __construct(\ReflectionFunction $method, $alias, $class, $methodName = null, $interfaces = array())
|
public function __construct(
|
||||||
|
$method,
|
||||||
|
$alias,
|
||||||
|
$class,
|
||||||
|
$methodName = null,
|
||||||
|
$interfaces = array()
|
||||||
|
) {
|
||||||
|
parent::__construct($method, $alias, $class, $methodName, $interfaces);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \ReflectionFunctionAbstract $method
|
||||||
|
*/
|
||||||
|
protected function initPhpDoc($method)
|
||||||
{
|
{
|
||||||
$this->method = $method;
|
|
||||||
$this->interfaces = $interfaces;
|
|
||||||
$this->name = $methodName ?: $method->name;
|
|
||||||
$this->namespace = $class->getNamespaceName();
|
|
||||||
|
|
||||||
//Create a DocBlock and serializer instance
|
|
||||||
$this->phpdoc = new DocBlock($method);
|
$this->phpdoc = new DocBlock($method);
|
||||||
|
}
|
||||||
|
|
||||||
//Normalize the description and inherit the docs from parents/interfaces
|
/**
|
||||||
try {
|
* @param \ReflectionFunctionAbstract $method
|
||||||
$this->normalizeParams($this->phpdoc);
|
* @param \ReflectionClass $class
|
||||||
$this->normalizeReturn($this->phpdoc);
|
*/
|
||||||
$this->normalizeDescription($this->phpdoc);
|
protected function initClassDefinedProperties($method, \ReflectionClass $class)
|
||||||
} catch (\Exception $e) {
|
{
|
||||||
}
|
$this->namespace = $class->getNamespaceName();
|
||||||
|
|
||||||
//Get the parameters, including formatted default values
|
|
||||||
$this->getParameters($method);
|
|
||||||
|
|
||||||
//Make the method static
|
|
||||||
$this->phpdoc->appendTag(Tag::createInstance('@static', $this->phpdoc));
|
|
||||||
|
|
||||||
//Reference the 'real' function in the declaringclass
|
|
||||||
$this->declaringClassName = '\\' . ltrim($class->name, '\\');
|
$this->declaringClassName = '\\' . ltrim($class->name, '\\');
|
||||||
$this->root = '\\' . ltrim($class->getName(), '\\');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+61
-6
@@ -26,29 +26,36 @@ class Method
|
|||||||
protected $method;
|
protected $method;
|
||||||
|
|
||||||
protected $output = '';
|
protected $output = '';
|
||||||
|
protected $declaringClassName;
|
||||||
protected $name;
|
protected $name;
|
||||||
protected $namespace;
|
protected $namespace;
|
||||||
protected $params = array();
|
protected $params = array();
|
||||||
protected $params_with_default = array();
|
protected $params_with_default = array();
|
||||||
protected $interfaces = array();
|
protected $interfaces = array();
|
||||||
|
protected $real_name;
|
||||||
protected $return = null;
|
protected $return = null;
|
||||||
|
protected $root;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param \ReflectionMethod $method
|
* @param \ReflectionMethod|\ReflectionFunctionAbstract $method
|
||||||
* @param string $alias
|
* @param string $alias
|
||||||
* @param \ReflectionClass $class
|
* @param \ReflectionClass $class
|
||||||
* @param string|null $methodName
|
* @param string|null $methodName
|
||||||
* @param array $interfaces
|
* @param array $interfaces
|
||||||
*/
|
*/
|
||||||
public function __construct(\ReflectionMethod $method, $alias, $class, $methodName = null, $interfaces = array())
|
public function __construct($method, $alias, $class, $methodName = null, $interfaces = array())
|
||||||
{
|
{
|
||||||
$this->method = $method;
|
$this->method = $method;
|
||||||
$this->interfaces = $interfaces;
|
$this->interfaces = $interfaces;
|
||||||
$this->name = $methodName ?: $method->name;
|
$this->name = $methodName ?: $method->name;
|
||||||
$this->namespace = $method->getDeclaringClass()->getNamespaceName();
|
$this->real_name = $method->isClosure() ? $this->name : $method->name;
|
||||||
|
$this->initClassDefinedProperties($method, $class);
|
||||||
|
|
||||||
|
//Reference the 'real' function in the declaring class
|
||||||
|
$this->root = '\\' . ltrim($class->getName(), '\\');
|
||||||
|
|
||||||
//Create a DocBlock and serializer instance
|
//Create a DocBlock and serializer instance
|
||||||
$this->phpdoc = new DocBlock($method, new Context($this->namespace));
|
$this->initPhpDoc($method);
|
||||||
|
|
||||||
//Normalize the description and inherit the docs from parents/interfaces
|
//Normalize the description and inherit the docs from parents/interfaces
|
||||||
try {
|
try {
|
||||||
@@ -63,11 +70,25 @@ class Method
|
|||||||
|
|
||||||
//Make the method static
|
//Make the method static
|
||||||
$this->phpdoc->appendTag(Tag::createInstance('@static', $this->phpdoc));
|
$this->phpdoc->appendTag(Tag::createInstance('@static', $this->phpdoc));
|
||||||
|
}
|
||||||
|
|
||||||
//Reference the 'real' function in the declaringclass
|
/**
|
||||||
|
* @param \ReflectionMethod $method
|
||||||
|
*/
|
||||||
|
protected function initPhpDoc($method)
|
||||||
|
{
|
||||||
|
$this->phpdoc = new DocBlock($method, new Context($this->namespace));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \ReflectionMethod $method
|
||||||
|
* @param \ReflectionClass $class
|
||||||
|
*/
|
||||||
|
protected function initClassDefinedProperties($method, \ReflectionClass $class)
|
||||||
|
{
|
||||||
$declaringClass = $method->getDeclaringClass();
|
$declaringClass = $method->getDeclaringClass();
|
||||||
|
$this->namespace = $declaringClass->getNamespaceName();
|
||||||
$this->declaringClassName = '\\' . ltrim($declaringClass->name, '\\');
|
$this->declaringClassName = '\\' . ltrim($declaringClass->name, '\\');
|
||||||
$this->root = '\\' . ltrim($class->getName(), '\\');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -90,6 +111,26 @@ class Method
|
|||||||
return $this->root;
|
return $this->root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isInstanceCall()
|
||||||
|
{
|
||||||
|
return ! ($this->method->isClosure() || $this->method->isStatic());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getRootMethodCall()
|
||||||
|
{
|
||||||
|
if ($this->isInstanceCall()) {
|
||||||
|
return "\$instance->{$this->getRealName()}({$this->getParams()})";
|
||||||
|
} else {
|
||||||
|
return "{$this->getRoot()}::{$this->getRealName()}({$this->getParams()})";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the docblock for this method
|
* Get the docblock for this method
|
||||||
*
|
*
|
||||||
@@ -112,6 +153,16 @@ class Method
|
|||||||
return $this->name;
|
return $this->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the real method name
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getRealName()
|
||||||
|
{
|
||||||
|
return $this->real_name;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the parameters for this method
|
* Get the parameters for this method
|
||||||
*
|
*
|
||||||
@@ -213,6 +264,10 @@ class Method
|
|||||||
// Set the changed content
|
// Set the changed content
|
||||||
$tag->setContent($returnValue . ' ' . $tag->getDescription());
|
$tag->setContent($returnValue . ' ' . $tag->getDescription());
|
||||||
$this->return = $returnValue;
|
$this->return = $returnValue;
|
||||||
|
|
||||||
|
if ($tag->getType() === '$this') {
|
||||||
|
$tag->setType($this->root);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$this->return = null;
|
$this->return = null;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user