function equal(a, b) {
      if (a.type !== b.type) {
        return false
      }

      if (
        a.type === 'LogicalExpression' &&
        b.type === 'LogicalExpression' &&
        (a.operator === '||' || a.operator === '&&') &&
        a.operator === b.operator
      ) {
        return (
          (equal(a.left, b.left) && equal(a.right, b.right)) ||
          (equal(a.left, b.right) && equal(a.right, b.left))
        )
      }

      return utils.equalTokens(a, b, tokenStore)
    }
Determines whether the two given nodes are considered to be equal. In particular, given that the nodes
represent expressions in a boolean context, `||` and `&&` can be considered as commutative operators.
@param {VExpression} a First node.
@param {VExpression} b Second node.
@returns {boolean} `true` if the nodes are considered to be equal.