diff --git a/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php b/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php index 57ca0b08..a8119e0b 100644 --- a/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php +++ b/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php @@ -760,7 +760,7 @@ protected function checkForThisWithinClass( $token = $tokens[$stackPtr]; // Are we $this within a class? - if (($varName != 'this') || empty($token['conditions'])) { + if (($varName !== 'this') || empty($token['conditions'])) { return false; } @@ -770,7 +770,7 @@ protected function checkForThisWithinClass( if ($tokens[$scopePtr]['code'] === T_CLOSURE) { return true; } - if ($scopeCode === T_CLASS) { + if ($scopeCode === T_CLASS || $scopeCode === T_TRAIT) { return true; } } diff --git a/VariableAnalysis/Tests/BaseTestCase.php b/VariableAnalysis/Tests/BaseTestCase.php index 20759d97..7a505cd8 100644 --- a/VariableAnalysis/Tests/BaseTestCase.php +++ b/VariableAnalysis/Tests/BaseTestCase.php @@ -15,6 +15,9 @@ public function prepareLocalFileForSniffs($sniffFiles, string $fixtureFile): Loc } $ruleset->registerSniffs($sniffFiles, [], []); $ruleset->populateTokenListeners(); + if (! file_exists($fixtureFile)) { + throw new \Exception('Fixture file does not exist: ' . $fixtureFile); + } return new LocalFile($fixtureFile, $ruleset, $config); } diff --git a/VariableAnalysis/Tests/CodeAnalysis/VariableAnalysisTest.php b/VariableAnalysis/Tests/CodeAnalysis/VariableAnalysisTest.php index 0dd95cc1..ce94d6bb 100644 --- a/VariableAnalysis/Tests/CodeAnalysis/VariableAnalysisTest.php +++ b/VariableAnalysis/Tests/CodeAnalysis/VariableAnalysisTest.php @@ -373,4 +373,16 @@ public function testCompactWarnings() { ]; $this->assertEquals($expectedWarnings, $lines); } + + public function testTraitAllowsThis() { + $fixtureFile = $this->getFixture('TraitFixture.php'); + $phpcsFile = $this->prepareLocalFileForSniffs($this->getSniffFiles(), $fixtureFile); + $phpcsFile->process(); + $lines = $this->getWarningLineNumbersFromFile($phpcsFile); + $expectedWarnings = []; + $this->assertEquals($expectedWarnings, $lines); + $lines = $this->getErrorLineNumbersFromFile($phpcsFile); + $expectedErrors = []; + $this->assertEquals($expectedErrors, $lines); + } } diff --git a/VariableAnalysis/Tests/CodeAnalysis/fixtures/TraitFixture.php b/VariableAnalysis/Tests/CodeAnalysis/fixtures/TraitFixture.php new file mode 100644 index 00000000..0627d467 --- /dev/null +++ b/VariableAnalysis/Tests/CodeAnalysis/fixtures/TraitFixture.php @@ -0,0 +1,8 @@ +getWorld(); + } + abstract public function getWorld(); +}