src/Palete/Palete.vala
[app.Builder.js] / src / Palete / Palete.vala
index c09b574..88003c1 100644 (file)
@@ -1,4 +1,5 @@
 
+using Gtk;
 namespace Palete 
 {
 
@@ -359,42 +360,94 @@ namespace Palete
        
        
        
-               public   Gee.HashMap<int,string>  validateJavascript(
+               public   bool  javascriptHasErrors(
+                                       WindowState state,
                                        string code, 
                                        string property, 
                                        string ptype,
                                        JsRender.JsRender file,
-                                       JsRender.Node node
+                                       JsRender.Node? node, 
+                                       out Gee.HashMap<int,string> errors
                                 ) 
                {   
 
-                        print("validate code (%s) %s\n", file.language, code);
-                        var ret = new Gee.HashMap<int,string>();
+                        print("validate code (%s) ptype=%s property=%s\n", file.language, ptype, property);
+                          errors = new Gee.HashMap<int,string>();
                
                        if (file.language != "js") {
-                               return ret;
+                               return false;
                         }
-                        if (ptype != "listener" && property[0] == '|') {
-                               return ret;
+                        if (ptype != "listener" && property.length > 0 && property[0] == '|') {
+                               return false;
                         }
                        
                        //var cd = new JSCore.ClassDefinitionEmpty();
                        //print("TESTING CODE %s\n", code);
                        string errmsg;
+                       var testcode = ptype == "file" ? code : "var __aaa___ = " + code;
                        var line = Javascript.singleton().validate(
-                                                                 "var __aaa___ = " + code, out errmsg);
+                                                                 testcode, out errmsg);
+
+                       if (line > -1) {
+                               if (ptype == "file") {
+                                       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.to_string(), lines_ar);
+                                       files_obj.set_object_member(file.path, lines_obj);
+                                        
+                                       err.set_object_member("ERR", files_obj);
+                                       state.showCompileResult(err);
+                                       // do not set errors.. that's not done here..
+                                       return true;
+                               }
+                               errors.set(line, errmsg); // depricated - this is used by the editor currently -- but we are planning to switch from that..
+                               print("got  errors\n");
+                               return true;
 
-                       if (line < 0) {
-                               print("no errors\n");
-                               return ret;
                        }
-                       ret.set(line, errmsg);
-                       print("got  errors\n");
-                       return ret;
+                       // now syntax is OK.. try the 
+                       
+                       
+                       
+                       if (ptype == "file") {
+                                return this.javascriptHasCompressionErrors(file, state, code);
+                       }
+                       print("no errors\n");
+                       return false;
+                         
+               } 
+               
+               public bool  javascriptHasCompressionErrors(JsRender.JsRender file, WindowState state, 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; 
+                
                         
+                       p.packFile(code, file.path,"");
+                       state.showCompileResult(p.result);
+                       if (p.hasErrors()) {
+                               return true;
+                       }
+                       return false;
+                       
 
+               
                }
-                       
+               
+               
                      
                public abstract void fillPack(JsRender.Node node,JsRender.Node parent);
                public abstract void load();
@@ -404,11 +457,11 @@ namespace Palete
                public abstract bool typeOptions(string fqn, string key, string type, out string[] opts);
                public abstract  List<SourceCompletionItem> suggestComplete(
                                JsRender.JsRender file,
-                               JsRender.Node node,
+                               JsRender.Node? node,
                                string proptype, 
                                string key,
                                string complete_string
-               )
+               );
        }