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
 | |
| }
 | 
