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 _visit_before_children(self, node, parent_token):
      # type: (AstNode, Optional[util.Token]) -> Tuple[Optional[util.Token], Optional[util.Token]]
      col = getattr(node, "col_offset", None)
      token = (
          self._code.get_token_from_utf8(node.lineno, col)
          if col is not None
          else None
      )
  
      if not token and util.is_module(node):
          # We'll assume that a Module node starts at the start of the source code.
          token = self._code.get_token(1, 0)
  
      # Use our own token, or our parent's if we don't have one, to pass to child calls as
      # parent_token argument. The second value becomes the token argument of _visit_after_children.
      return (token or parent_token, 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 3 for calling the MarkTokens obj's underlying member method code with example usage: obj._visit_before_children(node, parent_token) and returns: unknown,  token