Fix all 5.3 $this-in-closure usages
parent
5805a68645
commit
4e6d54b731
@ -1,46 +0,0 @@
|
||||
<?php declare(strict_types = 1);
|
||||
|
||||
namespace Composer\PHPStanRules;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Rules\Rule;
|
||||
|
||||
/**
|
||||
* @phpstan-implements Rule<\PhpParser\Node\Expr\Variable>
|
||||
*/
|
||||
final class AnonymousFunctionWithThisRule implements Rule
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function getNodeType(): string
|
||||
{
|
||||
return \PhpParser\Node\Expr\Variable::class;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function processNode(Node $node, Scope $scope): array
|
||||
{
|
||||
if (!\is_string($node->name) || $node->name !== 'this') {
|
||||
return [];
|
||||
}
|
||||
|
||||
if ($scope->isInClosureBind()) {
|
||||
return [];
|
||||
}
|
||||
|
||||
if (!$scope->isInClass()) {
|
||||
// reported in other standard rule on level 0
|
||||
return [];
|
||||
}
|
||||
|
||||
if ($scope->isInAnonymousFunction()) {
|
||||
return ['Using $this inside anonymous function is prohibited because of PHP 5.3 support.'];
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
<?php declare(strict_types = 1);
|
||||
|
||||
namespace Composer\PHPStanRulesTests;
|
||||
|
||||
use Composer\PHPStanRules\AnonymousFunctionWithThisRule;
|
||||
use PHPStan\Testing\RuleTestCase;
|
||||
|
||||
/**
|
||||
* @phpstan-extends RuleTestCase<AnonymousFunctionWithThisRule>
|
||||
*/
|
||||
final class AnonymousFunctionWithThisRuleTest extends RuleTestCase
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
protected function getRule(): \PHPStan\Rules\Rule
|
||||
{
|
||||
return new AnonymousFunctionWithThisRule();
|
||||
}
|
||||
|
||||
public function testWithThis(): void
|
||||
{
|
||||
$this->analyse([__DIR__ . '/data/method-with-this.php'], [
|
||||
['Using $this inside anonymous function is prohibited because of PHP 5.3 support.', 13],
|
||||
['Using $this inside anonymous function is prohibited because of PHP 5.3 support.', 17],
|
||||
]);
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
<?php
|
||||
|
||||
class FirstClass
|
||||
{
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
private $firstProp = 9;
|
||||
|
||||
public function funMethod()
|
||||
{
|
||||
function() {
|
||||
$this->firstProp;
|
||||
};
|
||||
|
||||
call_user_func(function() {
|
||||
$this->funMethod();
|
||||
}, $this);
|
||||
|
||||
$bind = 'bind';
|
||||
function() use($bind) {
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
function global_ok() {
|
||||
$_SERVER['REMOTE_ADDR'];
|
||||
}
|
||||
|
||||
function global_this() {
|
||||
// not checked by our rule, it is checked with standard phpstan rule on level 0
|
||||
$this['REMOTE_ADDR'];
|
||||
}
|
Loading…
Reference in New Issue