Skip to content

Commit

Permalink
bugfix: local variable 'data' colliding with argument name (#291)
Browse files Browse the repository at this point in the history
This PR makes [THIS ISSUE](#279)
a lot less likely to occur.
The local name "data" in generated functions was colliding with
arguments called "data".

Note that no explicit name collision check was added, but "data" inside
the function was just renamed to "data_" to make it less likely to
collide with arguments.

---------

Co-authored-by: Ben Kraft <ben@benkraft.org>
  • Loading branch information
zholti and benjaminjkraft committed Aug 1, 2023
1 parent 0aa03e9 commit 28aafc7
Show file tree
Hide file tree
Showing 69 changed files with 985 additions and 874 deletions.
1 change: 1 addition & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ When releasing a new version:

### Bug fixes:
- The presence of negative pointer directives, i.e., `# @genqlient(pointer: false)` are now respected even in the when `optional: pointer` is set in the configuration file.
- Made name collisions between query/mutation arguments and local function variables less likely.

## v0.6.0

Expand Down
44 changes: 22 additions & 22 deletions example/generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 15 additions & 15 deletions generate/operation.go.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ const {{.Name}}_Operation = `{{$.Body}}`
{{.Doc}}
func {{.Name}}(
{{if ne .Config.ContextType "-" -}}
ctx {{ref .Config.ContextType}},
ctx_ {{ref .Config.ContextType}},
{{end}}
{{- if not .Config.ClientGetter -}}
client {{ref "github.com/Khan/genqlient/graphql.Client"}},
client_ {{ref "github.com/Khan/genqlient/graphql.Client"}},
{{end}}
{{- if .Input -}}
{{- range .Input.Fields -}}
Expand All @@ -16,7 +16,7 @@ func {{.Name}}(
{{end -}}
{{end -}}
) (*{{.ResponseName}}, {{if .Config.Extensions -}}map[string]interface{},{{end}} error) {
req := &graphql.Request{
req_ := &graphql.Request{
OpName: "{{.Name}}",
Query: {{.Name}}_Operation,
{{if .Input -}}
Expand All @@ -27,23 +27,23 @@ func {{.Name}}(
},
{{end -}}
}
var err error
var err_ error
{{if .Config.ClientGetter -}}
var client graphql.Client
var client_ graphql.Client

client, err = {{ref .Config.ClientGetter}}({{if ne .Config.ContextType "-"}}ctx{{else}}{{end}})
if err != nil {
return nil, {{if .Config.Extensions -}}nil,{{end -}} err
client_, err_ = {{ref .Config.ClientGetter}}({{if ne .Config.ContextType "-"}}ctx_{{else}}{{end}})
if err_ != nil {
return nil, {{if .Config.Extensions -}}nil,{{end -}} err_
}
{{end}}
var data {{.ResponseName}}
resp := &graphql.Response{Data: &data}
var data_ {{.ResponseName}}
resp_ := &graphql.Response{Data: &data_}

err = client.MakeRequest(
{{if ne .Config.ContextType "-"}}ctx{{else}}nil{{end}},
req,
resp,
err_ = client_.MakeRequest(
{{if ne .Config.ContextType "-"}}ctx_{{else}}nil{{end}},
req_,
resp_,
)

return &data, {{if .Config.Extensions -}}resp.Extensions,{{end -}} err
return &data_, {{if .Config.Extensions -}}resp_.Extensions,{{end -}} err_
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
mutation MutationArgsWithCollidingNames($data: String!, $req: Int, $resp: Int, $client: String) {
updateUser(data: $data, req: $req, resp: $resp, client: $client) {
id
}
}
5 changes: 4 additions & 1 deletion generate/testdata/queries/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,10 @@ type Query {
}

type Mutation {
createUser(name: String!, email: String): User
createUser(name: String!, email: String): User
# The following query is non-sensical, but tests that argument names don't
# collide with local var names in generated functions
updateUser(data: String!, req: Int, resp: Int, client: String): User
}

input getPokemonBoolExp {
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 28aafc7

Please sign in to comment.