UtilitiesPython2/Py2SyntaxChecker.py

branch
Py2 comp.
changeset 2571
e6bb19eb87ea
parent 2552
1e893ea4e366
child 2572
dc6d76ab5d10
diff -r 1e893ea4e366 -r e6bb19eb87ea UtilitiesPython2/Py2SyntaxChecker.py
--- a/UtilitiesPython2/Py2SyntaxChecker.py	Thu Mar 28 20:09:00 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +0,0 @@
-#!/usr/bin/env python2
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2011 - 2013 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing the syntax check for Python 2.
-"""
-
-import sys
-import re
-import traceback
-
-from Tools import readEncodedFile, normalizeCode, extractLineFlags
-
-
-def compile(file, codestring):
-    """
-    Function to compile one Python source file to Python bytecode.
-    
-    @param file source filename (string)
-    @param codestring source code (string)
-    @return A tuple indicating status (True = an error was found), the
-        file name, the line number, the index number, the code string
-        and the error message (boolean, string, string, string, string,
-        string). The values are only valid, if the status equals 1.
-    """
-    import __builtin__
-    
-    try:
-        if type(file) == type(u""):
-            file = file.encode('utf-8')
-        
-        if file.endswith('.ptl'):
-            try:
-                import quixote.ptl_compile
-            except ImportError:
-                return (0, None, None, None, None)
-            template = quixote.ptl_compile.Template(codestring, file)
-            template.compile()
-        else:
-            __builtin__.compile(codestring, file, 'exec')
-    except SyntaxError, detail:
-        index = "0"
-        code = ""
-        error = ""
-        lines = traceback.format_exception_only(SyntaxError, detail)
-        match = re.match('\s*File "(.+)", line (\d+)',
-            lines[0].replace('<string>', '%s' % file))
-        if match is not None:
-            fn, line = match.group(1, 2)
-            if lines[1].startswith('SyntaxError:'):
-                error = re.match('SyntaxError: (.+)', lines[1]).group(1)
-            else:
-                code = re.match('(.+)', lines[1]).group(1)
-                for seLine in lines[2:]:
-                    if seLine.startswith('SyntaxError:'):
-                        error = re.match('SyntaxError: (.+)', seLine).group(1)
-                    elif seLine.rstrip().endswith('^'):
-                        index = len(seLine.rstrip()) - 4
-        else:
-            fn = detail.filename
-            line = detail.lineno and detail.lineno or 1
-            error = detail.msg
-        return (1, fn, line, index, code, error)
-    except ValueError, detail:
-        index = "0"
-        code = ""
-        try:
-            fn = detail.filename
-            line = detail.lineno
-            error = detail.msg
-        except AttributeError:
-            fn = file
-            line = 1
-            error = unicode(detail)
-        return (1, fn, line, index, code, error)
-    except StandardError, detail:
-        try:
-            fn = detail.filename
-            line = detail.lineno
-            index = "0"
-            code = ""
-            error = detail.msg
-            return (1, fn, line, index, code, error)
-        except:         # this catchall is intentional
-            pass
-    
-    return (0, None, None, None, None, None)
-
-
-def flakesCheck(fileName, codestring, ignoreStarImportWarnings):
-    """
-    Function to perform a pyflakes check.
-    
-    @param fileName name of the file (string)
-    @param codestring source code to be checked (string)
-    @param ignoreStarImportWarnings flag indicating to
-        ignore 'star import' warnings (boolean)
-    @return list of strings containing the warnings
-        (marker, file name, line number, message)
-    """
-    from py2flakes.checker import Checker
-    from py2flakes.messages import ImportStarUsed
-    
-    strings = []
-    lines = codestring.splitlines()
-    try:
-        warnings = Checker(codestring, fileName)
-        warnings.messages.sort(key=lambda a: a.lineno)
-        for warning in warnings.messages:
-            if ignoreStarImportWarnings and \
-               isinstance(warning, ImportStarUsed):
-                continue
-            
-            _fn, lineno, message = warning.getMessageData()
-            if "__IGNORE_WARNING__" not in extractLineFlags(lines[lineno - 1].strip()):
-                strings.extend(["FLAKES_WARNING", _fn, lineno, message])
-    except SyntaxError as err:
-        if err.text.strip():
-            msg = err.text.strip()
-        else:
-            msg = err.msg
-        strings.extend(["FLAKES_ERROR", fileName, err.lineno, msg])
-    
-    return strings
-
-if __name__ == "__main__":
-    if len(sys.argv) < 2 or \
-       len(sys.argv) > 3 or \
-       (len(sys.argv) == 3 and sys.argv[1] not in ["-fi", "-fs"]):
-        print "ERROR"
-        print ""
-        print ""
-        print ""
-        print ""
-        print "No file name given."
-    else:
-        filename = sys.argv[-1]
-        try:
-            codestring = readEncodedFile(filename)[0]
-            codestring = normalizeCode(codestring)
-            
-            syntaxerror, fname, line, index, code, error = \
-                compile(filename, codestring)
-        except IOError, msg:
-            # fake a syntax error
-            syntaxerror, fname, line, index, code, error = \
-                1, filename, "1", "0", "", "I/O Error: %s" % unicode(msg)
-        
-        if syntaxerror:
-            print "ERROR"
-        else:
-            print "NO_ERROR"
-        print fname
-        print line
-        print index
-        print code
-        print error
-        
-        if not syntaxerror and sys.argv[1] in ["-fi", "-fs"]:
-            # do pyflakes check
-            warningLines = flakesCheck(filename, codestring, sys.argv[1] == "-fi")
-            for warningLine in warningLines:
-                print warningLine
-    
-    sys.exit(0)
-    
-#
-# eflag: FileType = Python2

eric ide

mercurial