docs: def token_range(self, first_token, last_token, include_extra=False):
      """
      Yields all tokens in order from first_token through and including last_token. If
      include_extra is True, includes non-coding tokens such as tokenize.NL and .COMMENT.
      """
      for i in xrange(first_token.index, last_token.index + 1):
        if include_extra or not is_non_coding_token(self._tokens[i].type):
          yield self._tokens[i]