Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for abstract-typed named fragments #79

Merged
merged 2 commits into from
Sep 9, 2021

Commits on Sep 9, 2021

  1. Add support for concrete-typed named fragments

    In previous commits I added support to genqlient for interfaces,
    inline fragments, and, most recently, named fragments of concrete
    (object) type.  This leaves only named fragments of interface type!
    Like other named fragments, these are useful for code-sharing,
    especially if you want some code that can handle the same fields of
    several different types.
    
    As seems to be inevitable with genqlient, this was mostly pretty
    straightforward, although there turned out to be surprisingly many
    places we needed to add some handling; almost anywhere that touches
    interfaces *or* named fragments needed some updates.  But it's all
    hopefully fairly clear code.
    
    As a part of this change I made three semi-related improvements:
    1. I refactored the handling of descriptions (i.e. GoDoc), because it
       was getting more and more confusing and duplicative.  I'm still not
       sure how much of it it makes sense to inline vs. separate, but I
       think this is better than it was.  This resulted in some minor
       changes to descriptions, generally in the direction of making things
       more consistent.
    2. I bumped the minimum Go version to 1.14 so we can guarantee support
       for duplicate interface methods.  These are useful for
       abstract-in-absstract spreads; we generate an interface for the
       fragment, and (if the fragment-type implements the scope-type) we
       embed it into the interface we generate for its spread-context, and
       if the two have a duplicated field we thus duplicate the method.  It
       wouldn't be impossible to support this on 1.13 (maybe just by
       omitting said embed) but it didn't seem worth it.  This also removes
       a few special-cases in tests.
    3. I added a bunch of code to better format syntax errors in the
       generated code (which we see from `gofmt`).  This is mostly just an
       internal improvement; I wrote it because I got annoyed while hunting
       down a few such errors..
    
    Fixes, at last, #8.
    
    Issue: #8
    
    Test plan:
    make check
    
    Reviewers: marksandstrom, miguel, adam
    benjaminjkraft committed Sep 9, 2021
    Configuration menu
    Copy the full SHA
    7923723 View commit details
    Browse the repository at this point in the history
  2. Better naming

    benjaminjkraft committed Sep 9, 2021
    Configuration menu
    Copy the full SHA
    4f81db0 View commit details
    Browse the repository at this point in the history