X-Git-Url: http://git.roojs.org/?p=app.Builder.js;a=blobdiff_plain;f=src%2FPalete%2FPalete.vala;h=88003c1aa9e440ad0c2e7019ca9225576dd7739a;hp=eda2d0d87de990711050fb0c7486fbbfed7171c9;hb=4e468ef8facabd04c48936f277ab34c64cd53bf8;hpb=b9e691416ff7534309502aacbd04ee50f5cb5713 diff --git a/src/Palete/Palete.vala b/src/Palete/Palete.vala index eda2d0d87..88003c1aa 100644 --- a/src/Palete/Palete.vala +++ b/src/Palete/Palete.vala @@ -1,4 +1,5 @@ +using Gtk; namespace Palete { @@ -240,162 +241,228 @@ namespace Palete public JsRender.Node? loadTemplate(string path) { - var pa = new Json.Parser(); - pa.load_from_file(path); - var node = pa.get_root(); + var pa = new Json.Parser(); + pa.load_from_file(path); + var node = pa.get_root(); - if (node.get_node_type () != Json.NodeType.OBJECT) { - return null; - } - var obj = node.get_object (); + if (node.get_node_type () != Json.NodeType.OBJECT) { + return null; + } + var obj = node.get_object (); - var ret = new JsRender.Node(); + var ret = new JsRender.Node(); - ret.loadFromJson(obj, 1); - ret.ref(); // not sure if needed -- but we had a case where ret became uninitialized? + ret.loadFromJson(obj, 1); + ret.ref(); // not sure if needed -- but we had a case where ret became uninitialized? - return ret; - } + return ret; + } - public void loadUsageFile (string fname) { + public void loadUsageFile (string fname) { - print("Palete Load called\n"); - string raw; - if (!FileUtils.test (fname, FileTest.EXISTS)) { - throw new Error.MISSING_FILE(fname + " not found"); - } + print("Palete Load called\n"); + string raw; + if (!FileUtils.test (fname, FileTest.EXISTS)) { + throw new Error.MISSING_FILE(fname + " not found"); + } - FileUtils.get_contents(fname, out raw); - // print(data); - var data = raw.split("\n"); - var state = 0; - var cfg = new Gee.ArrayList(); - var left = new Gee.ArrayList(); - var right = new Gee.ArrayList(); + FileUtils.get_contents(fname, out raw); + // print(data); + var data = raw.split("\n"); + var state = 0; + var cfg = new Gee.ArrayList(); + var left = new Gee.ArrayList(); + var right = new Gee.ArrayList(); - for (var i = 0; i < data.length; i++) { - var d = data[i].strip(); - //print("READ " + d + "\n"); - if ( - d.length < 1 - || - Regex.match_simple ("^\\s+$", d) - || - Regex.match_simple ("^\\s*/", d) - ){ - continue; - } + for (var i = 0; i < data.length; i++) { + var d = data[i].strip(); + //print("READ " + d + "\n"); + if ( + d.length < 1 + || + Regex.match_simple ("^\\s+$", d) + || + Regex.match_simple ("^\\s*/", d) + ){ + continue; + } - if (Regex.match_simple ("^left:", d)) { - state = 1; - if (left.size > 0 ){ - cfg.add(new Usage( left, right)); - } - left = new Gee.ArrayList(); - right = new Gee.ArrayList(); - continue; - } - if (Regex.match_simple ("^right:", d)) { - state = 2; - continue; - } - if (state == 1) { - //print("add left: " + d + "\n"); - left.add(d); - continue; - } - //print("add Right: " + d + "\n"); - right.add(d); - //Seed.quit(); - - } - if (left.size > 0 ){ - cfg.add(new Usage( left, right)); - } - this.map = cfg; + if (Regex.match_simple ("^left:", d)) { + state = 1; + if (left.size > 0 ){ + cfg.add(new Usage( left, right)); + } + left = new Gee.ArrayList(); + right = new Gee.ArrayList(); + continue; + } + if (Regex.match_simple ("^right:", d)) { + state = 2; + continue; + } + if (state == 1) { + //print("add left: " + d + "\n"); + left.add(d); + continue; + } + //print("add Right: " + d + "\n"); + right.add(d); + //Seed.quit(); + + } + if (left.size > 0 ){ + cfg.add(new Usage( left, right)); + } + this.map = cfg; - } + } - - - public async Gee.HashMap validateVala( - string code, + + public void validateVala( + WindowState state, + string code, string property, string ptype, JsRender.JsRender file, JsRender.Node node - ) - { + ) + { - print("validate code (%s) %s\n", file.language, code); - var ret = new Gee.HashMap(); + print("validate code (%s) %s\n", file.language, code); + - - if (file.language != "vala" ) { // not sure if we need to validate property - return ret; - } - var vs = new ValaSource(file); - //var cd = new JSCore.ClassDefinitionEmpty(); - ret = yield vs.checkFileWithNodePropChange( - node, - property, - ptype, - code - ); - return ret; - - } - public Gee.HashMap validateJavascript( - string code, - string property, - string ptype, - JsRender.JsRender file, - JsRender.Node node - ) - { + + if (file.language != "vala" ) { // not sure if we need to validate property + return; + } + // file.project , file.path, file.build_module, "" + + + + //var cd = new JSCore.ClassDefinitionEmpty(); + state.valasource.checkFileWithNodePropChange( + file, + node, + property, + ptype, + code + ); + - print("validate code (%s) %s\n", file.language, code); - var ret = new Gee.HashMap(); + } + + + + + public bool javascriptHasErrors( + WindowState state, + string code, + string property, + string ptype, + JsRender.JsRender file, + JsRender.Node? node, + out Gee.HashMap errors + ) + { + + print("validate code (%s) ptype=%s property=%s\n", file.language, ptype, property); + errors = new Gee.HashMap(); - if (file.language != "js") { - return ret; - } - if (ptype != "listener" && property[0] == '|') { - return ret; - } + if (file.language != "js") { + return false; + } + if (ptype != "listener" && property.length > 0 && property[0] == '|') { + return false; + } - //var cd = new JSCore.ClassDefinitionEmpty(); - //print("TESTING CODE %s\n", code); - string errmsg; - var line = Javascript.singleton().validate( - "var __aaa___ = " + code, out errmsg); + //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( + 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) { + } + // now syntax is OK.. try the + + + + if (ptype == "file") { + return this.javascriptHasCompressionErrors(file, state, code); + } print("no errors\n"); - return ret; - } - ret.set(line, errmsg); - print("got errors\n"); - return ret; + 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(); - public abstract Gee.HashMap getPropertiesFor(string ename, string type); - public abstract GirObject? getClass(string ename); - - public abstract bool type + + } + + + + public abstract void fillPack(JsRender.Node node,JsRender.Node parent); + public abstract void load(); + public abstract Gee.HashMap getPropertiesFor(string ename, string type); + public abstract GirObject? getClass(string ename); - } + public abstract bool typeOptions(string fqn, string key, string type, out string[] opts); + public abstract List suggestComplete( + JsRender.JsRender file, + JsRender.Node? node, + string proptype, + string key, + string complete_string + ); + } }