annotate vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Scope/MethodScopeSniff.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2 /**
Chris@0 3 * Verifies that class/interface/trait methods have scope modifiers.
Chris@0 4 *
Chris@0 5 * @category PHP
Chris@0 6 * @package PHP_CodeSniffer
Chris@0 7 * @link http://pear.php.net/package/PHP_CodeSniffer
Chris@0 8 */
Chris@0 9
Chris@17 10 namespace Drupal\Sniffs\Scope;
Chris@17 11
Chris@17 12 use PHP_CodeSniffer\Files\File;
Chris@17 13 use PHP_CodeSniffer\Sniffs\AbstractScopeSniff;
Chris@17 14 use PHP_CodeSniffer\Util\Tokens;
Chris@17 15
Chris@0 16 /**
Chris@0 17 * Verifies that class/interface/trait methods have scope modifiers.
Chris@0 18 *
Chris@17 19 * Laregely copied from
Chris@17 20 * \PHP_CodeSniffer\Standards\Squiz\Sniffs\Scope\MethodScopeSniff to work on
Chris@17 21 * traits and have a fixer.
Chris@0 22 *
Chris@0 23 * @category PHP
Chris@0 24 * @package PHP_CodeSniffer
Chris@0 25 * @link http://pear.php.net/package/PHP_CodeSniffer
Chris@0 26 */
Chris@17 27 class MethodScopeSniff extends AbstractScopeSniff
Chris@0 28 {
Chris@0 29
Chris@0 30
Chris@0 31 /**
Chris@17 32 * Constructs a
Chris@17 33 * \PHP_CodeSniffer\Standards\Squiz\Sniffs\Scope\MethodScopeSniff.
Chris@0 34 */
Chris@0 35 public function __construct()
Chris@0 36 {
Chris@0 37 parent::__construct(array(T_CLASS, T_INTERFACE, T_TRAIT), array(T_FUNCTION));
Chris@0 38
Chris@0 39 }//end __construct()
Chris@0 40
Chris@0 41
Chris@0 42 /**
Chris@0 43 * Processes the function tokens within the class.
Chris@0 44 *
Chris@17 45 * @param \PHP_CodeSniffer\Files\File $phpcsFile The file where this token was found.
Chris@17 46 * @param int $stackPtr The position where the token was found.
Chris@17 47 * @param int $currScope The current scope opener token.
Chris@0 48 *
Chris@0 49 * @return void
Chris@0 50 */
Chris@17 51 protected function processTokenWithinScope(File $phpcsFile, $stackPtr, $currScope)
Chris@0 52 {
Chris@0 53 $tokens = $phpcsFile->getTokens();
Chris@0 54
Chris@0 55 $methodName = $phpcsFile->getDeclarationName($stackPtr);
Chris@0 56 if ($methodName === null) {
Chris@0 57 // Ignore closures.
Chris@0 58 return;
Chris@0 59 }
Chris@0 60
Chris@0 61 if ($phpcsFile->hasCondition($stackPtr, T_FUNCTION) === true) {
Chris@0 62 // Ignore nested functions.
Chris@0 63 return;
Chris@0 64 }
Chris@0 65
Chris@0 66 $modifier = null;
Chris@0 67 for ($i = ($stackPtr - 1); $i > 0; $i--) {
Chris@0 68 if ($tokens[$i]['line'] < $tokens[$stackPtr]['line']) {
Chris@0 69 break;
Chris@17 70 } else if (isset(Tokens::$scopeModifiers[$tokens[$i]['code']]) === true) {
Chris@0 71 $modifier = $i;
Chris@0 72 break;
Chris@0 73 }
Chris@0 74 }
Chris@0 75
Chris@0 76 if ($modifier === null) {
Chris@0 77 $error = 'Visibility must be declared on method "%s"';
Chris@0 78 $data = array($methodName);
Chris@0 79 $fix = $phpcsFile->addFixableError($error, $stackPtr, 'Missing', $data);
Chris@0 80
Chris@0 81 if ($fix === true) {
Chris@0 82 // No scope modifier means the method is public in PHP, fix that
Chris@0 83 // to be explicitly public.
Chris@0 84 $phpcsFile->fixer->addContentBefore($stackPtr, 'public ');
Chris@0 85 }
Chris@0 86 }
Chris@0 87
Chris@0 88 }//end processTokenWithinScope()
Chris@0 89
Chris@0 90
Chris@17 91 /**
Chris@17 92 * Processes a token that is found outside the scope that this test is
Chris@17 93 * listening to.
Chris@17 94 *
Chris@17 95 * @param \PHP_CodeSniffer\Files\File $phpcsFile The file where this token was found.
Chris@17 96 * @param int $stackPtr The position in the stack where this
Chris@17 97 * token was found.
Chris@17 98 *
Chris@17 99 * @return void
Chris@17 100 */
Chris@17 101 protected function processTokenOutsideScope(File $phpcsFile, $stackPtr)
Chris@17 102 {
Chris@17 103
Chris@17 104 }//end processTokenOutsideScope()
Chris@17 105
Chris@17 106
Chris@0 107 }//end class