code: private function findComparisonStart(Tokens $tokens, $index)
      {
          --$index;
          $nonBlockFound = false;
  
          while (0 <= $index) {
              $token = $tokens[$index];
              if ($token->isGivenKind([T_WHITESPACE, T_COMMENT, T_DOC_COMMENT])) {
                  --$index;
  
                  continue;
              }
  
              if ($this->isOfLowerPrecedence($token)) {
                  break;
              }
  
              $block = Tokens::detectBlockType($token);
              if (null === $block) {
                  --$index;
                  $nonBlockFound = true;
  
                  continue;
              }
  
              if (
                  $block['isStart']
                  || ($nonBlockFound && Tokens::BLOCK_TYPE_CURLY_BRACE === $block['type']) // closing of structure not related to the comparison
              ) {
                  break;
              }
  
              $index = $tokens->findBlockStart($block['type'], $index) - 1;
          }
  
          return $tokens->getNextMeaningfulToken($index);
      }
docs: Finds the start of the left-hand side of the comparison at the given
  index.
  
  The left-hand side ends when an operator with a lower precedence is
  encountered or when the block level for `()`, `{}` or `[]` goes below
  zero.
  
  @param Tokens $tokens The token list
  @param int    $index  The index of the comparison
  
  @return int The first index of the left-hand side of the comparison