Commit Graph
49 Commits
Author SHA1 Message Date
Ben KraftandGitHub 8815d0991c Big refactor to separate operation-traversal from code-generation (#51)
## Summary:
I've felt for a while that types.go is way too confusing, and as I
started to implement some of the more complex cases of generating
interface-types, the cracks were really starting to show.  Luckily, I
also finally realized how to fix it: we need to separate the process of
traversing the GraphQL operation and schema to decide what types to
generate from the process of actually generating those types.  This
requires an extra set of intermediate data structures, but I think it
makes things quite a lot easier to understand -- and, importantly, it
means that the code-generation doesn't need to go in the order we
traverse the query/schema.

So in this commit, I did that huge refactor.  It's probably best to just
review types.go and traverse.go as if they were new; the old code was
quite hard to understand and the new code will hopefully make a lot more
sense.  (And to that end, review comments about what could be organized
better or needs more documentation are very much in order, even for code
that is mostly unchanged.)

This does introduce one bug, sort of, which is that rather than
generating broken code for list-of-interface fields, we generate no code
at all.  (A TODO in unmarshal.go describes why.)  I'll fix this when I
add support for those fields.  (It's all behind the AllowBrokenFeatures
flag, anyway.)  Otherwise, the only changes to generated code are that a
few methods are ordered differently, because we now generate the
implements-interface methods with the interface, rather than the
implementations, as it's much simpler that way.  (In GraphQL, unlike Go,
we know the list of all possible implementations of each interface, so
this is possible.)

## Test plan:
golangci-lint run ./... && go test ./...

Author: benjaminjkraft

Reviewers: dnerdy, benjaminjkraft, aberkan, csilvers, MiguelCastillo

Required Reviewers: 

Approved by: dnerdy

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

Pull request URL: https://github.com/Khan/genqlient/pull/51
2021-08-25 11:49:30 -07:00
Ben KraftandGitHub 700392315a Enable golangci-lint (#49)
## Summary:
It would be nice to have some linting beyond `go vet`!  Now we do.  I
started by copying the config from Khan/webapp.  I did remove a couple
of staticcheck checks that I didn't feel were useful.  (Note also that
exportloopref is the replacement for scopelint in newer golangci-lint.)

Included are all the needed lint fixes; most are stylistic but the
changes in the example are a (minor) bugfix.

Fixes #22.
Issue: https://github.com/Khan/genqlient/issues/22

## Test plan:
make check

Author: benjaminjkraft

Reviewers: aberkan, dnerdy, benjaminjkraft, csilvers, MiguelCastillo

Required Reviewers: 

Approved by: aberkan, dnerdy

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

Pull request URL: https://github.com/Khan/genqlient/pull/49
2021-08-20 10:39:12 -07:00
Ben Kraft d449acdda3 Clarify object type documentation
Craig pointed out this is a bit confusing when you don't have all the
fields.  Now we say so, but still include the type's description in case
it's useful.

