/** * visitToken(): defined by TokenRuleInterface. * * @see TokenRuleInterface::visitToken() * @param File $file * @return void */ public function visitToken(File $file) { $previousToken = null; $currentToken = $file->current(); $file->next(); $secondStatement = false; while ($file->valid()) { $token = $file->current(); $tokenType = $token->getType(); if (in_array($tokenType, array(T_COMMENT, T_DOC_COMMENT))) { $lexeme = $token->getLexeme(); if (strpos($lexeme, '//') === 0 || strpos($lexeme, '#') === 0) { // Single line comments end the line break; } elseif ($token->getNewlineCount() > 0) { // So do block comments with new lines break; } } elseif ($tokenType === T_WHITESPACE) { if ($token->getNewlineCount() > 0) { // Whitespace new lines are fine as well break; } } else { $secondStatement = true; break; } $file->next(); } if ($previousToken !== null) { if ($currentToken->getLine() === $previousToken->getLine()) { $this->addViolation($file, $currentToken->getLine(), $currentToken->getColumn(), 'Found multiple statements on same line'); } } }
/** * check(): defined by Rule interface. * * @see Rule::check() * @param File $file * @return void */ public function check(File $file) { $indentation = str_repeat($this->indentStyle === 'space' ? ' ' : "\t", $this->indentCount); $file->rewind(); while (true) { $token = $file->current(); $level = $token->getLevel(); $file->next(); if ($file->current()->getType() === '}' || $file->current()->getType() === ')') { $level--; } $file->prev(); $expectedIndentation = str_repeat($indentation, $level); $actualIndentation = $token->getTrailingWhitespace(); if ($expectedIndentation !== $actualIndentation) { $this->addViolation($file, $token, $column, $message); } if (!$file->seekNextLine()) { return; } } }