Skip to content

Commit d960c2b

Browse files
committed
feat(util): go mod parse
1 parent 86036b9 commit d960c2b

File tree

4 files changed

+59
-55
lines changed

4 files changed

+59
-55
lines changed

cmd/go_migrate.go

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,13 @@ var AddGoMigration = command.InlineHandler(func(c *cli.Context, cfg interface{})
2727
return errors.WithStack(err)
2828
}
2929

30-
found := false
31-
for _, r := range meta.Requires {
32-
if r.Mod.Path == "entgo.io/ent" {
33-
found = true
34-
break
35-
}
36-
}
37-
38-
if !found {
30+
if !meta.Contains("entgo.io/ent") {
3931
return errors.New("ent is not used in the project")
4032
}
4133

34+
author := meta.GetAuthor()
35+
project := meta.GetProject()
36+
4237
return task.NewSequentialExecutor(
4338
[]task.Task{
4439
task.NewParallelExecutor(
@@ -48,11 +43,11 @@ var AddGoMigration = command.InlineHandler(func(c *cli.Context, cfg interface{})
4843
AddNodes( // migrate
4944
&task.FileGenerator{
5045
Name: "migrate.go",
51-
Data: bytes.NewBufferString(templates.GoMigrateMigration(meta.ProjectName, meta.Author)),
46+
Data: bytes.NewBufferString(templates.GoMigrateMigration(project, author)),
5247
},
5348
&task.FileGenerator{
5449
Name: "wire.go",
55-
Data: bytes.NewBufferString(templates.GoMigrateWire(meta.ProjectName, meta.Author)),
50+
Data: bytes.NewBufferString(templates.GoMigrateWire(project, author)),
5651
},
5752
).
5853
Branch("config").
@@ -66,14 +61,14 @@ var AddGoMigration = command.InlineHandler(func(c *cli.Context, cfg interface{})
6661
AddNodes( // cmd
6762
&task.FileGenerator{
6863
Name: "main.go",
69-
Data: bytes.NewBufferString(templates.GoMigrateCmdMain(meta.ProjectName, meta.Author)),
64+
Data: bytes.NewBufferString(templates.GoMigrateCmdMain(project, author)),
7065
},
7166
).Up().
7267
Branch("pkg").Branch("db").
7368
AddNodes( // pkg/db
7469
&task.FileGenerator{
7570
Name: "ent.go",
76-
Data: bytes.NewBufferString(templates.GoMigratePkgEnt(meta.ProjectName, meta.Author)),
71+
Data: bytes.NewBufferString(templates.GoMigratePkgEnt(project, author)),
7772
},
7873
).
7974
Flatten(),

cmd/go_service.go

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,11 @@ import (
2121
)
2222

2323
type GoServiceConfig struct {
24-
GenType string `flag:"type" alias:"t" usage:"api type" validate:"required,oneof=go"` // generation type
25-
ArgName string `arg:"0" alias:"module_name" validate:"required,var"` // go pkg name
24+
Module string `arg:"0" alias:"module_name" validate:"required,var"` // go pkg name
2625
}
2726

2827
var GoServiceCmd = command.NewCliCommand("service", "add a go service",
29-
&GoServiceConfig{
30-
GenType: "go",
31-
},
28+
&GoServiceConfig{},
3229
command.WithAlias([]string{"svc"}),
3330
command.WithArgUsage("module_name"),
3431
).AddHandlers(
@@ -38,23 +35,18 @@ var GoServiceCmd = command.NewCliCommand("service", "add a go service",
3835
).BuildCommand()
3936

4037
type GenerateGoSimpleService struct {
41-
RegistryFile string
42-
PackageName string
43-
ProjectName string
44-
CamelModuleName string
45-
AuthorName string
46-
Config *GoServiceConfig
38+
RegistryFile string
39+
PackageName string
40+
ProjectName string
41+
DomainName string
42+
AuthorName string
4743
}
4844

4945
var _ command.CommandHandler = &GenerateGoSimpleService{}
5046

51-
func (gga *GenerateGoSimpleService) Cond(c *cli.Context) bool {
52-
return true
53-
}
54-
5547
func (gga *GenerateGoSimpleService) Handle(c *cli.Context, cfg interface{}) error {
5648
config := cfg.(*GoServiceConfig)
57-
pkgName := strings.ReplaceAll(config.ArgName, "-", "_")
49+
pkgName := strings.ReplaceAll(config.Module, "-", "_")
5850
pkgName = strcase.ToSnake(pkgName)
5951
gga.PackageName = pkgName
6052

@@ -63,13 +55,12 @@ func (gga *GenerateGoSimpleService) Handle(c *cli.Context, cfg interface{}) erro
6355
return errors.WithStack(err)
6456
}
6557

66-
gga.CamelModuleName = strcase.ToCamel(pkgName)
67-
gga.AuthorName = meta.Author
68-
gga.ProjectName = meta.ProjectName
58+
gga.DomainName = strcase.ToCamel(pkgName)
59+
gga.AuthorName = meta.GetAuthor()
60+
gga.ProjectName = meta.GetProject()
6961

7062
dir := gga.PackageName
71-
_, err = os.Stat(dir)
72-
if err == nil {
63+
if util.Exists(dir) {
7364
log.WithField("module", dir).Infof("module already exists")
7465
return nil
7566
}
@@ -82,7 +73,7 @@ func (gga *GenerateGoSimpleService) Handle(c *cli.Context, cfg interface{}) erro
8273
}
8374

8475
func (gga *GenerateGoSimpleService) generateFiles() task.Task {
85-
modelName := gga.CamelModuleName
76+
modelName := gga.DomainName
8677
pkgName := gga.PackageName
8778
projectName := gga.ProjectName
8879
authorName := gga.AuthorName

internal/command/extract.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,15 @@ func (efv *extractFlagsVisitor) visitString(f *configField) {
5454
cf := &cli.StringFlag{
5555
Name: flag,
5656
}
57-
if isRequired(f) {
58-
cf.Required = true
59-
}
6057

6158
if f.hasDefault() {
6259
cf.Value = f.value.String()
6360
}
6461

62+
if isRequired(f) {
63+
cf.Required = true
64+
}
65+
6566
if u, err := getUsage(f); err == nil {
6667
cf.Usage = u
6768
}
@@ -87,14 +88,15 @@ func (efv *extractFlagsVisitor) visitBoolean(f *configField) {
8788
cf := &cli.BoolFlag{
8889
Name: flag,
8990
}
90-
if isRequired(f) {
91-
cf.Required = true
92-
}
9391

9492
if f.hasDefault() {
9593
cf.Value = f.value.Bool()
9694
}
9795

96+
if isRequired(f) {
97+
cf.Required = true
98+
}
99+
98100
if u, err := getUsage(f); err == nil {
99101
cf.Usage = u
100102
}
@@ -120,14 +122,15 @@ func (efv *extractFlagsVisitor) visitInt(f *configField) {
120122
cf := &cli.IntFlag{
121123
Name: flag,
122124
}
123-
if isRequired(f) {
124-
cf.Required = true
125-
}
126125

127126
if f.hasDefault() {
128127
cf.Value = int(f.value.Int())
129128
}
130129

130+
if isRequired(f) {
131+
cf.Required = true
132+
}
133+
131134
if u, err := getUsage(f); err == nil {
132135
cf.Usage = u
133136
}

internal/util/parse.go

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ var (
1515
)
1616

1717
type GoModMeta struct {
18-
Author string
19-
ProjectName string
20-
Requires []*modfile.Require
18+
author string
19+
project string
20+
mf *modfile.File
2121
}
2222

2323
func ParseGoMod(path string) (*GoModMeta, error) {
@@ -39,16 +39,31 @@ func ParseGoMod(path string) (*GoModMeta, error) {
3939
return nil, errors.Wrap(err, "failed to parse mod file")
4040
}
4141

42-
meta := new(GoModMeta)
43-
meta.Requires = mp.Require
44-
4542
url := mp.Module.Mod.Path
4643
parts := strings.Split(url, "/")
47-
meta.Author = parts[len(parts)-2]
48-
meta.ProjectName = parts[len(parts)-1]
44+
author := parts[len(parts)-2]
45+
project := parts[len(parts)-1]
46+
47+
return &GoModMeta{
48+
mf: mp,
49+
author: author,
50+
project: project,
51+
}, nil
52+
}
53+
54+
func (gm *GoModMeta) GetAuthor() string {
55+
return gm.author
56+
}
57+
58+
func (gm *GoModMeta) GetProject() string {
59+
return gm.project
60+
}
4961

50-
if meta.Author == "" || meta.ProjectName == "" {
51-
return nil, errors.New("failed to extrace meta data from go.mod")
62+
func (gm *GoModMeta) Contains(module string) bool {
63+
for _, r := range gm.mf.Require {
64+
if r.Mod.Path == module {
65+
return true
66+
}
5267
}
53-
return meta, nil
68+
return false
5469
}

0 commit comments

Comments
 (0)