Add support for prefixing generated code paths.

このコミットが含まれているのは:
Cory Slep 2019-01-03 00:29:24 +01:00
コミット ee9aade57f
3個のファイルの変更36行の追加25行の削除

ファイルの表示

@ -101,22 +101,22 @@ func (c Converter) convertToFiles(v vocabulary) (f []*File, e error) {
return
}
// Implementation
dir := pm.PrivatePackage().Path()
file := jen.NewFilePath(dir)
priv := pm.PrivatePackage()
file := jen.NewFilePath(priv.Path())
file.Add(i.Definition().Definition())
f = append(f, &File{
F: file,
FileName: fmt.Sprintf("gen_%s.go", i.PropertyName()),
Directory: dir,
Directory: priv.WriteDir(),
})
// Interface
dir = pm.PublicPackage().Path()
file = jen.NewFilePath(dir)
pub := pm.PublicPackage()
file = jen.NewFilePath(pub.Path())
file.Add(i.InterfaceDefinition(pm.PublicPackage()).Definition())
f = append(f, &File{
F: file,
FileName: fmt.Sprintf("gen_%s_interface.go", i.PropertyName()),
Directory: dir,
Directory: pub.WriteDir(),
})
}
for _, i := range v.NFProps {
@ -126,25 +126,25 @@ func (c Converter) convertToFiles(v vocabulary) (f []*File, e error) {
return
}
// Implementation
dir := pm.PrivatePackage().Path()
file := jen.NewFilePath(dir)
priv := pm.PrivatePackage()
file := jen.NewFilePath(priv.Path())
s, t := i.Definitions()
file.Add(s.Definition()).Line().Add(t.Definition())
f = append(f, &File{
F: file,
FileName: fmt.Sprintf("gen_%s.go", i.PropertyName()),
Directory: dir,
Directory: priv.WriteDir(),
})
// TODO: Interface
dir = pm.PublicPackage().Path()
file = jen.NewFilePath(dir)
pub := pm.PublicPackage()
file = jen.NewFilePath(pub.Path())
for _, intf := range i.InterfaceDefinitions(pm.PublicPackage()) {
file.Add(intf.Definition())
}
f = append(f, &File{
F: file,
FileName: fmt.Sprintf("gen_%s_interface.go", i.PropertyName()),
Directory: dir,
Directory: pub.WriteDir(),
})
}
for _, i := range v.Types {
@ -154,32 +154,32 @@ func (c Converter) convertToFiles(v vocabulary) (f []*File, e error) {
return
}
// Implementation
dir := pm.PrivatePackage().Path()
file := jen.NewFilePath(dir)
priv := pm.PrivatePackage()
file := jen.NewFilePath(priv.Path())
file.Add(i.Definition().Definition())
f = append(f, &File{
F: file,
FileName: fmt.Sprintf("gen_%s.go", i.TypeName()),
Directory: dir,
Directory: priv.WriteDir(),
})
// TODO: Interface
dir = pm.PublicPackage().Path()
file = jen.NewFilePath(dir)
pub := pm.PublicPackage()
file = jen.NewFilePath(pub.Path())
file.Add(i.InterfaceDefinition(pm.PublicPackage()).Definition())
f = append(f, &File{
F: file,
FileName: fmt.Sprintf("gen_%s_interface.go", i.TypeName()),
Directory: dir,
Directory: pub.WriteDir(),
})
}
// TODO: For Manager
dir := c.VocabularyRoot.PrivatePackage().Path()
file := jen.NewFilePath(dir)
priv := c.VocabularyRoot.PrivatePackage()
file := jen.NewFilePath(priv.Path())
file.Add(v.Manager.PrivateManager().Definition())
f = append(f, &File{
F: file,
FileName: "gen_manager.go",
Directory: dir,
Directory: priv.WriteDir(),
})
return
}

ファイルの表示

@ -37,6 +37,8 @@ func init() {
var (
input = flag.String("input", "spec.json", "Input JSON-LD specification used to generate Go code.")
// TODO: Be more rigorous when applying this. Also, clear the default value I am using for convenience.
prefix = flag.String("prefix", "github.com/cjslep/activity/tools/exp/tmp", "Package prefix to use for all generated package paths. This should be the prefix in the GOPATH directory if generating in a subdirectory.")
// TODO: Use this flag
root = flag.String("root", "github.com/go-fed/activity/", "Go import path prefix for generated packages")
xmlpkg = flag.String("xmlpkg", "github.com/go-fed/activity/tools/exp/ref/xml", "Go package location for known XML references")
@ -58,6 +60,7 @@ func (l *list) Set(v string) error {
}
func main() {
// TODO: Use only one kind of flag style.
var ref list
var refspec list
var refpkg list
@ -82,11 +85,11 @@ func main() {
}
c := &convert.Converter{
Registry: registry,
VocabularyRoot: props.NewPackageManager("gen/as"),
VocabularyRoot: props.NewPackageManager(*prefix, "gen/as"),
PropertyPackagePolicy: convert.PropertyFlatUnderRoot,
PropertyPackageRoot: props.NewPackageManager("gen/as/props"),
PropertyPackageRoot: props.NewPackageManager(*prefix, "gen/as/props"),
TypePackagePolicy: convert.TypeFlatUnderRoot,
TypePackageRoot: props.NewPackageManager("gen/as/types"),
TypePackageRoot: props.NewPackageManager(*prefix, "gen/as/types"),
}
f, err := c.Convert(p)
if err != nil {

ファイルの表示

@ -8,13 +8,15 @@ import (
// PackageManager manages the path and names of a package consisting of a public
// and a private portion.
type PackageManager struct {
prefix string
root string
public string
private string
}
func NewPackageManager(root string) *PackageManager {
func NewPackageManager(prefix, root string) *PackageManager {
return &PackageManager{
prefix: prefix,
root: root,
public: "",
private: "internal",
@ -48,6 +50,7 @@ func (p *PackageManager) toPackage(suffix string, public bool) Package {
s := strings.Split(path, "/")
name := s[len(s)-1]
return Package{
prefix: p.prefix,
path: path,
name: name,
isPublic: public,
@ -56,6 +59,7 @@ func (p *PackageManager) toPackage(suffix string, public bool) Package {
}
type Package struct {
prefix string
path string
name string
isPublic bool
@ -63,6 +67,10 @@ type Package struct {
}
func (p Package) Path() string {
return p.prefix + "/" + p.path
}
func (p Package) WriteDir() string {
return p.path
}