Fix broken behavior for several options on the same node (#105)

## Summary:
Previously, we actually allowed you to put several genqlient directives
on the same node, but the semantics were undocumented (and somewhat
confusing, when it comes to `typename`).  In order to support directives
on input options, we're actually going to be encouraging this usage (see
notes in #14), so it's time to fix it.  To avoid confusion, I just had
conflicting directives be an error, rather than defining which one
"wins".  The same applies to specifying the same option several
times in one directive.

I also fixed two small bugs:
- `typename` on an operation would incorrectly cascade down to
  all input types in a query (causing conflicts).
- directive parse errors had useless positions, now they're correct

## Test plan:
make check


Author: benjaminjkraft

Reviewers: StevenACoffman, dnerdy, aberkan, jvoll, mahtabsabet, MiguelCastillo

Required Reviewers: 

Approved By: StevenACoffman, dnerdy

Checks:  Test (1.17),  Test (1.16),  Test (1.15),  Test (1.14),  Lint,  Test (1.17),  Test (1.16),  Test (1.15),  Test (1.14),  Lint

Pull Request URL: https://github.com/Khan/genqlient/pull/105
This commit is contained in:
Ben Kraft
2021-09-24 11:16:46 -07:00
committed by GitHub
parent 8de55d352e
commit 6e2b1a5811
13 changed files with 293 additions and 39 deletions
@@ -0,0 +1,2 @@
# @genqlient(pointer: true, pointer: false)
query ConflictingDirectiveArguments { f }
@@ -0,0 +1,3 @@
type Query {
f: String
}
@@ -0,0 +1,3 @@
# @genqlient(pointer: true)
# @genqlient(pointer: false)
query ConflictingDirectives { f }
@@ -0,0 +1,3 @@
type Query {
f: String
}