Reproducible empty interface code generation
Prior to this commit, the code generator for package empty doesn't have a defined order. This commit now sorts the packages before generation, which gets rid of the main map's undefined order.
This commit is contained in:
parent
dd4e230e0f
commit
e08064021e
|
@ -5,6 +5,7 @@ import (
|
|||
"log"
|
||||
"os"
|
||||
"path"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/dave/jennifer/jen"
|
||||
|
@ -23,33 +24,52 @@ var comment = repository.Comment{Raw: `
|
|||
in cchat's root and text packages.
|
||||
`}
|
||||
|
||||
type Package struct {
|
||||
Path string
|
||||
repository.Package
|
||||
}
|
||||
|
||||
func main() {
|
||||
gen := jen.NewFile("empty")
|
||||
gen.HeaderComment("DO NOT EDIT: THIS FILE IS GENERATED!")
|
||||
gen.PackageComment(comment.GoString(1))
|
||||
|
||||
for pkgpath, pk := range repository.Main {
|
||||
gen.ImportName(pkgpath, path.Base(pkgpath))
|
||||
// Sort.
|
||||
var packages = make([]Package, 0, len(repository.Main))
|
||||
|
||||
for _, iface := range pk.Interfaces {
|
||||
for pkgpath, pk := range repository.Main {
|
||||
packages = append(packages, Package{
|
||||
Path: pkgpath,
|
||||
Package: pk,
|
||||
})
|
||||
}
|
||||
|
||||
sort.Slice(packages, func(i, j int) bool {
|
||||
return packages[i].Path < packages[j].Path
|
||||
})
|
||||
|
||||
for _, pkg := range packages {
|
||||
gen.ImportName(pkg.Path, path.Base(pkg.Path))
|
||||
|
||||
for _, iface := range pkg.Interfaces {
|
||||
// Skip structs without asserter methods.
|
||||
if !hasAsserter(iface) {
|
||||
continue
|
||||
}
|
||||
|
||||
var ifaceName = newIfaceName(pkgpath, iface)
|
||||
var ifaceName = newIfaceName(pkg.Path, iface)
|
||||
|
||||
gen.Commentf("%[1]s provides no-op asserters for cchat.%[1]s.", ifaceName)
|
||||
gen.Type().Id(ifaceName).Struct()
|
||||
gen.Line()
|
||||
|
||||
for _, embed := range iface.Embeds {
|
||||
if iface := pk.Interface(embed.InterfaceName); iface != nil {
|
||||
genIfaceMethods(gen, *iface, ifaceName, pkgpath)
|
||||
if iface := pkg.Interface(embed.InterfaceName); iface != nil {
|
||||
genIfaceMethods(gen, *iface, ifaceName, pkg.Path)
|
||||
}
|
||||
}
|
||||
|
||||
genIfaceMethods(gen, iface, ifaceName, pkgpath)
|
||||
genIfaceMethods(gen, iface, ifaceName, pkg.Path)
|
||||
|
||||
gen.Line()
|
||||
}
|
||||
|
|
|
@ -9,33 +9,6 @@ import (
|
|||
"github.com/diamondburned/cchat/text"
|
||||
)
|
||||
|
||||
// TextSegment provides no-op asserters for cchat.TextSegment.
|
||||
type TextSegment struct{}
|
||||
|
||||
// AsColorer returns nil.
|
||||
func (TextSegment) AsColorer() text.Colorer { return nil }
|
||||
|
||||
// AsLinker returns nil.
|
||||
func (TextSegment) AsLinker() text.Linker { return nil }
|
||||
|
||||
// AsImager returns nil.
|
||||
func (TextSegment) AsImager() text.Imager { return nil }
|
||||
|
||||
// AsAvatarer returns nil.
|
||||
func (TextSegment) AsAvatarer() text.Avatarer { return nil }
|
||||
|
||||
// AsMentioner returns nil.
|
||||
func (TextSegment) AsMentioner() text.Mentioner { return nil }
|
||||
|
||||
// AsAttributor returns nil.
|
||||
func (TextSegment) AsAttributor() text.Attributor { return nil }
|
||||
|
||||
// AsCodeblocker returns nil.
|
||||
func (TextSegment) AsCodeblocker() text.Codeblocker { return nil }
|
||||
|
||||
// AsQuoteblocker returns nil.
|
||||
func (TextSegment) AsQuoteblocker() text.Quoteblocker { return nil }
|
||||
|
||||
// Namer provides no-op asserters for cchat.Namer.
|
||||
type Namer struct{}
|
||||
|
||||
|
@ -140,3 +113,30 @@ func (SendableMessage) AsNoncer() cchat.Noncer { return nil }
|
|||
|
||||
// AsAttachments returns nil.
|
||||
func (SendableMessage) AsAttachments() cchat.Attachments { return nil }
|
||||
|
||||
// TextSegment provides no-op asserters for cchat.TextSegment.
|
||||
type TextSegment struct{}
|
||||
|
||||
// AsColorer returns nil.
|
||||
func (TextSegment) AsColorer() text.Colorer { return nil }
|
||||
|
||||
// AsLinker returns nil.
|
||||
func (TextSegment) AsLinker() text.Linker { return nil }
|
||||
|
||||
// AsImager returns nil.
|
||||
func (TextSegment) AsImager() text.Imager { return nil }
|
||||
|
||||
// AsAvatarer returns nil.
|
||||
func (TextSegment) AsAvatarer() text.Avatarer { return nil }
|
||||
|
||||
// AsMentioner returns nil.
|
||||
func (TextSegment) AsMentioner() text.Mentioner { return nil }
|
||||
|
||||
// AsAttributor returns nil.
|
||||
func (TextSegment) AsAttributor() text.Attributor { return nil }
|
||||
|
||||
// AsCodeblocker returns nil.
|
||||
func (TextSegment) AsCodeblocker() text.Codeblocker { return nil }
|
||||
|
||||
// AsQuoteblocker returns nil.
|
||||
func (TextSegment) AsQuoteblocker() text.Quoteblocker { return nil }
|
||||
|
|
Loading…
Reference in New Issue