43 lines
1.1 KiB
JavaScript
43 lines
1.1 KiB
JavaScript
var chalk = require('chalk')
|
|
|
|
/**
|
|
* Transform raw warning messages into codeframe output.
|
|
*/
|
|
|
|
module.exports = function (msg, source, line, col) {
|
|
var output = '\n'
|
|
var carret = ' | ' + pad(col - 1) + chalk.yellow('^')
|
|
if (line != null && col != null) {
|
|
var lines = source.split(/\r?\n/g)
|
|
if (lines.length === 1) {
|
|
lines = [formatLine(lines[0], 1, true), carret]
|
|
} else if (lines.length === 2) {
|
|
lines = lines.map(function (l, i) {
|
|
return formatLine(l, i + 1, i + 1 === line)
|
|
})
|
|
lines.splice(line, 0, carret)
|
|
} else {
|
|
lines = lines.slice(line - 2, line + 1).map(function (l, i) {
|
|
return formatLine(l, line - 1 + i, i === 1)
|
|
})
|
|
// add carret
|
|
lines.splice(2, 0, carret)
|
|
}
|
|
output += chalk.gray(lines.join('\n'))
|
|
}
|
|
return output + chalk.red('\n\n ' + msg + '\n')
|
|
}
|
|
|
|
function formatLine (lineText, lineNumber, isCurrent) {
|
|
if (isCurrent) lineText = chalk.yellow(lineText)
|
|
return ' ' +lineNumber + ' | ' + lineText
|
|
}
|
|
|
|
function pad (n) {
|
|
var res = ''
|
|
while (n--) {
|
|
res += ' '
|
|
}
|
|
return res
|
|
}
|