docs: def check(codeString, filename):
      """
      Check the Python source given by C{codeString} for flakes.
  
      @param codeString: The Python source to check.
      @type codeString: C{str}
  
      @param filename: The name of the file the source came from, used to report
          errors.
      @type filename: C{str}
  
      @return: The number of warnings emitted.
      @rtype: C{int}
      """
      # First, compile into an AST and handle syntax errors.
      try:
          tree = compile(codeString, filename, "exec", ast.PyCF_ONLY_AST)
      except SyntaxError, value:
          msg = value.args[0]
  
          (lineno, offset, text) = value.lineno, value.offset, value.text
  
          # If there's an encoding problem with the file, the text is None.
          if text is None:
              # Avoid using msg, since for the only known case, it contains a
              # bogus message that claims the encoding the file declared was
              # unknown.
              sys.stderr.write("%s: problem decoding source\n" % (filename, ))
          else:
              line = text.splitlines()[-1]
  
              if offset is not None:
                  offset = offset - (len(text) - len(line))
  
              sys.stderr.write('%s:%d: %s' % (filename, lineno, msg))
              sys.stderr.write(line + '\n')
  
              if offset is not None:
                  sys.stderr.write(" " * offset + "^\n")
  
          return 1
      else:
          # Okay, it's syntactically valid.  Now check it.
          w = checker.Checker(tree, filename)
          lines = codeString.split('\n')
          messages = [message for message in w.messages
                      if lines[message.lineno - 1].find('pyflakes:ignore') < 0]
          messages.sort(lambda a, b: cmp(a.lineno, b.lineno))
          false_positives = 0
          for warning in messages:
              if not (re.match('.*__init__.py', str(warning))
                      and isinstance(warning, (UnusedImport, ImportStarUsed))):
                  print(warning)
              else:
                  false_positives += 1
          return len(messages) - false_positives