Skip to content

Split large unions over multiple lines #10219

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

Merged
merged 12 commits into from
May 17, 2025
Merged

Conversation

benjie
Copy link
Contributor

@benjie benjie commented Dec 17, 2024

Any change needs to be discussed before proceeding. Failure to do so may result in the rejection of the pull request.

✔️ Acknowledged. Think of this as the issue, to open the discussion via demonstration.

Please ignore whitespace changes when reviewing this PR.

Description

To make git management of changes easier, it's nice if lines aren't too long. Some of the lines emitted by graphql-code-generator can be excessively large which results in hard to review diffs. This PR aims to introduce newline splits in a few more places to make changes more surgical.

Type of change

Please delete options that are not relevant.

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

How Has This Been Tested?

Tests have been updated.

Test Environment:

  • OS: Ubuntu 24.04
  • master branch
  • NodeJS: v20.18.0

Checklist:

  • I have followed the CONTRIBUTING doc and the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published in downstream modules

Notes:

  • TypeScript GraphQL Request tests › works without variables and TypeScript GraphQL Request tests › returns first 3 entries tests fail locally for me on master. I have not investigated.
  • This is to open a discussion so I've not made doc edits yet.

Further comments

I've currently gated this behind the printFieldsOnNewLines setting which seems related; I don't know if you'd want separate settings for each change, or a more general useNewlinesForUnions setting, or...?

This is also not an exhaustive change that adds newlines to all unions.

Copy link

changeset-bot bot commented Dec 17, 2024

⚠️ No Changeset found

Latest commit: 41a231e

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@benjie benjie marked this pull request as ready for review February 4, 2025 11:43
@n1ru4l n1ru4l requested a review from eddeee888 February 4, 2025 11:45
@eddeee888
Copy link
Collaborator

Hi @benjie , would there be a scenario where the existing behaviour (i.e. the equivalent of printFieldsOnNewLines=false) would be preferred?
If not, I wonder if we should just do this without a config option?

@benjie
Copy link
Contributor Author

benjie commented Feb 13, 2025

@eddeee888 Thanks for asking! I would 100% be in support of adding this without a config option. I don't know why anyone would want it all on one line, I was just trying to minimize codegen diff for people who didn't opt in.

@benjie
Copy link
Contributor Author

benjie commented Feb 13, 2025

It's going to be a little while before I can make that change - feel free to take over, or leave it for me in a few weeks time 👍

@benjie
Copy link
Contributor Author

benjie commented May 12, 2025

@eddeee888 I've incorporated your feedback and made it so that it uses nice formatting for a lot of the unions. This caused a lot of tests to fail, so I've patched your toBeSimilarStringTo assertion to ignore more things: trailing commas, leading | symbols, whitespace around parenthesis, etc. Tests are now passing again locally (and the output looks a lot better to me at least!)

@eddeee888
Copy link
Collaborator

Thank you @benjie ! I'll take a look at soon!

noSchemaStitching: true,
useIndexSignature: true,
namespacedImportName: 'Types',
printFieldsOnNewLines: true,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm think we don't have this option anymore?

await validate(content, config, complexTestSchemaWithUnionsAndInterfaces);
});

it('should extract types from multiple fragments (preResolveTypes: false, printFieldsOnNewlines: true)', async () => {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another printFieldsOnNewLines I could find, this is the last one I believe!

Copy link
Collaborator

@eddeee888 eddeee888 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you! The output is a lot simpler to parse now!

@eddeee888
Copy link
Collaborator

eddeee888 commented May 17, 2025

I'll merge first and remove the printFieldsOnNewlines (if possible) in a quick follow-up PR. Thanks @benjie !

@eddeee888 eddeee888 merged commit 54eb2e3 into dotansimha:master May 17, 2025
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants