docstr: Check `expression` of `eval(expression[, globals[, locals]])`.
  Check `expression` of `exec(expression[, globals[, locals]])`
  in python 3.
  Check `name` of `__import__(name[, globals[, locals[,
  fromlist[, level]]]])`.
  Check `name` or `package` of `importlib.import_module(name,
  package=None)`.
docstr_tok: ["Check","`","expression","`","of","`","eval","(","expression","[",",","globals","[",",","locals","]","]",")","`",".","Check","`","expression","`","of","`","exec","(","expression","[",",","globals","[",",","locals","]","]",")","`","in","python","3",".","Check","`","name","`","of","`","__import__","(","name","[",",","globals","[",",","locals","[",",","fromlist","[",",","level","]","]","]","]",")","`",".","Check","`","name","`","or","`","package","`","of","`","importlib.import_module","(","name",",","package=None",")","`","."]
code: def visit_Expr(self, node):
      """
      Check `expression` of `eval(expression[, globals[, locals]])`.
      Check `expression` of `exec(expression[, globals[, locals]])`
      in python 3.
      Check `name` of `__import__(name[, globals[, locals[,
      fromlist[, level]]]])`.
      Check `name` or `package` of `importlib.import_module(name,
      package=None)`.
      """
      # Built-in functions
      value = node.value
      if isinstance(value, ast.Call):
          if hasattr(value.func, "id"):
              if value.func.id == "eval" and hasattr(
                  node.value.args[0], "s"
              ):
                  self._str_codes.append(
                      (node.value.args[0].s, node.lineno + self._lineno)
                  )
              # **`exec` function in Python 3.**
              elif value.func.id == "exec" and hasattr(
                  node.value.args[0], "s"
              ):
                  self._str_codes.append(
                      (node.value.args[0].s, node.lineno + self._lineno)
                  )
              # `__import__` function.
              elif (
                  value.func.id == "__import__"
                  and len(node.value.args) > 0
                  and hasattr(node.value.args[0], "s")
              ):
                  self._modules.add(
                      node.value.args[0].s,
                      self._fpath,
                      node.lineno + self._lineno,
                  )
          # `import_module` function.
          elif getattr(value.func, "attr", "") == "import_module":
              module = getattr(value.func, "value", None)
              if (
                  module is not None
                  and getattr(module, "id", "") == "importlib"
              ):
                  args = node.value.args
                  arg_len = len(args)
                  if arg_len > 0 and hasattr(args[0], "s"):
                      name = args[0].s
                      if not name.startswith("."):
                          self._modules.add(
                              name,
                              self._fpath,
                              node.lineno + self._lineno,
                          )
                      elif arg_len == 2 and hasattr(args[1], "s"):
                          self._modules.add(
                              args[1].s,
                              self._fpath,
                              node.lineno + self._lineno,
                          )
  
imports: from __future__ import print_function, division, absolute_import
  import json
  import os
  import sys
  import six
  import fnmatch
  import importlib
  import ast
  import doctest
  import collections
  import functools
  from pathlib2 import Path
  from .utils import parse_git_config
  from .modules import ImportedModules
label_desc: Use image node_id 6 for calling the ImportChecker obj's underlying member method code with example usage: obj.visit_Expr(node) without return types