def check(args, source_code, filename=None, options=None):
    """Check source code with checker defined with *args* (list)
    Returns an empty list if checker is not installed"""
    if args is None:
        return []
    if options is not None:
        args += options
    if any(['pyflakes' in arg for arg in args]):
        #  Pyflakes requires an ending new line (pycodestyle don't! -- see Issue 1123)
        #  Note: this code is not used right now as it is faster to invoke 
        #  pyflakes in current Python interpreter (see `check_with_pyflakes` 
        #  function above) than calling it through a subprocess
        source_code += '\n'
    if filename is None:
        # Creating a temporary file because file does not exist yet 
        # or is not up-to-date
        tempfd = tempfile.NamedTemporaryFile(suffix=".py", delete=False)
        tempfd.write(source_code)
        tempfd.close()
        args.append(tempfd.name)
    else:
        args.append(filename)
    cmd = args[0]
    cmdargs = args[1:]
    proc = programs.run_program(cmd, cmdargs)
    output = proc.communicate()[0].strip().decode().splitlines()
    if filename is None:
        os.unlink(tempfd.name)
    results = []
    coding = encoding.get_coding(source_code)
    lines = source_code.splitlines()
    for line in output:
        lineno = int(re.search(r'(\:[\d]+\:)', line).group()[1:-1])
        try:
            text = to_text_string(lines[lineno-1], coding)
        except TypeError:
            text = to_text_string(lines[lineno-1])
        except UnicodeDecodeError:
            # Needed to handle UnicodeDecodeError and force the use
            # of chardet to detect enconding. See issue 6970
            coding = encoding.get_coding(source_code, force_chardet=True)
            text = to_text_string(lines[lineno-1], coding)
        if 'analysis:ignore' not in text:
            message = line[line.find(': ')+2:]
            results.append((message, lineno))
    return results
def check ( args , source_code , filename = None , options = None ) : if args is None : return [ ] if options is not None : args += options if any ( [ 'pyflakes' in arg for arg in args ] ) : source_code += '\n' if filename is None : tempfd = tempfile . NamedTemporaryFile ( suffix = ".py" , delete = False ) tempfd . write ( source_code ) tempfd . close ( ) args . append ( tempfd . name ) else : args . append ( filename ) cmd = args [ 0 ] cmdargs = args [ 1 : ] proc = programs . run_program ( cmd , cmdargs ) output = proc . communicate ( ) [ 0 ] . strip ( ) . decode ( ) . splitlines ( ) if filename is None : os . unlink ( tempfd . name ) results = [ ] coding = encoding . get_coding ( source_code ) lines = source_code . splitlines ( ) for line in output : lineno = int ( re . search ( r'(\:[\d]+\:)' , line ) . group ( ) [ 1 : - 1 ] ) try : text = to_text_string ( lines [ lineno - 1 ] , coding ) except TypeError : text = to_text_string ( lines [ lineno - 1 ] ) except UnicodeDecodeError : coding = encoding . get_coding ( source_code , force_chardet = True ) text = to_text_string ( lines [ lineno - 1 ] , coding ) if 'analysis:ignore' not in text : message = line [ line . find ( ': ' ) + 2 : ] results . append ( ( message , lineno ) ) return results
Check source code with checker defined with *args* (list)
    Returns an empty list if checker is not installed