*/ private $metricType = [ \T_LOGICAL_AND => 'logical (and/or)', \T_LOGICAL_OR => 'logical (and/or)', \T_BOOLEAN_AND => 'boolean (&&/||)', \T_BOOLEAN_OR => 'boolean (&&/||)', ]; /** * The tokens this sniff targets with error code and replacements. * * @since 1.0.0 * * @var array> */ private $targetTokenInfo = [ \T_LOGICAL_AND => [ 'error_code' => 'LogicalAnd', 'replacement' => '&&', ], \T_LOGICAL_OR => [ 'error_code' => 'LogicalOr', 'replacement' => '||', ], ]; /** * Returns an array of tokens this test wants to listen for. * * @since 1.0.0 * * @return array */ public function register() { return \array_keys($this->metricType); } /** * Processes this test, when one of its tokens is encountered. * * @since 1.0.0 * * @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 */ public function process(File $phpcsFile, $stackPtr) { $tokens = $phpcsFile->getTokens(); $tokenCode = $tokens[$stackPtr]['code']; $phpcsFile->recordMetric($stackPtr, self::METRIC_NAME, $this->metricType[$tokenCode]); if (isset($this->targetTokenInfo[$tokenCode]) === false) { // Already using boolean operator. return; } $error = 'Using logical operators is not allowed. Expected: "%s"; Found: "%s"'; $data = [ $this->targetTokenInfo[$tokenCode]['replacement'], $tokens[ $stackPtr ]['content'], ]; $phpcsFile->addError($error, $stackPtr, $this->targetTokenInfo[$tokenCode]['error_code'], $data); } }