Plugins/CheckerPlugins/SyntaxChecker/jsCheckSyntax.py

branch
Py2 comp.
changeset 3525
66f4b8646622
child 4021
195a471c327b
diff -r c6141071339a -r 66f4b8646622 Plugins/CheckerPlugins/SyntaxChecker/jsCheckSyntax.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/CheckerPlugins/SyntaxChecker/jsCheckSyntax.py	Mon Apr 21 19:20:27 2014 +0200
@@ -0,0 +1,77 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+# pylint: disable=C0103
+
+"""
+Module implementing the syntax check for Python 2/3.
+"""
+import os
+import sys
+
+
+def initService():
+    """
+    Initialize the service and return the entry point.
+    
+    @return the entry point for the background client (function)
+    """
+    path = __file__
+    for i in range(4):
+        path = os.path.dirname(path)
+    sys.path.insert(2, os.path.join(path, "ThirdParty", "Jasy"))
+    return jsCheckSyntax
+
+
+def normalizeCode(codestring):
+    """
+    Function to normalize the given code.
+    
+    @param codestring code to be normalized (string)
+    @return normalized code (string)
+    """
+    codestring = codestring.replace("\r\n", "\n").replace("\r", "\n")
+
+    if codestring and codestring[-1] != '\n':
+        codestring = codestring + '\n'
+
+    # Check type for py2: if not str it's unicode
+#    if sys.version_info[0] == 2:
+#        try:
+#            codestring = codestring.encode('utf-8')
+#        except UnicodeError:
+#            pass
+    
+    return codestring
+
+
+def jsCheckSyntax(file, codestring):
+    """
+    Function to check a Javascript source file for syntax errors.
+    
+    @param file source filename (string)
+    @param codestring string containing the code to check (string)
+    @return dictionary with the keys 'error' and 'warnings' which
+            hold a list containing details about the error/ warnings
+            (file name, line number, column, codestring (only at syntax
+            errors), the message, a list with arguments for the message)
+    """
+    import jasy.js.parse.Parser as jsParser
+    import jasy.js.tokenize.Tokenizer as jsTokenizer
+    
+    codestring = normalizeCode(codestring)
+    
+    try:
+        jsParser.parse(codestring, file)
+    except (jsParser.SyntaxError, jsTokenizer.ParseError) as exc:
+        details = exc.args[0]
+        error, details = details.splitlines()
+        fn, line = details.strip().rsplit(":", 1)
+        error = error.split(":", 1)[1].strip()
+        
+        cline = min(len(codestring.splitlines()), int(line)) - 1
+        code = codestring.splitlines()[cline]
+        return [{'error': (fn, int(line), 0, code, error)}]
+    
+    return [{}]

eric ide

mercurial