65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
package golinters
|
|
|
|
import (
|
|
"fmt"
|
|
"go/ast"
|
|
"go/token"
|
|
"strings"
|
|
|
|
gopackages "golang.org/x/tools/go/packages"
|
|
|
|
"github.com/golangci/golangci-lint/pkg/config"
|
|
"github.com/golangci/golangci-lint/pkg/lint/linter"
|
|
)
|
|
|
|
func formatCode(code string, _ *config.Config) string {
|
|
if strings.Contains(code, "`") {
|
|
return code // TODO: properly escape or remove
|
|
}
|
|
|
|
return fmt.Sprintf("`%s`", code)
|
|
}
|
|
|
|
func formatCodeBlock(code string, _ *config.Config) string {
|
|
if strings.Contains(code, "`") {
|
|
return code // TODO: properly escape or remove
|
|
}
|
|
|
|
return fmt.Sprintf("```\n%s\n```", code)
|
|
}
|
|
|
|
func getAllFileNames(ctx *linter.Context) []string {
|
|
var ret []string
|
|
uniqFiles := map[string]bool{} // files are duplicated for test packages
|
|
for _, pkg := range ctx.Packages {
|
|
for _, f := range pkg.GoFiles {
|
|
if uniqFiles[f] {
|
|
continue
|
|
}
|
|
uniqFiles[f] = true
|
|
ret = append(ret, f)
|
|
}
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func getASTFilesForGoPkg(ctx *linter.Context, pkg *gopackages.Package) ([]*ast.File, *token.FileSet, error) {
|
|
var files []*ast.File
|
|
var fset *token.FileSet
|
|
for _, filename := range pkg.GoFiles {
|
|
f := ctx.ASTCache.Get(filename)
|
|
if f == nil {
|
|
return nil, nil, fmt.Errorf("no AST for file %s in cache: %+v", filename, *ctx.ASTCache)
|
|
}
|
|
|
|
if f.Err != nil {
|
|
return nil, nil, fmt.Errorf("can't load AST for file %s: %s", f.Name, f.Err)
|
|
}
|
|
|
|
files = append(files, f.F)
|
|
fset = f.Fset
|
|
}
|
|
|
|
return files, fset, nil
|
|
}
|