code: def parse_source_file(filename):
      
  
      # can't use codecs.open(filename, 'r', 'utf-8') here b/c ast doesn't
      # work with unicode strings in Python2.7 "SyntaxError: encoding
      # declaration in Unicode string" In python 2.7 the string can't be
      # encoded and have information about its encoding. That is particularly
      # problematic since source files include in their header information
      # about the file encoding.
      # Minimal example to fail: ast.parse(u'# -*- coding: utf-8 -*-')
  
      with open(filename, 'rb') as fid:
          content = fid.read()
      # change from Windows format to UNIX for uniformity
      content = content.replace(b'\r\n', b'\n')
  
      try:
          node = ast.parse(content)
          return node, content.decode('utf-8')
      except SyntaxError:
          return None, content.decode('utf-8')
docs: Parse source file into AST node
  
      Parameters
      ----------
      filename : str
          File path
  
      Returns
      -------
      node : AST node
      content : utf-8 encoded string