-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathindex.js
51 lines (43 loc) · 1.59 KB
/
index.js
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
51
var chalk = require('chalk')
var path = require('path')
var _ = require('underscore')
var whitespace = start => _.times(start, () => ' ').join('')
var carets = (start, end) => _.times((end - start) + 1, () => '^').join('')
module.exports = function (output) {
output.forEach(error => {
var firstMessage = error.message[0]
var lineNumber = firstMessage.line
var parsedPath = path.parse(firstMessage.path)
var lineHeading = [
path.basename(parsedPath.dir),
'/',
parsedPath.base,
':',
lineNumber
].join('')
console.log(`${chalk.white.underline(lineHeading)}`)
var messages = error.message
// Merge 'Comment' into 'Blame' to reproduce default flow output
messages.forEach((item, index, list) => {
if (item.type === 'Comment') {
list[index - 1].descr += `. ${item.descr}`
}
})
messages = messages.filter(item => item.type !== 'Comment')
messages.forEach(message => {
const context = message.context.split('').map((item, index) => {
var relativeIndex = index + 1
var indexInWarningBounds = (
(relativeIndex > message.start || relativeIndex === message.start)
&& (relativeIndex < message.end || relativeIndex === message.end))
if (indexInWarningBounds) {
return chalk.red(item)
}
return item
}).join('')
const descr = `${whitespace(message.start)}${carets(message.start, message.end)} ${message.descr}`
console.log(` ${chalk.white.bold(lineNumber + ':')} ${context}`)
console.log(chalk.white.bold(` ${descr}`))
})
})
}