/
eslint.go
64 lines (55 loc) · 1.49 KB
/
eslint.go
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
52
53
54
55
56
57
58
59
60
61
62
63
64
package parsers
import (
"encoding/json"
"fmt"
"github.com/cirruslabs/cirrus-ci-annotations/model"
"io/ioutil"
)
type eslintMessage struct {
RuleID string `json:"ruleId"`
Severity int `json:"severity"`
Message string `json:"message"`
Line int64 `json:"line"`
Column int64 `json:"column"`
NodeType string `json:"nodeType"`
}
type eslintResult struct {
FilePath string `json:"filePath"`
Messages []eslintMessage `json:"messages"`
}
func eslintSeverityToAnnotationLevel(eslintSeverity int) model.AnnotationLevel {
switch eslintSeverity {
case 1:
return model.LevelWarning
case 2:
return model.LevelFailure
default:
return model.LevelNotice
}
}
func ParseESLintAnnotations(path string) (error, []model.Annotation) {
var result []model.Annotation
data, err := ioutil.ReadFile(path)
if err != nil {
return err, nil
}
var eslintResults []eslintResult
err = json.Unmarshal(data, &eslintResults)
if err != nil {
return err, nil
}
for _, eslintResult := range eslintResults {
for _, eslintMessage := range eslintResult.Messages {
result = append(result, model.Annotation{
Level: eslintSeverityToAnnotationLevel(eslintMessage.Severity),
Message: fmt.Sprintf("%s: %s", eslintMessage.RuleID, eslintMessage.Message),
Path: eslintResult.FilePath,
StartLine: eslintMessage.Line,
EndLine: eslintMessage.Line,
StartColumn: eslintMessage.Column,
EndColumn: eslintMessage.Column,
})
}
}
return nil, result
}