Chris@0: getMethodProperties($stackPtr); Chris@0: if ($methodProperties['scope'] !== 'private' || $methodProperties['is_static'] === true) { Chris@0: return; Chris@0: } Chris@0: Chris@0: $tokens = $phpcsFile->getTokens(); Chris@0: $methodName = $phpcsFile->getDeclarationName($stackPtr); Chris@0: Chris@0: $classPtr = key($tokens[$stackPtr]['conditions']); Chris@0: Chris@0: // Search for direct $this->methodCall() or indirect callbacks [$this, Chris@0: // 'methodCall']. Chris@0: $current = $tokens[$classPtr]['scope_opener']; Chris@0: $end = $tokens[$classPtr]['scope_closer']; Chris@0: while (($current = $phpcsFile->findNext(T_VARIABLE, ($current + 1), $end)) !== false) { Chris@0: if ($tokens[$current]['content'] !== '$this') { Chris@0: continue; Chris@0: } Chris@0: Chris@17: $next = $phpcsFile->findNext(Tokens::$emptyTokens, ($current + 1), null, true); Chris@0: if ($next === false) { Chris@0: continue; Chris@0: } Chris@0: Chris@0: if ($tokens[$next]['code'] === T_OBJECT_OPERATOR) { Chris@17: $call = $phpcsFile->findNext(Tokens::$emptyTokens, ($next + 1), null, true); Chris@0: if ($call === false || $tokens[$call]['content'] !== $methodName) { Chris@0: continue; Chris@0: } Chris@0: Chris@17: $parenthesis = $phpcsFile->findNext(Tokens::$emptyTokens, ($call + 1), null, true); Chris@0: if ($parenthesis === false || $tokens[$parenthesis]['code'] !== T_OPEN_PARENTHESIS) { Chris@0: continue; Chris@0: } Chris@0: Chris@0: // At this point this is a method call to the private method, so we Chris@0: // can stop. Chris@0: return; Chris@0: } else if ($tokens[$next]['code'] === T_COMMA) { Chris@17: $call = $phpcsFile->findNext(Tokens::$emptyTokens, ($next + 1), null, true); Chris@0: if ($call === false || substr($tokens[$call]['content'], 1, -1) !== $methodName) { Chris@0: continue; Chris@0: } Chris@0: Chris@0: // At this point this is likely the private method as callback on a Chris@0: // function such as array_filter(). Chris@0: return; Chris@0: }//end if Chris@0: }//end while Chris@0: Chris@0: $warning = 'Unused private method %s()'; Chris@0: $data = [$methodName]; Chris@0: $phpcsFile->addWarning($warning, $stackPtr, 'UnusedMethod', $data); Chris@0: Chris@0: }//end processTokenWithinScope() Chris@0: Chris@0: Chris@17: /** Chris@17: * Process tokens outside of scope. Chris@17: * Chris@17: * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being processed. Chris@17: * @param int $stackPtr The position where this token was Chris@17: * found. Chris@17: * Chris@17: * @return void Chris@17: */ Chris@17: protected function processTokenOutsideScope(File $phpcsFile, $stackPtr) Chris@17: { Chris@17: Chris@17: }//end processTokenOutsideScope() Chris@17: Chris@17: Chris@0: }//end class