protected function analyzeStream() { $lastNode = null; while ($this->stream->moveNext()) { if ($this->stream->node === $lastNode) { continue; } $lastNode = $this->stream->node; if ($this->stream->node instanceof \PHPParser_Node_Expr_Assign && $this->getSetting('assignment_in_condition')) { $expr = $this->stream->node->expr; if (!$expr instanceof \PHPParser_Node_Expr_BooleanAnd && !$expr instanceof \PHPParser_Node_Expr_BooleanOr && !$expr instanceof \PHPParser_Node_Expr_LogicalAnd && !$expr instanceof \PHPParser_Node_Expr_LogicalOr && !$expr instanceof \PHPParser_Node_Expr_LogicalXor) { continue; } if (!$this->isInsideCondition($this->stream->node)) { continue; } $exprStartToken = $this->stream->token->findNextToken('NO_WHITESPACE_OR_COMMENT')->get(); if (!$exprStartToken->matches('(')) { $this->phpFile->addComment($this->stream->node->getLine(), Comment::warning('precedence.possibly_wrong_assign_in_cond', 'Consider adding parentheses for clarity. Current Interpretation: ``%current_assign%``, Probably Intended Meaning: ``%alternative_assign%``', array('current_assign' => self::$prettyPrinter->prettyPrintExpr($this->stream->node->var) . ' = (' . self::$prettyPrinter->prettyPrintExpr($this->stream->node->expr) . ')', 'alternative_assign' => '(' . self::$prettyPrinter->prettyPrintExpr($this->stream->node->var) . ' = ' . self::$prettyPrinter->prettyPrintExpr($this->stream->node->expr->left) . ')' . ' ' . NodeUtil::getBinOp($this->stream->node->expr) . ' ' . self::$prettyPrinter->prettyPrintExpr($this->stream->node->expr->right)))); } } if (($this->stream->node instanceof \PHPParser_Node_Expr_BitwiseAnd || $this->stream->node instanceof \PHPParser_Node_Expr_BitwiseOr || $this->stream->node instanceof \PHPParser_Node_Expr_BitwiseXor) && $this->getSetting('comparison_of_bit_result')) { $this->checkBitwiseOperation(); } } }