class_docstr: Helper that visits all nodes in the AST tree and assigns .first_token and .last_token attributes
  to each of them. This is the heart of the token-marking logic.
class_docstr_tok: ["Helper","that","visits","all","nodes","in","the","AST","tree","and","assigns",".first_token","and",".last_token","attributes","to","each","of","them",".","This","is","the","heart","of","the","token-marking","logic","."]
code: def handle_following_brackets(
      self, node, last_token, opening_bracket
  ):
      # type: (AstNode, util.Token, str) -> util.Token
      # This is for calls and subscripts, which have a pair of brackets
      # at the end which may contain no nodes, e.g. foo() or bar[:].
      # We look for the opening bracket and then let the matching pair be found automatically
      # Remember that last_token is at the end of all children,
      # so we are not worried about encountering a bracket that belongs to a child.
      first_child = next(cast(Callable, self._iter_children)(node))
      call_start = self._code.find_token(
          first_child.last_token, token.OP, opening_bracket
      )
      if call_start.index > last_token.index:
          last_token = call_start
      return last_token
  
imports: import ast
  import numbers
  import sys
  import token
  from ast import Module
  from typing import Callable, List, Union, cast, Optional, Tuple, TYPE_CHECKING
  import six
  from .None import util
  from .asttokens import ASTTokens
  from .util import AstConstant
  from .astroid_compat import astroid_node_classes, BaseContainer
label_desc: Use image node_id 13 for calling the MarkTokens obj's underlying member method code with example usage: obj.handle_following_brackets(node, last_token, opening_bracket) and returns: last_token