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 { get; set ; } // so it triggers updates?
18 //public CompileError? parent = null;
19 public string category = "";
20 public string msg = "";
21 public int line { get; set; default = -1; }
24 public CompileError.new_jserror(JsRender.JsRender file, string category, int line, string msg)
26 this.lines = new GLib.ListStore(typeof(CompileError));
30 this.category = category;
35 public CompileError.new_from_diagnostic(JsRender.JsRender file, Lsp.Diagnostic diag)
38 this.category = diag.category;
39 this.line = (int) diag.range.start.line;
40 this.msg = diag.message;
41 this.lines = new GLib.ListStore(typeof(CompileError));
42 //GLib.debug("new error %s : %d %s %s", file.path, this.line, this.category, this.msg);
48 public CompileError.new_from_file(JsRender.JsRender file, string category)
51 this.category = category;
52 this.lines = file.getErrors(category);
53 this.title = file.relpath + " (" + lines.get_n_items().to_string() + ")";
57 public CompileError.new_line(CompileError? parent, int line, string msg)
59 this.lines = new GLib.ListStore(typeof(CompileError));
63 this.file = parent.file;
64 this.category = parent.category;
68 public CompileError.new_file(JsRender.JsRender file, Json.Object jlines, string category)
71 this.category = category;
72 this.title = file.relpath + " (" + jlines.get_size().to_string() + ")";
74 this.lines = new GLib.ListStore(typeof(CompileError));
76 jlines.foreach_member((obja, line, nodea) => {
78 var ar = jlines.get_array_member(line);
82 for (var i = 0 ; i < ar.get_length(); i++) {
83 msg += (msg.length > 0) ? "\n" : "";
84 msg += ar.get_string_element(i);
86 this.lines.append(new CompileError.new_line(this, int.parse(line) ,msg));
93 public string file_line { // sorting?
96 return this.line == -1 ? this.file.relpath :
97 (this.file.relpath + ":" + this.line.to_string("%09d"));
100 public string linemsg {
103 return this.line == -1 ?
104 GLib.Markup.escape_text( this.file.relpath + "(" + this.lines.n_items.to_string() + ")") :
105 GLib.Markup.escape_text(this.line.to_string() + ": " + this.msg);
109 public bool hasErrors() {
110 return this.lines.get_n_items() > 0;
115 public static void parseCompileResults (ValaCompileRequest req, Json.Object tree)
117 //req.errorByFile = new Gee.HashMap<string,GLib.ListStore>();
118 //req.errorByType = new Gee.HashMap<string,GLib.ListStore>();
122 req.errorByType.set("ERR", new GLib.ListStore(typeof(CompileError)));
123 req.errorByType.set("WARN", new GLib.ListStore(typeof(CompileError)));
124 req.errorByType.set("DEPR", new GLib.ListStore(typeof(CompileError)));
126 jsonToListStoreProp(req, "WARN", tree);
127 jsonToListStoreProp(req, "ERR", tree);
128 jsonToListStoreProp(req, "DEPR", tree);
134 public static void jsonToListStoreProp(ValaCompileRequest req, string prop, Json.Object tree)
136 var project = req.file.project;
137 var ls = new GLib.ListStore(typeof(CompileError));
138 if (!tree.has_member(prop)) {
139 GLib.debug("Files with %s : 0", prop);
140 req.errorByType.set(prop,ls);
143 var res = tree.get_object_member(prop);
144 res.foreach_member((obj, file, node) => {
146 var fe = project.getByPath(file);
149 GLib.debug("Warning Can not find file %s", file);
156 var ce = new CompileError.new_file(fe, res.get_object_member(file), prop);
159 if (!req.errorByFile.has_key(fe.targetName())) {
160 GLib.debug("add file %s to req.errorByFile", fe.targetName());
161 req.errorByFile.set(fe.targetName(), new GLib.ListStore(typeof(CompileError)));
163 for(var i = 0; i < ce.lines.get_n_items(); i++) {
164 var lce = (CompileError) ce.lines.get_item(i);
165 GLib.debug("add error %s to %s", lce.msg, fe.targetName());
166 req.errorByFile.get(fe.targetName()).append(lce);
172 GLib.debug("Files with %s : %d", prop, (int) ls.get_n_items());
173 req.errorByType.set(prop,ls);
177 // only used by javascript /roo errors..
178 public static GLib.ListStore jsonToListStore(Project.Project project, Json.Object tree)
180 var ls = new GLib.ListStore(typeof(CompileError));
181 tree.foreach_member((obj, file, node) => {
183 var fe = project.getByPath(file);
186 GLib.debug("Warning Can not find file %s", file);
189 var ce = new CompileError.new_file(fe, tree.get_object_member(file), "ERR");