88 lines
2.2 KiB
Go
88 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"sort"
|
|
"strings"
|
|
|
|
"golang.org/x/exp/maps"
|
|
|
|
"github.com/golangci/golangci-lint/pkg/config"
|
|
"github.com/golangci/golangci-lint/pkg/lint/lintersdb"
|
|
)
|
|
|
|
type authorDetails struct {
|
|
Linters []string
|
|
Profile string
|
|
Avatar string
|
|
}
|
|
|
|
func getThanksList() string {
|
|
addedAuthors := map[string]*authorDetails{}
|
|
|
|
linters, _ := lintersdb.NewLinterBuilder().Build(config.NewDefault())
|
|
|
|
for _, lc := range linters {
|
|
if lc.Internal {
|
|
continue
|
|
}
|
|
|
|
if lc.OriginalURL == "" {
|
|
continue
|
|
}
|
|
|
|
linterURL := lc.OriginalURL
|
|
if lc.Name() == "staticcheck" {
|
|
linterURL = "https://github.com/dominikh/go-tools"
|
|
}
|
|
|
|
if author := extractAuthor(linterURL, "https://github.com/"); author != "" && author != "golangci" {
|
|
if _, ok := addedAuthors[author]; ok {
|
|
addedAuthors[author].Linters = append(addedAuthors[author].Linters, lc.Name())
|
|
} else {
|
|
addedAuthors[author] = &authorDetails{
|
|
Linters: []string{lc.Name()},
|
|
Profile: fmt.Sprintf("[%[1]s](https://github.com/sponsors/%[1]s)", author),
|
|
Avatar: fmt.Sprintf(`<img src="https://github.com/%[1]s.png" alt="%[1]s" style="max-width: 100%%;" width="20px;" />`, author),
|
|
}
|
|
}
|
|
} else if author := extractAuthor(linterURL, "https://gitlab.com/"); author != "" {
|
|
if _, ok := addedAuthors[author]; ok {
|
|
addedAuthors[author].Linters = append(addedAuthors[author].Linters, lc.Name())
|
|
} else {
|
|
addedAuthors[author] = &authorDetails{
|
|
Linters: []string{lc.Name()},
|
|
Profile: fmt.Sprintf("[%[1]s](https://gitlab.com/%[1]s)", author),
|
|
}
|
|
}
|
|
} else {
|
|
continue
|
|
}
|
|
}
|
|
|
|
authors := maps.Keys(addedAuthors)
|
|
sort.Slice(authors, func(i, j int) bool {
|
|
return strings.ToLower(authors[i]) < strings.ToLower(authors[j])
|
|
})
|
|
|
|
lines := []string{
|
|
"|Author|Linter(s)|",
|
|
"|---|---|",
|
|
}
|
|
|
|
for _, author := range authors {
|
|
lines = append(lines, fmt.Sprintf("|%s %s|%s|",
|
|
addedAuthors[author].Avatar, addedAuthors[author].Profile, strings.Join(addedAuthors[author].Linters, ", ")))
|
|
}
|
|
|
|
return strings.Join(lines, "\n")
|
|
}
|
|
|
|
func extractAuthor(originalURL, prefix string) string {
|
|
if !strings.HasPrefix(originalURL, prefix) {
|
|
return ""
|
|
}
|
|
|
|
return strings.SplitN(strings.TrimPrefix(originalURL, prefix), "/", 2)[0]
|
|
}
|