src/Palete/Palete.vala
[app.Builder.js] / src / Palete / Palete.vala
index c788a23..0eca605 100644 (file)
@@ -361,6 +361,7 @@ namespace Palete
        
        
                public   Gee.HashMap<int,string>  validateJavascript(
+                                       WindowState state,
                                        string code, 
                                        string property, 
                                        string ptype,
@@ -386,18 +387,79 @@ namespace Palete
                        var line = Javascript.singleton().validate(
                                                                  testcode, out errmsg);
 
-                       if (line < 0) {
+                       if (line > -1) {
                                if (ptype == "file") {
-                                       return this.validateJavascriptCompression(code);
+                                       var err = new Json.Object();
+                                       err.set_int_member("ERR-TOTAL", 1);
+                                       var files_obj = new Json.Object();
+                                       var lines_obj = new Json.Object();
+                                       var lines_ar = new Json.Array();
+                                       lines_ar.add_string_element(errmsg);
+                                       lines_obj.set_array_member(line, lines_ar);
+                                       files_obj.set_object_member(file.filename, lines_obj);
+                                        
+                                       err.set_object_member("ERR", files_obj);
+                                       err.set_object_member("ERR-TOTAL", 1);
+                                       state.showCompileResult(err);
+                                       return ret;
                                }
-                               print("no errors\n");
+                               ret.set(line, errmsg); // depricated - this is used by the editor currently -- but we are planning to switch from that..
+                               print("got  errors\n");
                                return ret;
+
+                       }
+                       // now syntax is OK.. try the 
+                       
+                       
+                       
+                       if (ptype == "file") {
+                                this.validateJavascriptCompression(code);
                        }
-                       ret.set(line, errmsg);
-                       print("got  errors\n");
+                       print("no errors\n");
                        return ret;
                          
                } 
+               
+               public void  validateJavascriptCompression(string code)
+               {
+                       // this uses the roojspacker code to try and compress the code.
+                       // it should highlight errors before we actually push live the code.
+                       
+                       // standard error format:  file %s, line %s, Error 
+
+                       var p = new JSDOC.Packer();
+                       p.keepWhite = false;
+                       p.skipScope = false;
+                       p.dumpTokens = false;
+                       p.cleanup = false; 
+                       var estr = "";
+                       var ret = new Gee.HashMap<int,string>();
+                       try { 
+                               p.packFile(code, "ANONFILE","");
+                       } catch (JSDOC.TokenReaderError e) {
+                               estr = e.message;
+                       } catch (JSDOC.ScopeParserError e) {
+                               estr = e.message;
+                       }
+                       if (estr.length > 0 ) {
+
+                               var bits = estr.split(",");
+                               if (bits.length > 2) {
+                                       var linebits = bits[1].strip().split(" ");
+                                       if (linebits.length > 1) {
+                                               var line = int.parse(linebits[1]);
+                                               // line is correct - but our standard for error messages is to do it start at '0'
+                                               ret.set(line -1 , bits[2]);
+                                       }
+                                       
+                               }
+                       }
+                       
+                       return ret;
+               
+               }
+               
+               
                      
                public abstract void fillPack(JsRender.Node node,JsRender.Node parent);
                public abstract void load();