code: def check_future_import(node):
      
      # node should be the import statement here
      savenode = node
      if not (node.type == syms.simple_stmt and node.children):
          return set()
      node = node.children[0]
      # now node is the import_from node
      if not (node.type == syms.import_from and
              # node.type == token.NAME and      # seems to break it
              hasattr(node.children[1], 'value') and
              node.children[1].value == u'__future__'):
          return set()
      if node.children[3].type == token.LPAR:
          node = node.children[4]
      else:
          node = node.children[3]
      # now node is the import_as_name[s]
      # print(python_grammar.number2symbol[node.type])  # breaks sometimes
      if node.type == syms.import_as_names:
          result = set()
          for n in node.children:
              if n.type == token.NAME:
                  result.add(n.value)
              elif n.type == syms.import_as_name:
                  n = n.children[0]
                  assert n.type == token.NAME
                  result.add(n.value)
          return result
      elif node.type == syms.import_as_name:
          node = node.children[0]
          assert node.type == token.NAME
          return set([node.value])
      elif node.type == token.NAME:
          return set([node.value])
      else:
          # TODO: handle brackets like this:
          #     from __future__ import (absolute_import, division)
          assert False, "strange import: %s" % savenode
docs: If this is a future import, return set of symbols that are imported,
      else return None.