docs: def _expand_to_matching_pairs(self, first_token, last_token, node):
      """
      Scan tokens in [first_token, last_token] range that are between node's children, and for any
      unmatched brackets, adjust first/last tokens to include the closing pair.
      """
      # We look for opening parens/braces among non-child tokens (i.e. tokens between our actual
      # child nodes). If we find any closing ones, we match them to the opens.
      to_match_right = []
      to_match_left = []
      for tok in self._iter_non_child_tokens(first_token, last_token, node):
        tok_info = tok[:2]
        if to_match_right and tok_info == to_match_right[-1]:
          to_match_right.pop()
        elif tok_info in _matching_pairs_left:
          to_match_right.append(_matching_pairs_left[tok_info])
        elif tok_info in _matching_pairs_right:
          to_match_left.append(_matching_pairs_right[tok_info])
  
      # Once done, extend `last_token` to match any unclosed parens/braces.
      for match in reversed(to_match_right):
        last = self._code.next_token(last_token)
        # Allow for a trailing comma before the closing delimiter.
        if util.match_token(last, token.OP, ','):
          last = self._code.next_token(last)
        # Now check for the actual closing delimiter.
        if util.match_token(last, *match):
          last_token = last
  
      # And extend `first_token` to match any unclosed opening parens/braces.
      for match in to_match_left:
        first = self._code.prev_token(first_token)
        if util.match_token(first, *match):
          first_token = first
  
      return (first_token, last_token)