forked from lumeland/pug
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patherror.js
More file actions
50 lines (48 loc) · 1.39 KB
/
error.js
File metadata and controls
50 lines (48 loc) · 1.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
export default function makeError(code, message, options) {
var line = options.line;
var column = options.column;
var filename = options.filename;
var src = options.src;
var fullMessage;
var location = line + (column ? ":" + column : "");
if (src && line >= 1 && line <= src.split("\n").length) {
var lines = src.split("\n");
var start = Math.max(line - 3, 0);
var end = Math.min(lines.length, line + 3);
// Error context
var context = lines
.slice(start, end)
.map(function (text, i) {
var curr = i + start + 1;
var preamble = (curr == line ? " > " : " ") + curr + "| ";
var out = preamble + text;
if (curr === line && column > 0) {
out += "\n";
out += Array(preamble.length + column).join("-") + "^";
}
return out;
})
.join("\n");
fullMessage = (filename || "Pug") + ":" + location + "\n" + context +
"\n\n" + message;
} else {
fullMessage = (filename || "Pug") + ":" + location + "\n\n" + message;
}
var err = new Error(fullMessage);
err.code = "PUG:" + code;
err.msg = message;
err.line = line;
err.column = column;
err.filename = filename;
err.src = src;
err.toJSON = function () {
return {
code: this.code,
msg: this.msg,
line: this.line,
column: this.column,
filename: this.filename,
};
};
return err;
}