Fixes #37.
2021-04-23 18:13:32 -07:00
Ben Kraft b399e0d740 move TODOs into issues 2021-04-21 19:05:38 -07:00
Ben Kraft 748f2cf072 Add documentation to types and fields
Fixes #3.
2021-04-21 18:07:36 -07:00
Ben Kraft 32fea7fae4 fix incorrect enum-value type names for enums used as inputs
luckily webapp is now a much more complete test suite and genqlient's
own tests, so it caught this!
2021-04-21 17:41:33 -07:00
Ben Kraft 93df752ac3 a few more tiny steps in types.go 2021-04-15 19:11:12 -07:00
Ben Kraft be225ba9d0 actually starting to make progress on types.go 2021-04-15 19:00:41 -07:00
Ben Kraft 89fe78e11a bit more nibbling at types.go 2021-04-15 18:00:31 -07:00
Ben Kraft 40fc7fdbc5 handle nested lists correctly 2021-04-15 17:49:09 -07:00
Ben Kraft e82a32f47a few more attempts at cleaning up types.go 2021-04-15 17:46:13 -07:00
Ben Kraft f72cb9d346 try to clean up types.go a bit, mostly fail 2021-04-15 17:36:04 -07:00
Ben Kraft 2c087c7821 big overhaul of error-formatting, to get positions more consistently
fixes #2
2021-04-15 17:01:46 -07:00
Ben Kraft 136ac7729f include alias even if we don't need it 2021-04-15 11:36:46 -07:00
Ben Kraft e597cac74c add option to force using a pointer 2021-04-12 16:01:21 -07:00
Ben Kraft b4e8316c6a add support for custom scalars -- mainly adding proper import machinery 2021-04-08 13:07:31 -07:00
Ben Kraft 0432f3f434 miscellaneous test coverage 2021-04-02 16:34:15 -07:00
Ben Kraft 334c186944 error if you try to use features that aren't done (fragments/interfaces) 2021-04-02 16:19:50 -07:00
Ben Kraft de038dc428 shorten enum and input-object type-names 2021-04-01 12:40:54 -07:00
Ben Kraft fb3c0b3cb4 more TODOs around type naming 2021-03-30 17:56:14 -07:00
Ben Kraft 27ee3c2dbd fixes while integrating into webapp 2021-03-30 17:53:31 -07:00
Ben Kraft a9054e484f remove a stray printf 2021-03-22 19:17:45 -07:00
Ben Kraft 17a95fd4de more TODOs, and especially clarify the situation for input type names 2021-03-22 18:45:52 -07:00
Ben Kraft a42c9b8166 clean up various TODOs and comments 2021-03-22 18:11:51 -07:00
Ben Kraft 463e3ed319 remove pointers for optionality -- shockingly easy 2021-03-22 17:39:22 -07:00
Ben Kraft fed38e4f55 redo type naming 2021-03-19 18:40:58 -07:00
Ben Kraft 58dc311289 rename selection to field 2020-07-16 13:50:52 -07:00
Ben Kraft cf7136ca65 total rewrite to interface handling; not complete but it compiles 2020-07-16 13:28:43 -07:00
Ben Kraft af4a765a32 back out interfaces/unions, in preparation for new approach 2020-07-16 09:53:21 -07:00
Ben Kraft d2d5c9469d notes on approaches to the interface/fragment problem 2020-07-15 17:36:24 -07:00
Ben Kraft 9473829f81 refactor to make selections make a little more sense 2020-07-15 17:35:47 -07:00
Ben Kraft a023cfb0cf basic support for fragments 2020-07-15 17:35:47 -07:00
Ben Kraft 6f0e5fdf0d unions are easy too, sorta 2020-07-15 17:35:47 -07:00
Ben Kraft cf6f57f5f1 interfaces themselves are actually trivial! 2020-07-15 17:35:47 -07:00
Ben Kraft 1156e6ceae minor cleanup 2020-05-01 18:22:56 -07:00
Ben Kraft 2fb9cd53ba clean up handling of scalars 2020-04-10 18:20:17 -07:00
Ben Kraft 7ab06dfd30 add support for enums 2020-04-10 18:16:32 -07:00
Ben Kraft 9510470937 add support for non-scalar inputs 2020-04-10 17:02:18 -07:00
Ben Kraft b600df7877 big refactor to put the codegen onto methods of an object 2020-04-10 15:21:23 -07:00
Ben Kraft dfea9bf128 push type-name into types.go 2020-04-10 14:30:56 -07:00
Ben Kraft 4f02619b0b break up typegen a bit better 2020-04-02 19:24:42 -07:00
Ben Kraft 8d87040069 refactor typegen to explicitly handle kinds 2020-04-02 18:35:04 -07:00
Ben Kraft f8545f7e76 refactor typegen to use builder 2020-04-02 18:27:08 -07:00
Ben Kraft d039587b39 pass errors a few more places 2020-04-02 18:22:07 -07:00
Ben Kraft 35f94b3c48 some tests for type-generation 2020-04-02 18:16:40 -07:00
Ben Kraft c19f62c2c7 non-ridiculous handling of scalars 2020-01-17 18:23:29 -05:00
Ben Kraft 12605986d0 do our own aliasing if the queries aren't right 2020-01-02 19:01:26 -08:00
Ben Kraft 9746c818fd genql: quick hack at variables 2020-01-02 17:52:55 -08:00
Ben Kraft e8b5ccbcda generates something mostly plausiblegit add . 2019-12-23 23:22:19 -05:00