From 82e6bbb83adbf2565d70e0f025275e6095df639c Mon Sep 17 00:00:00 2001 From: Jeroen van Oort Date: Tue, 9 Oct 2018 20:13:44 +0200 Subject: [PATCH 1/4] Set up separate package --- README.md | 10 ++++------ composer.json | 14 +++++++++----- extension.neon | 14 +++++++------- phpunit.xml | 2 +- src/BuilderMethodExtension.php | 8 ++++---- src/FacadeMethodExtension.php | 8 ++++---- src/HelpersReturnTypeExtension.php | 6 +++--- src/MacroMethodExtension.php | 2 +- src/MethodReflectionFactory.php | 2 +- src/ReflectionMethodAlwaysStatic.php | 2 +- src/ReflectionMethodFunctionProxy.php | 2 +- src/Utils/AnnotationsHelper.php | 2 +- tests/BuilderMethodExtensionTest.php | 10 +++++----- tests/FacadeMethodExtensionTest.php | 10 +++++----- tests/ReflectionMethodAlwaysStaticTest.php | 4 ++-- tests/ReflectionMethodFunctionProxyTest.php | 6 +++--- tests/Utils/AnnotationsHelperTest.php | 6 +++--- 17 files changed, 55 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index f6e7711..69c458b 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,17 @@ -# phpstan-laravel -Laravel plugins for [PHPStan](https://github.com/phpstan/phpstan) - -[![Build Status](https://img.shields.io/travis/Weebly/phpstan-laravel/master.svg?style=flat-square)](https://travis-ci.org/Weebly/phpstan-laravel) +# phpstan-lumen +Lumen plugins for [PHPStan](https://github.com/phpstan/phpstan) ## Usage To use this extension, require it in [Composer](https://getcomposer.org/): ``` -composer require --dev weebly/phpstan-laravel +composer require --dev webparking/phpstan-lumen ``` And include extension.neon in your project's PHPStan config: ``` includes: - - vendor/weebly/phpstan-laravel/extension.neon + - vendor/webparking/phpstan-lumen/extension.neon ``` diff --git a/composer.json b/composer.json index b381106..c5313bd 100644 --- a/composer.json +++ b/composer.json @@ -1,16 +1,20 @@ { - "name": "weebly/phpstan-laravel", + "name": "webparking/phpstan-lumen", "license": "BSD-2-Clause", - "description": "Laravel plugins for PHPStan", + "description": "Lumen plugins for PHPStan", "type": "library", "authors": [ { "name": "Chris Leppanen", "email": "chris.leppanen@weebly.com" + }, + { + "name": "Jeroen van Oort", + "email": "jeroen.vanoort@webparking.nl" } ], "require": { - "laravel/framework": "5.5.* || 5.6.*", + "laravel/lumen-framework": "5.5.* || 5.6.*", "phpstan/phpstan": "^0.9" }, "require-dev": { @@ -18,12 +22,12 @@ }, "autoload": { "psr-4": { - "Weebly\\PHPStan\\Laravel\\": "src/" + "Webparking\\PHPStan\\Lumen\\": "src/" } }, "autoload-dev": { "psr-4": { - "Tests\\Weebly\\PHPStan\\Laravel\\": "tests/" + "Tests\\Webparking\\PHPStan\\Lumen\\": "tests/" } }, "extra": { diff --git a/extension.neon b/extension.neon index a8cb534..a269b4b 100644 --- a/extension.neon +++ b/extension.neon @@ -1,24 +1,24 @@ services: - - class: Weebly\PHPStan\Laravel\MethodReflectionFactory + class: Webparking\PHPStan\Lumen\MethodReflectionFactory - - class: Weebly\PHPStan\Laravel\BuilderMethodExtension + class: Webparking\PHPStan\Lumen\BuilderMethodExtension tags: - phpstan.broker.methodsClassReflectionExtension - - class: Weebly\PHPStan\Laravel\FacadeMethodExtension + class: Webparking\PHPStan\Lumen\FacadeMethodExtension tags: - phpstan.broker.methodsClassReflectionExtension - - class: Weebly\PHPStan\Laravel\MacroMethodExtension + class: Webparking\PHPStan\Lumen\MacroMethodExtension tags: - phpstan.broker.methodsClassReflectionExtension - - class: Weebly\PHPStan\Laravel\HelpersReturnTypeExtension + class: Webparking\PHPStan\Lumen\HelpersReturnTypeExtension tags: - phpstan.broker.dynamicFunctionReturnTypeExtension - - class: Weebly\PHPStan\Laravel\Utils\AnnotationsHelper + - class: Webparking\PHPStan\Lumen\Utils\AnnotationsHelper parameters: - bootstrap: %rootDir%/../../weebly/phpstan-laravel/bootstrap.php + bootstrap: %rootDir%/../../webparking/phpstan-lumen/bootstrap.php diff --git a/phpunit.xml b/phpunit.xml index b983f92..359f953 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -17,7 +17,7 @@ - + ./tests diff --git a/src/BuilderMethodExtension.php b/src/BuilderMethodExtension.php index 8b137fa..5a23650 100644 --- a/src/BuilderMethodExtension.php +++ b/src/BuilderMethodExtension.php @@ -1,6 +1,6 @@ getName()) { case 'app': if (empty($functionCall->args) || $scope->getType($functionCall->args[0]->value) instanceof NullType) { - return new ObjectType(\Illuminate\Foundation\Application::class); + return new ObjectType(\Laravel\Lumen\Application::class); } $arg1 = $functionCall->args[0]; @@ -58,7 +58,7 @@ public function getTypeFromFunctionCall(FunctionReflection $functionReflection, return new MixedType(); case 'redirect': if (empty($functionCall->args)) { - return new ObjectType(\Illuminate\Routing\Redirector::class); + return new ObjectType(\Laravel\Lumen\Http\Redirector::class); } return new ObjectType(\Illuminate\Http\RedirectResponse::class); diff --git a/src/MacroMethodExtension.php b/src/MacroMethodExtension.php index 4ec45a6..3f882b9 100644 --- a/src/MacroMethodExtension.php +++ b/src/MacroMethodExtension.php @@ -1,6 +1,6 @@ makeClassReflectionMock(<< Date: Wed, 10 Oct 2018 09:53:56 +0200 Subject: [PATCH 2/4] Upgraded to phpstan 0.10.1 and made compatible with Lumen 5.7. --- .travis.yml | 1 - composer.json | 9 ++------- src/BuilderMethodExtension.php | 2 +- src/FacadeMethodExtension.php | 2 +- src/MacroMethodExtension.php | 3 ++- src/MethodReflectionFactory.php | 16 +++++++++++++++- 6 files changed, 21 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1e403bf..8d7f0fc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: php php: - - 7.0 - 7.1 - 7.2 diff --git a/composer.json b/composer.json index c5313bd..47fe43a 100644 --- a/composer.json +++ b/composer.json @@ -14,8 +14,8 @@ } ], "require": { - "laravel/lumen-framework": "5.5.* || 5.6.*", - "phpstan/phpstan": "^0.9" + "laravel/lumen-framework": "5.5.* || 5.6.* || 5.7.*", + "phpstan/phpstan": "0.10.1" }, "require-dev": { "phpunit/phpunit": "^6.5.2" @@ -29,10 +29,5 @@ "psr-4": { "Tests\\Webparking\\PHPStan\\Lumen\\": "tests/" } - }, - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } } } diff --git a/src/BuilderMethodExtension.php b/src/BuilderMethodExtension.php index 5a23650..1824f84 100644 --- a/src/BuilderMethodExtension.php +++ b/src/BuilderMethodExtension.php @@ -49,7 +49,7 @@ public function __construct(MethodReflectionFactory $methodReflectionFactory, An /** * @inheritdoc */ - public function setBroker(Broker $broker) + public function setBroker(Broker $broker): void { $this->broker = $broker; } diff --git a/src/FacadeMethodExtension.php b/src/FacadeMethodExtension.php index c6c93f1..5e76a25 100644 --- a/src/FacadeMethodExtension.php +++ b/src/FacadeMethodExtension.php @@ -58,7 +58,7 @@ public function __construct(MethodReflectionFactory $methodReflectionFactory, An /** * @inheritdoc */ - public function setBroker(Broker $broker) + public function setBroker(Broker $broker): void { $this->broker = $broker; } diff --git a/src/MacroMethodExtension.php b/src/MacroMethodExtension.php index 3f882b9..fabe30b 100644 --- a/src/MacroMethodExtension.php +++ b/src/MacroMethodExtension.php @@ -50,7 +50,7 @@ public function __construct(PhpMethodReflectionFactory $methodReflectionFactory, /** * @inheritdoc */ - public function setBroker(Broker $broker) + public function setBroker(Broker $broker): void { $this->broker = $broker; } @@ -106,6 +106,7 @@ private function createMethod(ClassReflection $classReflection, \ReflectionFunct $resolvedPhpDoc = $this->fileTypeMapper->getResolvedPhpDoc( $functionReflection->getFileName(), null, + null, $functionReflection->getDocComment() ); diff --git a/src/MethodReflectionFactory.php b/src/MethodReflectionFactory.php index 62467bd..dbf1435 100644 --- a/src/MethodReflectionFactory.php +++ b/src/MethodReflectionFactory.php @@ -48,6 +48,10 @@ public function create(ClassReflection $classReflection, \ReflectionMethod $meth { $phpDocParameterTypes = []; $phpDocReturnType = null; + $phpDocThrowType = null; + $phpDocIsDeprecated = false; + $phpDocIsInternal = false; + $phpDocIsFinal = false; if ($methodReflection->getDocComment() !== false) { $phpDocBlock = PhpDocBlock::resolvePhpDocBlockForMethod( Broker::getInstance(), @@ -60,12 +64,17 @@ public function create(ClassReflection $classReflection, \ReflectionMethod $meth $resolvedPhpDoc = $this->fileTypeMapper->getResolvedPhpDoc( $phpDocBlock->getFile(), $phpDocBlock->getClass(), + null, $phpDocBlock->getDocComment() ); $phpDocParameterTypes = array_map(function (ParamTag $tag): Type { return $tag->getType(); }, $resolvedPhpDoc->getParamTags()); $phpDocReturnType = $resolvedPhpDoc->getReturnTag() !== null ? $resolvedPhpDoc->getReturnTag()->getType() : null; + $phpDocThrowType = $resolvedPhpDoc->getThrowsTag() !== null ? $resolvedPhpDoc->getThrowsTag()->getType() : null; + $phpDocIsDeprecated = $resolvedPhpDoc->isDeprecated(); + $phpDocIsInternal = $resolvedPhpDoc->isInternal(); + $phpDocIsFinal = $resolvedPhpDoc->isFinal(); } if ($methodWrapper) { @@ -74,9 +83,14 @@ public function create(ClassReflection $classReflection, \ReflectionMethod $meth return $this->methodReflectionFactory->create( $classReflection, + null, $methodReflection, $phpDocParameterTypes, - $phpDocReturnType + $phpDocReturnType, + $phpDocThrowType, + $phpDocIsDeprecated, + $phpDocIsInternal, + $phpDocIsFinal ); } } From 082eaf286f7b9b35ac63f1a9ce1cd4872e0be370 Mon Sep 17 00:00:00 2001 From: Jude Seide Date: Wed, 12 Dec 2018 11:38:27 -0500 Subject: [PATCH 3/4] remove unknown bootstrap method call --- .gitignore | 1 + bootstrap.php | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 4fbb073..8f4a2b7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /vendor/ /composer.lock +/.idea diff --git a/bootstrap.php b/bootstrap.php index 04d9f90..5131ea2 100644 --- a/bootstrap.php +++ b/bootstrap.php @@ -3,5 +3,3 @@ define('LARAVEL_START', microtime(true)); $app = require_once __DIR__ . '/../../../bootstrap/app.php'; - -$app->make(\Illuminate\Contracts\Console\Kernel::class)->bootstrap(); From 02f7312364f5afd831ce3d1bcd379fd60a961d5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jude=20S=C3=A9ide?= Date: Wed, 12 Dec 2018 11:57:29 -0500 Subject: [PATCH 4/4] Update composer.json --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 47fe43a..6480eb4 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "webparking/phpstan-lumen", + "name": "webparking2/phpstan-lumen", "license": "BSD-2-Clause", "description": "Lumen plugins for PHPStan", "type": "library",