directives.go raw
1 package lintcmd
2
3 import (
4 "strings"
5
6 "honnef.co/go/tools/lintcmd/runner"
7 )
8
9 func parseDirectives(dirs []runner.SerializedDirective) ([]ignore, []diagnostic) {
10 var ignores []ignore
11 var diagnostics []diagnostic
12
13 for _, dir := range dirs {
14 cmd := dir.Command
15 args := dir.Arguments
16 switch cmd {
17 case "ignore", "file-ignore":
18 if len(args) < 2 {
19 p := diagnostic{
20 Diagnostic: runner.Diagnostic{
21 Position: dir.NodePosition,
22 Message: "malformed linter directive; missing the required reason field?",
23 Category: "compile",
24 },
25 Severity: severityError,
26 }
27 diagnostics = append(diagnostics, p)
28 continue
29 }
30 default:
31 // unknown directive, ignore
32 continue
33 }
34 checks := strings.Split(args[0], ",")
35 pos := dir.NodePosition
36 var ig ignore
37 switch cmd {
38 case "ignore":
39 ig = &lineIgnore{
40 File: pos.Filename,
41 Line: pos.Line,
42 Checks: checks,
43 Pos: dir.DirectivePosition,
44 }
45 case "file-ignore":
46 ig = &fileIgnore{
47 File: pos.Filename,
48 Checks: checks,
49 }
50 }
51 ignores = append(ignores, ig)
52 }
53
54 return ignores, diagnostics
55 }
56