|  | // Package noioutil contains a Go analysis pass designed to prevent use of the | 
|  | // deprecated ioutil package for which a tree-wide migration was already done. | 
|  | package noioutil | 
|  |  | 
|  | import ( | 
|  | "strconv" | 
|  |  | 
|  | "golang.org/x/tools/go/analysis" | 
|  |  | 
|  | alib "source.monogon.dev/build/analysis/lib" | 
|  | ) | 
|  |  | 
|  | var Analyzer = &analysis.Analyzer{ | 
|  | Name: "noioutil", | 
|  | Doc:  "noioutil checks for imports of the deprecated ioutil package", | 
|  | Run:  run, | 
|  | } | 
|  |  | 
|  | func run(p *analysis.Pass) (interface{}, error) { | 
|  | for _, file := range p.Files { | 
|  | if alib.IsGeneratedFile(file) { | 
|  | continue | 
|  | } | 
|  | for _, i := range file.Imports { | 
|  | importPath, err := strconv.Unquote(i.Path.Value) | 
|  | if err != nil { | 
|  | continue | 
|  | } | 
|  | if importPath == "io/ioutil" { | 
|  | p.Report(analysis.Diagnostic{ | 
|  | Pos:     i.Path.ValuePos, | 
|  | End:     i.Path.End(), | 
|  | Message: "File imports the deprecated io/ioutil package. See https://pkg.go.dev/io/ioutil for replacements.", | 
|  | }) | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | return nil, nil | 
|  | } |