diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..cf01fa4 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,34 @@ +run: + deadline: 1m + tests: false + #skip-files: + # - ".*\\.gen\\.go" + +linters-settings: + golint: + min-confidence: 0 + maligned: + suggest-new: true + goconst: + min-len: 5 + min-occurrences: 4 + misspell: + locale: US + +linters: + disable-all: true + enable: + - goconst + - misspell + - deadcode + - misspell + - structcheck + - errcheck + - unused + - varcheck + - staticcheck + - unconvert + - gofmt + - goimports + - golint + - ineffassign diff --git a/.travis.yml b/.travis.yml index 76545aa..95d4621 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,15 +3,14 @@ go: 1.11.x go_import_path: moul.io/protoc-gen-gotemplate install: - go get github.com/Masterminds/glide -- wget https://raw.githubusercontent.com/grpc-ecosystem/grpc-gateway/master/.travis/install-protoc.sh && chmod +x install-protoc.sh && ./install-protoc.sh 3.4.0 +- wget https://raw.githubusercontent.com/grpc-ecosystem/grpc-gateway/v1.5.0/.travis/install-protoc.sh && chmod +x install-protoc.sh && ./install-protoc.sh 3.4.0 - go get -u github.com/golang/protobuf/protoc-gen-go - go get github.com/securego/gosec/cmd/gosec/... -- go get -u github.com/alecthomas/gometalinter -- gometalinter --install +- curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s v1.12.2 script: - make install - make test -- make lint +- PATH=$PATH:$(pwd)/bin make lint cache: directories: - $HOME/local diff --git a/Makefile b/Makefile index 694b0b0..7395147 100644 --- a/Makefile +++ b/Makefile @@ -33,4 +33,4 @@ docker.push: docker.build .PHONY: lint lint: - gometalinter --disable-all --enable=errcheck --enable=vet --enable=vetshadow --enable=golint --enable=gosec --enable=ineffassign --enable=goconst --enable=goimports --enable=gofmt --exclude="Binds to all network interfaces" --exclude="should have comment" --enable=staticcheck --enable=gosimple --enable=misspell --deadline=120s . ./cmd/... ./helpers/... + golangci-lint run --verbose . ./helpers ./cmd/... diff --git a/README.md b/README.md index d87aff2..eb609da 100644 --- a/README.md +++ b/README.md @@ -76,56 +76,57 @@ This project uses [Masterminds/sprig](https://github.com/Masterminds/sprig) libr Non-exhaustive list of new helpers: * **all the functions from [sprig](https://github.com/Masterminds/sprig)** -* `string` -* `json` -* `prettyjson` -* `splitArray` -* `first` -* `last` -* `upperFirst` -* `lowerFirst` -* `camelCase` -* `lowerCamelCase` -* `kebabCase` -* `contains` -* `trimstr` -* `index` -* `snakeCase` -* `getProtoFile` -* `getMessageType` -* `getEnumValue` -* `isFieldMessage` -* `isFieldMessageTimeStamp` -* `isFieldRepeated` -* `haskellType` -* `goType` -* `goZeroValue` -* `goTypeWithPackage` -* `jsType` -* `jsSuffixReserved` -* `namespacedFlowType` -* `httpVerb` -* `httpPath` -* `httpPathsAdditionalBindings` -* `httpBody` -* `shortType` -* `urlHasVarsFromMessage` -* `lowerGoNormalize` -* `goNormalize` -* `leadingComment` -* `trailingComment` -* `leadingDetachedComments` -* `stringFieldExtension` -* `stringMethodOptionsExtension` +* `add` * `boolFieldExtension` -* `isFieldMap` +* `camelCase` +* `contains` +* `divide` * `fieldMapKeyType` * `fieldMapValueType` -* `replaceDict` -* `add` -* `subtract` +* `first` +* `getEnumValue` +* `getMessageType` +* `getProtoFile` +* `goNormalize` +* `goTypeWithPackage` +* `goType` +* `goZeroValue` +* `haskellType` +* `httpBody` +* `httpPath` +* `httpPathsAdditionalBindings` +* `httpVerb` +* `index` +* `int64FieldExtension` +* `isFieldMap` +* `isFieldMessageTimeStamp` +* `isFieldMessage` +* `isFieldRepeated` +* `jsSuffixReserved` +* `jsType` +* `json` +* `kebabCase` +* `last` +* `leadingComment` +* `leadingDetachedComments` +* `lowerCamelCase` +* `lowerFirst` +* `lowerGoNormalize` * `multiply` -* `divide` +* `namespacedFlowType` +* `prettyjson` +* `replaceDict` +* `shortType` +* `snakeCase` +* `splitArray` +* `stringFieldExtension` +* `stringMethodOptionsExtension` +* `string` +* `subtract` +* `trailingComment` +* `trimstr` +* `upperFirst` +* `urlHasVarsFromMessage` See the project helpers for the complete list. diff --git a/assets/assets b/assets/assets new file mode 100644 index 0000000..8247d2f --- /dev/null +++ b/assets/assets @@ -0,0 +1,6 @@ + /Users/moul/go/src/moul.io/protoc-gen-gotemplate/assets: + total used in directory 552 available 9223372036849978910 + drwxr-xr-x 4 moul staff 128 Dec 9 11:31 . + lrwxr-xr-x 1 moul staff 33 Dec 9 11:31 .#web-editor.jpg -> moul@manfred-spacegray.local.9471 + drwxr-xr-x 21 moul staff 672 Sep 13 18:05 .. + -rw-r--r--@ 1 moul staff 280357 Oct 26 2017 web-editor.jpg diff --git a/encoder.go b/encoder.go index 2be60b8..713f459 100644 --- a/encoder.go +++ b/encoder.go @@ -11,7 +11,7 @@ import ( "time" "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/golang/protobuf/protoc-gen-go/plugin" + plugin_go "github.com/golang/protobuf/protoc-gen-go/plugin" pgghelpers "moul.io/protoc-gen-gotemplate/helpers" ) diff --git a/examples/go-kit/services/session/gen/endpoints/endpoints.go b/examples/go-kit/services/session/gen/endpoints/endpoints.go index 597ef54..b7196c2 100644 --- a/examples/go-kit/services/session/gen/endpoints/endpoints.go +++ b/examples/go-kit/services/session/gen/endpoints/endpoints.go @@ -5,8 +5,8 @@ import ( "fmt" "github.com/go-kit/kit/endpoint" - pb "moul.io/protoc-gen-gotemplate/examples/go-kit/services/session/gen/pb" oldcontext "golang.org/x/net/context" + pb "moul.io/protoc-gen-gotemplate/examples/go-kit/services/session/gen/pb" ) var _ = endpoint.Chain diff --git a/examples/go-kit/services/sprint/gen/endpoints/endpoints.go b/examples/go-kit/services/sprint/gen/endpoints/endpoints.go index 0b4558a..6db874c 100644 --- a/examples/go-kit/services/sprint/gen/endpoints/endpoints.go +++ b/examples/go-kit/services/sprint/gen/endpoints/endpoints.go @@ -5,8 +5,8 @@ import ( "fmt" "github.com/go-kit/kit/endpoint" - pb "moul.io/protoc-gen-gotemplate/examples/go-kit/services/sprint/gen/pb" oldcontext "golang.org/x/net/context" + pb "moul.io/protoc-gen-gotemplate/examples/go-kit/services/sprint/gen/pb" ) var _ = endpoint.Chain diff --git a/examples/go-kit/services/user/gen/endpoints/endpoints.go b/examples/go-kit/services/user/gen/endpoints/endpoints.go index f995b6e..7bada77 100644 --- a/examples/go-kit/services/user/gen/endpoints/endpoints.go +++ b/examples/go-kit/services/user/gen/endpoints/endpoints.go @@ -5,8 +5,8 @@ import ( "fmt" "github.com/go-kit/kit/endpoint" - pb "moul.io/protoc-gen-gotemplate/examples/go-kit/services/user/gen/pb" oldcontext "golang.org/x/net/context" + pb "moul.io/protoc-gen-gotemplate/examples/go-kit/services/user/gen/pb" ) var _ = endpoint.Chain diff --git a/examples/import/output/output.go b/examples/import/output/output.go index b51b6d0..e651cda 100644 --- a/examples/import/output/output.go +++ b/examples/import/output/output.go @@ -2,39 +2,25 @@ package company import ( + "context" + "moul.io/protoc-gen-gotemplate/examples/import/output/models/article" - "moul.io/protoc-gen-gotemplate/examples/import/output/models/common" + "moul.io/protoc-gen-gotemplate/examples/import/output/models/common" ) type Repository interface { - GetArticle(getarticle *common.GetArticle ) (*company.Article, []*company.Storage, error) + GetArticle(getarticle *common.GetArticle) (*company.Article, []*company.Storage, error) } - - - - - - // ------------------------- Public SDK ----------------------------- - - - - - - // GetArticle : proto: missing extension proto: missing extension -func (sdk *Sdk) GetArticle(ctx context.Context, - getarticle *article.GetArticle, token, requestID string)(article *article.Article, storages []*article.GetArticleResponse_Storage, err error) { +func (sdk *Sdk) GetArticle(ctx context.Context, + getarticle *article.GetArticle, token, requestID string) (article *article.Article, storages []*article.GetArticleResponse_Storage, err error) { - out := &pb.GetArticleResponse{} + out := &pb.GetArticleResponse{} _ = out + return out.Article, out.Storages, nil - return out.Article, out.Storages, nil - } - - - diff --git a/examples/single-package-mode/output/bbb/service.go b/examples/single-package-mode/output/bbb/service.go index 26a1995..e5f956d 100644 --- a/examples/single-package-mode/output/bbb/service.go +++ b/examples/single-package-mode/output/bbb/service.go @@ -4,8 +4,8 @@ package bbb import ( "fmt" - "moul.io/protoc-gen-gotemplate/examples/single-package-mode/output/aaa" "golang.org/x/net/context" + "moul.io/protoc-gen-gotemplate/examples/single-package-mode/output/aaa" ) type Service struct{} diff --git a/examples/time/output/time.go b/examples/time/output/time.go index f9df110..56b6386 100644 --- a/examples/time/output/time.go +++ b/examples/time/output/time.go @@ -2,9 +2,9 @@ package foo import ( - "github.com/golang/protobuf/ptypes/timestamp" + "github.com/golang/protobuf/ptypes/timestamp" ) type Repository interface { - GetFoo(timestamp *timestamp.Timestamp ) (*timestamp.Timestamp, error) -} \ No newline at end of file + GetFoo(timestamp *timestamp.Timestamp) (*timestamp.Timestamp, error) +} diff --git a/go.mod b/go.mod index 52bdf05..cad2ec4 100644 --- a/go.mod +++ b/go.mod @@ -4,10 +4,6 @@ require ( github.com/Masterminds/semver v1.2.2 // indirect github.com/Masterminds/sprig v2.14.1+incompatible github.com/aokoli/goutils v0.0.0-20170502144750-e57d01ace047 // indirect - github.com/dgrijalva/jwt-go v0.0.0-20160621201154-c9eaceb2896d // indirect - github.com/go-kit/kit v0.0.0-20161109000648-9f5c614cd1e7 // indirect - github.com/go-logfmt/logfmt v0.3.0 // indirect - github.com/go-stack/stack v1.5.3 // indirect github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect github.com/golang/protobuf v0.0.0-20161117033126-8ee79997227b github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f // indirect @@ -16,12 +12,10 @@ require ( github.com/grpc-ecosystem/grpc-gateway v1.2.2 github.com/huandu/xstrings v0.0.0-20151130125119-3959339b3335 github.com/imdario/mergo v0.0.0-20171009183408-7fe0c75c13ab // indirect - github.com/kr/fs v0.0.0-20131111012553-2788f0dbd169 // indirect - github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 // indirect github.com/satori/go.uuid v1.1.0 // indirect + github.com/stretchr/testify v1.3.0 // indirect golang.org/x/crypto v0.0.0-20170516161655-0fe963104e9d // indirect - golang.org/x/net v0.0.0-20170108160505-da2b4fa28524 // indirect - golang.org/x/text v0.0.0-20161216064924-a49bea13b776 // indirect + golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 // indirect google.golang.org/genproto v0.0.0-20170517234824-bb3573be0c48 - google.golang.org/grpc v1.0.4 // indirect + gopkg.in/yaml.v2 v2.2.2 // indirect ) diff --git a/go.sum b/go.sum index 3c7ed36..f2e6a00 100644 --- a/go.sum +++ b/go.sum @@ -4,10 +4,8 @@ github.com/Masterminds/sprig v2.14.1+incompatible h1:rTHERm50Xp1Cbb8x7xBCeDp//jM github.com/Masterminds/sprig v2.14.1+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/aokoli/goutils v0.0.0-20170502144750-e57d01ace047 h1:Bn0iqJ/349f606hR0juIGyheAI6+hyg9XUOLhN9udLo= github.com/aokoli/goutils v0.0.0-20170502144750-e57d01ace047/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= -github.com/dgrijalva/jwt-go v0.0.0-20160621201154-c9eaceb2896d/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/go-kit/kit v0.0.0-20161109000648-9f5c614cd1e7/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-stack/stack v1.5.3/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/protobuf v0.0.0-20161117033126-8ee79997227b h1:fE/yi9pibxGEc0gSJuEShcsBXE2d5FW3OudsjE9tKzQ= @@ -24,14 +22,20 @@ github.com/huandu/xstrings v0.0.0-20151130125119-3959339b3335 h1:KZOP9q7J/P4eMBi github.com/huandu/xstrings v0.0.0-20151130125119-3959339b3335/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= github.com/imdario/mergo v0.0.0-20171009183408-7fe0c75c13ab h1:k/Biv+LJL35wkk0Hveko1nj7as4tSHkHdZaNlzn/gcQ= github.com/imdario/mergo v0.0.0-20171009183408-7fe0c75c13ab/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/kr/fs v0.0.0-20131111012553-2788f0dbd169/go.mod h1:glhvuHOU9Hy7/8PwwdtnarXqLagOX0b/TbZx2zLMqEg= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/satori/go.uuid v1.1.0 h1:B9KXyj+GzIpJbV7gmr873NsY6zpbxNy24CBtGrk7jHo= github.com/satori/go.uuid v1.1.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= golang.org/x/crypto v0.0.0-20170516161655-0fe963104e9d h1:qjfFh1YMn6m60QTGoG+IlwUMhNlXJbDyCa6EkHM/N2w= golang.org/x/crypto v0.0.0-20170516161655-0fe963104e9d/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/net v0.0.0-20170108160505-da2b4fa28524/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/text v0.0.0-20161216064924-a49bea13b776/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= google.golang.org/genproto v0.0.0-20170517234824-bb3573be0c48 h1:xfoW+Di7qQQUnjptcGb4/rpc701e3RvfNmaywfMxQVI= google.golang.org/genproto v0.0.0-20170517234824-bb3573be0c48/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/grpc v1.0.4/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/helpers/helpers.go b/helpers/helpers.go index fd6ea99..20a1cc3 100644 --- a/helpers/helpers.go +++ b/helpers/helpers.go @@ -147,6 +147,7 @@ var ProtoHelpersFuncMap = template.FuncMap{ "trailingComment": trailingComment, "leadingDetachedComments": leadingDetachedComments, "stringFieldExtension": stringFieldExtension, + "int64FieldExtension": int64FieldExtension, "stringMethodOptionsExtension": stringMethodOptionsExtension, "boolMethodOptionsExtension": boolMethodOptionsExtension, "boolFieldExtension": boolFieldExtension, @@ -282,12 +283,12 @@ func samePath(a, b []int32) bool { return true } -func findSourceInfoLocation(i interface{}) *descriptor.SourceCodeInfo_Location { +/*func findSourceInfoLocation(i interface{}) *descriptor.SourceCodeInfo_Location { if pathMap == nil { return nil } return pathMap[i] -} +}*/ func leadingComment(i interface{}) string { loc := pathMap[i] @@ -377,6 +378,41 @@ func stringFieldExtension(fieldID int32, f *descriptor.FieldDescriptorProto) str return *str } +func int64FieldExtension(fieldID int32, f *descriptor.FieldDescriptorProto) int64 { + if f == nil { + return 0 + } + if f.Options == nil { + return 0 + } + var extendedType *descriptor.FieldOptions + var extensionType *string + + eds := proto.RegisteredExtensions(f.Options) + if eds[fieldID] == nil { + ed := &proto.ExtensionDesc{ + ExtendedType: extendedType, + ExtensionType: extensionType, + Field: fieldID, + Tag: fmt.Sprintf("bytes,%d", fieldID), + } + proto.RegisterExtension(ed) + eds = proto.RegisteredExtensions(f.Options) + } + + ext, err := proto.GetExtension(f.Options, eds[fieldID]) + if err != nil { + return 0 + } + + i, ok := ext.(*int64) + if !ok { + return 0 + } + + return *i +} + func boolMethodOptionsExtension(fieldID int32, f *descriptor.MethodDescriptorProto) bool { if f == nil { return false @@ -393,7 +429,7 @@ func boolMethodOptionsExtension(fieldID int32, f *descriptor.MethodDescriptorPro ExtendedType: extendedType, ExtensionType: extensionType, Field: fieldID, - Tag: fmt.Sprintf("bytes,%d", fieldID), + Tag: fmt.Sprintf("varint,%d", fieldID), } proto.RegisterExtension(ed) eds = proto.RegisteredExtensions(f.Options) diff --git a/main.go b/main.go index 00a67a1..dea8384 100644 --- a/main.go +++ b/main.go @@ -8,7 +8,7 @@ import ( "github.com/golang/protobuf/proto" "github.com/golang/protobuf/protoc-gen-go/generator" - "github.com/golang/protobuf/protoc-gen-go/plugin" + plugin_go "github.com/golang/protobuf/protoc-gen-go/plugin" ggdescriptor "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" pgghelpers "moul.io/protoc-gen-gotemplate/helpers"