Skip to content

Commit 28aafc7

Browse files
bugfix: local variable 'data' colliding with argument name (#291)
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 <[email protected]>
1 parent 0aa03e9 commit 28aafc7

File tree

69 files changed

+985
-874
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+985
-874
lines changed

docs/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ When releasing a new version:
2929

3030
### Bug fixes:
3131
- 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.
32+
- Made name collisions between query/mutation arguments and local function variables less likely.
3233

3334
## v0.6.0
3435

example/generated.go

Lines changed: 22 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

generate/operation.go.tmpl

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ const {{.Name}}_Operation = `{{$.Body}}`
44
{{.Doc}}
55
func {{.Name}}(
66
{{if ne .Config.ContextType "-" -}}
7-
ctx {{ref .Config.ContextType}},
7+
ctx_ {{ref .Config.ContextType}},
88
{{end}}
99
{{- if not .Config.ClientGetter -}}
10-
client {{ref "github.com/Khan/genqlient/graphql.Client"}},
10+
client_ {{ref "github.com/Khan/genqlient/graphql.Client"}},
1111
{{end}}
1212
{{- if .Input -}}
1313
{{- range .Input.Fields -}}
@@ -16,7 +16,7 @@ func {{.Name}}(
1616
{{end -}}
1717
{{end -}}
1818
) (*{{.ResponseName}}, {{if .Config.Extensions -}}map[string]interface{},{{end}} error) {
19-
req := &graphql.Request{
19+
req_ := &graphql.Request{
2020
OpName: "{{.Name}}",
2121
Query: {{.Name}}_Operation,
2222
{{if .Input -}}
@@ -27,23 +27,23 @@ func {{.Name}}(
2727
},
2828
{{end -}}
2929
}
30-
var err error
30+
var err_ error
3131
{{if .Config.ClientGetter -}}
32-
var client graphql.Client
32+
var client_ graphql.Client
3333

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

42-
err = client.MakeRequest(
43-
{{if ne .Config.ContextType "-"}}ctx{{else}}nil{{end}},
44-
req,
45-
resp,
42+
err_ = client_.MakeRequest(
43+
{{if ne .Config.ContextType "-"}}ctx_{{else}}nil{{end}},
44+
req_,
45+
resp_,
4646
)
4747

48-
return &data, {{if .Config.Extensions -}}resp.Extensions,{{end -}} err
48+
return &data_, {{if .Config.Extensions -}}resp_.Extensions,{{end -}} err_
4949
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
mutation MutationArgsWithCollidingNames($data: String!, $req: Int, $resp: Int, $client: String) {
2+
updateUser(data: $data, req: $req, resp: $resp, client: $client) {
3+
id
4+
}
5+
}

generate/testdata/queries/schema.graphql

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,10 @@ type Query {
184184
}
185185

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

190193
input getPokemonBoolExp {

generate/testdata/snapshots/TestGenerate-ComplexInlineFragments.graphql-ComplexInlineFragments.graphql.go

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

generate/testdata/snapshots/TestGenerate-ComplexNamedFragments.graphql-ComplexNamedFragments.graphql.go

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

generate/testdata/snapshots/TestGenerate-CovariantInterfaceImplementation.graphql-CovariantInterfaceImplementation.graphql.go

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

generate/testdata/snapshots/TestGenerate-CustomMarshal.graphql-CustomMarshal.graphql.go

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

generate/testdata/snapshots/TestGenerate-CustomMarshalSlice.graphql-CustomMarshalSlice.graphql.go

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)