1
2
3
4
5 package driverutil
6
7
8
9 import (
10 "fmt"
11 "slices"
12
13 "golang.org/x/tools/go/analysis"
14 )
15
16
17
18 type ReadFileFunc = func(filename string) ([]byte, error)
19
20
21
22 func CheckedReadFile(pass *analysis.Pass, readFile ReadFileFunc) ReadFileFunc {
23 return func(filename string) ([]byte, error) {
24 if err := CheckReadable(pass, filename); err != nil {
25 return nil, err
26 }
27 return readFile(filename)
28 }
29 }
30
31
32 func CheckReadable(pass *analysis.Pass, filename string) error {
33 if slices.Contains(pass.OtherFiles, filename) ||
34 slices.Contains(pass.IgnoredFiles, filename) {
35 return nil
36 }
37 for _, f := range pass.Files {
38 if pass.Fset.File(f.FileStart).Name() == filename {
39 return nil
40 }
41 }
42 return fmt.Errorf("Pass.ReadFile: %s is not among OtherFiles, IgnoredFiles, or names of Files", filename)
43 }
44
View as plain text