70 lines
1.3 KiB
Go
70 lines
1.3 KiB
Go
package internal
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"go/format"
|
|
"os"
|
|
"path/filepath"
|
|
"text/template"
|
|
)
|
|
|
|
const importsTemplate = `
|
|
package main
|
|
|
|
import (
|
|
{{range .Imports -}}
|
|
_ "{{.}}"
|
|
{{end -}}
|
|
)
|
|
`
|
|
|
|
func (b Builder) updatePluginsFile() error {
|
|
importsDest := filepath.Join(b.repo, "cmd", "golangci-lint", "plugins.go")
|
|
|
|
info, err := os.Stat(importsDest)
|
|
if err != nil {
|
|
return fmt.Errorf("file %s not found: %w", importsDest, err)
|
|
}
|
|
|
|
source, err := generateImports(b.cfg)
|
|
if err != nil {
|
|
return fmt.Errorf("generate imports: %w", err)
|
|
}
|
|
|
|
b.log.Infof("generated imports info %s:\n%s\n", importsDest, source)
|
|
|
|
err = os.WriteFile(filepath.Clean(importsDest), source, info.Mode())
|
|
if err != nil {
|
|
return fmt.Errorf("write file %s: %w", importsDest, err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func generateImports(cfg *Configuration) ([]byte, error) {
|
|
impTmpl, err := template.New("plugins.go").Parse(importsTemplate)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("parse template: %w", err)
|
|
}
|
|
|
|
var imps []string
|
|
for _, plugin := range cfg.Plugins {
|
|
imps = append(imps, plugin.Import)
|
|
}
|
|
|
|
buf := &bytes.Buffer{}
|
|
|
|
err = impTmpl.Execute(buf, map[string]any{"Imports": imps})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("execute template: %w", err)
|
|
}
|
|
|
|
source, err := format.Source(buf.Bytes())
|
|
if err != nil {
|
|
return nil, fmt.Errorf("format source: %w", err)
|
|
}
|
|
|
|
return source, nil
|
|
}
|