3 Object to handle compiler errors
4 so they can be passed off to trees.
10 public class CompileError : Object
13 public JsRender.JsRender file = null;
14 public string title = "";
16 public GLib.ListStore lines;
18 public CompileError? parent = null;
19 public string category;
21 public int line { get; set; default = -1; }
23 public CompileError.new_line(CompileError parent, int line, string msg)
25 this.lines = new GLib.ListStore(typeof(CompileError));
29 this.file = parent.file;
30 this.category = parent.category;
38 public CompileError.new_file(JsRender.JsRender file, Json.Object jlines, string category)
41 this.category = category;
42 this.title = file.relpath + " (" + jlines.get_size().to_string() + ")";
44 this.lines = new GLib.ListStore(typeof(CompileError));
46 jlines.foreach_member((obja, line, nodea) => {
48 var ar = jlines.get_array_member(line);
52 for (var i = 0 ; i < ar.get_length(); i++) {
53 msg += (msg.length > 0) ? "\n" : "";
54 msg += ar.get_string_element(i);
56 this.lines.append(new CompileError.new_line(this, int.parse(line) ,msg));
63 public string file_line { // sorting?
66 return this.parent == null ? this.file.relpath :
67 (this.file.relpath + ":" + this.line.to_string("%09d"));
70 public string line_msg {
73 return this.parent == null ?
74 GLib.Markup.escape_text( this.file.relpath + "(" + this.lines.n_items.to_string() + ")") :
75 GLib.Markup.escape_text(this.line.to_string() + ": " + this.msg);
80 public static void parseCompileResults (ValaCompileRequest req, Json.Object tree)
82 req.errorByFile = new Gee.HashMap<string,GLib.ListStore>();
83 req.errorByType = new Gee.HashMap<string,GLib.ListStore>();
85 req.errorByType.set("ERR", new GLib.ListStore(typeof(CompileError)));
86 req.errorByType.set("WARN", new GLib.ListStore(typeof(CompileError)));
87 req.errorByType.set("DEPR", new GLib.ListStore(typeof(CompileError)));
89 jsonToListStoreProp(req, "WARN", tree);
90 jsonToListStoreProp(req, "ERR", tree);
91 jsonToListStoreProp(req, "DEPR", tree);
96 public static void jsonToListStoreProp(ValaCompileRequest req, string prop, Json.Object tree)
98 var project = req.file.project;
99 var ls = new GLib.ListStore(typeof(CompileError));
100 if (!tree.has_member(prop)) {
101 GLib.debug("Files with %s : 0", prop);
102 req.errorByType.set(prop,ls);
105 var res = tree.get_object_member(prop);
106 res.foreach_member((obj, file, node) => {
108 var fe = project.getByPath(file);
111 GLib.debug("Warning Can not find file %s", file);
118 var ce = new CompileError.new_file(fe, res.get_object_member(file), prop);
121 if (!req.errorByFile.has_key(fe.targetName())) {
122 GLib.debug("add file %s to req.errorByFile", fe.targetName());
123 req.errorByFile.set(fe.targetName(), new GLib.ListStore(typeof(CompileError)));
125 for(var i = 0; i < ce.lines.get_n_items(); i++) {
126 var lce = (CompileError) ce.lines.get_item(i);
127 GLib.debug("add error %s to %s", lce.msg, fe.targetName());
128 req.errorByFile.get(fe.targetName()).append(lce);
134 GLib.debug("Files with %s : %d", prop, (int) ls.get_n_items());
135 req.errorByType.set(prop,ls);
139 // only used by javascript /roo errors..
140 public static GLib.ListStore jsonToListStore(Project.Project project, Json.Object tree)
142 var ls = new GLib.ListStore(typeof(CompileError));
143 tree.foreach_member((obj, file, node) => {
145 var fe = project.getByPath(file);
148 GLib.debug("Warning Can not find file %s", file);
151 var ce = new CompileError.new_file(fe, tree.get_object_member(file), "ERR");