1
0
Fork 0

Update checking of $this usage to only error in static methods.

pull/545/head
Maarten Staa 2017-12-03 16:22:11 +01:00
parent ff746a836d
commit f751e49354
4 changed files with 2 additions and 49 deletions

View File

@ -1,6 +0,0 @@
<?php
function foo()
{
return $this;
}

View File

@ -1,3 +0,0 @@
<?php
echo $this;

View File

@ -99,11 +99,9 @@ class TreeAnalyzer
// Find the first ancestor that's a class method. Return an error
// if there is none, or if the method is static.
$method = $node->getFirstAncestor(Node\MethodDeclaration::class);
if ($method === null || $method->isStatic()) {
if ($method->isStatic()) {
$this->diagnostics[] = new Diagnostic(
$method === null
? "\$this can only be used in an object context."
: "\$this can not be used in static methods.",
"\$this can not be used in static methods.",
Range::fromNode($node),
null,
DiagnosticSeverity::ERROR,

View File

@ -71,42 +71,6 @@ class InvalidThisUsageTest extends TestCase
);
}
public function testThisInFunctionProducesError()
{
$diagnostics = $this->collectDiagnostics(
__DIR__ . '/../../fixtures/diagnostics/errors/this_in_function.php'
);
$this->assertCount(1, $diagnostics);
$this->assertDiagnostic(
$diagnostics[0],
'$this can only be used in an object context.',
DiagnosticSeverity::ERROR,
new Range(
new Position(4, 11),
new Position(4, 16)
)
);
}
public function testThisInRoot()
{
$diagnostics = $this->collectDiagnostics(
__DIR__ . '/../../fixtures/diagnostics/errors/this_in_root.php'
);
$this->assertCount(1, $diagnostics);
$this->assertDiagnostic(
$diagnostics[0],
'$this can only be used in an object context.',
DiagnosticSeverity::ERROR,
new Range(
new Position(2, 5),
new Position(2, 10)
)
);
}
public function testThisInMethodProducesNoError()
{
$diagnostics = $this->collectDiagnostics(