Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
primogenial
/
wp-content
/
themes
/
storefront
/
vendor
/
squizlabs
/
php_codesniffer
/
src
/
Standards
/
Squiz
/
Sniffs
/
NamingConventions
:
ValidVariableNameSniff.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php /** * Checks the naming of variables and member variables. * * @author Greg Sherwood <gsherwood@squiz.net> * @copyright 2006-2015 Squiz Pty Ltd (ABN 77 084 670 600) * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence */ namespace PHP_CodeSniffer\Standards\Squiz\Sniffs\NamingConventions; use PHP_CodeSniffer\Files\File; use PHP_CodeSniffer\Sniffs\AbstractVariableSniff; use PHP_CodeSniffer\Util\Common; use PHP_CodeSniffer\Util\Tokens; class ValidVariableNameSniff extends AbstractVariableSniff { /** * Processes this test, when one of its tokens is encountered. * * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned. * @param int $stackPtr The position of the current token in the * stack passed in $tokens. * * @return void */ protected function processVariable(File $phpcsFile, $stackPtr) { $tokens = $phpcsFile->getTokens(); $varName = ltrim($tokens[$stackPtr]['content'], '$'); // If it's a php reserved var, then its ok. if (isset($this->phpReservedVars[$varName]) === true) { return; } $objOperator = $phpcsFile->findNext([T_WHITESPACE], ($stackPtr + 1), null, true); if ($tokens[$objOperator]['code'] === T_OBJECT_OPERATOR || $tokens[$objOperator]['code'] === T_NULLSAFE_OBJECT_OPERATOR ) { // Check to see if we are using a variable from an object. $var = $phpcsFile->findNext([T_WHITESPACE], ($objOperator + 1), null, true); if ($tokens[$var]['code'] === T_STRING) { $bracket = $phpcsFile->findNext([T_WHITESPACE], ($var + 1), null, true); if ($tokens[$bracket]['code'] !== T_OPEN_PARENTHESIS) { $objVarName = $tokens[$var]['content']; // There is no way for us to know if the var is public or // private, so we have to ignore a leading underscore if there is // one and just check the main part of the variable name. $originalVarName = $objVarName; if (substr($objVarName, 0, 1) === '_') { $objVarName = substr($objVarName, 1); } if (Common::isCamelCaps($objVarName, false, true, false) === false) { $error = 'Member variable "%s" is not in valid camel caps format'; $data = [$originalVarName]; $phpcsFile->addError($error, $var, 'MemberNotCamelCaps', $data); } }//end if }//end if }//end if $objOperator = $phpcsFile->findPrevious(T_WHITESPACE, ($stackPtr - 1), null, true); if ($tokens[$objOperator]['code'] === T_DOUBLE_COLON) { // The variable lives within a class, and is referenced like // this: MyClass::$_variable, so we don't know its scope. $objVarName = $varName; if (substr($objVarName, 0, 1) === '_') { $objVarName = substr($objVarName, 1); } if (Common::isCamelCaps($objVarName, false, true, false) === false) { $error = 'Member variable "%s" is not in valid camel caps format'; $data = [$tokens[$stackPtr]['content']]; $phpcsFile->addError($error, $stackPtr, 'MemberNotCamelCaps', $data); } return; } // There is no way for us to know if the var is public or private, // so we have to ignore a leading underscore if there is one and just // check the main part of the variable name. $originalVarName = $varName; if (substr($varName, 0, 1) === '_') { $inClass = $phpcsFile->hasCondition($stackPtr, Tokens::$ooScopeTokens); if ($inClass === true) { $varName = substr($varName, 1); } } if (Common::isCamelCaps($varName, false, true, false) === false) { $error = 'Variable "%s" is not in valid camel caps format'; $data = [$originalVarName]; $phpcsFile->addError($error, $stackPtr, 'NotCamelCaps', $data); } }//end processVariable() /** * Processes class member variables. * * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned. * @param int $stackPtr The position of the current token in the * stack passed in $tokens. * * @return void */ protected function processMemberVar(File $phpcsFile, $stackPtr) { $tokens = $phpcsFile->getTokens(); $varName = ltrim($tokens[$stackPtr]['content'], '$'); $memberProps = $phpcsFile->getMemberProperties($stackPtr); if (empty($memberProps) === true) { // Couldn't get any info about this variable, which // generally means it is invalid or possibly has a parse // error. Any errors will be reported by the core, so // we can ignore it. return; } $public = ($memberProps['scope'] !== 'private'); $errorData = [$varName]; if ($public === true) { if (substr($varName, 0, 1) === '_') { $error = '%s member variable "%s" must not contain a leading underscore'; $data = [ ucfirst($memberProps['scope']), $errorData[0], ]; $phpcsFile->addError($error, $stackPtr, 'PublicHasUnderscore', $data); } } else { if (substr($varName, 0, 1) !== '_') { $error = 'Private member variable "%s" must contain a leading underscore'; $phpcsFile->addError($error, $stackPtr, 'PrivateNoUnderscore', $errorData); } } // Remove a potential underscore prefix for testing CamelCaps. $varName = ltrim($varName, '_'); if (Common::isCamelCaps($varName, false, true, false) === false) { $error = 'Member variable "%s" is not in valid camel caps format'; $phpcsFile->addError($error, $stackPtr, 'MemberNotCamelCaps', $errorData); } }//end processMemberVar() /** * Processes the variable found within a double quoted string. * * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned. * @param int $stackPtr The position of the double quoted * string. * * @return void */ protected function processVariableInString(File $phpcsFile, $stackPtr) { $tokens = $phpcsFile->getTokens(); if (preg_match_all('|[^\\\]\${?([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)|', $tokens[$stackPtr]['content'], $matches) !== 0) { foreach ($matches[1] as $varName) { // If it's a php reserved var, then its ok. if (isset($this->phpReservedVars[$varName]) === true) { continue; } if (Common::isCamelCaps($varName, false, true, false) === false) { $error = 'Variable "%s" is not in valid camel caps format'; $data = [$varName]; $phpcsFile->addError($error, $stackPtr, 'StringNotCamelCaps', $data); } } } }//end processVariableInString() }//end class