Having multiple directives leads to following unformattable generated resolver file.
#check if the user is authenticated or not
directive @isAuthenticated on QUERY | FIELD | FIELD_DEFINITION
#checks user permission scopes
directive @hasScope(scopes: [String]) on QUERY | FIELD | FIELD_DEFINITION
"""Add a user"""
addUser(input: AddUserInput!): User @isAuthenticated @hasScope(scopes: ["User:Create"])
generated resolver code
directive1 := func(ctx context.Context) (interface{}, error) {
return ec.directives.IsAuthenticated(ctx, nil, directive0)
}directive2 := func(ctx context.Context) (interface{}, error) {
scopes, err := ec.unmarshalOString2釟曖殩string(ctx, []interface{}{"User:Create"})
if err != nil{
return nil, err
}
return ec.directives.HasScope(ctx, nil, directive1, scopes)
}
.....
```bash
resolvers/generated.go:61658:4: syntax error: unexpected directive2 at end of statement
resolvers/generated.go:61659:73: syntax error: unexpected { after top level declaration
resolvers/generated.go:61715:4: syntax error: unexpected directive2 at end of statement
resolvers/generated.go:61716:73: syntax error: unexpected { after top level declaration
resolvers/generated.go:62040:4: syntax error: unexpected directive2 at end of statement
resolvers/generated.go:62041:73: syntax error: unexpected { after top level declaration
resolvers/generated.go:62097:4: syntax error: unexpected directive2 at end of statement
resolvers/generated.go:62098:73: syntax error: unexpected { after top level declaration
resolvers/generated.go:62154:4: syntax error: unexpected directive2 at end of statement
resolvers/generated.go:62155:73: syntax error: unexpected { after top level declaration
resolvers/generated.go:62155:73: too many errors
### What did you expect?
Work/ compile without any formatting issues. A properly formatted resolver file.
```go
directive1 := func(ctx context.Context) (interface{}, error) {
return ec.directives.IsAuthenticated(ctx, nil, directive0)
}
directive2 := func(ctx context.Context) (interface{}, error) {
scopes, err := ec.unmarshalOString2釟曖殩string(ctx, []interface{}{"User:Create"})
if err != nil{
return nil, err
}
return ec.directives.HasScope(ctx, nil, directive1, scopes)
}
.....
gqlgen version?0.9.1go version?1.12go modulesthe culprit seems to be directives.gotpl in codegen package.
updating the following block by removing the space trim markers (-).
{{ define "implDirectives" }}{{ $in := .DirectiveObjName }}
{{ range $i, $directive := .ImplDirectives }}
directive{{add $i 1}} := func(ctx context.Context) (interface{}, error) {
{{- range $arg := $directive.Args }}
{{- if notNil "Value" $arg }}
{{ $arg.VarName }}, err := ec.{{ $arg.TypeReference.UnmarshalFunc }}(ctx, {{ $arg.Value | dump }})
if err != nil{
return nil, err
}
{{- else if notNil "Default" $arg }}
{{ $arg.VarName }}, err := ec.{{ $arg.TypeReference.UnmarshalFunc }}(ctx, {{ $arg.Default | dump }})
if err != nil{
return nil, err
}
{{- end }}
{{- end }}
return ec.directives.{{$directive.Name|ucFirst}}({{$directive.ResolveArgs $in $i }})
}
{{ end }}
{{ end }}
@vektah I can create a P.R for this if you'd like me to.
the culprit seems to be
directives.gotplincodegenpackage.updating the following block by removing the space trim markers (
-).{{ define "implDirectives" }}{{ $in := .DirectiveObjName }} {{ range $i, $directive := .ImplDirectives }} directive{{add $i 1}} := func(ctx context.Context) (interface{}, error) { {{- range $arg := $directive.Args }} {{- if notNil "Value" $arg }} {{ $arg.VarName }}, err := ec.{{ $arg.TypeReference.UnmarshalFunc }}(ctx, {{ $arg.Value | dump }}) if err != nil{ return nil, err } {{- else if notNil "Default" $arg }} {{ $arg.VarName }}, err := ec.{{ $arg.TypeReference.UnmarshalFunc }}(ctx, {{ $arg.Default | dump }}) if err != nil{ return nil, err } {{- end }} {{- end }} return ec.directives.{{$directive.Name|ucFirst}}({{$directive.ResolveArgs $in $i }}) } {{ end }} {{ end }}
Worked like a charm, saved my ass. Hope they marge it soon to the master.
Fxied in 0.9.3
Most helpful comment
the culprit seems to be
directives.gotplincodegenpackage.updating the following block by removing the space trim markers (
-).