Repository: graphql/graphql-js
Pull request #3442 (2021-12-24 11:53:17)

 Prevent Infinite Loop in OverlappingFieldsCanBeMergedRule
We have spotted some `RangeError: Maximum call stack size exceeded` exceptions while testing our own setup, and traced it to this validation rule.

Note: I don't feel 100% confident that I understand the logic flow and intent of this code in detail. Perhaps the bugfix I'm providing is isolated, or perhaps it's a whole class of use case that has been omitted in tests in which cases this might break some valid use cases but not be detected?

linux-foundation-easycla[bot]: <a href="https://api.easycla.lfx.linuxfoundation.org/v2/repository-provider/github/sign/12261526/38307428/3442/#/?version=2"><img src="https://s3.amazonaws.com/cla-project-logo-prod/cla-not-signed.svg" alt="CLA Not Signed" align="left" height="28" width="328" ></a><br/><br /><ul><li><a href='https://api.easycla.lfx.linuxfoundation.org/v2/repository-provider/github/sign/12261526/38307428/3442/#/?version=2' target='_blank'>:x:</a> - Nicolas Lagoutte The commit (f130906d22b01f45ac0013c35f66dc57a77e4deb ,61352ec967f258b3e43c232f6f7b57f1b81a47f0) is not authorized under a signed CLA. <a href='https://api.easycla.lfx.linuxfoundation.org/v2/repository-provider/github/sign/12261526/38307428/3442/#/?version=2' target='_blank'>Please click here to be authorized</a>. For further assistance with EasyCLA, <a href='https://jira.linuxfoundation.org/servicedesk/customer/portal/4' target='_blank'>please submit a support request ticket</a>.</li></ul>
Cito: Great find - important to fix this!
nicolaslt: @Cito I've just realised the error still happens when the cyclical reference is transitive. I'm going to try to fix this as well within the next 3h, but I will have limited availability after that until the 4th of January.
Cito: @nicolaslt Yes, the algorithm is a bit complex. Will try to examine it more thoroughly and compare it with the spec where it looks simpler.
nicolaslt: I've worked out that we might be able to simple re-use `comparedFragmentPairs`, if we extend its scope to keep track of `fields` as well as `fragment` (in which case I'd rename it, eh).

The only reason I can think of not to do that is if it's valid to have a field named after a fragment. I'm on my way to test this.
nicolaslt: Yep, it's valid GraphQL it seems! (though tested with version 15.2.0, not with latest)

SDL:
```gql
type Query {                      
  getObject: Object               
}                                 

type Object {        
  field: Boolean     
  otherField: Boolean
}
```

Query:
```gql
query myQuery {
  getObject {
    ...field
    field
  }
}
                          
fragment field on Object {
   otherField             
}
```

Results (with a dummy resolver):
```json
{
  "data": {
    "getObject": {
      "otherField": null,
      "field": null
    }
  }
}
```


So the proper fix I think would be to use `comparedFragmentPairs` and make `getReferencedFieldsAndFragmentNames` return type something that lets like 270 realise when the fieldOrFragmentName is actually a fragment or a field. If it's a fragment, read&write to `comparedFragmentPairs`, if it's a field carry on as usual.
nicolaslt: I'm starting to understand the codebase a bit better. I think just using `comparedFragmentPairs` is actually ok.

I'm about to push a new version with extra tests added for good measure.
nicolaslt: @Cito I think this is ready again
Cito: @nicolaslt Thanks - will look into this after the festivities.
Cito: @nicolaslt Had another look and I think breaking the recursion in `collect_conflicts_between_fields_and_fragment` like you do here is the proper solution. Nice!

Still, I wonder whether the validation algorithm could be simplified and made less complex, in terms of code and runtime complexity, which is quadratic in both number of fields in the selection sets, and in the levels of nested fragments. This might be exploited for denial of service attacks, by sending requests with many overlapping fields and/or deeply nested fragments - if you do both, you can construct queries that are not too large, but still would take an extremely long time to validate. However, this is essentially the algorithm from the spec, just a bit more complicated because it also provides a list of error messages for the individual conflicts. I think it should be possible to store a codified "response shape" for every field in a selection set with the same response name and check if that is unique in linear time using a Map, instead of checking whether the response shapes are the same for all pairs of such fields.
Cito: Oops - just noticed that regarding the runtime complexity of the algorithm, we already have #2185.

Patch:
diff --git a/.eslintrc.yml b/.eslintrc.yml
index 4c15713f..6e21f0e9 100644
--- a/.eslintrc.yml
+++ b/.eslintrc.yml
@@ -9,6 +9,7 @@ plugins:
   - internal-rules
   - node
   - import
+  - simple-import-sort
 settings:
   node:
     tryExtensions: ['.js', '.json', '.node', '.ts', '.d.ts']
@@ -140,6 +141,38 @@ rules:
   import/group-exports: off
   import/dynamic-import-chunkname: off
 
+  ##############################################################################
+  # `eslint-plugin-simple-import-sort` rule list based on `v2.25.x`
+  # https://github.com/lydell/eslint-plugin-simple-import-sort
+  ##############################################################################
+  simple-import-sort/imports:
+    - error
+    - groups:
+        # Packages.
+        # Things that start with a letter (or digit or underscore), or `@` followed by a letter.
+        - ["^@?\\w"]
+
+        # General utilities
+        - ["^(\\./|(\\.\\./)+)__testUtils__/"]
+        - ["^(\\./|(\\.\\./)+)jsutils/"]
+
+        # Top-level directories
+        - ["^(\\./|(\\.\\./)+)error/"]
+        - ["^(\\./|(\\.\\./)+)language/"]
+        - ["^(\\./|(\\.\\./)+)type/"]
+        - ["^(\\./|(\\.\\./)+)validation/"]
+        - ["^(\\./|(\\.\\./)+)execution/"]
+        - ["^(\\./|(\\.\\./)+)utilities/"]
+
+        # Relative imports.
+        # Anything that starts with a dot.
+        - ["^(\\.\\./){4,}"]
+        - ["^(\\.\\./){3}"]
+        - ["^(\\.\\./){2}"]
+        - ["^(\\.\\./){1}"]
+        - ["^\\./"]
+  simple-import-sort/exports: off # TODO
+
   ##############################################################################
   # ESLint builtin rules list based on `v8.5.x`
   ##############################################################################
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 15aa4bd8..f8f6b196 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -67,15 +67,18 @@ jobs:
           cache: npm
           node-version: ${{ env.NODE_VERSION_USED_FOR_DEVELOPMENT }}
 
+      - name: Install Dependencies
+        run: npm ci --ignore-scripts
+
+      - name: Check that package-lock.json doesn't have conflicts
+        run: npm ls --depth 999
+
       - name: Run npm install
-        run: npm install --ignore-scripts --engine-strict --strict-peer-deps
+        run: npm install --force --package-lock-only --ignore-scripts --engine-strict --strict-peer-deps
 
       - name: Check that package-lock.json is in sync with package.json
         run: git diff --exit-code package-lock.json
 
-      - name: Check that package-lock.json doesn't have conflicts
-        run: npm ls --depth 999
-
   integrationTests:
     name: Run integration tests
     runs-on: ubuntu-latest
diff --git a/package-lock.json b/package-lock.json
index 498a3b3b..46934fc8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,7 +16,7 @@
         "@babel/register": "7.16.5",
         "@types/chai": "4.3.0",
         "@types/mocha": "9.0.0",
-        "@types/node": "17.0.2",
+        "@types/node": "17.0.5",
         "@typescript-eslint/eslint-plugin": "5.8.0",
         "@typescript-eslint/parser": "5.8.0",
         "c8": "7.10.0",
@@ -26,6 +26,7 @@
         "eslint-plugin-import": "2.25.3",
         "eslint-plugin-internal-rules": "file:./resources/eslint-internal-rules",
         "eslint-plugin-node": "11.1.0",
+        "eslint-plugin-simple-import-sort": "7.0.0",
         "eslint-plugin-tsdoc": "0.2.14",
         "mocha": "9.1.3",
         "prettier": "2.5.1",
@@ -2072,9 +2073,9 @@
       "dev": true
     },
     "node_modules/@types/istanbul-lib-coverage": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
-      "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+      "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
       "dev": true
     },
     "node_modules/@types/json-schema": {
@@ -2096,9 +2097,9 @@
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "17.0.2",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.2.tgz",
-      "integrity": "sha512-JepeIUPFDARgIs0zD/SKPgFsJEAF0X5/qO80llx59gOxFTboS9Amv3S+QfB7lqBId5sFXJ99BN0J6zFRvL9dDA==",
+      "version": "17.0.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.5.tgz",
+      "integrity": "sha512-w3mrvNXLeDYV1GKTZorGJQivK6XLCoGwpnyJFbJVK/aTBQUxOCaa/GlFAAN3OTDFcb7h5tiFG+YXCO2By+riZw==",
       "dev": true
     },
     "node_modules/@types/parse-json": {
@@ -2627,9 +2628,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001291",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001291.tgz",
-      "integrity": "sha512-roMV5V0HNGgJ88s42eE70sstqGW/gwFndosYrikHthw98N5tLnOTxFqMLQjZVRxTWFlJ4rn+MsgXrR7MDPY4jA==",
+      "version": "1.0.30001292",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001292.tgz",
+      "integrity": "sha512-jnT4Tq0Q4ma+6nncYQVe7d73kmDmE9C3OGTx3MvW7lBM/eY1S1DZTMBON7dqV481RhNiS5OxD7k9JQvmDOTirw==",
       "dev": true,
       "funding": {
         "type": "opencollective",
@@ -2844,9 +2845,9 @@
       }
     },
     "node_modules/core-js-compat": {
-      "version": "3.20.0",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.0.tgz",
-      "integrity": "sha512-relrah5h+sslXssTTOkvqcC/6RURifB0W5yhYBdBkaPYa5/2KBMiog3XiD+s3TwEHWxInWVv4Jx2/Lw0vng+IQ==",
+      "version": "3.20.1",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.1.tgz",
+      "integrity": "sha512-AVhKZNpqMV3Jz8hU0YEXXE06qoxtQGsAqU0u1neUngz5IusDJRX/ZJ6t3i7mS7QxNyEONbCo14GprkBrxPlTZA==",
       "dev": true,
       "dependencies": {
         "browserslist": "^4.19.1",
@@ -3106,9 +3107,9 @@
       }
     },
     "node_modules/debug": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
-      "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+      "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
       "dev": true,
       "dependencies": {
         "ms": "2.1.2"
@@ -3210,9 +3211,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.25",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.25.tgz",
-      "integrity": "sha512-bTwub9Y/76EiNmfaiJih+hAy6xn7Ns95S4KvI2NuKNOz8TEEKKQUu44xuy0PYMudjM9zdjKRS1bitsUvHTfuUg==",
+      "version": "1.4.28",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.28.tgz",
+      "integrity": "sha512-Gzbf0wUtKfyPaqf0Plz+Ctinf9eQIzxEqBHwSvbGfeOm9GMNdLxyu1dNiCUfM+x6r4BE0xUJNh3Nmg9gfAtTmg==",
       "dev": true
     },
     "node_modules/emoji-regex": {
@@ -3611,6 +3612,15 @@
         "node": ">=4"
       }
     },
+    "node_modules/eslint-plugin-simple-import-sort": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz",
+      "integrity": "sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==",
+      "dev": true,
+      "peerDependencies": {
+        "eslint": ">=5.0.0"
+      }
+    },
     "node_modules/eslint-plugin-tsdoc": {
       "version": "0.2.14",
       "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.14.tgz",
@@ -4857,9 +4867,9 @@
       }
     },
     "node_modules/istanbul-reports": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.1.tgz",
-      "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.2.tgz",
+      "integrity": "sha512-0gHxuT1NNC0aEIL1zbJ+MTgPbbHhU77eJPuU35WKA7TgXiSNlCAx4PENoMrH0Or6M2H80TaZcWKhM0IK6V8gRw==",
       "dev": true,
       "dependencies": {
         "html-escaper": "^2.0.0",
@@ -5208,29 +5218,6 @@
         "url": "https://opencollective.com/mochajs"
       }
     },
-    "node_modules/mocha/node_modules/debug": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
-      "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/mocha/node_modules/debug/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
     "node_modules/mocha/node_modules/escape-string-regexp": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -8098,9 +8085,9 @@
       "dev": true
     },
     "@types/istanbul-lib-coverage": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
-      "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+      "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
       "dev": true
     },
     "@types/json-schema": {
@@ -8122,9 +8109,9 @@
       "dev": true
     },
     "@types/node": {
-      "version": "17.0.2",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.2.tgz",
-      "integrity": "sha512-JepeIUPFDARgIs0zD/SKPgFsJEAF0X5/qO80llx59gOxFTboS9Amv3S+QfB7lqBId5sFXJ99BN0J6zFRvL9dDA==",
+      "version": "17.0.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.5.tgz",
+      "integrity": "sha512-w3mrvNXLeDYV1GKTZorGJQivK6XLCoGwpnyJFbJVK/aTBQUxOCaa/GlFAAN3OTDFcb7h5tiFG+YXCO2By+riZw==",
       "dev": true
     },
     "@types/parse-json": {
@@ -8486,9 +8473,9 @@
       "dev": true
     },
     "caniuse-lite": {
-      "version": "1.0.30001291",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001291.tgz",
-      "integrity": "sha512-roMV5V0HNGgJ88s42eE70sstqGW/gwFndosYrikHthw98N5tLnOTxFqMLQjZVRxTWFlJ4rn+MsgXrR7MDPY4jA==",
+      "version": "1.0.30001292",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001292.tgz",
+      "integrity": "sha512-jnT4Tq0Q4ma+6nncYQVe7d73kmDmE9C3OGTx3MvW7lBM/eY1S1DZTMBON7dqV481RhNiS5OxD7k9JQvmDOTirw==",
       "dev": true
     },
     "chai": {
@@ -8662,9 +8649,9 @@
       }
     },
     "core-js-compat": {
-      "version": "3.20.0",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.0.tgz",
-      "integrity": "sha512-relrah5h+sslXssTTOkvqcC/6RURifB0W5yhYBdBkaPYa5/2KBMiog3XiD+s3TwEHWxInWVv4Jx2/Lw0vng+IQ==",
+      "version": "3.20.1",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.1.tgz",
+      "integrity": "sha512-AVhKZNpqMV3Jz8hU0YEXXE06qoxtQGsAqU0u1neUngz5IusDJRX/ZJ6t3i7mS7QxNyEONbCo14GprkBrxPlTZA==",
       "dev": true,
       "requires": {
         "browserslist": "^4.19.1",
@@ -8858,9 +8845,9 @@
       }
     },
     "debug": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
-      "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+      "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
       "dev": true,
       "requires": {
         "ms": "2.1.2"
@@ -8930,9 +8917,9 @@
       }
     },
     "electron-to-chromium": {
-      "version": "1.4.25",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.25.tgz",
-      "integrity": "sha512-bTwub9Y/76EiNmfaiJih+hAy6xn7Ns95S4KvI2NuKNOz8TEEKKQUu44xuy0PYMudjM9zdjKRS1bitsUvHTfuUg==",
+      "version": "1.4.28",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.28.tgz",
+      "integrity": "sha512-Gzbf0wUtKfyPaqf0Plz+Ctinf9eQIzxEqBHwSvbGfeOm9GMNdLxyu1dNiCUfM+x6r4BE0xUJNh3Nmg9gfAtTmg==",
       "dev": true
     },
     "emoji-regex": {
@@ -9347,6 +9334,13 @@
         }
       }
     },
+    "eslint-plugin-simple-import-sort": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz",
+      "integrity": "sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==",
+      "dev": true,
+      "requires": {}
+    },
     "eslint-plugin-tsdoc": {
       "version": "0.2.14",
       "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.14.tgz",
@@ -10144,9 +10138,9 @@
       }
     },
     "istanbul-reports": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.1.tgz",
-      "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.2.tgz",
+      "integrity": "sha512-0gHxuT1NNC0aEIL1zbJ+MTgPbbHhU77eJPuU35WKA7TgXiSNlCAx4PENoMrH0Or6M2H80TaZcWKhM0IK6V8gRw==",
       "dev": true,
       "requires": {
         "html-escaper": "^2.0.0",
@@ -10411,23 +10405,6 @@
         "yargs-unparser": "2.0.0"
       },
       "dependencies": {
-        "debug": {
-          "version": "4.3.2",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
-          "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          },
-          "dependencies": {
-            "ms": {
-              "version": "2.1.2",
-              "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-              "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-              "dev": true
-            }
-          }
-        },
         "escape-string-regexp": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
diff --git a/package.json b/package.json
index 78bed05c..6a870cc8 100644
--- a/package.json
+++ b/package.json
@@ -57,7 +57,7 @@
     "@babel/register": "7.16.5",
     "@types/chai": "4.3.0",
     "@types/mocha": "9.0.0",
-    "@types/node": "17.0.2",
+    "@types/node": "17.0.5",
     "@typescript-eslint/eslint-plugin": "5.8.0",
     "@typescript-eslint/parser": "5.8.0",
     "c8": "7.10.0",
@@ -67,6 +67,7 @@
     "eslint-plugin-import": "2.25.3",
     "eslint-plugin-internal-rules": "file:./resources/eslint-internal-rules",
     "eslint-plugin-node": "11.1.0",
+    "eslint-plugin-simple-import-sort": "7.0.0",
     "eslint-plugin-tsdoc": "0.2.14",
     "mocha": "9.1.3",
     "prettier": "2.5.1",
diff --git a/src/error/GraphQLError.ts b/src/error/GraphQLError.ts
index 285fe379..6d6677fa 100644
--- a/src/error/GraphQLError.ts
+++ b/src/error/GraphQLError.ts
@@ -2,10 +2,10 @@ import { isObjectLike } from '../jsutils/isObjectLike';
 import type { Maybe } from '../jsutils/Maybe';
 
 import type { ASTNode, Location } from '../language/ast';
-import type { Source } from '../language/source';
 import type { SourceLocation } from '../language/location';
 import { getLocation } from '../language/location';
 import { printLocation, printSourceLocation } from '../language/printLocation';
+import type { Source } from '../language/source';
 
 /**
  * Custom extensions
diff --git a/src/execution/collectFields.ts b/src/execution/collectFields.ts
index 134000ca..d0961bfa 100644
--- a/src/execution/collectFields.ts
+++ b/src/execution/collectFields.ts
@@ -1,21 +1,21 @@
 import type { ObjMap } from '../jsutils/ObjMap';
 
 import type {
-  SelectionSetNode,
   FieldNode,
+  FragmentDefinitionNode,
   FragmentSpreadNode,
   InlineFragmentNode,
-  FragmentDefinitionNode,
+  SelectionSetNode,
 } from '../language/ast';
 import { Kind } from '../language/kinds';
 
-import type { GraphQLSchema } from '../type/schema';
 import type { GraphQLObjectType } from '../type/definition';
+import { isAbstractType } from '../type/definition';
 import {
   GraphQLIncludeDirective,
   GraphQLSkipDirective,
 } from '../type/directives';
-import { isAbstractType } from '../type/definition';
+import type { GraphQLSchema } from '../type/schema';
 
 import { typeFromAST } from '../utilities/typeFromAST';
 
diff --git a/src/execution/execute.ts b/src/execution/execute.ts
index 9afc3078..d3c21385 100644
--- a/src/execution/execute.ts
+++ b/src/execution/execute.ts
@@ -1,17 +1,17 @@
-import type { Path } from '../jsutils/Path';
-import type { ObjMap } from '../jsutils/ObjMap';
-import type { PromiseOrValue } from '../jsutils/PromiseOrValue';
-import type { Maybe } from '../jsutils/Maybe';
+import { devAssert } from '../jsutils/devAssert';
 import { inspect } from '../jsutils/inspect';
-import { memoize3 } from '../jsutils/memoize3';
 import { invariant } from '../jsutils/invariant';
-import { devAssert } from '../jsutils/devAssert';
-import { isPromise } from '../jsutils/isPromise';
+import { isIterableObject } from '../jsutils/isIterableObject';
 import { isObjectLike } from '../jsutils/isObjectLike';
-import { promiseReduce } from '../jsutils/promiseReduce';
-import { promiseForObject } from '../jsutils/promiseForObject';
+import { isPromise } from '../jsutils/isPromise';
+import type { Maybe } from '../jsutils/Maybe';
+import { memoize3 } from '../jsutils/memoize3';
+import type { ObjMap } from '../jsutils/ObjMap';
+import type { Path } from '../jsutils/Path';
 import { addPath, pathToArray } from '../jsutils/Path';
-import { isIterableObject } from '../jsutils/isIterableObject';
+import { promiseForObject } from '../jsutils/promiseForObject';
+import type { PromiseOrValue } from '../jsutils/PromiseOrValue';
+import { promiseReduce } from '../jsutils/promiseReduce';
 
 import type { GraphQLFormattedError } from '../error/GraphQLError';
 import { GraphQLError } from '../error/GraphQLError';
@@ -19,44 +19,44 @@ import { locatedError } from '../error/locatedError';
 
 import type {
   DocumentNode,
-  OperationDefinitionNode,
   FieldNode,
   FragmentDefinitionNode,
+  OperationDefinitionNode,
 } from '../language/ast';
 import { OperationTypeNode } from '../language/ast';
 import { Kind } from '../language/kinds';
 
-import type { GraphQLSchema } from '../type/schema';
 import type {
-  GraphQLObjectType,
-  GraphQLOutputType,
-  GraphQLLeafType,
   GraphQLAbstractType,
   GraphQLField,
   GraphQLFieldResolver,
+  GraphQLLeafType,
+  GraphQLList,
+  GraphQLObjectType,
+  GraphQLOutputType,
   GraphQLResolveInfo,
   GraphQLTypeResolver,
-  GraphQLList,
 } from '../type/definition';
-import { assertValidSchema } from '../type/validate';
 import {
-  SchemaMetaFieldDef,
-  TypeMetaFieldDef,
-  TypeNameMetaFieldDef,
-} from '../type/introspection';
-import {
-  isObjectType,
   isAbstractType,
   isLeafType,
   isListType,
   isNonNullType,
+  isObjectType,
 } from '../type/definition';
+import {
+  SchemaMetaFieldDef,
+  TypeMetaFieldDef,
+  TypeNameMetaFieldDef,
+} from '../type/introspection';
+import type { GraphQLSchema } from '../type/schema';
+import { assertValidSchema } from '../type/validate';
 
-import { getVariableValues, getArgumentValues } from './values';
 import {
   collectFields,
   collectSubfields as _collectSubfields,
 } from './collectFields';
+import { getArgumentValues, getVariableValues } from './values';
 
 /**
  * A memoized collection of relevant subfields with regard to the return
diff --git a/src/execution/subscribe.ts b/src/execution/subscribe.ts
index 805d9b21..7ff57125 100644
--- a/src/execution/subscribe.ts
+++ b/src/execution/subscribe.ts
@@ -1,24 +1,23 @@
-import { inspect } from '../jsutils/inspect';
 import { devAssert } from '../jsutils/devAssert';
+import { inspect } from '../jsutils/inspect';
 import { isAsyncIterable } from '../jsutils/isAsyncIterable';
-import { addPath, pathToArray } from '../jsutils/Path';
 import type { Maybe } from '../jsutils/Maybe';
+import { addPath, pathToArray } from '../jsutils/Path';
 
 import { GraphQLError } from '../error/GraphQLError';
 import { locatedError } from '../error/locatedError';
 
 import type { DocumentNode } from '../language/ast';
 
-import type { GraphQLSchema } from '../type/schema';
 import type { GraphQLFieldResolver } from '../type/definition';
+import type { GraphQLSchema } from '../type/schema';
 
+import { collectFields } from './collectFields';
 import type {
   ExecutionArgs,
-  ExecutionResult,
   ExecutionContext,
+  ExecutionResult,
 } from './execute';
-import { collectFields } from './collectFields';
-import { getArgumentValues } from './values';
 import {
   assertValidExecutionArguments,
   buildExecutionContext,
@@ -27,6 +26,7 @@ import {
   getFieldDef,
 } from './execute';
 import { mapAsyncIterator } from './mapAsyncIterator';
+import { getArgumentValues } from './values';
 
 /**
  * Implements the "Subscribe" algorithm described in the GraphQL specification.
diff --git a/src/execution/values.ts b/src/execution/values.ts
index c0e5a4b4..124319a6 100644
--- a/src/execution/values.ts
+++ b/src/execution/values.ts
@@ -1,27 +1,27 @@
-import type { ObjMap } from '../jsutils/ObjMap';
-import type { Maybe } from '../jsutils/Maybe';
-import { keyMap } from '../jsutils/keyMap';
 import { inspect } from '../jsutils/inspect';
+import { keyMap } from '../jsutils/keyMap';
+import type { Maybe } from '../jsutils/Maybe';
+import type { ObjMap } from '../jsutils/ObjMap';
 import { printPathArray } from '../jsutils/printPathArray';
 
 import { GraphQLError } from '../error/GraphQLError';
 
 import type {
-  FieldNode,
   DirectiveNode,
+  FieldNode,
   VariableDefinitionNode,
 } from '../language/ast';
 import { Kind } from '../language/kinds';
 import { print } from '../language/printer';
 
-import type { GraphQLSchema } from '../type/schema';
 import type { GraphQLField } from '../type/definition';
-import type { GraphQLDirective } from '../type/directives';
 import { isInputType, isNonNullType } from '../type/definition';
+import type { GraphQLDirective } from '../type/directives';
+import type { GraphQLSchema } from '../type/schema';
 
+import { coerceInputValue } from '../utilities/coerceInputValue';
 import { typeFromAST } from '../utilities/typeFromAST';
 import { valueFromAST } from '../utilities/valueFromAST';
-import { coerceInputValue } from '../utilities/coerceInputValue';
 
 type CoercedVariableValues =
   | { errors: ReadonlyArray<GraphQLError>; coerced?: never }
diff --git a/src/graphql.ts b/src/graphql.ts
index 8d07bac9..bc6fb9bb 100644
--- a/src/graphql.ts
+++ b/src/graphql.ts
@@ -1,12 +1,10 @@
-import type { PromiseOrValue } from './jsutils/PromiseOrValue';
 import { devAssert } from './jsutils/devAssert';
 import { isPromise } from './jsutils/isPromise';
 import type { Maybe } from './jsutils/Maybe';
+import type { PromiseOrValue } from './jsutils/PromiseOrValue';
 
-import type { Source } from './language/source';
 import { parse } from './language/parser';
-
-import { validate } from './validation/validate';
+import type { Source } from './language/source';
 
 import type {
   GraphQLFieldResolver,
@@ -15,6 +13,8 @@ import type {
 import type { GraphQLSchema } from './type/schema';
 import { validateSchema } from './type/validate';
 
+import { validate } from './validation/validate';
+
 import type { ExecutionResult } from './execution/execute';
 import { execute } from './execution/execute';
 
diff --git a/src/index.ts b/src/index.ts
index fddd8841..bde23ad5 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -22,20 +22,22 @@
  * import { parse } from 'graphql';
  * import { parse } from 'graphql/language';
  * ```
+ *
+ * @packageDocumentation
  */
 
-/** The GraphQL.js version info. */
+// The GraphQL.js version info.
 export { version, versionInfo } from './version';
 
-/** The primary entry point into fulfilling a GraphQL request. */
+// The primary entry point into fulfilling a GraphQL request.
 export type { GraphQLArgs } from './graphql';
 export { graphql, graphqlSync } from './graphql';
 
-/** Create and operate on GraphQL type definitions and schema. */
+// Create and operate on GraphQL type definitions and schema.
 export {
   resolveObjMapThunk,
   resolveReadonlyArrayThunk,
-  /** Definitions */
+  // Definitions
   GraphQLSchema,
   GraphQLDirective,
   GraphQLScalarType,
@@ -46,27 +48,27 @@ export {
   GraphQLInputObjectType,
   GraphQLList,
   GraphQLNonNull,
-  /** Standard GraphQL Scalars */
+  // Standard GraphQL Scalars
   specifiedScalarTypes,
   GraphQLInt,
   GraphQLFloat,
   GraphQLString,
   GraphQLBoolean,
   GraphQLID,
-  /** Int boundaries constants */
+  // Int boundaries constants
   GRAPHQL_MAX_INT,
   GRAPHQL_MIN_INT,
-  /** Built-in Directives defined by the Spec */
+  // Built-in Directives defined by the Spec
   specifiedDirectives,
   GraphQLIncludeDirective,
   GraphQLSkipDirective,
   GraphQLDeprecatedDirective,
   GraphQLSpecifiedByDirective,
-  /** "Enum" of Type Kinds */
+  // "Enum" of Type Kinds
   TypeKind,
-  /** Constant Deprecation Reason */
+  // Constant Deprecation Reason
   DEFAULT_DEPRECATION_REASON,
-  /** GraphQL Types for introspection. */
+  // GraphQL Types for introspection.
   introspectionTypes,
   __Schema,
   __Directive,
@@ -76,11 +78,11 @@ export {
   __InputValue,
   __EnumValue,
   __TypeKind,
-  /** Meta-field definitions. */
+  // Meta-field definitions.
   SchemaMetaFieldDef,
   TypeMetaFieldDef,
   TypeNameMetaFieldDef,
-  /** Predicates */
+  // Predicates
   isSchema,
   isDirective,
   isType,
@@ -105,7 +107,7 @@ export {
   isSpecifiedScalarType,
   isIntrospectionType,
   isSpecifiedDirective,
-  /** Assertions */
+  // Assertions
   assertSchema,
   assertDirective,
   assertType,
@@ -125,13 +127,13 @@ export {
   assertWrappingType,
   assertNullableType,
   assertNamedType,
-  /** Un-modifiers */
+  // Un-modifiers
   getNullableType,
   getNamedType,
-  /** Validate GraphQL schema. */
+  // Validate GraphQL schema.
   validateSchema,
   assertValidSchema,
-  /** Upholds the spec rules about naming. */
+  // Upholds the spec rules about naming.
   assertName,
   assertEnumValueName,
 } from './type/index';
@@ -194,27 +196,27 @@ export type {
   GraphQLScalarLiteralParser,
 } from './type/index';
 
-/** Parse and operate on GraphQL language source files. */
+// Parse and operate on GraphQL language source files.
 export {
   Token,
   Source,
   Location,
   OperationTypeNode,
   getLocation,
-  /** Print source location */
+  // Print source location.
   printLocation,
   printSourceLocation,
-  /** Lex */
+  // Lex
   Lexer,
   TokenKind,
-  /** Parse */
+  // Parse
   parse,
   parseValue,
   parseConstValue,
   parseType,
-  /** Print */
+  // Print
   print,
-  /** Visit */
+  // Visit
   visit,
   visitInParallel,
   getVisitFn,
@@ -222,7 +224,7 @@ export {
   BREAK,
   Kind,
   DirectiveLocation,
-  /** Predicates */
+  // Predicates
   isDefinitionNode,
   isExecutableDefinitionNode,
   isSelectionNode,
@@ -241,14 +243,14 @@ export type {
   TokenKindEnum,
   KindEnum,
   DirectiveLocationEnum,
-  /** Visitor utilities */
+  // Visitor utilities
   ASTVisitor,
   ASTVisitFn,
   ASTVisitorKeyMap,
-  /** AST nodes */
+  // AST nodes
   ASTNode,
   ASTKindToNode,
-  /** Each kind of AST node */
+  // Each kind of AST node
   NameNode,
   DocumentNode,
   DefinitionNode,
@@ -309,7 +311,7 @@ export type {
   InputObjectTypeExtensionNode,
 } from './language/index';
 
-/** Execute GraphQL queries. */
+// Execute GraphQL queries.
 export {
   execute,
   executeSync,
@@ -329,13 +331,13 @@ export type {
 
 export type { SubscriptionArgs } from './subscription/index';
 
-/** Validate GraphQL documents. */
+// Validate GraphQL documents.
 export {
   validate,
   ValidationContext,
-  /** All validation rules in the GraphQL Specification. */
+  // All validation rules in the GraphQL Specification.
   specifiedRules,
-  /** Individual validation rules. */
+  // Individual validation rules.
   ExecutableDefinitionsRule,
   FieldsOnCorrectTypeRule,
   FragmentsOnCompositeTypesRule,
@@ -362,7 +364,7 @@ export {
   ValuesOfCorrectTypeRule,
   VariablesAreInputTypesRule,
   VariablesInAllowedPositionRule,
-  /** SDL-specific validation rules */
+  // SDL-specific validation rules
   LoneSchemaDefinitionRule,
   UniqueOperationTypesRule,
   UniqueTypeNamesRule,
@@ -371,14 +373,14 @@ export {
   UniqueArgumentDefinitionNamesRule,
   UniqueDirectiveNamesRule,
   PossibleTypeExtensionsRule,
-  /** Custom validation rules */
+  // Custom validation rules
   NoDeprecatedCustomRule,
   NoSchemaIntrospectionCustomRule,
 } from './validation/index';
 
 export type { ValidationRule } from './validation/index';
 
-/** Create, format, and print GraphQL errors. */
+// Create, format, and print GraphQL errors.
 export {
   GraphQLError,
   syntaxError,
@@ -392,63 +394,61 @@ export type {
   GraphQLErrorExtensions,
 } from './error/index';
 
-/** Utilities for operating on GraphQL type schema and parsed sources. */
+// Utilities for operating on GraphQL type schema and parsed sources.
 export {
-  /**
-   * Produce the GraphQL query recommended for a full schema introspection.
-   * Accepts optional IntrospectionOptions.
-   */
+  // Produce the GraphQL query recommended for a full schema introspection.
+  // Accepts optional IntrospectionOptions.
   getIntrospectionQuery,
-  /** Gets the target Operation from a Document. */
+  // Gets the target Operation from a Document.
   getOperationAST,
-  /** Gets the Type for the target Operation AST. */
+  // Gets the Type for the target Operation AST.
   getOperationRootType,
-  /** Convert a GraphQLSchema to an IntrospectionQuery. */
+  // Convert a GraphQLSchema to an IntrospectionQuery.
   introspectionFromSchema,
-  /** Build a GraphQLSchema from an introspection result. */
+  // Build a GraphQLSchema from an introspection result.
   buildClientSchema,
-  /** Build a GraphQLSchema from a parsed GraphQL Schema language AST. */
+  // Build a GraphQLSchema from a parsed GraphQL Schema language AST.
   buildASTSchema,
-  /** Build a GraphQLSchema from a GraphQL schema language document. */
+  // Build a GraphQLSchema from a GraphQL schema language document.
   buildSchema,
-  /** Extends an existing GraphQLSchema from a parsed GraphQL Schema language AST. */
+  // Extends an existing GraphQLSchema from a parsed GraphQL Schema language AST.
   extendSchema,
-  /** Sort a GraphQLSchema. */
+  // Sort a GraphQLSchema.
   lexicographicSortSchema,
-  /** Print a GraphQLSchema to GraphQL Schema language. */
+  // Print a GraphQLSchema to GraphQL Schema language.
   printSchema,
-  /** Print a GraphQLType to GraphQL Schema language. */
+  // Print a GraphQLType to GraphQL Schema language.
   printType,
-  /** Prints the built-in introspection schema in the Schema Language format. */
+  // Prints the built-in introspection schema in the Schema Language format.
   printIntrospectionSchema,
-  /** Create a GraphQLType from a GraphQL language AST. */
+  // Create a GraphQLType from a GraphQL language AST.
   typeFromAST,
-  /** Create a JavaScript value from a GraphQL language AST with a Type. */
+  // Create a JavaScript value from a GraphQL language AST with a Type.
   valueFromAST,
-  /** Create a JavaScript value from a GraphQL language AST without a Type. */
+  // Create a JavaScript value from a GraphQL language AST without a Type.
   valueFromASTUntyped,
-  /** Create a GraphQL language AST from a JavaScript value. */
+  // Create a GraphQL language AST from a JavaScript value.
   astFromValue,
-  /** A helper to use within recursive-descent visitors which need to be aware of the GraphQL type system. */
+  // A helper to use within recursive-descent visitors which need to be aware of the GraphQL type system.
   TypeInfo,
   visitWithTypeInfo,
-  /** Coerces a JavaScript value to a GraphQL type, or produces errors. */
+  // Coerces a JavaScript value to a GraphQL type, or produces errors.
   coerceInputValue,
-  /** Concatenates multiple AST together. */
+  // Concatenates multiple AST together.
   concatAST,
-  /** Separates an AST into an AST per Operation. */
+  // Separates an AST into an AST per Operation.
   separateOperations,
-  /** Strips characters that are not significant to the validity or execution of a GraphQL document. */
+  // Strips characters that are not significant to the validity or execution of a GraphQL document.
   stripIgnoredCharacters,
-  /** Comparators for types */
+  // Comparators for types
   isEqualType,
   isTypeSubTypeOf,
   doTypesOverlap,
-  /** Asserts a string is a valid GraphQL name. */
+  // Asserts a string is a valid GraphQL name.
   assertValidName,
-  /** Determine if a string is a valid GraphQL name. */
+  // Determine if a string is a valid GraphQL name.
   isValidNameError,
-  /** Compares two GraphQLSchemas and detects breaking changes. */
+  // Compares two GraphQLSchemas and detects breaking changes.
   BreakingChangeType,
   DangerousChangeType,
   findBreakingChanges,
diff --git a/src/jsutils/promiseReduce.ts b/src/jsutils/promiseReduce.ts
index c92b934a..58db2e85 100644
--- a/src/jsutils/promiseReduce.ts
+++ b/src/jsutils/promiseReduce.ts
@@ -1,6 +1,5 @@
-import type { PromiseOrValue } from './PromiseOrValue';
-
 import { isPromise } from './isPromise';
+import type { PromiseOrValue } from './PromiseOrValue';
 
 /**
  * Similar to Array.prototype.reduce(), however the reducing callback may return
diff --git a/src/language/index.ts b/src/language/index.ts
index fc0583ec..ec4d195e 100644
--- a/src/language/index.ts
+++ b/src/language/index.ts
@@ -31,7 +31,7 @@ export { Location, Token, OperationTypeNode } from './ast';
 export type {
   ASTNode,
   ASTKindToNode,
-  /** Each kind of AST node */
+  // Each kind of AST node
   NameNode,
   DocumentNode,
   DefinitionNode,
diff --git a/src/language/lexer.ts b/src/language/lexer.ts
index a28c1084..818f81b2 100644
--- a/src/language/lexer.ts
+++ b/src/language/lexer.ts
@@ -1,10 +1,10 @@
 import { syntaxError } from '../error/syntaxError';
 
-import type { Source } from './source';
 import { Token } from './ast';
-import { TokenKind } from './tokenKind';
 import { dedentBlockStringLines } from './blockString';
-import { isDigit, isNameStart, isNameContinue } from './characterClasses';
+import { isDigit, isNameContinue, isNameStart } from './characterClasses';
+import type { Source } from './source';
+import { TokenKind } from './tokenKind';
 
 /**
  * Given a Source object, creates a Lexer for that source.
diff --git a/src/language/parser.ts b/src/language/parser.ts
index 4c1725cc..282ee168 100644
--- a/src/language/parser.ts
+++ b/src/language/parser.ts
@@ -4,68 +4,68 @@ import type { GraphQLError } from '../error/GraphQLError';
 import { syntaxError } from '../error/syntaxError';
 
 import type {
-  Token,
-  NameNode,
-  VariableNode,
-  DocumentNode,
-  DefinitionNode,
-  OperationDefinitionNode,
-  VariableDefinitionNode,
-  SelectionSetNode,
-  SelectionNode,
-  FieldNode,
   ArgumentNode,
+  BooleanValueNode,
   ConstArgumentNode,
+  ConstDirectiveNode,
+  ConstListValueNode,
+  ConstObjectFieldNode,
+  ConstObjectValueNode,
+  ConstValueNode,
+  DefinitionNode,
+  DirectiveDefinitionNode,
+  DirectiveNode,
+  DocumentNode,
+  EnumTypeDefinitionNode,
+  EnumTypeExtensionNode,
+  EnumValueDefinitionNode,
+  EnumValueNode,
+  FieldDefinitionNode,
+  FieldNode,
+  FloatValueNode,
+  FragmentDefinitionNode,
   FragmentSpreadNode,
   InlineFragmentNode,
-  FragmentDefinitionNode,
-  ValueNode,
-  ConstValueNode,
+  InputObjectTypeDefinitionNode,
+  InputObjectTypeExtensionNode,
+  InputValueDefinitionNode,
+  InterfaceTypeDefinitionNode,
+  InterfaceTypeExtensionNode,
   IntValueNode,
-  FloatValueNode,
-  StringValueNode,
-  BooleanValueNode,
-  NullValueNode,
-  EnumValueNode,
+  ListTypeNode,
   ListValueNode,
-  ConstListValueNode,
-  ObjectValueNode,
-  ConstObjectValueNode,
-  ObjectFieldNode,
-  ConstObjectFieldNode,
-  DirectiveNode,
-  ConstDirectiveNode,
-  TypeNode,
   NamedTypeNode,
-  ListTypeNode,
+  NameNode,
   NonNullTypeNode,
-  SchemaDefinitionNode,
+  NullValueNode,
+  ObjectFieldNode,
+  ObjectTypeDefinitionNode,
+  ObjectTypeExtensionNode,
+  ObjectValueNode,
+  OperationDefinitionNode,
   OperationTypeDefinitionNode,
   ScalarTypeDefinitionNode,
-  ObjectTypeDefinitionNode,
-  FieldDefinitionNode,
-  InputValueDefinitionNode,
-  InterfaceTypeDefinitionNode,
-  UnionTypeDefinitionNode,
-  EnumTypeDefinitionNode,
-  EnumValueDefinitionNode,
-  InputObjectTypeDefinitionNode,
-  DirectiveDefinitionNode,
-  TypeSystemExtensionNode,
-  SchemaExtensionNode,
   ScalarTypeExtensionNode,
-  ObjectTypeExtensionNode,
-  InterfaceTypeExtensionNode,
+  SchemaDefinitionNode,
+  SchemaExtensionNode,
+  SelectionNode,
+  SelectionSetNode,
+  StringValueNode,
+  Token,
+  TypeNode,
+  TypeSystemExtensionNode,
+  UnionTypeDefinitionNode,
   UnionTypeExtensionNode,
-  EnumTypeExtensionNode,
-  InputObjectTypeExtensionNode,
+  ValueNode,
+  VariableDefinitionNode,
+  VariableNode,
 } from './ast';
-import { Kind } from './kinds';
 import { Location, OperationTypeNode } from './ast';
-import { TokenKind } from './tokenKind';
-import { Source, isSource } from './source';
 import { DirectiveLocation } from './directiveLocation';
-import { Lexer, isPunctuatorTokenKind } from './lexer';
+import { Kind } from './kinds';
+import { isPunctuatorTokenKind, Lexer } from './lexer';
+import { isSource, Source } from './source';
+import { TokenKind } from './tokenKind';
 
 /**
  * Configuration options to control parser behavior
diff --git a/src/language/predicates.ts b/src/language/predicates.ts
index 29e4984d..a390f4ee 100644
--- a/src/language/predicates.ts
+++ b/src/language/predicates.ts
@@ -1,15 +1,15 @@
 import type {
   ASTNode,
+  ConstValueNode,
   DefinitionNode,
   ExecutableDefinitionNode,
   SelectionNode,
-  ValueNode,
-  ConstValueNode,
+  TypeDefinitionNode,
+  TypeExtensionNode,
   TypeNode,
   TypeSystemDefinitionNode,
-  TypeDefinitionNode,
   TypeSystemExtensionNode,
-  TypeExtensionNode,
+  ValueNode,
 } from './ast';
 import { Kind } from './kinds';
 
diff --git a/src/language/printLocation.ts b/src/language/printLocation.ts
index 97a34f14..3d44f5ce 100644
--- a/src/language/printLocation.ts
+++ b/src/language/printLocation.ts
@@ -1,7 +1,7 @@
-import type { Source } from './source';
 import type { Location } from './ast';
 import type { SourceLocation } from './location';
 import { getLocation } from './location';
+import type { Source } from './source';
 
 /**
  * Render a helpful description of the location in the GraphQL Source document.
diff --git a/src/language/printer.ts b/src/language/printer.ts
index 9df691ac..e95c118d 100644
--- a/src/language/printer.ts
+++ b/src/language/printer.ts
@@ -1,10 +1,10 @@
 import type { Maybe } from '../jsutils/Maybe';
 
 import type { ASTNode } from './ast';
-import type { ASTReducer } from './visitor';
-import { visit } from './visitor';
 import { printBlockString } from './blockString';
 import { printString } from './printString';
+import type { ASTReducer } from './visitor';
+import { visit } from './visitor';
 
 /**
  * Converts an AST into a string, using one set of reasonable
diff --git a/src/language/source.ts b/src/language/source.ts
index 202d04b3..15f65fce 100644
--- a/src/language/source.ts
+++ b/src/language/source.ts
@@ -1,5 +1,5 @@
-import { inspect } from '../jsutils/inspect';
 import { devAssert } from '../jsutils/devAssert';
+import { inspect } from '../jsutils/inspect';
 import { instanceOf } from '../jsutils/instanceOf';
 
 interface Location {
diff --git a/src/language/visitor.ts b/src/language/visitor.ts
index b7e7c953..821c9cb3 100644
--- a/src/language/visitor.ts
+++ b/src/language/visitor.ts
@@ -1,5 +1,5 @@
-import { inspect } from '../jsutils/inspect';
 import { devAssert } from '../jsutils/devAssert';
+import { inspect } from '../jsutils/inspect';
 
 import type { ASTNode } from './ast';
 import { isNode, QueryDocumentKeys } from './ast';
diff --git a/src/type/assertName.ts b/src/type/assertName.ts
index c4436191..f4f96fda 100644
--- a/src/type/assertName.ts
+++ b/src/type/assertName.ts
@@ -1,7 +1,8 @@
 import { devAssert } from '../jsutils/devAssert';
 
 import { GraphQLError } from '../error/GraphQLError';
-import { isNameStart, isNameContinue } from '../language/characterClasses';
+
+import { isNameContinue, isNameStart } from '../language/characterClasses';
 
 /**
  * Upholds the spec rules about naming.
diff --git a/src/type/definition.ts b/src/type/definition.ts
index 9a4fec29..090afa36 100644
--- a/src/type/definition.ts
+++ b/src/type/definition.ts
@@ -1,49 +1,49 @@
-import type { Path } from '../jsutils/Path';
-import type { PromiseOrValue } from '../jsutils/PromiseOrValue';
-import type { ObjMap } from '../jsutils/ObjMap';
-import { inspect } from '../jsutils/inspect';
-import { keyMap } from '../jsutils/keyMap';
-import { mapValue } from '../jsutils/mapValue';
-import { toObjMap } from '../jsutils/toObjMap';
 import { devAssert } from '../jsutils/devAssert';
-import { keyValMap } from '../jsutils/keyValMap';
-import { instanceOf } from '../jsutils/instanceOf';
 import { didYouMean } from '../jsutils/didYouMean';
-import { isObjectLike } from '../jsutils/isObjectLike';
 import { identityFunc } from '../jsutils/identityFunc';
-import { suggestionList } from '../jsutils/suggestionList';
+import { inspect } from '../jsutils/inspect';
+import { instanceOf } from '../jsutils/instanceOf';
+import { isObjectLike } from '../jsutils/isObjectLike';
+import { keyMap } from '../jsutils/keyMap';
+import { keyValMap } from '../jsutils/keyValMap';
+import { mapValue } from '../jsutils/mapValue';
 import type { Maybe } from '../jsutils/Maybe';
+import type { ObjMap } from '../jsutils/ObjMap';
+import type { Path } from '../jsutils/Path';
+import type { PromiseOrValue } from '../jsutils/PromiseOrValue';
+import { suggestionList } from '../jsutils/suggestionList';
+import { toObjMap } from '../jsutils/toObjMap';
 
 import { GraphQLError } from '../error/GraphQLError';
 
-import { Kind } from '../language/kinds';
-import { print } from '../language/printer';
 import type {
+  EnumTypeDefinitionNode,
+  EnumTypeExtensionNode,
+  EnumValueDefinitionNode,
+  FieldDefinitionNode,
   FieldNode,
-  ValueNode,
-  OperationDefinitionNode,
   FragmentDefinitionNode,
-  ScalarTypeDefinitionNode,
-  ScalarTypeExtensionNode,
-  ObjectTypeDefinitionNode,
-  ObjectTypeExtensionNode,
-  FieldDefinitionNode,
+  InputObjectTypeDefinitionNode,
+  InputObjectTypeExtensionNode,
   InputValueDefinitionNode,
   InterfaceTypeDefinitionNode,
   InterfaceTypeExtensionNode,
+  ObjectTypeDefinitionNode,
+  ObjectTypeExtensionNode,
+  OperationDefinitionNode,
+  ScalarTypeDefinitionNode,
+  ScalarTypeExtensionNode,
   UnionTypeDefinitionNode,
   UnionTypeExtensionNode,
-  EnumTypeDefinitionNode,
-  EnumValueDefinitionNode,
-  EnumTypeExtensionNode,
-  InputObjectTypeDefinitionNode,
-  InputObjectTypeExtensionNode,
+  ValueNode,
 } from '../language/ast';
+import { Kind } from '../language/kinds';
+import { print } from '../language/printer';
 
 import { valueFromASTUntyped } from '../utilities/valueFromASTUntyped';
 
+import { assertEnumValueName, assertName } from './assertName';
 import type { GraphQLSchema } from './schema';
-import { assertName, assertEnumValueName } from './assertName';
 
 // Predicates & Assertions
 
diff --git a/src/type/directives.ts b/src/type/directives.ts
index f8911c40..bb3e441a 100644
--- a/src/type/directives.ts
+++ b/src/type/directives.ts
@@ -1,24 +1,24 @@
-import { inspect } from '../jsutils/inspect';
-import { toObjMap } from '../jsutils/toObjMap';
 import { devAssert } from '../jsutils/devAssert';
+import { inspect } from '../jsutils/inspect';
 import { instanceOf } from '../jsutils/instanceOf';
 import { isObjectLike } from '../jsutils/isObjectLike';
 import type { Maybe } from '../jsutils/Maybe';
+import { toObjMap } from '../jsutils/toObjMap';
 
 import type { DirectiveDefinitionNode } from '../language/ast';
 import { DirectiveLocation } from '../language/directiveLocation';
 
+import { assertName } from './assertName';
 import type {
   GraphQLArgument,
   GraphQLFieldConfigArgumentMap,
 } from './definition';
-import { assertName } from './assertName';
-import { GraphQLString, GraphQLBoolean } from './scalars';
 import {
-  defineArguments,
   argsToArgsConfig,
+  defineArguments,
   GraphQLNonNull,
 } from './definition';
+import { GraphQLBoolean, GraphQLString } from './scalars';
 
 /**
  * Test if the given value is a GraphQL directive.
diff --git a/src/type/index.ts b/src/type/index.ts
index 72f24be4..270dd67d 100644
--- a/src/type/index.ts
+++ b/src/type/index.ts
@@ -1,11 +1,11 @@
 export type { Path as ResponsePath } from '../jsutils/Path';
 
 export {
-  /** Predicate */
+  // Predicate
   isSchema,
-  /** Assertion */
+  // Assertion
   assertSchema,
-  /** GraphQL Schema definition */
+  // GraphQL Schema definition
   GraphQLSchema,
 } from './schema';
 export type { GraphQLSchemaConfig, GraphQLSchemaExtensions } from './schema';
@@ -13,7 +13,7 @@ export type { GraphQLSchemaConfig, GraphQLSchemaExtensions } from './schema';
 export {
   resolveObjMapThunk,
   resolveReadonlyArrayThunk,
-  /** Predicates */
+  // Predicates
   isType,
   isScalarType,
   isObjectType,
@@ -33,7 +33,7 @@ export {
   isNamedType,
   isRequiredArgument,
   isRequiredInputField,
-  /** Assertions */
+  // Assertions
   assertType,
   assertScalarType,
   assertObjectType,
@@ -51,17 +51,17 @@ export {
   assertWrappingType,
   assertNullableType,
   assertNamedType,
-  /** Un-modifiers */
+  // Un-modifiers
   getNullableType,
   getNamedType,
-  /** Definitions */
+  // Definitions
   GraphQLScalarType,
   GraphQLObjectType,
   GraphQLInterfaceType,
   GraphQLUnionType,
   GraphQLEnumType,
   GraphQLInputObjectType,
-  /** Type Wrappers */
+  // Type Wrappers
   GraphQLList,
   GraphQLNonNull,
 } from './definition';
@@ -120,20 +120,20 @@ export type {
 } from './definition';
 
 export {
-  /** Predicate */
+  // Predicate
   isDirective,
-  /** Assertion */
+  // Assertion
   assertDirective,
-  /** Directives Definition */
+  // Directives Definition
   GraphQLDirective,
-  /** Built-in Directives defined by the Spec */
+  // Built-in Directives defined by the Spec
   isSpecifiedDirective,
   specifiedDirectives,
   GraphQLIncludeDirective,
   GraphQLSkipDirective,
   GraphQLDeprecatedDirective,
   GraphQLSpecifiedByDirective,
-  /** Constant Deprecation Reason */
+  // Constant Deprecation Reason
   DEFAULT_DEPRECATION_REASON,
 } from './directives';
 
@@ -142,26 +142,26 @@ export type {
   GraphQLDirectiveExtensions,
 } from './directives';
 
-/** Common built-in scalar instances. */
+// Common built-in scalar instances.
 export {
-  /** Predicate */
+  // Predicate
   isSpecifiedScalarType,
-  /** Standard GraphQL Scalars */
+  // Standard GraphQL Scalars
   specifiedScalarTypes,
   GraphQLInt,
   GraphQLFloat,
   GraphQLString,
   GraphQLBoolean,
   GraphQLID,
-  /** Int boundaries constants */
+  // Int boundaries constants
   GRAPHQL_MAX_INT,
   GRAPHQL_MIN_INT,
 } from './scalars';
 
 export {
-  /** Predicate */
+  // Predicate
   isIntrospectionType,
-  /** GraphQL Types for introspection. */
+  // GraphQL Types for introspection.
   introspectionTypes,
   __Schema,
   __Directive,
@@ -171,16 +171,16 @@ export {
   __InputValue,
   __EnumValue,
   __TypeKind,
-  /** "Enum" of Type Kinds */
+  // "Enum" of Type Kinds
   TypeKind,
-  /** Meta-field definitions. */
+  // Meta-field definitions.
   SchemaMetaFieldDef,
   TypeMetaFieldDef,
   TypeNameMetaFieldDef,
 } from './introspection';
 
-/** Validate GraphQL schema. */
+// Validate GraphQL schema.
 export { validateSchema, assertValidSchema } from './validate';
 
-/** Upholds the spec rules about naming. */
+// Upholds the spec rules about naming.
 export { assertName, assertEnumValueName } from './assertName';
diff --git a/src/type/introspection.ts b/src/type/introspection.ts
index 07a496c0..e5fce6f2 100644
--- a/src/type/introspection.ts
+++ b/src/type/introspection.ts
@@ -1,36 +1,37 @@
 import { inspect } from '../jsutils/inspect';
 import { invariant } from '../jsutils/invariant';
 
-import { print } from '../language/printer';
 import { DirectiveLocation } from '../language/directiveLocation';
+import { print } from '../language/printer';
+
 import { astFromValue } from '../utilities/astFromValue';
 
-import type { GraphQLSchema } from './schema';
-import type { GraphQLDirective } from './directives';
 import type {
-  GraphQLType,
-  GraphQLNamedType,
-  GraphQLInputField,
   GraphQLEnumValue,
   GraphQLField,
   GraphQLFieldConfigMap,
+  GraphQLInputField,
+  GraphQLNamedType,
+  GraphQLType,
 } from './definition';
-import { GraphQLString, GraphQLBoolean } from './scalars';
 import {
+  GraphQLEnumType,
   GraphQLList,
   GraphQLNonNull,
   GraphQLObjectType,
-  GraphQLEnumType,
-  isScalarType,
-  isObjectType,
-  isInterfaceType,
-  isUnionType,
+  isAbstractType,
   isEnumType,
   isInputObjectType,
+  isInterfaceType,
   isListType,
   isNonNullType,
-  isAbstractType,
+  isObjectType,
+  isScalarType,
+  isUnionType,
 } from './definition';
+import type { GraphQLDirective } from './directives';
+import { GraphQLBoolean, GraphQLString } from './scalars';
+import type { GraphQLSchema } from './schema';
 
 export const __Schema: GraphQLObjectType = new GraphQLObjectType({
   name: '__Schema',
diff --git a/src/type/scalars.ts b/src/type/scalars.ts
index 06ce25aa..de78e6b0 100644
--- a/src/type/scalars.ts
+++ b/src/type/scalars.ts
@@ -1,11 +1,11 @@
 import { inspect } from '../jsutils/inspect';
 import { isObjectLike } from '../jsutils/isObjectLike';
 
+import { GraphQLError } from '../error/GraphQLError';
+
 import { Kind } from '../language/kinds';
 import { print } from '../language/printer';
 
-import { GraphQLError } from '../error/GraphQLError';
-
 import type { GraphQLNamedType } from './definition';
 import { GraphQLScalarType } from './definition';
 
diff --git a/src/type/schema.ts b/src/type/schema.ts
index 18428579..97c27821 100644
--- a/src/type/schema.ts
+++ b/src/type/schema.ts
@@ -1,10 +1,10 @@
-import type { ObjMap } from '../jsutils/ObjMap';
-import { inspect } from '../jsutils/inspect';
-import { toObjMap } from '../jsutils/toObjMap';
 import { devAssert } from '../jsutils/devAssert';
+import { inspect } from '../jsutils/inspect';
 import { instanceOf } from '../jsutils/instanceOf';
 import { isObjectLike } from '../jsutils/isObjectLike';
 import type { Maybe } from '../jsutils/Maybe';
+import type { ObjMap } from '../jsutils/ObjMap';
+import { toObjMap } from '../jsutils/toObjMap';
 
 import type { GraphQLError } from '../error/GraphQLError';
 
@@ -15,22 +15,22 @@ import type {
 import { OperationTypeNode } from '../language/ast';
 
 import type {
-  GraphQLType,
-  GraphQLNamedType,
   GraphQLAbstractType,
-  GraphQLObjectType,
   GraphQLInterfaceType,
+  GraphQLNamedType,
+  GraphQLObjectType,
+  GraphQLType,
 } from './definition';
-import type { GraphQLDirective } from './directives';
-import { __Schema } from './introspection';
-import { isDirective, specifiedDirectives } from './directives';
 import {
-  isObjectType,
+  getNamedType,
+  isInputObjectType,
   isInterfaceType,
+  isObjectType,
   isUnionType,
-  isInputObjectType,
-  getNamedType,
 } from './definition';
+import type { GraphQLDirective } from './directives';
+import { isDirective, specifiedDirectives } from './directives';
+import { __Schema } from './introspection';
 
 /**
  * Test if the given value is a GraphQL schema.
diff --git a/src/type/validate.ts b/src/type/validate.ts
index 9232c891..92f70787 100644
--- a/src/type/validate.ts
+++ b/src/type/validate.ts
@@ -5,12 +5,12 @@ import { GraphQLError } from '../error/GraphQLError';
 
 import type {
   ASTNode,
-  NamedTypeNode,
   DirectiveNode,
-  ObjectTypeDefinitionNode,
-  ObjectTypeExtensionNode,
   InterfaceTypeDefinitionNode,
   InterfaceTypeExtensionNode,
+  NamedTypeNode,
+  ObjectTypeDefinitionNode,
+  ObjectTypeExtensionNode,
   UnionTypeDefinitionNode,
   UnionTypeExtensionNode,
 } from '../language/ast';
@@ -18,31 +18,31 @@ import { OperationTypeNode } from '../language/ast';
 
 import { isEqualType, isTypeSubTypeOf } from '../utilities/typeComparators';
 
-import type { GraphQLSchema } from './schema';
 import type {
-  GraphQLObjectType,
-  GraphQLInterfaceType,
-  GraphQLUnionType,
   GraphQLEnumType,
-  GraphQLInputObjectType,
   GraphQLInputField,
+  GraphQLInputObjectType,
+  GraphQLInterfaceType,
+  GraphQLObjectType,
+  GraphQLUnionType,
 } from './definition';
-import { assertSchema } from './schema';
-import { isIntrospectionType } from './introspection';
-import { isDirective, GraphQLDeprecatedDirective } from './directives';
 import {
-  isObjectType,
-  isInterfaceType,
-  isUnionType,
   isEnumType,
   isInputObjectType,
+  isInputType,
+  isInterfaceType,
   isNamedType,
   isNonNullType,
-  isInputType,
+  isObjectType,
   isOutputType,
   isRequiredArgument,
   isRequiredInputField,
+  isUnionType,
 } from './definition';
+import { GraphQLDeprecatedDirective, isDirective } from './directives';
+import { isIntrospectionType } from './introspection';
+import type { GraphQLSchema } from './schema';
+import { assertSchema } from './schema';
 
 /**
  * Implements the "Type Validation" sub-sections of the specification's
diff --git a/src/utilities/TypeInfo.ts b/src/utilities/TypeInfo.ts
index 7b316b96..e72dfb01 100644
--- a/src/utilities/TypeInfo.ts
+++ b/src/utilities/TypeInfo.ts
@@ -1,40 +1,40 @@
-import type { ASTVisitor } from '../language/visitor';
+import type { Maybe } from '../jsutils/Maybe';
+
 import type { ASTNode, FieldNode } from '../language/ast';
-import { Kind } from '../language/kinds';
 import { isNode } from '../language/ast';
+import { Kind } from '../language/kinds';
+import type { ASTVisitor } from '../language/visitor';
 import { getEnterLeaveForKind } from '../language/visitor';
 
-import type { Maybe } from '../jsutils/Maybe';
-
-import type { GraphQLSchema } from '../type/schema';
-import type { GraphQLDirective } from '../type/directives';
 import type {
-  GraphQLType,
-  GraphQLInputType,
-  GraphQLOutputType,
+  GraphQLArgument,
   GraphQLCompositeType,
+  GraphQLEnumValue,
   GraphQLField,
-  GraphQLArgument,
   GraphQLInputField,
-  GraphQLEnumValue,
+  GraphQLInputType,
+  GraphQLOutputType,
+  GraphQLType,
 } from '../type/definition';
 import {
-  isObjectType,
-  isInterfaceType,
+  getNamedType,
+  getNullableType,
+  isCompositeType,
   isEnumType,
   isInputObjectType,
-  isListType,
-  isCompositeType,
   isInputType,
+  isInterfaceType,
+  isListType,
+  isObjectType,
   isOutputType,
-  getNullableType,
-  getNamedType,
 } from '../type/definition';
+import type { GraphQLDirective } from '../type/directives';
 import {
   SchemaMetaFieldDef,
   TypeMetaFieldDef,
   TypeNameMetaFieldDef,
 } from '../type/introspection';
+import type { GraphQLSchema } from '../type/schema';
 
 import { typeFromAST } from './typeFromAST';
 
diff --git a/src/utilities/astFromValue.ts b/src/utilities/astFromValue.ts
index 32c497d4..1a880449 100644
--- a/src/utilities/astFromValue.ts
+++ b/src/utilities/astFromValue.ts
@@ -1,21 +1,21 @@
 import { inspect } from '../jsutils/inspect';
 import { invariant } from '../jsutils/invariant';
-import { isObjectLike } from '../jsutils/isObjectLike';
 import { isIterableObject } from '../jsutils/isIterableObject';
+import { isObjectLike } from '../jsutils/isObjectLike';
 import type { Maybe } from '../jsutils/Maybe';
 
-import type { ValueNode, ObjectFieldNode } from '../language/ast';
+import type { ObjectFieldNode, ValueNode } from '../language/ast';
 import { Kind } from '../language/kinds';
 
 import type { GraphQLInputType } from '../type/definition';
-import { GraphQLID } from '../type/scalars';
 import {
-  isLeafType,
   isEnumType,
   isInputObjectType,
+  isLeafType,
   isListType,
   isNonNullType,
 } from '../type/definition';
+import { GraphQLID } from '../type/scalars';
 
 /**
  * Produces a GraphQL Value AST given a JavaScript object.
diff --git a/src/utilities/buildASTSchema.ts b/src/utilities/buildASTSchema.ts
index 9b69e4dd..eeff08e6 100644
--- a/src/utilities/buildASTSchema.ts
+++ b/src/utilities/buildASTSchema.ts
@@ -1,16 +1,16 @@
 import { devAssert } from '../jsutils/devAssert';
 
-import type { Source } from '../language/source';
 import type { DocumentNode } from '../language/ast';
-import type { ParseOptions } from '../language/parser';
 import { Kind } from '../language/kinds';
+import type { ParseOptions } from '../language/parser';
 import { parse } from '../language/parser';
+import type { Source } from '../language/source';
 
-import { assertValidSDL } from '../validation/validate';
-
+import { specifiedDirectives } from '../type/directives';
 import type { GraphQLSchemaValidationOptions } from '../type/schema';
 import { GraphQLSchema } from '../type/schema';
-import { specifiedDirectives } from '../type/directives';
+
+import { assertValidSDL } from '../validation/validate';
 
 import { extendSchemaImpl } from './extendSchema';
 
diff --git a/src/utilities/buildClientSchema.ts b/src/utilities/buildClientSchema.ts
index 138f7f26..18e6110b 100644
--- a/src/utilities/buildClientSchema.ts
+++ b/src/utilities/buildClientSchema.ts
@@ -1,51 +1,51 @@
-import { inspect } from '../jsutils/inspect';
 import { devAssert } from '../jsutils/devAssert';
-import { keyValMap } from '../jsutils/keyValMap';
+import { inspect } from '../jsutils/inspect';
 import { isObjectLike } from '../jsutils/isObjectLike';
+import { keyValMap } from '../jsutils/keyValMap';
 
 import { parseValue } from '../language/parser';
 
-import type { GraphQLSchemaValidationOptions } from '../type/schema';
 import type {
-  GraphQLType,
-  GraphQLNamedType,
   GraphQLFieldConfig,
   GraphQLFieldConfigMap,
+  GraphQLNamedType,
+  GraphQLType,
 } from '../type/definition';
-import { GraphQLSchema } from '../type/schema';
-import { GraphQLDirective } from '../type/directives';
-import { specifiedScalarTypes } from '../type/scalars';
-import { introspectionTypes, TypeKind } from '../type/introspection';
 import {
-  isInputType,
-  isOutputType,
+  assertInterfaceType,
+  assertNullableType,
+  assertObjectType,
+  GraphQLEnumType,
+  GraphQLInputObjectType,
+  GraphQLInterfaceType,
   GraphQLList,
   GraphQLNonNull,
-  GraphQLScalarType,
   GraphQLObjectType,
-  GraphQLInterfaceType,
+  GraphQLScalarType,
   GraphQLUnionType,
-  GraphQLEnumType,
-  GraphQLInputObjectType,
-  assertNullableType,
-  assertObjectType,
-  assertInterfaceType,
+  isInputType,
+  isOutputType,
 } from '../type/definition';
+import { GraphQLDirective } from '../type/directives';
+import { introspectionTypes, TypeKind } from '../type/introspection';
+import { specifiedScalarTypes } from '../type/scalars';
+import type { GraphQLSchemaValidationOptions } from '../type/schema';
+import { GraphQLSchema } from '../type/schema';
 
 import type {
-  IntrospectionQuery,
   IntrospectionDirective,
+  IntrospectionEnumType,
   IntrospectionField,
+  IntrospectionInputObjectType,
   IntrospectionInputValue,
-  IntrospectionType,
-  IntrospectionScalarType,
-  IntrospectionObjectType,
   IntrospectionInterfaceType,
-  IntrospectionUnionType,
-  IntrospectionEnumType,
-  IntrospectionInputObjectType,
-  IntrospectionTypeRef,
   IntrospectionNamedTypeRef,
+  IntrospectionObjectType,
+  IntrospectionQuery,
+  IntrospectionScalarType,
+  IntrospectionType,
+  IntrospectionTypeRef,
+  IntrospectionUnionType,
 } from './getIntrospectionQuery';
 import { valueFromAST } from './valueFromAST';
 
diff --git a/src/utilities/coerceInputValue.ts b/src/utilities/coerceInputValue.ts
index 633eb4f7..07883db8 100644
--- a/src/utilities/coerceInputValue.ts
+++ b/src/utilities/coerceInputValue.ts
@@ -1,19 +1,19 @@
-import type { Path } from '../jsutils/Path';
+import { didYouMean } from '../jsutils/didYouMean';
 import { inspect } from '../jsutils/inspect';
 import { invariant } from '../jsutils/invariant';
-import { didYouMean } from '../jsutils/didYouMean';
+import { isIterableObject } from '../jsutils/isIterableObject';
 import { isObjectLike } from '../jsutils/isObjectLike';
-import { suggestionList } from '../jsutils/suggestionList';
-import { printPathArray } from '../jsutils/printPathArray';
+import type { Path } from '../jsutils/Path';
 import { addPath, pathToArray } from '../jsutils/Path';
-import { isIterableObject } from '../jsutils/isIterableObject';
+import { printPathArray } from '../jsutils/printPathArray';
+import { suggestionList } from '../jsutils/suggestionList';
 
 import { GraphQLError } from '../error/GraphQLError';
 
 import type { GraphQLInputType } from '../type/definition';
 import {
-  isLeafType,
   isInputObjectType,
+  isLeafType,
   isListType,
   isNonNullType,
 } from '../type/definition';
diff --git a/src/utilities/concatAST.ts b/src/utilities/concatAST.ts
index 44375100..33062f61 100644
--- a/src/utilities/concatAST.ts
+++ b/src/utilities/concatAST.ts
@@ -1,4 +1,4 @@
-import type { DocumentNode, DefinitionNode } from '../language/ast';
+import type { DefinitionNode, DocumentNode } from '../language/ast';
 import { Kind } from '../language/kinds';
 
 /**
diff --git a/src/utilities/extendSchema.ts b/src/utilities/extendSchema.ts
index aba262f0..998847e9 100644
--- a/src/utilities/extendSchema.ts
+++ b/src/utilities/extendSchema.ts
@@ -1,33 +1,33 @@
-import { keyMap } from '../jsutils/keyMap';
+import { devAssert } from '../jsutils/devAssert';
 import { inspect } from '../jsutils/inspect';
-import { mapValue } from '../jsutils/mapValue';
 import { invariant } from '../jsutils/invariant';
-import { devAssert } from '../jsutils/devAssert';
+import { keyMap } from '../jsutils/keyMap';
+import { mapValue } from '../jsutils/mapValue';
 import type { Maybe } from '../jsutils/Maybe';
 
 import type {
+  DirectiveDefinitionNode,
   DocumentNode,
-  TypeNode,
-  NamedTypeNode,
-  SchemaDefinitionNode,
-  SchemaExtensionNode,
-  TypeDefinitionNode,
-  InterfaceTypeDefinitionNode,
-  InterfaceTypeExtensionNode,
-  ObjectTypeDefinitionNode,
-  ObjectTypeExtensionNode,
-  UnionTypeDefinitionNode,
-  UnionTypeExtensionNode,
+  EnumTypeDefinitionNode,
+  EnumTypeExtensionNode,
+  EnumValueDefinitionNode,
   FieldDefinitionNode,
   InputObjectTypeDefinitionNode,
   InputObjectTypeExtensionNode,
   InputValueDefinitionNode,
-  EnumTypeDefinitionNode,
-  EnumTypeExtensionNode,
-  EnumValueDefinitionNode,
-  DirectiveDefinitionNode,
+  InterfaceTypeDefinitionNode,
+  InterfaceTypeExtensionNode,
+  NamedTypeNode,
+  ObjectTypeDefinitionNode,
+  ObjectTypeExtensionNode,
   ScalarTypeDefinitionNode,
   ScalarTypeExtensionNode,
+  SchemaDefinitionNode,
+  SchemaExtensionNode,
+  TypeDefinitionNode,
+  TypeNode,
+  UnionTypeDefinitionNode,
+  UnionTypeExtensionNode,
 } from '../language/ast';
 import { Kind } from '../language/kinds';
 import {
@@ -35,50 +35,50 @@ import {
   isTypeExtensionNode,
 } from '../language/predicates';
 
-import { assertValidSDLExtension } from '../validation/validate';
-
-import { getDirectiveValues } from '../execution/values';
-
-import type {
-  GraphQLSchemaValidationOptions,
-  GraphQLSchemaNormalizedConfig,
-} from '../type/schema';
 import type {
-  GraphQLType,
-  GraphQLNamedType,
-  GraphQLFieldConfig,
-  GraphQLFieldConfigMap,
   GraphQLArgumentConfig,
-  GraphQLFieldConfigArgumentMap,
   GraphQLEnumValueConfigMap,
+  GraphQLFieldConfig,
+  GraphQLFieldConfigArgumentMap,
+  GraphQLFieldConfigMap,
   GraphQLInputFieldConfigMap,
+  GraphQLNamedType,
+  GraphQLType,
 } from '../type/definition';
-import { assertSchema, GraphQLSchema } from '../type/schema';
-import { specifiedScalarTypes, isSpecifiedScalarType } from '../type/scalars';
-import { introspectionTypes, isIntrospectionType } from '../type/introspection';
 import {
-  GraphQLDirective,
-  GraphQLDeprecatedDirective,
-  GraphQLSpecifiedByDirective,
-} from '../type/directives';
-import {
-  isScalarType,
-  isObjectType,
-  isInterfaceType,
-  isUnionType,
-  isListType,
-  isNonNullType,
-  isEnumType,
-  isInputObjectType,
+  GraphQLEnumType,
+  GraphQLInputObjectType,
+  GraphQLInterfaceType,
   GraphQLList,
   GraphQLNonNull,
-  GraphQLScalarType,
   GraphQLObjectType,
-  GraphQLInterfaceType,
+  GraphQLScalarType,
   GraphQLUnionType,
-  GraphQLEnumType,
-  GraphQLInputObjectType,
+  isEnumType,
+  isInputObjectType,
+  isInterfaceType,
+  isListType,
+  isNonNullType,
+  isObjectType,
+  isScalarType,
+  isUnionType,
 } from '../type/definition';
+import {
+  GraphQLDeprecatedDirective,
+  GraphQLDirective,
+  GraphQLSpecifiedByDirective,
+} from '../type/directives';
+import { introspectionTypes, isIntrospectionType } from '../type/introspection';
+import { isSpecifiedScalarType, specifiedScalarTypes } from '../type/scalars';
+import type {
+  GraphQLSchemaNormalizedConfig,
+  GraphQLSchemaValidationOptions,
+} from '../type/schema';
+import { assertSchema, GraphQLSchema } from '../type/schema';
+
+import { assertValidSDLExtension } from '../validation/validate';
+
+import { getDirectiveValues } from '../execution/values';
 
 import { valueFromAST } from './valueFromAST';
 
diff --git a/src/utilities/findBreakingChanges.ts b/src/utilities/findBreakingChanges.ts
index 989c1d21..b82901f9 100644
--- a/src/utilities/findBreakingChanges.ts
+++ b/src/utilities/findBreakingChanges.ts
@@ -1,37 +1,37 @@
-import { keyMap } from '../jsutils/keyMap';
 import { inspect } from '../jsutils/inspect';
 import { invariant } from '../jsutils/invariant';
+import { keyMap } from '../jsutils/keyMap';
 import { naturalCompare } from '../jsutils/naturalCompare';
 
 import { print } from '../language/printer';
 import { visit } from '../language/visitor';
 
-import type { GraphQLSchema } from '../type/schema';
 import type {
+  GraphQLEnumType,
   GraphQLField,
-  GraphQLType,
+  GraphQLInputObjectType,
   GraphQLInputType,
+  GraphQLInterfaceType,
   GraphQLNamedType,
-  GraphQLEnumType,
-  GraphQLUnionType,
   GraphQLObjectType,
-  GraphQLInterfaceType,
-  GraphQLInputObjectType,
+  GraphQLType,
+  GraphQLUnionType,
 } from '../type/definition';
-import { isSpecifiedScalarType } from '../type/scalars';
 import {
-  isScalarType,
-  isObjectType,
-  isInterfaceType,
-  isUnionType,
   isEnumType,
   isInputObjectType,
-  isNonNullType,
+  isInterfaceType,
   isListType,
   isNamedType,
+  isNonNullType,
+  isObjectType,
   isRequiredArgument,
   isRequiredInputField,
+  isScalarType,
+  isUnionType,
 } from '../type/definition';
+import { isSpecifiedScalarType } from '../type/scalars';
+import type { GraphQLSchema } from '../type/schema';
 
 import { astFromValue } from './astFromValue';
 
diff --git a/src/utilities/getIntrospectionQuery.ts b/src/utilities/getIntrospectionQuery.ts
index bb9be068..c21fe9a1 100644
--- a/src/utilities/getIntrospectionQuery.ts
+++ b/src/utilities/getIntrospectionQuery.ts
@@ -1,4 +1,5 @@
 import type { Maybe } from '../jsutils/Maybe';
+
 import type { DirectiveLocation } from '../language/directiveLocation';
 
 export interface IntrospectionOptions {
@@ -33,6 +34,10 @@ export interface IntrospectionOptions {
   inputValueDeprecation?: boolean;
 }
 
+/**
+ * Produce the GraphQL query recommended for a full schema introspection.
+ * Accepts optional IntrospectionOptions.
+ */
 export function getIntrospectionQuery(options?: IntrospectionOptions): string {
   const optionsWithDefault = {
     descriptions: true,
diff --git a/src/utilities/getOperationAST.ts b/src/utilities/getOperationAST.ts
index 9e6d85dd..8decf943 100644
--- a/src/utilities/getOperationAST.ts
+++ b/src/utilities/getOperationAST.ts
@@ -1,4 +1,5 @@
 import type { Maybe } from '../jsutils/Maybe';
+
 import type { DocumentNode, OperationDefinitionNode } from '../language/ast';
 import { Kind } from '../language/kinds';
 
diff --git a/src/utilities/getOperationRootType.ts b/src/utilities/getOperationRootType.ts
index 7738ec14..86302be8 100644
--- a/src/utilities/getOperationRootType.ts
+++ b/src/utilities/getOperationRootType.ts
@@ -5,8 +5,8 @@ import type {
   OperationTypeDefinitionNode,
 } from '../language/ast';
 
-import type { GraphQLSchema } from '../type/schema';
 import type { GraphQLObjectType } from '../type/definition';
+import type { GraphQLSchema } from '../type/schema';
 
 /**
  * Extracts the root type of the operation from the schema.
diff --git a/src/utilities/index.ts b/src/utilities/index.ts
index a1411f50..452b9752 100644
--- a/src/utilities/index.ts
+++ b/src/utilities/index.ts
@@ -1,7 +1,4 @@
-/**
- * Produce the GraphQL query recommended for a full schema introspection.
- * Accepts optional IntrospectionOptions.
- */
+// Produce the GraphQL query recommended for a full schema introspection.
 export { getIntrospectionQuery } from './getIntrospectionQuery';
 
 export type {
@@ -29,73 +26,73 @@ export type {
   IntrospectionDirective,
 } from './getIntrospectionQuery';
 
-/** Gets the target Operation from a Document. */
+// Gets the target Operation from a Document.
 export { getOperationAST } from './getOperationAST';
 
-/** Gets the Type for the target Operation AST. */
+// Gets the Type for the target Operation AST.
 export { getOperationRootType } from './getOperationRootType';
 
-/** Convert a GraphQLSchema to an IntrospectionQuery. */
+// Convert a GraphQLSchema to an IntrospectionQuery.
 export { introspectionFromSchema } from './introspectionFromSchema';
 
-/** Build a GraphQLSchema from an introspection result. */
+// Build a GraphQLSchema from an introspection result.
 export { buildClientSchema } from './buildClientSchema';
 
-/** Build a GraphQLSchema from GraphQL Schema language. */
+// Build a GraphQLSchema from GraphQL Schema language.
 export { buildASTSchema, buildSchema } from './buildASTSchema';
 export type { BuildSchemaOptions } from './buildASTSchema';
 
-/** Extends an existing GraphQLSchema from a parsed GraphQL Schema language AST. */
+// Extends an existing GraphQLSchema from a parsed GraphQL Schema language AST.
 export { extendSchema } from './extendSchema';
 
-/** Sort a GraphQLSchema. */
+// Sort a GraphQLSchema.
 export { lexicographicSortSchema } from './lexicographicSortSchema';
 
-/** Print a GraphQLSchema to GraphQL Schema language. */
+// Print a GraphQLSchema to GraphQL Schema language.
 export {
   printSchema,
   printType,
   printIntrospectionSchema,
 } from './printSchema';
 
-/** Create a GraphQLType from a GraphQL language AST. */
+// Create a GraphQLType from a GraphQL language AST.
 export { typeFromAST } from './typeFromAST';
 
-/** Create a JavaScript value from a GraphQL language AST with a type. */
+// Create a JavaScript value from a GraphQL language AST with a type.
 export { valueFromAST } from './valueFromAST';
 
-/** Create a JavaScript value from a GraphQL language AST without a type. */
+// Create a JavaScript value from a GraphQL language AST without a type.
 export { valueFromASTUntyped } from './valueFromASTUntyped';
 
-/** Create a GraphQL language AST from a JavaScript value. */
+// Create a GraphQL language AST from a JavaScript value.
 export { astFromValue } from './astFromValue';
 
-/** A helper to use within recursive-descent visitors which need to be aware of the GraphQL type system. */
+// A helper to use within recursive-descent visitors which need to be aware of the GraphQL type system.
 export { TypeInfo, visitWithTypeInfo } from './TypeInfo';
 
-/** Coerces a JavaScript value to a GraphQL type, or produces errors. */
+// Coerces a JavaScript value to a GraphQL type, or produces errors.
 export { coerceInputValue } from './coerceInputValue';
 
-/** Concatenates multiple AST together. */
+// Concatenates multiple AST together.
 export { concatAST } from './concatAST';
 
-/** Separates an AST into an AST per Operation. */
+// Separates an AST into an AST per Operation.
 export { separateOperations } from './separateOperations';
 
-/** Strips characters that are not significant to the validity or execution of a GraphQL document. */
+// Strips characters that are not significant to the validity or execution of a GraphQL document.
 export { stripIgnoredCharacters } from './stripIgnoredCharacters';
 
-/** Comparators for types */
+// Comparators for types
 export {
   isEqualType,
   isTypeSubTypeOf,
   doTypesOverlap,
 } from './typeComparators';
 
-/** Asserts that a string is a valid GraphQL name */
+// Asserts that a string is a valid GraphQL name
 export { assertValidName, isValidNameError } from './assertValidName';
 
-/** Compares two GraphQLSchemas and detects breaking changes. */
+// Compares two GraphQLSchemas and detects breaking changes.
 export {
   BreakingChangeType,
   DangerousChangeType,
@@ -104,5 +101,5 @@ export {
 } from './findBreakingChanges';
 export type { BreakingChange, DangerousChange } from './findBreakingChanges';
 
-/** Wrapper type that contains DocumentNode and types that can be deduced from it. */
+// Wrapper type that contains DocumentNode and types that can be deduced from it.
 export type { TypedQueryDocumentNode } from './typedQueryDocumentNode';
diff --git a/src/utilities/introspectionFromSchema.ts b/src/utilities/introspectionFromSchema.ts
index 22dfc8a9..5b933c21 100644
--- a/src/utilities/introspectionFromSchema.ts
+++ b/src/utilities/introspectionFromSchema.ts
@@ -7,8 +7,8 @@ import type { GraphQLSchema } from '../type/schema';
 import { executeSync } from '../execution/execute';
 
 import type {
-  IntrospectionQuery,
   IntrospectionOptions,
+  IntrospectionQuery,
 } from './getIntrospectionQuery';
 import { getIntrospectionQuery } from './getIntrospectionQuery';
 
diff --git a/src/utilities/lexicographicSortSchema.ts b/src/utilities/lexicographicSortSchema.ts
index 2033b129..26b6908c 100644
--- a/src/utilities/lexicographicSortSchema.ts
+++ b/src/utilities/lexicographicSortSchema.ts
@@ -1,37 +1,37 @@
-import type { ObjMap } from '../jsutils/ObjMap';
 import { inspect } from '../jsutils/inspect';
 import { invariant } from '../jsutils/invariant';
 import { keyValMap } from '../jsutils/keyValMap';
-import { naturalCompare } from '../jsutils/naturalCompare';
 import type { Maybe } from '../jsutils/Maybe';
+import { naturalCompare } from '../jsutils/naturalCompare';
+import type { ObjMap } from '../jsutils/ObjMap';
 
 import type {
-  GraphQLType,
-  GraphQLNamedType,
-  GraphQLFieldConfigMap,
   GraphQLFieldConfigArgumentMap,
+  GraphQLFieldConfigMap,
   GraphQLInputFieldConfigMap,
+  GraphQLNamedType,
+  GraphQLType,
 } from '../type/definition';
-import { GraphQLSchema } from '../type/schema';
-import { GraphQLDirective } from '../type/directives';
-import { isIntrospectionType } from '../type/introspection';
 import {
+  GraphQLEnumType,
+  GraphQLInputObjectType,
+  GraphQLInterfaceType,
   GraphQLList,
   GraphQLNonNull,
   GraphQLObjectType,
-  GraphQLInterfaceType,
   GraphQLUnionType,
-  GraphQLEnumType,
-  GraphQLInputObjectType,
+  isEnumType,
+  isInputObjectType,
+  isInterfaceType,
   isListType,
   isNonNullType,
-  isScalarType,
   isObjectType,
-  isInterfaceType,
+  isScalarType,
   isUnionType,
-  isEnumType,
-  isInputObjectType,
 } from '../type/definition';
+import { GraphQLDirective } from '../type/directives';
+import { isIntrospectionType } from '../type/introspection';
+import { GraphQLSchema } from '../type/schema';
 
 /**
  * Sort GraphQLSchema.
diff --git a/src/utilities/printSchema.ts b/src/utilities/printSchema.ts
index 7f06542d..83859fee 100644
--- a/src/utilities/printSchema.ts
+++ b/src/utilities/printSchema.ts
@@ -2,37 +2,37 @@ import { inspect } from '../jsutils/inspect';
 import { invariant } from '../jsutils/invariant';
 import type { Maybe } from '../jsutils/Maybe';
 
+import { isPrintableAsBlockString } from '../language/blockString';
 import { Kind } from '../language/kinds';
 import { print } from '../language/printer';
-import { isPrintableAsBlockString } from '../language/blockString';
 
-import type { GraphQLSchema } from '../type/schema';
-import type { GraphQLDirective } from '../type/directives';
 import type {
-  GraphQLNamedType,
   GraphQLArgument,
-  GraphQLInputField,
-  GraphQLScalarType,
   GraphQLEnumType,
-  GraphQLObjectType,
+  GraphQLInputField,
+  GraphQLInputObjectType,
   GraphQLInterfaceType,
+  GraphQLNamedType,
+  GraphQLObjectType,
+  GraphQLScalarType,
   GraphQLUnionType,
-  GraphQLInputObjectType,
 } from '../type/definition';
-import { isIntrospectionType } from '../type/introspection';
-import { isSpecifiedScalarType } from '../type/scalars';
-import {
-  DEFAULT_DEPRECATION_REASON,
-  isSpecifiedDirective,
-} from '../type/directives';
 import {
-  isScalarType,
-  isObjectType,
-  isInterfaceType,
-  isUnionType,
   isEnumType,
   isInputObjectType,
+  isInterfaceType,
+  isObjectType,
+  isScalarType,
+  isUnionType,
 } from '../type/definition';
+import type { GraphQLDirective } from '../type/directives';
+import {
+  DEFAULT_DEPRECATION_REASON,
+  isSpecifiedDirective,
+} from '../type/directives';
+import { isIntrospectionType } from '../type/introspection';
+import { isSpecifiedScalarType } from '../type/scalars';
+import type { GraphQLSchema } from '../type/schema';
 
 import { astFromValue } from './astFromValue';
 
diff --git a/src/utilities/stripIgnoredCharacters.ts b/src/utilities/stripIgnoredCharacters.ts
index 41d5c2a0..5eb5c980 100644
--- a/src/utilities/stripIgnoredCharacters.ts
+++ b/src/utilities/stripIgnoredCharacters.ts
@@ -1,7 +1,7 @@
-import { Source, isSource } from '../language/source';
-import { TokenKind } from '../language/tokenKind';
-import { Lexer, isPunctuatorTokenKind } from '../language/lexer';
 import { printBlockString } from '../language/blockString';
+import { isPunctuatorTokenKind, Lexer } from '../language/lexer';
+import { isSource, Source } from '../language/source';
+import { TokenKind } from '../language/tokenKind';
 
 /**
  * Strips characters that are not significant to the validity or execution
diff --git a/src/utilities/typeComparators.ts b/src/utilities/typeComparators.ts
index 99f84d2e..287be40b 100644
--- a/src/utilities/typeComparators.ts
+++ b/src/utilities/typeComparators.ts
@@ -1,12 +1,12 @@
-import type { GraphQLSchema } from '../type/schema';
-import type { GraphQLType, GraphQLCompositeType } from '../type/definition';
+import type { GraphQLCompositeType, GraphQLType } from '../type/definition';
 import {
+  isAbstractType,
   isInterfaceType,
-  isObjectType,
   isListType,
   isNonNullType,
-  isAbstractType,
+  isObjectType,
 } from '../type/definition';
+import type { GraphQLSchema } from '../type/schema';
 
 /**
  * Provided two types, return true if the types are equal (invariant).
diff --git a/src/utilities/typeFromAST.ts b/src/utilities/typeFromAST.ts
index 960106b5..7510df10 100644
--- a/src/utilities/typeFromAST.ts
+++ b/src/utilities/typeFromAST.ts
@@ -1,15 +1,14 @@
 import type {
-  TypeNode,
-  NamedTypeNode,
   ListTypeNode,
+  NamedTypeNode,
   NonNullTypeNode,
+  TypeNode,
 } from '../language/ast';
-
 import { Kind } from '../language/kinds';
 
-import type { GraphQLSchema } from '../type/schema';
-import type { GraphQLType, GraphQLNamedType } from '../type/definition';
+import type { GraphQLNamedType, GraphQLType } from '../type/definition';
 import { GraphQLList, GraphQLNonNull } from '../type/definition';
+import type { GraphQLSchema } from '../type/schema';
 
 /**
  * Given a Schema and an AST node describing a type, return a GraphQLType
diff --git a/src/utilities/valueFromAST.ts b/src/utilities/valueFromAST.ts
index 531a4a2e..4f0cee6b 100644
--- a/src/utilities/valueFromAST.ts
+++ b/src/utilities/valueFromAST.ts
@@ -1,21 +1,20 @@
-import type { ObjMap } from '../jsutils/ObjMap';
-import { keyMap } from '../jsutils/keyMap';
 import { inspect } from '../jsutils/inspect';
 import { invariant } from '../jsutils/invariant';
+import { keyMap } from '../jsutils/keyMap';
+import type { Maybe } from '../jsutils/Maybe';
+import type { ObjMap } from '../jsutils/ObjMap';
 
 import type { ValueNode } from '../language/ast';
 import { Kind } from '../language/kinds';
 
 import type { GraphQLInputType } from '../type/definition';
 import {
-  isLeafType,
   isInputObjectType,
+  isLeafType,
   isListType,
   isNonNullType,
 } from '../type/definition';
 
-import type { Maybe } from '../jsutils/Maybe';
-
 /**
  * Produces a JavaScript value given a GraphQL Value AST.
  *
diff --git a/src/utilities/valueFromASTUntyped.ts b/src/utilities/valueFromASTUntyped.ts
index 678ea151..05540da3 100644
--- a/src/utilities/valueFromASTUntyped.ts
+++ b/src/utilities/valueFromASTUntyped.ts
@@ -1,9 +1,9 @@
-import type { ObjMap } from '../jsutils/ObjMap';
 import { keyValMap } from '../jsutils/keyValMap';
 import type { Maybe } from '../jsutils/Maybe';
+import type { ObjMap } from '../jsutils/ObjMap';
 
-import { Kind } from '../language/kinds';
 import type { ValueNode } from '../language/ast';
+import { Kind } from '../language/kinds';
 
 /**
  * Produces a JavaScript value given a GraphQL Value AST.
diff --git a/src/validation/ValidationContext.ts b/src/validation/ValidationContext.ts
index a5057900..f6944a6e 100644
--- a/src/validation/ValidationContext.ts
+++ b/src/validation/ValidationContext.ts
@@ -3,29 +3,28 @@ import type { ObjMap } from '../jsutils/ObjMap';
 
 import type { GraphQLError } from '../error/GraphQLError';
 
-import type { ASTVisitor } from '../language/visitor';
 import type {
   DocumentNode,
+  FragmentDefinitionNode,
+  FragmentSpreadNode,
   OperationDefinitionNode,
-  VariableNode,
   SelectionSetNode,
-  FragmentSpreadNode,
-  FragmentDefinitionNode,
+  VariableNode,
 } from '../language/ast';
-
 import { Kind } from '../language/kinds';
+import type { ASTVisitor } from '../language/visitor';
 import { visit } from '../language/visitor';
 
-import type { GraphQLSchema } from '../type/schema';
-import type { GraphQLDirective } from '../type/directives';
 import type {
-  GraphQLInputType,
-  GraphQLOutputType,
-  GraphQLCompositeType,
-  GraphQLField,
   GraphQLArgument,
+  GraphQLCompositeType,
   GraphQLEnumValue,
+  GraphQLField,
+  GraphQLInputType,
+  GraphQLOutputType,
 } from '../type/definition';
+import type { GraphQLDirective } from '../type/directives';
+import type { GraphQLSchema } from '../type/schema';
 
 import { TypeInfo, visitWithTypeInfo } from '../utilities/TypeInfo';
 
diff --git a/src/validation/index.ts b/src/validation/index.ts
index 584faf34..58cc012e 100644
--- a/src/validation/index.ts
+++ b/src/validation/index.ts
@@ -3,88 +3,88 @@ export { validate } from './validate';
 export { ValidationContext } from './ValidationContext';
 export type { ValidationRule } from './ValidationContext';
 
-/** All validation rules in the GraphQL Specification. */
+// All validation rules in the GraphQL Specification.
 export { specifiedRules } from './specifiedRules';
 
-/** Spec Section: "Executable Definitions" */
+// Spec Section: "Executable Definitions"
 export { ExecutableDefinitionsRule } from './rules/ExecutableDefinitionsRule';
 
-/** Spec Section: "Field Selections on Objects, Interfaces, and Unions Types" */
+// Spec Section: "Field Selections on Objects, Interfaces, and Unions Types"
 export { FieldsOnCorrectTypeRule } from './rules/FieldsOnCorrectTypeRule';
 
-/** Spec Section: "Fragments on Composite Types" */
+// Spec Section: "Fragments on Composite Types"
 export { FragmentsOnCompositeTypesRule } from './rules/FragmentsOnCompositeTypesRule';
 
-/** Spec Section: "Argument Names" */
+// Spec Section: "Argument Names"
 export { KnownArgumentNamesRule } from './rules/KnownArgumentNamesRule';
 
-/** Spec Section: "Directives Are Defined" */
+// Spec Section: "Directives Are Defined"
 export { KnownDirectivesRule } from './rules/KnownDirectivesRule';
 
-/** Spec Section: "Fragment spread target defined" */
+// Spec Section: "Fragment spread target defined"
 export { KnownFragmentNamesRule } from './rules/KnownFragmentNamesRule';
 
-/** Spec Section: "Fragment Spread Type Existence" */
+// Spec Section: "Fragment Spread Type Existence"
 export { KnownTypeNamesRule } from './rules/KnownTypeNamesRule';
 
-/** Spec Section: "Lone Anonymous Operation" */
+// Spec Section: "Lone Anonymous Operation"
 export { LoneAnonymousOperationRule } from './rules/LoneAnonymousOperationRule';
 
-/** Spec Section: "Fragments must not form cycles" */
+// Spec Section: "Fragments must not form cycles"
 export { NoFragmentCyclesRule } from './rules/NoFragmentCyclesRule';
 
-/** Spec Section: "All Variable Used Defined" */
+// Spec Section: "All Variable Used Defined"
 export { NoUndefinedVariablesRule } from './rules/NoUndefinedVariablesRule';
 
-/** Spec Section: "Fragments must be used" */
+// Spec Section: "Fragments must be used"
 export { NoUnusedFragmentsRule } from './rules/NoUnusedFragmentsRule';
 
-/** Spec Section: "All Variables Used" */
+// Spec Section: "All Variables Used"
 export { NoUnusedVariablesRule } from './rules/NoUnusedVariablesRule';
 
-/** Spec Section: "Field Selection Merging" */
+// Spec Section: "Field Selection Merging"
 export { OverlappingFieldsCanBeMergedRule } from './rules/OverlappingFieldsCanBeMergedRule';
 
-/** Spec Section: "Fragment spread is possible" */
+// Spec Section: "Fragment spread is possible"
 export { PossibleFragmentSpreadsRule } from './rules/PossibleFragmentSpreadsRule';
 
-/** Spec Section: "Argument Optionality" */
+// Spec Section: "Argument Optionality"
 export { ProvidedRequiredArgumentsRule } from './rules/ProvidedRequiredArgumentsRule';
 
-/** Spec Section: "Leaf Field Selections" */
+// Spec Section: "Leaf Field Selections"
 export { ScalarLeafsRule } from './rules/ScalarLeafsRule';
 
-/** Spec Section: "Subscriptions with Single Root Field" */
+// Spec Section: "Subscriptions with Single Root Field"
 export { SingleFieldSubscriptionsRule } from './rules/SingleFieldSubscriptionsRule';
 
-/** Spec Section: "Argument Uniqueness" */
+// Spec Section: "Argument Uniqueness"
 export { UniqueArgumentNamesRule } from './rules/UniqueArgumentNamesRule';
 
-/** Spec Section: "Directives Are Unique Per Location" */
+// Spec Section: "Directives Are Unique Per Location"
 export { UniqueDirectivesPerLocationRule } from './rules/UniqueDirectivesPerLocationRule';
 
-/** Spec Section: "Fragment Name Uniqueness" */
+// Spec Section: "Fragment Name Uniqueness"
 export { UniqueFragmentNamesRule } from './rules/UniqueFragmentNamesRule';
 
-/** Spec Section: "Input Object Field Uniqueness" */
+// Spec Section: "Input Object Field Uniqueness"
 export { UniqueInputFieldNamesRule } from './rules/UniqueInputFieldNamesRule';
 
-/** Spec Section: "Operation Name Uniqueness" */
+// Spec Section: "Operation Name Uniqueness"
 export { UniqueOperationNamesRule } from './rules/UniqueOperationNamesRule';
 
-/** Spec Section: "Variable Uniqueness" */
+// Spec Section: "Variable Uniqueness"
 export { UniqueVariableNamesRule } from './rules/UniqueVariableNamesRule';
 
-/** Spec Section: "Values Type Correctness" */
+// Spec Section: "Values Type Correctness"
 export { ValuesOfCorrectTypeRule } from './rules/ValuesOfCorrectTypeRule';
 
-/** Spec Section: "Variables are Input Types" */
+// Spec Section: "Variables are Input Types"
 export { VariablesAreInputTypesRule } from './rules/VariablesAreInputTypesRule';
 
-/** Spec Section: "All Variable Usages Are Allowed" */
+// Spec Section: "All Variable Usages Are Allowed"
 export { VariablesInAllowedPositionRule } from './rules/VariablesInAllowedPositionRule';
 
-/** SDL-specific validation rules */
+// SDL-specific validation rules
 export { LoneSchemaDefinitionRule } from './rules/LoneSchemaDefinitionRule';
 export { UniqueOperationTypesRule } from './rules/UniqueOperationTypesRule';
 export { UniqueTypeNamesRule } from './rules/UniqueTypeNamesRule';
@@ -94,6 +94,6 @@ export { UniqueArgumentDefinitionNamesRule } from './rules/UniqueArgumentDefinit
 export { UniqueDirectiveNamesRule } from './rules/UniqueDirectiveNamesRule';
 export { PossibleTypeExtensionsRule } from './rules/PossibleTypeExtensionsRule';
 
-/** Optional rules not defined by the GraphQL Specification */
+// Optional rules not defined by the GraphQL Specification
 export { NoDeprecatedCustomRule } from './rules/custom/NoDeprecatedCustomRule';
 export { NoSchemaIntrospectionCustomRule } from './rules/custom/NoSchemaIntrospectionCustomRule';
diff --git a/src/validation/rules/ExecutableDefinitionsRule.ts b/src/validation/rules/ExecutableDefinitionsRule.ts
index 1a6c21a9..8c4ec3d8 100644
--- a/src/validation/rules/ExecutableDefinitionsRule.ts
+++ b/src/validation/rules/ExecutableDefinitionsRule.ts
@@ -1,8 +1,8 @@
 import { GraphQLError } from '../../error/GraphQLError';
 
-import type { ASTVisitor } from '../../language/visitor';
 import { Kind } from '../../language/kinds';
 import { isExecutableDefinitionNode } from '../../language/predicates';
+import type { ASTVisitor } from '../../language/visitor';
 
 import type { ASTValidationContext } from '../ValidationContext';
 
diff --git a/src/validation/rules/FieldsOnCorrectTypeRule.ts b/src/validation/rules/FieldsOnCorrectTypeRule.ts
index a0c97266..e9d220ef 100644
--- a/src/validation/rules/FieldsOnCorrectTypeRule.ts
+++ b/src/validation/rules/FieldsOnCorrectTypeRule.ts
@@ -1,23 +1,23 @@
 import { didYouMean } from '../../jsutils/didYouMean';
-import { suggestionList } from '../../jsutils/suggestionList';
 import { naturalCompare } from '../../jsutils/naturalCompare';
+import { suggestionList } from '../../jsutils/suggestionList';
 
 import { GraphQLError } from '../../error/GraphQLError';
 
 import type { FieldNode } from '../../language/ast';
 import type { ASTVisitor } from '../../language/visitor';
 
-import type { GraphQLSchema } from '../../type/schema';
 import type {
-  GraphQLOutputType,
-  GraphQLObjectType,
   GraphQLInterfaceType,
+  GraphQLObjectType,
+  GraphQLOutputType,
 } from '../../type/definition';
 import {
-  isObjectType,
-  isInterfaceType,
   isAbstractType,
+  isInterfaceType,
+  isObjectType,
 } from '../../type/definition';
+import type { GraphQLSchema } from '../../type/schema';
 
 import type { ValidationContext } from '../ValidationContext';
 
diff --git a/src/validation/rules/FragmentsOnCompositeTypesRule.ts b/src/validation/rules/FragmentsOnCompositeTypesRule.ts
index 487984ea..6fe51db9 100644
--- a/src/validation/rules/FragmentsOnCompositeTypesRule.ts
+++ b/src/validation/rules/FragmentsOnCompositeTypesRule.ts
@@ -1,7 +1,7 @@
 import { GraphQLError } from '../../error/GraphQLError';
 
-import type { ASTVisitor } from '../../language/visitor';
 import { print } from '../../language/printer';
+import type { ASTVisitor } from '../../language/visitor';
 
 import { isCompositeType } from '../../type/definition';
 
diff --git a/src/validation/rules/KnownArgumentNamesRule.ts b/src/validation/rules/KnownArgumentNamesRule.ts
index bbe54a09..5f5c4c70 100644
--- a/src/validation/rules/KnownArgumentNamesRule.ts
+++ b/src/validation/rules/KnownArgumentNamesRule.ts
@@ -3,14 +3,14 @@ import { suggestionList } from '../../jsutils/suggestionList';
 
 import { GraphQLError } from '../../error/GraphQLError';
 
-import type { ASTVisitor } from '../../language/visitor';
 import { Kind } from '../../language/kinds';
+import type { ASTVisitor } from '../../language/visitor';
 
 import { specifiedDirectives } from '../../type/directives';
 
 import type {
-  ValidationContext,
   SDLValidationContext,
+  ValidationContext,
 } from '../ValidationContext';
 
 /**
diff --git a/src/validation/rules/KnownDirectivesRule.ts b/src/validation/rules/KnownDirectivesRule.ts
index b84620d6..2b5b4811 100644
--- a/src/validation/rules/KnownDirectivesRule.ts
+++ b/src/validation/rules/KnownDirectivesRule.ts
@@ -3,17 +3,17 @@ import { invariant } from '../../jsutils/invariant';
 
 import { GraphQLError } from '../../error/GraphQLError';
 
-import type { ASTVisitor } from '../../language/visitor';
 import type { ASTNode } from '../../language/ast';
-import { Kind } from '../../language/kinds';
 import { OperationTypeNode } from '../../language/ast';
 import { DirectiveLocation } from '../../language/directiveLocation';
+import { Kind } from '../../language/kinds';
+import type { ASTVisitor } from '../../language/visitor';
 
 import { specifiedDirectives } from '../../type/directives';
 
 import type {
-  ValidationContext,
   SDLValidationContext,
+  ValidationContext,
 } from '../ValidationContext';
 
 /**
diff --git a/src/validation/rules/KnownTypeNamesRule.ts b/src/validation/rules/KnownTypeNamesRule.ts
index a7645b4c..4802610a 100644
--- a/src/validation/rules/KnownTypeNamesRule.ts
+++ b/src/validation/rules/KnownTypeNamesRule.ts
@@ -4,19 +4,19 @@ import { suggestionList } from '../../jsutils/suggestionList';
 import { GraphQLError } from '../../error/GraphQLError';
 
 import type { ASTNode } from '../../language/ast';
-import type { ASTVisitor } from '../../language/visitor';
 import {
   isTypeDefinitionNode,
   isTypeSystemDefinitionNode,
   isTypeSystemExtensionNode,
 } from '../../language/predicates';
+import type { ASTVisitor } from '../../language/visitor';
 
-import { specifiedScalarTypes } from '../../type/scalars';
 import { introspectionTypes } from '../../type/introspection';
+import { specifiedScalarTypes } from '../../type/scalars';
 
 import type {
-  ValidationContext,
   SDLValidationContext,
+  ValidationContext,
 } from '../ValidationContext';
 
 /**
diff --git a/src/validation/rules/LoneAnonymousOperationRule.ts b/src/validation/rules/LoneAnonymousOperationRule.ts
index 07e0ac35..ddd537dd 100644
--- a/src/validation/rules/LoneAnonymousOperationRule.ts
+++ b/src/validation/rules/LoneAnonymousOperationRule.ts
@@ -1,7 +1,7 @@
 import { GraphQLError } from '../../error/GraphQLError';
 
-import type { ASTVisitor } from '../../language/visitor';
 import { Kind } from '../../language/kinds';
+import type { ASTVisitor } from '../../language/visitor';
 
 import type { ASTValidationContext } from '../ValidationContext';
 
diff --git a/src/validation/rules/LoneSchemaDefinitionRule.ts b/src/validation/rules/LoneSchemaDefinitionRule.ts
index 1c2b0237..df962387 100644
--- a/src/validation/rules/LoneSchemaDefinitionRule.ts
+++ b/src/validation/rules/LoneSchemaDefinitionRule.ts
@@ -1,4 +1,5 @@
 import { GraphQLError } from '../../error/GraphQLError';
+
 import type { ASTVisitor } from '../../language/visitor';
 
 import type { SDLValidationContext } from '../ValidationContext';
diff --git a/src/validation/rules/OverlappingFieldsCanBeMergedRule.ts b/src/validation/rules/OverlappingFieldsCanBeMergedRule.ts
index 740454dd..5796da6f 100644
--- a/src/validation/rules/OverlappingFieldsCanBeMergedRule.ts
+++ b/src/validation/rules/OverlappingFieldsCanBeMergedRule.ts
@@ -1,37 +1,36 @@
-import type { ObjMap } from '../../jsutils/ObjMap';
 import { inspect } from '../../jsutils/inspect';
+import type { Maybe } from '../../jsutils/Maybe';
+import type { ObjMap } from '../../jsutils/ObjMap';
 
 import { GraphQLError } from '../../error/GraphQLError';
 
-import type { ASTVisitor } from '../../language/visitor';
 import type {
-  SelectionSetNode,
-  ValueNode,
-  FieldNode,
   ArgumentNode,
+  FieldNode,
   FragmentDefinitionNode,
+  SelectionSetNode,
+  ValueNode,
 } from '../../language/ast';
 import { Kind } from '../../language/kinds';
 import { print } from '../../language/printer';
+import type { ASTVisitor } from '../../language/visitor';
 
 import type {
+  GraphQLField,
   GraphQLNamedType,
   GraphQLOutputType,
-  GraphQLField,
 } from '../../type/definition';
 import {
   getNamedType,
-  isNonNullType,
+  isInterfaceType,
   isLeafType,
-  isObjectType,
   isListType,
-  isInterfaceType,
+  isNonNullType,
+  isObjectType,
 } from '../../type/definition';
 
 import { typeFromAST } from '../../utilities/typeFromAST';
 
-import type { Maybe } from '../../jsutils/Maybe';
-
 import type { ValidationContext } from '../ValidationContext';
 
 function reasonMessage(reason: ConflictReasonMessage): string {
@@ -267,6 +266,22 @@ function collectConflictsBetweenFieldsAndFragment(
   // (E) Then collect any conflicts between the provided collection of fields
   // and any fragment names found in the given fragment.
   for (const referencedFragmentName of referencedFragmentNames) {
+    // Memoize so two fragments are not compared for conflicts more than once.
+    if (
+      comparedFragmentPairs.has(
+        referencedFragmentName,
+        fragmentName,
+        areMutuallyExclusive,
+      )
+    ) {
+      continue;
+    }
+    comparedFragmentPairs.add(
+      referencedFragmentName,
+      fragmentName,
+      areMutuallyExclusive,
+    );
+
     collectConflictsBetweenFieldsAndFragment(
       context,
       conflicts,
diff --git a/src/validation/rules/PossibleFragmentSpreadsRule.ts b/src/validation/rules/PossibleFragmentSpreadsRule.ts
index d83355a9..b2210e5a 100644
--- a/src/validation/rules/PossibleFragmentSpreadsRule.ts
+++ b/src/validation/rules/PossibleFragmentSpreadsRule.ts
@@ -8,8 +8,8 @@ import type { ASTVisitor } from '../../language/visitor';
 import type { GraphQLCompositeType } from '../../type/definition';
 import { isCompositeType } from '../../type/definition';
 
-import { typeFromAST } from '../../utilities/typeFromAST';
 import { doTypesOverlap } from '../../utilities/typeComparators';
+import { typeFromAST } from '../../utilities/typeFromAST';
 
 import type { ValidationContext } from '../ValidationContext';
 
diff --git a/src/validation/rules/PossibleTypeExtensionsRule.ts b/src/validation/rules/PossibleTypeExtensionsRule.ts
index bf9ee2b3..4abca7b7 100644
--- a/src/validation/rules/PossibleTypeExtensionsRule.ts
+++ b/src/validation/rules/PossibleTypeExtensionsRule.ts
@@ -1,24 +1,24 @@
-import type { ObjMap } from '../../jsutils/ObjMap';
+import { didYouMean } from '../../jsutils/didYouMean';
 import { inspect } from '../../jsutils/inspect';
 import { invariant } from '../../jsutils/invariant';
-import { didYouMean } from '../../jsutils/didYouMean';
+import type { ObjMap } from '../../jsutils/ObjMap';
 import { suggestionList } from '../../jsutils/suggestionList';
 
 import { GraphQLError } from '../../error/GraphQLError';
 
-import type { ASTVisitor } from '../../language/visitor';
 import type { DefinitionNode, TypeExtensionNode } from '../../language/ast';
 import { Kind } from '../../language/kinds';
 import { isTypeDefinitionNode } from '../../language/predicates';
+import type { ASTVisitor } from '../../language/visitor';
 
 import type { GraphQLNamedType } from '../../type/definition';
 import {
-  isScalarType,
-  isObjectType,
-  isInterfaceType,
-  isUnionType,
   isEnumType,
   isInputObjectType,
+  isInterfaceType,
+  isObjectType,
+  isScalarType,
+  isUnionType,
 } from '../../type/definition';
 
 import type { SDLValidationContext } from '../ValidationContext';
diff --git a/src/validation/rules/ProvidedRequiredArgumentsRule.ts b/src/validation/rules/ProvidedRequiredArgumentsRule.ts
index e5b96fb7..b16079b1 100644
--- a/src/validation/rules/ProvidedRequiredArgumentsRule.ts
+++ b/src/validation/rules/ProvidedRequiredArgumentsRule.ts
@@ -4,18 +4,18 @@ import type { ObjMap } from '../../jsutils/ObjMap';
 
 import { GraphQLError } from '../../error/GraphQLError';
 
-import type { ASTVisitor } from '../../language/visitor';
 import type { InputValueDefinitionNode } from '../../language/ast';
 import { Kind } from '../../language/kinds';
 import { print } from '../../language/printer';
+import type { ASTVisitor } from '../../language/visitor';
 
-import { specifiedDirectives } from '../../type/directives';
-import { isType, isRequiredArgument } from '../../type/definition';
 import type { GraphQLArgument } from '../../type/definition';
+import { isRequiredArgument, isType } from '../../type/definition';
+import { specifiedDirectives } from '../../type/directives';
 
 import type {
-  ValidationContext,
   SDLValidationContext,
+  ValidationContext,
 } from '../ValidationContext';
 
 /**
diff --git a/src/validation/rules/SingleFieldSubscriptionsRule.ts b/src/validation/rules/SingleFieldSubscriptionsRule.ts
index 74c0ef4a..db0e6446 100644
--- a/src/validation/rules/SingleFieldSubscriptionsRule.ts
+++ b/src/validation/rules/SingleFieldSubscriptionsRule.ts
@@ -1,12 +1,13 @@
 import type { ObjMap } from '../../jsutils/ObjMap';
+
 import { GraphQLError } from '../../error/GraphQLError';
 
-import type { ASTVisitor } from '../../language/visitor';
 import type {
-  OperationDefinitionNode,
   FragmentDefinitionNode,
+  OperationDefinitionNode,
 } from '../../language/ast';
 import { Kind } from '../../language/kinds';
+import type { ASTVisitor } from '../../language/visitor';
 
 import { collectFields } from '../../execution/collectFields';
 
diff --git a/src/validation/rules/UniqueArgumentDefinitionNamesRule.ts b/src/validation/rules/UniqueArgumentDefinitionNamesRule.ts
index a5bfc9e3..3f6e79df 100644
--- a/src/validation/rules/UniqueArgumentDefinitionNamesRule.ts
+++ b/src/validation/rules/UniqueArgumentDefinitionNamesRule.ts
@@ -2,12 +2,12 @@ import { groupBy } from '../../jsutils/groupBy';
 
 import { GraphQLError } from '../../error/GraphQLError';
 
-import type { ASTVisitor } from '../../language/visitor';
 import type {
-  NameNode,
   FieldDefinitionNode,
   InputValueDefinitionNode,
+  NameNode,
 } from '../../language/ast';
+import type { ASTVisitor } from '../../language/visitor';
 
 import type { SDLValidationContext } from '../ValidationContext';
 
diff --git a/src/validation/rules/UniqueDirectiveNamesRule.ts b/src/validation/rules/UniqueDirectiveNamesRule.ts
index 0d87d9de..cbd39ce2 100644
--- a/src/validation/rules/UniqueDirectiveNamesRule.ts
+++ b/src/validation/rules/UniqueDirectiveNamesRule.ts
@@ -1,4 +1,5 @@
 import { GraphQLError } from '../../error/GraphQLError';
+
 import type { ASTVisitor } from '../../language/visitor';
 
 import type { SDLValidationContext } from '../ValidationContext';
diff --git a/src/validation/rules/UniqueDirectivesPerLocationRule.ts b/src/validation/rules/UniqueDirectivesPerLocationRule.ts
index 99639508..18b04c50 100644
--- a/src/validation/rules/UniqueDirectivesPerLocationRule.ts
+++ b/src/validation/rules/UniqueDirectivesPerLocationRule.ts
@@ -1,11 +1,11 @@
 import { GraphQLError } from '../../error/GraphQLError';
 
 import { Kind } from '../../language/kinds';
-import type { ASTVisitor } from '../../language/visitor';
 import {
   isTypeDefinitionNode,
   isTypeExtensionNode,
 } from '../../language/predicates';
+import type { ASTVisitor } from '../../language/visitor';
 
 import { specifiedDirectives } from '../../type/directives';
 
diff --git a/src/validation/rules/UniqueEnumValueNamesRule.ts b/src/validation/rules/UniqueEnumValueNamesRule.ts
index c7ab13f2..5fbe62ce 100644
--- a/src/validation/rules/UniqueEnumValueNamesRule.ts
+++ b/src/validation/rules/UniqueEnumValueNamesRule.ts
@@ -1,10 +1,10 @@
 import { GraphQLError } from '../../error/GraphQLError';
 
-import type { ASTVisitor } from '../../language/visitor';
 import type {
   EnumTypeDefinitionNode,
   EnumTypeExtensionNode,
 } from '../../language/ast';
+import type { ASTVisitor } from '../../language/visitor';
 
 import { isEnumType } from '../../type/definition';
 
diff --git a/src/validation/rules/UniqueFieldDefinitionNamesRule.ts b/src/validation/rules/UniqueFieldDefinitionNamesRule.ts
index 4aa8d05d..f312b76d 100644
--- a/src/validation/rules/UniqueFieldDefinitionNamesRule.ts
+++ b/src/validation/rules/UniqueFieldDefinitionNamesRule.ts
@@ -1,17 +1,17 @@
 import { GraphQLError } from '../../error/GraphQLError';
 
-import type { ASTVisitor } from '../../language/visitor';
 import type {
-  NameNode,
   FieldDefinitionNode,
   InputValueDefinitionNode,
+  NameNode,
 } from '../../language/ast';
+import type { ASTVisitor } from '../../language/visitor';
 
 import type { GraphQLNamedType } from '../../type/definition';
 import {
-  isObjectType,
-  isInterfaceType,
   isInputObjectType,
+  isInterfaceType,
+  isObjectType,
 } from '../../type/definition';
 
 import type { SDLValidationContext } from '../ValidationContext';
diff --git a/src/validation/rules/UniqueInputFieldNamesRule.ts b/src/validation/rules/UniqueInputFieldNamesRule.ts
index 6aa58510..392df444 100644
--- a/src/validation/rules/UniqueInputFieldNamesRule.ts
+++ b/src/validation/rules/UniqueInputFieldNamesRule.ts
@@ -1,5 +1,5 @@
-import type { ObjMap } from '../../jsutils/ObjMap';
 import { invariant } from '../../jsutils/invariant';
+import type { ObjMap } from '../../jsutils/ObjMap';
 
 import { GraphQLError } from '../../error/GraphQLError';
 
diff --git a/src/validation/rules/UniqueOperationTypesRule.ts b/src/validation/rules/UniqueOperationTypesRule.ts
index 80cf0405..59aa4c95 100644
--- a/src/validation/rules/UniqueOperationTypesRule.ts
+++ b/src/validation/rules/UniqueOperationTypesRule.ts
@@ -1,10 +1,10 @@
 import { GraphQLError } from '../../error/GraphQLError';
 
-import type { ASTVisitor } from '../../language/visitor';
 import type {
   SchemaDefinitionNode,
   SchemaExtensionNode,
 } from '../../language/ast';
+import type { ASTVisitor } from '../../language/visitor';
 
 import type { SDLValidationContext } from '../ValidationContext';
 
diff --git a/src/validation/rules/UniqueTypeNamesRule.ts b/src/validation/rules/UniqueTypeNamesRule.ts
index fed280c4..7d11a320 100644
--- a/src/validation/rules/UniqueTypeNamesRule.ts
+++ b/src/validation/rules/UniqueTypeNamesRule.ts
@@ -1,7 +1,7 @@
 import { GraphQLError } from '../../error/GraphQLError';
 
-import type { ASTVisitor } from '../../language/visitor';
 import type { TypeDefinitionNode } from '../../language/ast';
+import type { ASTVisitor } from '../../language/visitor';
 
 import type { SDLValidationContext } from '../ValidationContext';
 
diff --git a/src/validation/rules/ValuesOfCorrectTypeRule.ts b/src/validation/rules/ValuesOfCorrectTypeRule.ts
index b6b21708..158691c5 100644
--- a/src/validation/rules/ValuesOfCorrectTypeRule.ts
+++ b/src/validation/rules/ValuesOfCorrectTypeRule.ts
@@ -1,22 +1,22 @@
-import { keyMap } from '../../jsutils/keyMap';
-import { inspect } from '../../jsutils/inspect';
 import { didYouMean } from '../../jsutils/didYouMean';
+import { inspect } from '../../jsutils/inspect';
+import { keyMap } from '../../jsutils/keyMap';
 import { suggestionList } from '../../jsutils/suggestionList';
 
 import { GraphQLError } from '../../error/GraphQLError';
 
 import type { ValueNode } from '../../language/ast';
-import type { ASTVisitor } from '../../language/visitor';
 import { print } from '../../language/printer';
+import type { ASTVisitor } from '../../language/visitor';
 
 import {
-  isLeafType,
+  getNamedType,
+  getNullableType,
   isInputObjectType,
+  isLeafType,
   isListType,
   isNonNullType,
   isRequiredInputField,
-  getNullableType,
-  getNamedType,
 } from '../../type/definition';
 
 import type { ValidationContext } from '../ValidationContext';
diff --git a/src/validation/rules/VariablesAreInputTypesRule.ts b/src/validation/rules/VariablesAreInputTypesRule.ts
index 01db171a..bf830380 100644
--- a/src/validation/rules/VariablesAreInputTypesRule.ts
+++ b/src/validation/rules/VariablesAreInputTypesRule.ts
@@ -1,8 +1,8 @@
 import { GraphQLError } from '../../error/GraphQLError';
 
+import type { VariableDefinitionNode } from '../../language/ast';
 import { print } from '../../language/printer';
 import type { ASTVisitor } from '../../language/visitor';
-import type { VariableDefinitionNode } from '../../language/ast';
 
 import { isInputType } from '../../type/definition';
 
diff --git a/src/validation/rules/VariablesInAllowedPositionRule.ts b/src/validation/rules/VariablesInAllowedPositionRule.ts
index c167a3c5..d8d50025 100644
--- a/src/validation/rules/VariablesInAllowedPositionRule.ts
+++ b/src/validation/rules/VariablesInAllowedPositionRule.ts
@@ -3,16 +3,16 @@ import type { Maybe } from '../../jsutils/Maybe';
 
 import { GraphQLError } from '../../error/GraphQLError';
 
-import { Kind } from '../../language/kinds';
 import type { ValueNode } from '../../language/ast';
+import { Kind } from '../../language/kinds';
 import type { ASTVisitor } from '../../language/visitor';
 
-import type { GraphQLSchema } from '../../type/schema';
 import type { GraphQLType } from '../../type/definition';
 import { isNonNullType } from '../../type/definition';
+import type { GraphQLSchema } from '../../type/schema';
 
-import { typeFromAST } from '../../utilities/typeFromAST';
 import { isTypeSubTypeOf } from '../../utilities/typeComparators';
+import { typeFromAST } from '../../utilities/typeFromAST';
 
 import type { ValidationContext } from '../ValidationContext';
 
diff --git a/src/validation/specifiedRules.ts b/src/validation/specifiedRules.ts
index 930e9f0f..16e555db 100644
--- a/src/validation/specifiedRules.ts
+++ b/src/validation/specifiedRules.ts
@@ -1,98 +1,71 @@
-import type { ValidationRule, SDLValidationRule } from './ValidationContext';
-
 // Spec Section: "Executable Definitions"
 import { ExecutableDefinitionsRule } from './rules/ExecutableDefinitionsRule';
-
-// Spec Section: "Operation Name Uniqueness"
-import { UniqueOperationNamesRule } from './rules/UniqueOperationNamesRule';
-
-// Spec Section: "Lone Anonymous Operation"
-import { LoneAnonymousOperationRule } from './rules/LoneAnonymousOperationRule';
-
-// Spec Section: "Subscriptions with Single Root Field"
-import { SingleFieldSubscriptionsRule } from './rules/SingleFieldSubscriptionsRule';
-
-// Spec Section: "Fragment Spread Type Existence"
-import { KnownTypeNamesRule } from './rules/KnownTypeNamesRule';
-
-// Spec Section: "Fragments on Composite Types"
-import { FragmentsOnCompositeTypesRule } from './rules/FragmentsOnCompositeTypesRule';
-
-// Spec Section: "Variables are Input Types"
-import { VariablesAreInputTypesRule } from './rules/VariablesAreInputTypesRule';
-
-// Spec Section: "Leaf Field Selections"
-import { ScalarLeafsRule } from './rules/ScalarLeafsRule';
-
 // Spec Section: "Field Selections on Objects, Interfaces, and Unions Types"
 import { FieldsOnCorrectTypeRule } from './rules/FieldsOnCorrectTypeRule';
-
-// Spec Section: "Fragment Name Uniqueness"
-import { UniqueFragmentNamesRule } from './rules/UniqueFragmentNamesRule';
-
+// Spec Section: "Fragments on Composite Types"
+import { FragmentsOnCompositeTypesRule } from './rules/FragmentsOnCompositeTypesRule';
+// Spec Section: "Argument Names"
+import {
+  KnownArgumentNamesOnDirectivesRule,
+  KnownArgumentNamesRule,
+} from './rules/KnownArgumentNamesRule';
+// Spec Section: "Directives Are Defined"
+import { KnownDirectivesRule } from './rules/KnownDirectivesRule';
 // Spec Section: "Fragment spread target defined"
 import { KnownFragmentNamesRule } from './rules/KnownFragmentNamesRule';
-
-// Spec Section: "Fragments must be used"
-import { NoUnusedFragmentsRule } from './rules/NoUnusedFragmentsRule';
-
-// Spec Section: "Fragment spread is possible"
-import { PossibleFragmentSpreadsRule } from './rules/PossibleFragmentSpreadsRule';
-
+// Spec Section: "Fragment Spread Type Existence"
+import { KnownTypeNamesRule } from './rules/KnownTypeNamesRule';
+// Spec Section: "Lone Anonymous Operation"
+import { LoneAnonymousOperationRule } from './rules/LoneAnonymousOperationRule';
+// SDL-specific validation rules
+import { LoneSchemaDefinitionRule } from './rules/LoneSchemaDefinitionRule';
 // Spec Section: "Fragments must not form cycles"
 import { NoFragmentCyclesRule } from './rules/NoFragmentCyclesRule';
-
-// Spec Section: "Variable Uniqueness"
-import { UniqueVariableNamesRule } from './rules/UniqueVariableNamesRule';
-
 // Spec Section: "All Variable Used Defined"
 import { NoUndefinedVariablesRule } from './rules/NoUndefinedVariablesRule';
-
+// Spec Section: "Fragments must be used"
+import { NoUnusedFragmentsRule } from './rules/NoUnusedFragmentsRule';
 // Spec Section: "All Variables Used"
 import { NoUnusedVariablesRule } from './rules/NoUnusedVariablesRule';
-
-// Spec Section: "Directives Are Defined"
-import { KnownDirectivesRule } from './rules/KnownDirectivesRule';
-
-// Spec Section: "Directives Are Unique Per Location"
-import { UniqueDirectivesPerLocationRule } from './rules/UniqueDirectivesPerLocationRule';
-
-// Spec Section: "Argument Names"
-import {
-  KnownArgumentNamesRule,
-  KnownArgumentNamesOnDirectivesRule,
-} from './rules/KnownArgumentNamesRule';
-
-// Spec Section: "Argument Uniqueness"
-import { UniqueArgumentNamesRule } from './rules/UniqueArgumentNamesRule';
-
-// Spec Section: "Value Type Correctness"
-import { ValuesOfCorrectTypeRule } from './rules/ValuesOfCorrectTypeRule';
-
+// Spec Section: "Field Selection Merging"
+import { OverlappingFieldsCanBeMergedRule } from './rules/OverlappingFieldsCanBeMergedRule';
+// Spec Section: "Fragment spread is possible"
+import { PossibleFragmentSpreadsRule } from './rules/PossibleFragmentSpreadsRule';
+import { PossibleTypeExtensionsRule } from './rules/PossibleTypeExtensionsRule';
 // Spec Section: "Argument Optionality"
 import {
-  ProvidedRequiredArgumentsRule,
   ProvidedRequiredArgumentsOnDirectivesRule,
+  ProvidedRequiredArgumentsRule,
 } from './rules/ProvidedRequiredArgumentsRule';
-
-// Spec Section: "All Variable Usages Are Allowed"
-import { VariablesInAllowedPositionRule } from './rules/VariablesInAllowedPositionRule';
-
-// Spec Section: "Field Selection Merging"
-import { OverlappingFieldsCanBeMergedRule } from './rules/OverlappingFieldsCanBeMergedRule';
-
+// Spec Section: "Leaf Field Selections"
+import { ScalarLeafsRule } from './rules/ScalarLeafsRule';
+// Spec Section: "Subscriptions with Single Root Field"
+import { SingleFieldSubscriptionsRule } from './rules/SingleFieldSubscriptionsRule';
+import { UniqueArgumentDefinitionNamesRule } from './rules/UniqueArgumentDefinitionNamesRule';
+// Spec Section: "Argument Uniqueness"
+import { UniqueArgumentNamesRule } from './rules/UniqueArgumentNamesRule';
+import { UniqueDirectiveNamesRule } from './rules/UniqueDirectiveNamesRule';
+// Spec Section: "Directives Are Unique Per Location"
+import { UniqueDirectivesPerLocationRule } from './rules/UniqueDirectivesPerLocationRule';
+import { UniqueEnumValueNamesRule } from './rules/UniqueEnumValueNamesRule';
+import { UniqueFieldDefinitionNamesRule } from './rules/UniqueFieldDefinitionNamesRule';
+// Spec Section: "Fragment Name Uniqueness"
+import { UniqueFragmentNamesRule } from './rules/UniqueFragmentNamesRule';
 // Spec Section: "Input Object Field Uniqueness"
 import { UniqueInputFieldNamesRule } from './rules/UniqueInputFieldNamesRule';
-
-// SDL-specific validation rules
-import { LoneSchemaDefinitionRule } from './rules/LoneSchemaDefinitionRule';
+// Spec Section: "Operation Name Uniqueness"
+import { UniqueOperationNamesRule } from './rules/UniqueOperationNamesRule';
 import { UniqueOperationTypesRule } from './rules/UniqueOperationTypesRule';
 import { UniqueTypeNamesRule } from './rules/UniqueTypeNamesRule';
-import { UniqueEnumValueNamesRule } from './rules/UniqueEnumValueNamesRule';
-import { UniqueFieldDefinitionNamesRule } from './rules/UniqueFieldDefinitionNamesRule';
-import { UniqueArgumentDefinitionNamesRule } from './rules/UniqueArgumentDefinitionNamesRule';
-import { UniqueDirectiveNamesRule } from './rules/UniqueDirectiveNamesRule';
-import { PossibleTypeExtensionsRule } from './rules/PossibleTypeExtensionsRule';
+// Spec Section: "Variable Uniqueness"
+import { UniqueVariableNamesRule } from './rules/UniqueVariableNamesRule';
+// Spec Section: "Value Type Correctness"
+import { ValuesOfCorrectTypeRule } from './rules/ValuesOfCorrectTypeRule';
+// Spec Section: "Variables are Input Types"
+import { VariablesAreInputTypesRule } from './rules/VariablesAreInputTypesRule';
+// Spec Section: "All Variable Usages Are Allowed"
+import { VariablesInAllowedPositionRule } from './rules/VariablesInAllowedPositionRule';
+import type { SDLValidationRule, ValidationRule } from './ValidationContext';
 
 /**
  * This set includes all validation rules defined by the GraphQL spec.
diff --git a/src/validation/validate.ts b/src/validation/validate.ts
index 391083af..72598742 100644
--- a/src/validation/validate.ts
+++ b/src/validation/validate.ts
@@ -11,8 +11,8 @@ import { assertValidSchema } from '../type/validate';
 
 import { TypeInfo, visitWithTypeInfo } from '../utilities/TypeInfo';
 
-import type { SDLValidationRule, ValidationRule } from './ValidationContext';
 import { specifiedRules, specifiedSDLRules } from './specifiedRules';
+import type { SDLValidationRule, ValidationRule } from './ValidationContext';
 import { SDLValidationContext, ValidationContext } from './ValidationContext';
 
 /**


Test patch:
diff --git a/src/__testUtils__/expectJSON.ts b/src/__testUtils__/expectJSON.ts
index 26c23601..64e2ba5d 100644
--- a/src/__testUtils__/expectJSON.ts
+++ b/src/__testUtils__/expectJSON.ts
@@ -1,7 +1,7 @@
 import { expect } from 'chai';
 
-import { mapValue } from '../jsutils/mapValue';
 import { isObjectLike } from '../jsutils/isObjectLike';
+import { mapValue } from '../jsutils/mapValue';
 
 /**
  * Deeply transforms an arbitrary value to a JSON-safe value by calling toJSON
diff --git a/src/__tests__/starWarsSchema.ts b/src/__tests__/starWarsSchema.ts
index 7bd8fb3e..c646c8ae 100644
--- a/src/__tests__/starWarsSchema.ts
+++ b/src/__tests__/starWarsSchema.ts
@@ -1,14 +1,14 @@
-import { GraphQLSchema } from '../type/schema';
-import { GraphQLString } from '../type/scalars';
 import {
-  GraphQLList,
-  GraphQLNonNull,
   GraphQLEnumType,
   GraphQLInterfaceType,
+  GraphQLList,
+  GraphQLNonNull,
   GraphQLObjectType,
 } from '../type/definition';
+import { GraphQLString } from '../type/scalars';
+import { GraphQLSchema } from '../type/schema';
 
-import { getFriends, getHero, getHuman, getDroid } from './starWarsData';
+import { getDroid, getFriends, getHero, getHuman } from './starWarsData';
 
 /**
  * This is designed to be an end-to-end test, demonstrating
diff --git a/src/error/__tests__/GraphQLError-test.ts b/src/error/__tests__/GraphQLError-test.ts
index 81dbf1fc..21e1ab1f 100644
--- a/src/error/__tests__/GraphQLError-test.ts
+++ b/src/error/__tests__/GraphQLError-test.ts
@@ -9,7 +9,7 @@ import { Kind } from '../../language/kinds';
 import { parse } from '../../language/parser';
 import { Source } from '../../language/source';
 
-import { GraphQLError, printError, formatError } from '../GraphQLError';
+import { formatError, GraphQLError, printError } from '../GraphQLError';
 
 const source = new Source(dedent`
   {
diff --git a/src/execution/__tests__/abstract-test.ts b/src/execution/__tests__/abstract-test.ts
index 998ad707..5253d0d9 100644
--- a/src/execution/__tests__/abstract-test.ts
+++ b/src/execution/__tests__/abstract-test.ts
@@ -5,19 +5,19 @@ import { expectJSON } from '../../__testUtils__/expectJSON';
 
 import { parse } from '../../language/parser';
 
-import { GraphQLSchema } from '../../type/schema';
-import { GraphQLString, GraphQLBoolean } from '../../type/scalars';
 import {
   assertInterfaceType,
+  GraphQLInterfaceType,
   GraphQLList,
   GraphQLObjectType,
-  GraphQLInterfaceType,
   GraphQLUnionType,
 } from '../../type/definition';
+import { GraphQLBoolean, GraphQLString } from '../../type/scalars';
+import { GraphQLSchema } from '../../type/schema';
 
 import { buildSchema } from '../../utilities/buildASTSchema';
 
-import { executeSync, execute } from '../execute';
+import { execute, executeSync } from '../execute';
 
 async function executeQuery(args: {
   schema: GraphQLSchema;
diff --git a/src/execution/__tests__/directives-test.ts b/src/execution/__tests__/directives-test.ts
index 92c8fb9c..0c85f5ca 100644
--- a/src/execution/__tests__/directives-test.ts
+++ b/src/execution/__tests__/directives-test.ts
@@ -3,9 +3,9 @@ import { describe, it } from 'mocha';
 
 import { parse } from '../../language/parser';
 
-import { GraphQLSchema } from '../../type/schema';
-import { GraphQLString } from '../../type/scalars';
 import { GraphQLObjectType } from '../../type/definition';
+import { GraphQLString } from '../../type/scalars';
+import { GraphQLSchema } from '../../type/schema';
 
 import { executeSync } from '../execute';
 
diff --git a/src/execution/__tests__/executor-test.ts b/src/execution/__tests__/executor-test.ts
index fa59d32f..116334ad 100644
--- a/src/execution/__tests__/executor-test.ts
+++ b/src/execution/__tests__/executor-test.ts
@@ -9,16 +9,16 @@ import { invariant } from '../../jsutils/invariant';
 import { Kind } from '../../language/kinds';
 import { parse } from '../../language/parser';
 
-import { GraphQLSchema } from '../../type/schema';
-import { GraphQLInt, GraphQLBoolean, GraphQLString } from '../../type/scalars';
 import {
+  GraphQLInterfaceType,
   GraphQLList,
   GraphQLNonNull,
-  GraphQLScalarType,
-  GraphQLInterfaceType,
   GraphQLObjectType,
+  GraphQLScalarType,
   GraphQLUnionType,
 } from '../../type/definition';
+import { GraphQLBoolean, GraphQLInt, GraphQLString } from '../../type/scalars';
+import { GraphQLSchema } from '../../type/schema';
 
 import { execute, executeSync } from '../execute';
 
diff --git a/src/execution/__tests__/mutations-test.ts b/src/execution/__tests__/mutations-test.ts
index 248dd638..0f0ad1cb 100644
--- a/src/execution/__tests__/mutations-test.ts
+++ b/src/execution/__tests__/mutations-test.ts
@@ -2,14 +2,13 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 
 import { expectJSON } from '../../__testUtils__/expectJSON';
-
 import { resolveOnNextTick } from '../../__testUtils__/resolveOnNextTick';
 
 import { parse } from '../../language/parser';
 
+import { GraphQLObjectType } from '../../type/definition';
 import { GraphQLInt } from '../../type/scalars';
 import { GraphQLSchema } from '../../type/schema';
-import { GraphQLObjectType } from '../../type/definition';
 
 import { execute, executeSync } from '../execute';
 
diff --git a/src/execution/__tests__/nonnull-test.ts b/src/execution/__tests__/nonnull-test.ts
index 1fb854fd..427f2a64 100644
--- a/src/execution/__tests__/nonnull-test.ts
+++ b/src/execution/__tests__/nonnull-test.ts
@@ -5,9 +5,9 @@ import { expectJSON } from '../../__testUtils__/expectJSON';
 
 import { parse } from '../../language/parser';
 
-import { GraphQLSchema } from '../../type/schema';
-import { GraphQLString } from '../../type/scalars';
 import { GraphQLNonNull, GraphQLObjectType } from '../../type/definition';
+import { GraphQLString } from '../../type/scalars';
+import { GraphQLSchema } from '../../type/schema';
 
 import { buildSchema } from '../../utilities/buildASTSchema';
 
diff --git a/src/execution/__tests__/resolve-test.ts b/src/execution/__tests__/resolve-test.ts
index f62314f8..a34da196 100644
--- a/src/execution/__tests__/resolve-test.ts
+++ b/src/execution/__tests__/resolve-test.ts
@@ -4,9 +4,9 @@ import { describe, it } from 'mocha';
 import { parse } from '../../language/parser';
 
 import type { GraphQLFieldConfig } from '../../type/definition';
-import { GraphQLSchema } from '../../type/schema';
-import { GraphQLInt, GraphQLString } from '../../type/scalars';
 import { GraphQLObjectType } from '../../type/definition';
+import { GraphQLInt, GraphQLString } from '../../type/scalars';
+import { GraphQLSchema } from '../../type/schema';
 
 import { executeSync } from '../execute';
 
diff --git a/src/execution/__tests__/schema-test.ts b/src/execution/__tests__/schema-test.ts
index b954fd98..f9b4e474 100644
--- a/src/execution/__tests__/schema-test.ts
+++ b/src/execution/__tests__/schema-test.ts
@@ -3,18 +3,18 @@ import { describe, it } from 'mocha';
 
 import { parse } from '../../language/parser';
 
-import { GraphQLSchema } from '../../type/schema';
 import {
   GraphQLList,
   GraphQLNonNull,
   GraphQLObjectType,
 } from '../../type/definition';
 import {
+  GraphQLBoolean,
   GraphQLID,
   GraphQLInt,
   GraphQLString,
-  GraphQLBoolean,
 } from '../../type/scalars';
+import { GraphQLSchema } from '../../type/schema';
 
 import { executeSync } from '../execute';
 
diff --git a/src/execution/__tests__/subscribe-test.ts b/src/execution/__tests__/subscribe-test.ts
index 068c6b32..54c5019a 100644
--- a/src/execution/__tests__/subscribe-test.ts
+++ b/src/execution/__tests__/subscribe-test.ts
@@ -9,9 +9,9 @@ import { isAsyncIterable } from '../../jsutils/isAsyncIterable';
 
 import { parse } from '../../language/parser';
 
-import { GraphQLSchema } from '../../type/schema';
 import { GraphQLList, GraphQLObjectType } from '../../type/definition';
-import { GraphQLInt, GraphQLString, GraphQLBoolean } from '../../type/scalars';
+import { GraphQLBoolean, GraphQLInt, GraphQLString } from '../../type/scalars';
+import { GraphQLSchema } from '../../type/schema';
 
 import { createSourceEventStream, subscribe } from '../subscribe';
 
diff --git a/src/execution/__tests__/sync-test.ts b/src/execution/__tests__/sync-test.ts
index 46742c0f..021f09fa 100644
--- a/src/execution/__tests__/sync-test.ts
+++ b/src/execution/__tests__/sync-test.ts
@@ -5,11 +5,11 @@ import { expectJSON } from '../../__testUtils__/expectJSON';
 
 import { parse } from '../../language/parser';
 
-import { validate } from '../../validation/validate';
-
-import { GraphQLSchema } from '../../type/schema';
-import { GraphQLString } from '../../type/scalars';
 import { GraphQLObjectType } from '../../type/definition';
+import { GraphQLString } from '../../type/scalars';
+import { GraphQLSchema } from '../../type/schema';
+
+import { validate } from '../../validation/validate';
 
 import { graphqlSync } from '../../graphql';
 
diff --git a/src/execution/__tests__/union-interface-test.ts b/src/execution/__tests__/union-interface-test.ts
index 6c7cc253..7ce9f8b3 100644
--- a/src/execution/__tests__/union-interface-test.ts
+++ b/src/execution/__tests__/union-interface-test.ts
@@ -3,14 +3,14 @@ import { describe, it } from 'mocha';
 
 import { parse } from '../../language/parser';
 
-import { GraphQLSchema } from '../../type/schema';
-import { GraphQLString, GraphQLBoolean } from '../../type/scalars';
 import {
+  GraphQLInterfaceType,
   GraphQLList,
-  GraphQLUnionType,
   GraphQLObjectType,
-  GraphQLInterfaceType,
+  GraphQLUnionType,
 } from '../../type/definition';
+import { GraphQLBoolean, GraphQLString } from '../../type/scalars';
+import { GraphQLSchema } from '../../type/schema';
 
 import { executeSync } from '../execute';
 
diff --git a/src/execution/__tests__/variables-test.ts b/src/execution/__tests__/variables-test.ts
index bca59e8e..786a4810 100644
--- a/src/execution/__tests__/variables-test.ts
+++ b/src/execution/__tests__/variables-test.ts
@@ -10,19 +10,19 @@ import { Kind } from '../../language/kinds';
 import { parse } from '../../language/parser';
 
 import type {
-  GraphQLFieldConfig,
   GraphQLArgumentConfig,
+  GraphQLFieldConfig,
 } from '../../type/definition';
-import { GraphQLSchema } from '../../type/schema';
-import { GraphQLString } from '../../type/scalars';
 import {
+  GraphQLEnumType,
+  GraphQLInputObjectType,
   GraphQLList,
   GraphQLNonNull,
-  GraphQLScalarType,
   GraphQLObjectType,
-  GraphQLInputObjectType,
-  GraphQLEnumType,
+  GraphQLScalarType,
 } from '../../type/definition';
+import { GraphQLString } from '../../type/scalars';
+import { GraphQLSchema } from '../../type/schema';
 
 import { executeSync } from '../execute';
 import { getVariableValues } from '../values';
diff --git a/src/language/__tests__/blockString-fuzz.ts b/src/language/__tests__/blockString-fuzz.ts
index 0e1f5ec1..4ed010cc 100644
--- a/src/language/__tests__/blockString-fuzz.ts
+++ b/src/language/__tests__/blockString-fuzz.ts
@@ -1,14 +1,14 @@
 import { describe, it } from 'mocha';
 
 import { dedent } from '../../__testUtils__/dedent';
-import { inspectStr } from '../../__testUtils__/inspectStr';
 import { genFuzzStrings } from '../../__testUtils__/genFuzzStrings';
+import { inspectStr } from '../../__testUtils__/inspectStr';
 
 import { invariant } from '../../jsutils/invariant';
 
+import { isPrintableAsBlockString, printBlockString } from '../blockString';
 import { Lexer } from '../lexer';
 import { Source } from '../source';
-import { printBlockString, isPrintableAsBlockString } from '../blockString';
 
 function lexValue(str: string): string {
   const lexer = new Lexer(new Source(str));
diff --git a/src/language/__tests__/blockString-test.ts b/src/language/__tests__/blockString-test.ts
index f4a87039..a37858d3 100644
--- a/src/language/__tests__/blockString-test.ts
+++ b/src/language/__tests__/blockString-test.ts
@@ -2,8 +2,8 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 
 import {
-  isPrintableAsBlockString,
   dedentBlockStringLines,
+  isPrintableAsBlockString,
   printBlockString,
 } from '../blockString';
 
diff --git a/src/language/__tests__/lexer-test.ts b/src/language/__tests__/lexer-test.ts
index e7b247fd..46bf971d 100644
--- a/src/language/__tests__/lexer-test.ts
+++ b/src/language/__tests__/lexer-test.ts
@@ -9,9 +9,9 @@ import { inspect } from '../../jsutils/inspect';
 import { GraphQLError } from '../../error/GraphQLError';
 
 import type { Token } from '../ast';
+import { isPunctuatorTokenKind, Lexer } from '../lexer';
 import { Source } from '../source';
 import { TokenKind } from '../tokenKind';
-import { Lexer, isPunctuatorTokenKind } from '../lexer';
 
 function lexOne(str: string) {
   const lexer = new Lexer(new Source(str));
diff --git a/src/language/__tests__/parser-test.ts b/src/language/__tests__/parser-test.ts
index 10b8c6f2..3571b757 100644
--- a/src/language/__tests__/parser-test.ts
+++ b/src/language/__tests__/parser-test.ts
@@ -2,15 +2,15 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 
 import { dedent } from '../../__testUtils__/dedent';
-import { kitchenSinkQuery } from '../../__testUtils__/kitchenSinkQuery';
 import { expectJSON, expectToThrowJSON } from '../../__testUtils__/expectJSON';
+import { kitchenSinkQuery } from '../../__testUtils__/kitchenSinkQuery';
 
 import { inspect } from '../../jsutils/inspect';
 
 import { Kind } from '../kinds';
+import { parse, parseConstValue, parseType, parseValue } from '../parser';
 import { Source } from '../source';
 import { TokenKind } from '../tokenKind';
-import { parse, parseValue, parseConstValue, parseType } from '../parser';
 
 function expectSyntaxError(text: string) {
   return expectToThrowJSON(() => parse(text));
diff --git a/src/language/__tests__/predicates-test.ts b/src/language/__tests__/predicates-test.ts
index b90e2b31..13477f8d 100644
--- a/src/language/__tests__/predicates-test.ts
+++ b/src/language/__tests__/predicates-test.ts
@@ -5,16 +5,16 @@ import type { ASTNode } from '../ast';
 import { Kind } from '../kinds';
 import { parseValue } from '../parser';
 import {
+  isConstValueNode,
   isDefinitionNode,
   isExecutableDefinitionNode,
   isSelectionNode,
-  isValueNode,
-  isConstValueNode,
+  isTypeDefinitionNode,
+  isTypeExtensionNode,
   isTypeNode,
   isTypeSystemDefinitionNode,
-  isTypeDefinitionNode,
   isTypeSystemExtensionNode,
-  isTypeExtensionNode,
+  isValueNode,
 } from '../predicates';
 
 function filterNodes(predicate: (node: ASTNode) => boolean): Array<string> {
diff --git a/src/language/__tests__/printLocation-test.ts b/src/language/__tests__/printLocation-test.ts
index 986ff621..c5eac8cc 100644
--- a/src/language/__tests__/printLocation-test.ts
+++ b/src/language/__tests__/printLocation-test.ts
@@ -3,8 +3,8 @@ import { describe, it } from 'mocha';
 
 import { dedent } from '../../__testUtils__/dedent';
 
-import { Source } from '../source';
 import { printSourceLocation } from '../printLocation';
+import { Source } from '../source';
 
 describe('printSourceLocation', () => {
   it('prints minified documents', () => {
diff --git a/src/language/__tests__/schema-parser-test.ts b/src/language/__tests__/schema-parser-test.ts
index eef14f0d..cbb337c3 100644
--- a/src/language/__tests__/schema-parser-test.ts
+++ b/src/language/__tests__/schema-parser-test.ts
@@ -2,8 +2,8 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 
 import { dedent } from '../../__testUtils__/dedent';
-import { kitchenSinkSDL } from '../../__testUtils__/kitchenSinkSDL';
 import { expectJSON, expectToThrowJSON } from '../../__testUtils__/expectJSON';
+import { kitchenSinkSDL } from '../../__testUtils__/kitchenSinkSDL';
 
 import { parse } from '../parser';
 
diff --git a/src/language/__tests__/visitor-test.ts b/src/language/__tests__/visitor-test.ts
index f45d16e9..9149b103 100644
--- a/src/language/__tests__/visitor-test.ts
+++ b/src/language/__tests__/visitor-test.ts
@@ -4,11 +4,11 @@ import { describe, it } from 'mocha';
 import { kitchenSinkQuery } from '../../__testUtils__/kitchenSinkQuery';
 
 import type { ASTNode, SelectionSetNode } from '../ast';
-import type { ASTVisitorKeyMap, ASTVisitor } from '../visitor';
 import { isNode } from '../ast';
 import { Kind } from '../kinds';
 import { parse } from '../parser';
-import { visit, visitInParallel, BREAK } from '../visitor';
+import type { ASTVisitor, ASTVisitorKeyMap } from '../visitor';
+import { BREAK, visit, visitInParallel } from '../visitor';
 
 function checkVisitorFnArgs(ast: any, args: any, isEdited: boolean = false) {
   const [node, key, parent, path, ancestors] = args;
diff --git a/src/type/__tests__/assertName-test.ts b/src/type/__tests__/assertName-test.ts
index 4baf79c7..268b1c6e 100644
--- a/src/type/__tests__/assertName-test.ts
+++ b/src/type/__tests__/assertName-test.ts
@@ -1,7 +1,7 @@
 import { expect } from 'chai';
 import { describe, it } from 'mocha';
 
-import { assertName, assertEnumValueName } from '../assertName';
+import { assertEnumValueName, assertName } from '../assertName';
 
 describe('assertName', () => {
   it('passthrough valid name', () => {
diff --git a/src/type/__tests__/definition-test.ts b/src/type/__tests__/definition-test.ts
index eeb9809e..19d48291 100644
--- a/src/type/__tests__/definition-test.ts
+++ b/src/type/__tests__/definition-test.ts
@@ -1,21 +1,21 @@
 import { expect } from 'chai';
 import { describe, it } from 'mocha';
 
-import { inspect } from '../../jsutils/inspect';
 import { identityFunc } from '../../jsutils/identityFunc';
+import { inspect } from '../../jsutils/inspect';
 
 import { parseValue } from '../../language/parser';
 
-import type { GraphQLType, GraphQLNullableType } from '../definition';
+import type { GraphQLNullableType, GraphQLType } from '../definition';
 import {
+  GraphQLEnumType,
+  GraphQLInputObjectType,
+  GraphQLInterfaceType,
   GraphQLList,
   GraphQLNonNull,
-  GraphQLScalarType,
   GraphQLObjectType,
-  GraphQLInterfaceType,
+  GraphQLScalarType,
   GraphQLUnionType,
-  GraphQLEnumType,
-  GraphQLInputObjectType,
 } from '../definition';
 
 const ScalarType = new GraphQLScalarType({ name: 'Scalar' });
diff --git a/src/type/__tests__/directive-test.ts b/src/type/__tests__/directive-test.ts
index b614474a..110a3cc9 100644
--- a/src/type/__tests__/directive-test.ts
+++ b/src/type/__tests__/directive-test.ts
@@ -4,7 +4,7 @@ import { describe, it } from 'mocha';
 import { DirectiveLocation } from '../../language/directiveLocation';
 
 import { GraphQLDirective } from '../directives';
-import { GraphQLString, GraphQLInt } from '../scalars';
+import { GraphQLInt, GraphQLString } from '../scalars';
 
 describe('Type System: Directive', () => {
   it('defines a directive with no args', () => {
diff --git a/src/type/__tests__/enumType-test.ts b/src/type/__tests__/enumType-test.ts
index d45a76c1..35e9f94b 100644
--- a/src/type/__tests__/enumType-test.ts
+++ b/src/type/__tests__/enumType-test.ts
@@ -3,12 +3,13 @@ import { describe, it } from 'mocha';
 
 import { expectJSON } from '../../__testUtils__/expectJSON';
 
-import { graphqlSync } from '../../graphql';
 import { introspectionFromSchema } from '../../utilities/introspectionFromSchema';
 
-import { GraphQLSchema } from '../schema';
+import { graphqlSync } from '../../graphql';
+
 import { GraphQLEnumType, GraphQLObjectType } from '../definition';
-import { GraphQLInt, GraphQLString, GraphQLBoolean } from '../scalars';
+import { GraphQLBoolean, GraphQLInt, GraphQLString } from '../scalars';
+import { GraphQLSchema } from '../schema';
 
 const ColorType = new GraphQLEnumType({
   name: 'Color',
diff --git a/src/type/__tests__/extensions-test.ts b/src/type/__tests__/extensions-test.ts
index e1c70df5..4fb08274 100644
--- a/src/type/__tests__/extensions-test.ts
+++ b/src/type/__tests__/extensions-test.ts
@@ -3,16 +3,16 @@ import { describe, it } from 'mocha';
 
 import { invariant } from '../../jsutils/invariant';
 
-import { GraphQLSchema } from '../schema';
-import { GraphQLDirective } from '../directives';
 import {
-  GraphQLScalarType,
-  GraphQLObjectType,
-  GraphQLInterfaceType,
-  GraphQLUnionType,
   GraphQLEnumType,
   GraphQLInputObjectType,
+  GraphQLInterfaceType,
+  GraphQLObjectType,
+  GraphQLScalarType,
+  GraphQLUnionType,
 } from '../definition';
+import { GraphQLDirective } from '../directives';
+import { GraphQLSchema } from '../schema';
 
 const dummyType = new GraphQLScalarType({ name: 'DummyScalar' });
 
diff --git a/src/type/__tests__/predicate-test.ts b/src/type/__tests__/predicate-test.ts
index 6afd9b45..81e721e7 100644
--- a/src/type/__tests__/predicate-test.ts
+++ b/src/type/__tests__/predicate-test.ts
@@ -9,70 +9,70 @@ import type {
   GraphQLInputType,
 } from '../definition';
 import {
-  GraphQLDirective,
-  GraphQLSkipDirective,
-  GraphQLIncludeDirective,
-  GraphQLDeprecatedDirective,
-  assertDirective,
-  isDirective,
-  isSpecifiedDirective,
-} from '../directives';
-import {
-  GraphQLID,
-  GraphQLInt,
-  GraphQLFloat,
-  GraphQLString,
-  GraphQLBoolean,
-  isSpecifiedScalarType,
-} from '../scalars';
-import {
-  GraphQLList,
-  GraphQLNonNull,
-  GraphQLScalarType,
+  assertAbstractType,
+  assertCompositeType,
+  assertEnumType,
+  assertInputObjectType,
+  assertInputType,
+  assertInterfaceType,
+  assertLeafType,
+  assertListType,
+  assertNamedType,
+  assertNonNullType,
+  assertNullableType,
+  assertObjectType,
+  assertOutputType,
+  assertScalarType,
+  assertType,
+  assertUnionType,
+  assertWrappingType,
+  getNamedType,
+  getNullableType,
   GraphQLEnumType,
   GraphQLInputObjectType,
   GraphQLInterfaceType,
+  GraphQLList,
+  GraphQLNonNull,
   GraphQLObjectType,
+  GraphQLScalarType,
   GraphQLUnionType,
-  isType,
-  isScalarType,
-  isObjectType,
-  isInterfaceType,
-  isUnionType,
+  isAbstractType,
+  isCompositeType,
   isEnumType,
   isInputObjectType,
-  isListType,
-  isNonNullType,
   isInputType,
-  isOutputType,
+  isInterfaceType,
   isLeafType,
-  isCompositeType,
-  isAbstractType,
-  isWrappingType,
-  isNullableType,
+  isListType,
   isNamedType,
+  isNonNullType,
+  isNullableType,
+  isObjectType,
+  isOutputType,
   isRequiredArgument,
   isRequiredInputField,
-  assertType,
-  assertScalarType,
-  assertObjectType,
-  assertInterfaceType,
-  assertUnionType,
-  assertEnumType,
-  assertInputObjectType,
-  assertListType,
-  assertNonNullType,
-  assertInputType,
-  assertOutputType,
-  assertLeafType,
-  assertCompositeType,
-  assertAbstractType,
-  assertWrappingType,
-  assertNullableType,
-  assertNamedType,
-  getNullableType,
-  getNamedType,
+  isScalarType,
+  isType,
+  isUnionType,
+  isWrappingType,
 } from '../definition';
+import {
+  assertDirective,
+  GraphQLDeprecatedDirective,
+  GraphQLDirective,
+  GraphQLIncludeDirective,
+  GraphQLSkipDirective,
+  isDirective,
+  isSpecifiedDirective,
+} from '../directives';
+import {
+  GraphQLBoolean,
+  GraphQLFloat,
+  GraphQLID,
+  GraphQLInt,
+  GraphQLString,
+  isSpecifiedScalarType,
+} from '../scalars';
 
 const ObjectType = new GraphQLObjectType({ name: 'Object', fields: {} });
 const InterfaceType = new GraphQLInterfaceType({
diff --git a/src/type/__tests__/scalars-test.ts b/src/type/__tests__/scalars-test.ts
index f30b01ee..4d563aee 100644
--- a/src/type/__tests__/scalars-test.ts
+++ b/src/type/__tests__/scalars-test.ts
@@ -4,11 +4,11 @@ import { describe, it } from 'mocha';
 import { parseValue as parseValueToAST } from '../../language/parser';
 
 import {
+  GraphQLBoolean,
+  GraphQLFloat,
   GraphQLID,
   GraphQLInt,
-  GraphQLFloat,
   GraphQLString,
-  GraphQLBoolean,
 } from '../scalars';
 
 describe('Type System: Specified scalar types', () => {
diff --git a/src/type/__tests__/schema-test.ts b/src/type/__tests__/schema-test.ts
index ab2ef112..8a31b50a 100644
--- a/src/type/__tests__/schema-test.ts
+++ b/src/type/__tests__/schema-test.ts
@@ -7,16 +7,16 @@ import { DirectiveLocation } from '../../language/directiveLocation';
 
 import { printSchema } from '../../utilities/printSchema';
 
-import { GraphQLSchema } from '../schema';
-import { GraphQLDirective } from '../directives';
-import { GraphQLInt, GraphQLString, GraphQLBoolean } from '../scalars';
 import {
+  GraphQLInputObjectType,
+  GraphQLInterfaceType,
   GraphQLList,
-  GraphQLScalarType,
   GraphQLObjectType,
-  GraphQLInterfaceType,
-  GraphQLInputObjectType,
+  GraphQLScalarType,
 } from '../definition';
+import { GraphQLDirective } from '../directives';
+import { GraphQLBoolean, GraphQLInt, GraphQLString } from '../scalars';
+import { GraphQLSchema } from '../schema';
 
 describe('Type System: Schema', () => {
   it('Define sample schema', () => {
diff --git a/src/type/__tests__/validation-test.ts b/src/type/__tests__/validation-test.ts
index 0dd9137a..e34abbe7 100644
--- a/src/type/__tests__/validation-test.ts
+++ b/src/type/__tests__/validation-test.ts
@@ -6,39 +6,39 @@ import { expectJSON } from '../../__testUtils__/expectJSON';
 
 import { inspect } from '../../jsutils/inspect';
 
-import { parse } from '../../language/parser';
 import { DirectiveLocation } from '../../language/directiveLocation';
+import { parse } from '../../language/parser';
 
-import { extendSchema } from '../../utilities/extendSchema';
 import { buildSchema } from '../../utilities/buildASTSchema';
+import { extendSchema } from '../../utilities/extendSchema';
 
 import type {
-  GraphQLNamedType,
-  GraphQLInputType,
-  GraphQLOutputType,
-  GraphQLFieldConfig,
   GraphQLArgumentConfig,
+  GraphQLFieldConfig,
   GraphQLInputFieldConfig,
+  GraphQLInputType,
+  GraphQLNamedType,
+  GraphQLOutputType,
 } from '../definition';
-import { GraphQLSchema } from '../schema';
-import { GraphQLString } from '../scalars';
-import { validateSchema, assertValidSchema } from '../validate';
-import { GraphQLDirective, assertDirective } from '../directives';
 import {
+  assertEnumType,
+  assertInputObjectType,
+  assertInterfaceType,
+  assertObjectType,
+  assertScalarType,
+  assertUnionType,
+  GraphQLEnumType,
+  GraphQLInputObjectType,
+  GraphQLInterfaceType,
   GraphQLList,
   GraphQLNonNull,
   GraphQLObjectType,
-  GraphQLInterfaceType,
   GraphQLUnionType,
-  GraphQLEnumType,
-  GraphQLInputObjectType,
-  assertScalarType,
-  assertInterfaceType,
-  assertObjectType,
-  assertUnionType,
-  assertEnumType,
-  assertInputObjectType,
 } from '../definition';
+import { assertDirective, GraphQLDirective } from '../directives';
+import { GraphQLString } from '../scalars';
+import { GraphQLSchema } from '../schema';
+import { assertValidSchema, validateSchema } from '../validate';
 
 const SomeSchema = buildSchema(`
   scalar SomeScalar
diff --git a/src/utilities/__tests__/TypeInfo-test.ts b/src/utilities/__tests__/TypeInfo-test.ts
index 6008e1d9..5c04458c 100644
--- a/src/utilities/__tests__/TypeInfo-test.ts
+++ b/src/utilities/__tests__/TypeInfo-test.ts
@@ -7,8 +7,8 @@ import { parse, parseValue } from '../../language/parser';
 import { print } from '../../language/printer';
 import { visit } from '../../language/visitor';
 
-import { GraphQLSchema } from '../../type/schema';
 import { getNamedType, isCompositeType } from '../../type/definition';
+import { GraphQLSchema } from '../../type/schema';
 
 import { buildSchema } from '../buildASTSchema';
 import { TypeInfo, visitWithTypeInfo } from '../TypeInfo';
diff --git a/src/utilities/__tests__/astFromValue-test.ts b/src/utilities/__tests__/astFromValue-test.ts
index 3641f002..b8f2361b 100644
--- a/src/utilities/__tests__/astFromValue-test.ts
+++ b/src/utilities/__tests__/astFromValue-test.ts
@@ -2,19 +2,19 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 
 import {
-  GraphQLID,
-  GraphQLInt,
-  GraphQLFloat,
-  GraphQLString,
-  GraphQLBoolean,
-} from '../../type/scalars';
-import {
+  GraphQLEnumType,
+  GraphQLInputObjectType,
   GraphQLList,
   GraphQLNonNull,
   GraphQLScalarType,
-  GraphQLEnumType,
-  GraphQLInputObjectType,
 } from '../../type/definition';
+import {
+  GraphQLBoolean,
+  GraphQLFloat,
+  GraphQLID,
+  GraphQLInt,
+  GraphQLString,
+} from '../../type/scalars';
 
 import { astFromValue } from '../astFromValue';
 
diff --git a/src/utilities/__tests__/buildASTSchema-test.ts b/src/utilities/__tests__/buildASTSchema-test.ts
index 1f3ec6ec..7427ebb5 100644
--- a/src/utilities/__tests__/buildASTSchema-test.ts
+++ b/src/utilities/__tests__/buildASTSchema-test.ts
@@ -4,43 +4,43 @@ import { describe, it } from 'mocha';
 import { dedent } from '../../__testUtils__/dedent';
 
 import { invariant } from '../../jsutils/invariant';
+import type { Maybe } from '../../jsutils/Maybe';
 
 import type { ASTNode } from '../../language/ast';
 import { Kind } from '../../language/kinds';
 import { parse } from '../../language/parser';
 import { print } from '../../language/printer';
 
-import { GraphQLSchema } from '../../type/schema';
-import { validateSchema } from '../../type/validate';
-import { __Schema, __EnumValue } from '../../type/introspection';
+import {
+  assertEnumType,
+  assertInputObjectType,
+  assertInterfaceType,
+  assertObjectType,
+  assertScalarType,
+  assertUnionType,
+} from '../../type/definition';
 import {
   assertDirective,
-  GraphQLSkipDirective,
-  GraphQLIncludeDirective,
   GraphQLDeprecatedDirective,
+  GraphQLIncludeDirective,
+  GraphQLSkipDirective,
   GraphQLSpecifiedByDirective,
 } from '../../type/directives';
+import { __EnumValue, __Schema } from '../../type/introspection';
 import {
+  GraphQLBoolean,
+  GraphQLFloat,
   GraphQLID,
   GraphQLInt,
-  GraphQLFloat,
   GraphQLString,
-  GraphQLBoolean,
 } from '../../type/scalars';
-import {
-  assertObjectType,
-  assertInputObjectType,
-  assertEnumType,
-  assertUnionType,
-  assertInterfaceType,
-  assertScalarType,
-} from '../../type/definition';
+import { GraphQLSchema } from '../../type/schema';
+import { validateSchema } from '../../type/validate';
 
 import { graphqlSync } from '../../graphql';
 
-import { printType, printSchema } from '../printSchema';
 import { buildASTSchema, buildSchema } from '../buildASTSchema';
-import type { Maybe } from '../../jsutils/Maybe';
+import { printSchema, printType } from '../printSchema';
 
 /**
  * This function does a full cycle of going from a string with the contents of
diff --git a/src/utilities/__tests__/buildClientSchema-test.ts b/src/utilities/__tests__/buildClientSchema-test.ts
index dc705b8a..7d178115 100644
--- a/src/utilities/__tests__/buildClientSchema-test.ts
+++ b/src/utilities/__tests__/buildClientSchema-test.ts
@@ -5,26 +5,26 @@ import { dedent } from '../../__testUtils__/dedent';
 
 import { invariant } from '../../jsutils/invariant';
 
-import { graphqlSync } from '../../graphql';
-
-import { GraphQLSchema } from '../../type/schema';
 import {
   assertEnumType,
-  GraphQLObjectType,
   GraphQLEnumType,
+  GraphQLObjectType,
 } from '../../type/definition';
 import {
-  GraphQLInt,
-  GraphQLFloat,
-  GraphQLString,
   GraphQLBoolean,
+  GraphQLFloat,
   GraphQLID,
+  GraphQLInt,
+  GraphQLString,
 } from '../../type/scalars';
+import { GraphQLSchema } from '../../type/schema';
+
+import { graphqlSync } from '../../graphql';
 
-import { printSchema } from '../printSchema';
 import { buildSchema } from '../buildASTSchema';
 import { buildClientSchema } from '../buildClientSchema';
 import { introspectionFromSchema } from '../introspectionFromSchema';
+import { printSchema } from '../printSchema';
 
 /**
  * This function does a full cycle of going from a string with the contents of
diff --git a/src/utilities/__tests__/coerceInputValue-test.ts b/src/utilities/__tests__/coerceInputValue-test.ts
index 32e12761..a73cdc61 100644
--- a/src/utilities/__tests__/coerceInputValue-test.ts
+++ b/src/utilities/__tests__/coerceInputValue-test.ts
@@ -2,14 +2,14 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 
 import type { GraphQLInputType } from '../../type/definition';
-import { GraphQLInt } from '../../type/scalars';
 import {
+  GraphQLEnumType,
+  GraphQLInputObjectType,
   GraphQLList,
   GraphQLNonNull,
-  GraphQLEnumType,
   GraphQLScalarType,
-  GraphQLInputObjectType,
 } from '../../type/definition';
+import { GraphQLInt } from '../../type/scalars';
 
 import { coerceInputValue } from '../coerceInputValue';
 
diff --git a/src/utilities/__tests__/extendSchema-test.ts b/src/utilities/__tests__/extendSchema-test.ts
index 022d6a58..86baf0e6 100644
--- a/src/utilities/__tests__/extendSchema-test.ts
+++ b/src/utilities/__tests__/extendSchema-test.ts
@@ -10,31 +10,31 @@ import type { ASTNode } from '../../language/ast';
 import { parse } from '../../language/parser';
 import { print } from '../../language/printer';
 
-import { graphqlSync } from '../../graphql';
-
-import { GraphQLSchema } from '../../type/schema';
-import { validateSchema } from '../../type/validate';
+import {
+  assertEnumType,
+  assertInputObjectType,
+  assertInterfaceType,
+  assertObjectType,
+  assertScalarType,
+  assertUnionType,
+} from '../../type/definition';
 import { assertDirective } from '../../type/directives';
 import {
+  GraphQLBoolean,
+  GraphQLFloat,
   GraphQLID,
   GraphQLInt,
-  GraphQLFloat,
   GraphQLString,
-  GraphQLBoolean,
 } from '../../type/scalars';
-import {
-  assertObjectType,
-  assertInputObjectType,
-  assertEnumType,
-  assertUnionType,
-  assertInterfaceType,
-  assertScalarType,
-} from '../../type/definition';
+import { GraphQLSchema } from '../../type/schema';
+import { validateSchema } from '../../type/validate';
+
+import { graphqlSync } from '../../graphql';
 
+import { buildSchema } from '../buildASTSchema';
 import { concatAST } from '../concatAST';
-import { printSchema } from '../printSchema';
 import { extendSchema } from '../extendSchema';
-import { buildSchema } from '../buildASTSchema';
+import { printSchema } from '../printSchema';
 
 function expectExtensionASTNodes(obj: {
   readonly extensionASTNodes: ReadonlyArray<ASTNode>;
diff --git a/src/utilities/__tests__/findBreakingChanges-test.ts b/src/utilities/__tests__/findBreakingChanges-test.ts
index a4ab7220..5a7956ae 100644
--- a/src/utilities/__tests__/findBreakingChanges-test.ts
+++ b/src/utilities/__tests__/findBreakingChanges-test.ts
@@ -1,13 +1,13 @@
 import { expect } from 'chai';
 import { describe, it } from 'mocha';
 
-import { GraphQLSchema } from '../../type/schema';
 import {
-  GraphQLSkipDirective,
+  GraphQLDeprecatedDirective,
   GraphQLIncludeDirective,
+  GraphQLSkipDirective,
   GraphQLSpecifiedByDirective,
-  GraphQLDeprecatedDirective,
 } from '../../type/directives';
+import { GraphQLSchema } from '../../type/schema';
 
 import { buildSchema } from '../buildASTSchema';
 import {
diff --git a/src/utilities/__tests__/getIntrospectionQuery-test.ts b/src/utilities/__tests__/getIntrospectionQuery-test.ts
index 324d77b0..e2f5595b 100644
--- a/src/utilities/__tests__/getIntrospectionQuery-test.ts
+++ b/src/utilities/__tests__/getIntrospectionQuery-test.ts
@@ -5,8 +5,8 @@ import { parse } from '../../language/parser';
 
 import { validate } from '../../validation/validate';
 
-import type { IntrospectionOptions } from '../getIntrospectionQuery';
 import { buildSchema } from '../buildASTSchema';
+import type { IntrospectionOptions } from '../getIntrospectionQuery';
 import { getIntrospectionQuery } from '../getIntrospectionQuery';
 
 const dummySchema = buildSchema(`
diff --git a/src/utilities/__tests__/getOperationRootType-test.ts b/src/utilities/__tests__/getOperationRootType-test.ts
index 99292d15..ce683a5a 100644
--- a/src/utilities/__tests__/getOperationRootType-test.ts
+++ b/src/utilities/__tests__/getOperationRootType-test.ts
@@ -7,9 +7,9 @@ import type { DocumentNode, OperationDefinitionNode } from '../../language/ast';
 import { Kind } from '../../language/kinds';
 import { parse } from '../../language/parser';
 
-import { GraphQLSchema } from '../../type/schema';
-import { GraphQLString } from '../../type/scalars';
 import { GraphQLObjectType } from '../../type/definition';
+import { GraphQLString } from '../../type/scalars';
+import { GraphQLSchema } from '../../type/schema';
 
 import { getOperationRootType } from '../getOperationRootType';
 
diff --git a/src/utilities/__tests__/introspectionFromSchema-test.ts b/src/utilities/__tests__/introspectionFromSchema-test.ts
index 14e72ed0..2ba66348 100644
--- a/src/utilities/__tests__/introspectionFromSchema-test.ts
+++ b/src/utilities/__tests__/introspectionFromSchema-test.ts
@@ -3,14 +3,14 @@ import { describe, it } from 'mocha';
 
 import { dedent } from '../../__testUtils__/dedent';
 
-import { GraphQLSchema } from '../../type/schema';
-import { GraphQLString } from '../../type/scalars';
 import { GraphQLObjectType } from '../../type/definition';
+import { GraphQLString } from '../../type/scalars';
+import { GraphQLSchema } from '../../type/schema';
 
-import type { IntrospectionQuery } from '../getIntrospectionQuery';
-import { printSchema } from '../printSchema';
 import { buildClientSchema } from '../buildClientSchema';
+import type { IntrospectionQuery } from '../getIntrospectionQuery';
 import { introspectionFromSchema } from '../introspectionFromSchema';
+import { printSchema } from '../printSchema';
 
 function introspectionToSDL(introspection: IntrospectionQuery): string {
   return printSchema(buildClientSchema(introspection));
diff --git a/src/utilities/__tests__/lexicographicSortSchema-test.ts b/src/utilities/__tests__/lexicographicSortSchema-test.ts
index f63ee946..bce12e3a 100644
--- a/src/utilities/__tests__/lexicographicSortSchema-test.ts
+++ b/src/utilities/__tests__/lexicographicSortSchema-test.ts
@@ -3,9 +3,9 @@ import { describe, it } from 'mocha';
 
 import { dedent } from '../../__testUtils__/dedent';
 
-import { printSchema } from '../printSchema';
 import { buildSchema } from '../buildASTSchema';
 import { lexicographicSortSchema } from '../lexicographicSortSchema';
+import { printSchema } from '../printSchema';
 
 function sortSDL(sdl: string): string {
   const schema = buildSchema(sdl);
diff --git a/src/utilities/__tests__/printSchema-test.ts b/src/utilities/__tests__/printSchema-test.ts
index e6761926..84f30fc0 100644
--- a/src/utilities/__tests__/printSchema-test.ts
+++ b/src/utilities/__tests__/printSchema-test.ts
@@ -6,22 +6,22 @@ import { dedent, dedentString } from '../../__testUtils__/dedent';
 import { DirectiveLocation } from '../../language/directiveLocation';
 
 import type { GraphQLFieldConfig } from '../../type/definition';
-import { GraphQLSchema } from '../../type/schema';
-import { GraphQLDirective } from '../../type/directives';
-import { GraphQLInt, GraphQLString, GraphQLBoolean } from '../../type/scalars';
 import {
+  GraphQLEnumType,
+  GraphQLInputObjectType,
+  GraphQLInterfaceType,
   GraphQLList,
   GraphQLNonNull,
-  GraphQLScalarType,
   GraphQLObjectType,
-  GraphQLInterfaceType,
+  GraphQLScalarType,
   GraphQLUnionType,
-  GraphQLEnumType,
-  GraphQLInputObjectType,
 } from '../../type/definition';
+import { GraphQLDirective } from '../../type/directives';
+import { GraphQLBoolean, GraphQLInt, GraphQLString } from '../../type/scalars';
+import { GraphQLSchema } from '../../type/schema';
 
 import { buildSchema } from '../buildASTSchema';
-import { printSchema, printIntrospectionSchema } from '../printSchema';
+import { printIntrospectionSchema, printSchema } from '../printSchema';
 
 function expectPrintedSchema(schema: GraphQLSchema) {
   const schemaText = printSchema(schema);
diff --git a/src/utilities/__tests__/stripIgnoredCharacters-fuzz.ts b/src/utilities/__tests__/stripIgnoredCharacters-fuzz.ts
index 38a5a12b..29a22ed8 100644
--- a/src/utilities/__tests__/stripIgnoredCharacters-fuzz.ts
+++ b/src/utilities/__tests__/stripIgnoredCharacters-fuzz.ts
@@ -1,8 +1,8 @@
 import { describe, it } from 'mocha';
 
 import { dedent } from '../../__testUtils__/dedent';
-import { inspectStr } from '../../__testUtils__/inspectStr';
 import { genFuzzStrings } from '../../__testUtils__/genFuzzStrings';
+import { inspectStr } from '../../__testUtils__/inspectStr';
 
 import { invariant } from '../../jsutils/invariant';
 
diff --git a/src/utilities/__tests__/stripIgnoredCharacters-test.ts b/src/utilities/__tests__/stripIgnoredCharacters-test.ts
index ea46b6b7..4115742f 100644
--- a/src/utilities/__tests__/stripIgnoredCharacters-test.ts
+++ b/src/utilities/__tests__/stripIgnoredCharacters-test.ts
@@ -3,8 +3,8 @@ import { describe, it } from 'mocha';
 
 import { dedent } from '../../__testUtils__/dedent';
 import { inspectStr } from '../../__testUtils__/inspectStr';
-import { kitchenSinkSDL } from '../../__testUtils__/kitchenSinkSDL';
 import { kitchenSinkQuery } from '../../__testUtils__/kitchenSinkQuery';
+import { kitchenSinkSDL } from '../../__testUtils__/kitchenSinkSDL';
 
 import { invariant } from '../../jsutils/invariant';
 import type { Maybe } from '../../jsutils/Maybe';
diff --git a/src/utilities/__tests__/typeComparators-test.ts b/src/utilities/__tests__/typeComparators-test.ts
index adf830b4..f2709bf7 100644
--- a/src/utilities/__tests__/typeComparators-test.ts
+++ b/src/utilities/__tests__/typeComparators-test.ts
@@ -2,15 +2,15 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 
 import type { GraphQLFieldConfigMap } from '../../type/definition';
-import { GraphQLSchema } from '../../type/schema';
-import { GraphQLString, GraphQLInt, GraphQLFloat } from '../../type/scalars';
 import {
+  GraphQLInterfaceType,
   GraphQLList,
   GraphQLNonNull,
   GraphQLObjectType,
-  GraphQLInterfaceType,
   GraphQLUnionType,
 } from '../../type/definition';
+import { GraphQLFloat, GraphQLInt, GraphQLString } from '../../type/scalars';
+import { GraphQLSchema } from '../../type/schema';
 
 import { isEqualType, isTypeSubTypeOf } from '../typeComparators';
 
diff --git a/src/utilities/__tests__/valueFromAST-test.ts b/src/utilities/__tests__/valueFromAST-test.ts
index 6c08ccf1..a01ed957 100644
--- a/src/utilities/__tests__/valueFromAST-test.ts
+++ b/src/utilities/__tests__/valueFromAST-test.ts
@@ -1,27 +1,27 @@
 import { expect } from 'chai';
 import { describe, it } from 'mocha';
 
-import type { ObjMap } from '../../jsutils/ObjMap';
-import { invariant } from '../../jsutils/invariant';
 import { identityFunc } from '../../jsutils/identityFunc';
+import { invariant } from '../../jsutils/invariant';
+import type { ObjMap } from '../../jsutils/ObjMap';
 
 import { parseValue } from '../../language/parser';
 
 import type { GraphQLInputType } from '../../type/definition';
 import {
-  GraphQLInt,
-  GraphQLFloat,
-  GraphQLString,
-  GraphQLBoolean,
-  GraphQLID,
-} from '../../type/scalars';
-import {
+  GraphQLEnumType,
+  GraphQLInputObjectType,
   GraphQLList,
   GraphQLNonNull,
   GraphQLScalarType,
-  GraphQLEnumType,
-  GraphQLInputObjectType,
 } from '../../type/definition';
+import {
+  GraphQLBoolean,
+  GraphQLFloat,
+  GraphQLID,
+  GraphQLInt,
+  GraphQLString,
+} from '../../type/scalars';
 
 import { valueFromAST } from '../valueFromAST';
 
diff --git a/src/validation/__tests__/FieldsOnCorrectTypeRule-test.ts b/src/validation/__tests__/FieldsOnCorrectTypeRule-test.ts
index 5ee27473..70473fa6 100644
--- a/src/validation/__tests__/FieldsOnCorrectTypeRule-test.ts
+++ b/src/validation/__tests__/FieldsOnCorrectTypeRule-test.ts
@@ -7,8 +7,8 @@ import type { GraphQLSchema } from '../../type/schema';
 
 import { buildSchema } from '../../utilities/buildASTSchema';
 
-import { validate } from '../validate';
 import { FieldsOnCorrectTypeRule } from '../rules/FieldsOnCorrectTypeRule';
+import { validate } from '../validate';
 
 import { expectValidationErrorsWithSchema } from './harness';
 
diff --git a/src/validation/__tests__/KnownArgumentNamesRule-test.ts b/src/validation/__tests__/KnownArgumentNamesRule-test.ts
index 0dbf7207..4ce5fd19 100644
--- a/src/validation/__tests__/KnownArgumentNamesRule-test.ts
+++ b/src/validation/__tests__/KnownArgumentNamesRule-test.ts
@@ -5,11 +5,11 @@ import type { GraphQLSchema } from '../../type/schema';
 import { buildSchema } from '../../utilities/buildASTSchema';
 
 import {
-  KnownArgumentNamesRule,
   KnownArgumentNamesOnDirectivesRule,
+  KnownArgumentNamesRule,
 } from '../rules/KnownArgumentNamesRule';
 
-import { expectValidationErrors, expectSDLValidationErrors } from './harness';
+import { expectSDLValidationErrors, expectValidationErrors } from './harness';
 
 function expectErrors(queryStr: string) {
   return expectValidationErrors(KnownArgumentNamesRule, queryStr);
diff --git a/src/validation/__tests__/KnownDirectivesRule-test.ts b/src/validation/__tests__/KnownDirectivesRule-test.ts
index 5a87ca65..4cb6e225 100644
--- a/src/validation/__tests__/KnownDirectivesRule-test.ts
+++ b/src/validation/__tests__/KnownDirectivesRule-test.ts
@@ -7,8 +7,8 @@ import { buildSchema } from '../../utilities/buildASTSchema';
 import { KnownDirectivesRule } from '../rules/KnownDirectivesRule';
 
 import {
-  expectValidationErrorsWithSchema,
   expectSDLValidationErrors,
+  expectValidationErrorsWithSchema,
 } from './harness';
 
 function expectErrors(queryStr: string) {
diff --git a/src/validation/__tests__/KnownTypeNamesRule-test.ts b/src/validation/__tests__/KnownTypeNamesRule-test.ts
index b9ba2c09..34f0ca71 100644
--- a/src/validation/__tests__/KnownTypeNamesRule-test.ts
+++ b/src/validation/__tests__/KnownTypeNamesRule-test.ts
@@ -7,9 +7,9 @@ import { buildSchema } from '../../utilities/buildASTSchema';
 import { KnownTypeNamesRule } from '../rules/KnownTypeNamesRule';
 
 import {
+  expectSDLValidationErrors,
   expectValidationErrors,
   expectValidationErrorsWithSchema,
-  expectSDLValidationErrors,
 } from './harness';
 
 function expectErrors(queryStr: string) {
diff --git a/src/validation/__tests__/OverlappingFieldsCanBeMergedRule-test.ts b/src/validation/__tests__/OverlappingFieldsCanBeMergedRule-test.ts
index f9f4456b..9d864902 100644
--- a/src/validation/__tests__/OverlappingFieldsCanBeMergedRule-test.ts
+++ b/src/validation/__tests__/OverlappingFieldsCanBeMergedRule-test.ts
@@ -1011,18 +1011,64 @@ describe('Validate: Overlapping fields can be merged', () => {
 
   it('does not infinite loop on recursive fragment', () => {
     expectValid(`
+      {
+        ...fragA
+      }
+
       fragment fragA on Human { name, relatives { name, ...fragA } }
     `);
   });
 
   it('does not infinite loop on immediately recursive fragment', () => {
     expectValid(`
+      {
+        ...fragA
+      }
+
       fragment fragA on Human { name, ...fragA }
     `);
   });
 
+  it('does not infinite loop on recursive fragment with a field named after fragment', () => {
+    expectValid(`
+      {
+        ...fragA
+        fragA
+      }
+
+      fragment fragA on Query { ...fragA }
+    `);
+  });
+
+  it('finds invalid cases even with field named after fragment', () => {
+    expectErrors(`
+      {
+        fragA
+        ...fragA
+      }
+
+      fragment fragA on Type {
+        fragA: b
+      }
+    `).toDeepEqual([
+      {
+        message:
+          'Fields "fragA" conflict because "fragA" and "b" are different fields. Use different aliases on the fields to fetch both if this was intentional.',
+        locations: [
+          { line: 3, column: 9 },
+          { line: 8, column: 9 },
+        ],
+      },
+    ]);
+  });
+
   it('does not infinite loop on transitively recursive fragment', () => {
     expectValid(`
+      {
+        ...fragA
+        fragB
+      }
+
       fragment fragA on Human { name, ...fragB }
       fragment fragB on Human { name, ...fragC }
       fragment fragC on Human { name, ...fragA }
diff --git a/src/validation/__tests__/ProvidedRequiredArgumentsRule-test.ts b/src/validation/__tests__/ProvidedRequiredArgumentsRule-test.ts
index d6c300be..23a27257 100644
--- a/src/validation/__tests__/ProvidedRequiredArgumentsRule-test.ts
+++ b/src/validation/__tests__/ProvidedRequiredArgumentsRule-test.ts
@@ -5,11 +5,11 @@ import type { GraphQLSchema } from '../../type/schema';
 import { buildSchema } from '../../utilities/buildASTSchema';
 
 import {
-  ProvidedRequiredArgumentsRule,
   ProvidedRequiredArgumentsOnDirectivesRule,
+  ProvidedRequiredArgumentsRule,
 } from '../rules/ProvidedRequiredArgumentsRule';
 
-import { expectValidationErrors, expectSDLValidationErrors } from './harness';
+import { expectSDLValidationErrors, expectValidationErrors } from './harness';
 
 function expectErrors(queryStr: string) {
   return expectValidationErrors(ProvidedRequiredArgumentsRule, queryStr);
diff --git a/src/validation/__tests__/UniqueArgumentDefinitionNamesRule-test.ts b/src/validation/__tests__/UniqueArgumentDefinitionNamesRule-test.ts
index 732f11f4..cf63202b 100644
--- a/src/validation/__tests__/UniqueArgumentDefinitionNamesRule-test.ts
+++ b/src/validation/__tests__/UniqueArgumentDefinitionNamesRule-test.ts
@@ -41,6 +41,14 @@ describe('Validate: Unique argument definition names', () => {
         someField(foo: String): String
       }
 
+      extend type SomeObject {
+        anotherField(foo: String): String
+      }
+
+      extend interface SomeInterface {
+        anotherField(foo: String): String
+      }
+
       directive @someDirective(foo: String) on QUERY
     `);
   });
@@ -61,6 +69,20 @@ describe('Validate: Unique argument definition names', () => {
         ): String
       }
 
+      extend type SomeObject {
+        anotherField(
+          foo: String
+          bar: String
+        ): String
+      }
+
+      extend interface SomeInterface {
+        anotherField(
+          foo: String
+          bar: String
+        ): String
+      }
+
       directive @someDirective(
         foo: String
         bar: String
@@ -86,6 +108,22 @@ describe('Validate: Unique argument definition names', () => {
         ): String
       }
 
+      extend type SomeObject {
+        anotherField(
+          foo: String
+          bar: String
+          bar: String
+        ): String
+      }
+
+      extend interface SomeInterface {
+        anotherField(
+          bar: String
+          foo: String
+          foo: String
+        ): String
+      }
+
       directive @someDirective(
         foo: String
         bar: String
@@ -108,11 +146,27 @@ describe('Validate: Unique argument definition names', () => {
           { line: 14, column: 11 },
         ],
       },
+      {
+        message:
+          'Argument "SomeObject.anotherField(bar:)" can only be defined once.',
+        locations: [
+          { line: 21, column: 11 },
+          { line: 22, column: 11 },
+        ],
+      },
+      {
+        message:
+          'Argument "SomeInterface.anotherField(foo:)" can only be defined once.',
+        locations: [
+          { line: 29, column: 11 },
+          { line: 30, column: 11 },
+        ],
+      },
       {
         message: 'Argument "@someDirective(foo:)" can only be defined once.',
         locations: [
-          { line: 19, column: 9 },
-          { line: 21, column: 9 },
+          { line: 35, column: 9 },
+          { line: 37, column: 9 },
         ],
       },
     ]);
diff --git a/src/validation/__tests__/UniqueDirectivesPerLocationRule-test.ts b/src/validation/__tests__/UniqueDirectivesPerLocationRule-test.ts
index 47424ef7..d57a3df6 100644
--- a/src/validation/__tests__/UniqueDirectivesPerLocationRule-test.ts
+++ b/src/validation/__tests__/UniqueDirectivesPerLocationRule-test.ts
@@ -9,9 +9,9 @@ import { extendSchema } from '../../utilities/extendSchema';
 import { UniqueDirectivesPerLocationRule } from '../rules/UniqueDirectivesPerLocationRule';
 
 import {
-  testSchema,
-  expectValidationErrorsWithSchema,
   expectSDLValidationErrors,
+  expectValidationErrorsWithSchema,
+  testSchema,
 } from './harness';
 
 const extensionSDL = `
diff --git a/src/validation/__tests__/ValuesOfCorrectTypeRule-test.ts b/src/validation/__tests__/ValuesOfCorrectTypeRule-test.ts
index b44a6885..76b03035 100644
--- a/src/validation/__tests__/ValuesOfCorrectTypeRule-test.ts
+++ b/src/validation/__tests__/ValuesOfCorrectTypeRule-test.ts
@@ -7,12 +7,12 @@ import { inspect } from '../../jsutils/inspect';
 
 import { parse } from '../../language/parser';
 
-import { GraphQLSchema } from '../../type/schema';
+import { GraphQLObjectType, GraphQLScalarType } from '../../type/definition';
 import { GraphQLString } from '../../type/scalars';
-import { GraphQLScalarType, GraphQLObjectType } from '../../type/definition';
+import { GraphQLSchema } from '../../type/schema';
 
-import { validate } from '../validate';
 import { ValuesOfCorrectTypeRule } from '../rules/ValuesOfCorrectTypeRule';
+import { validate } from '../validate';
 
 import {
   expectValidationErrors,
diff --git a/src/validation/__tests__/harness.ts b/src/validation/__tests__/harness.ts
index 304cde67..661256c5 100644
--- a/src/validation/__tests__/harness.ts
+++ b/src/validation/__tests__/harness.ts
@@ -9,7 +9,7 @@ import type { GraphQLSchema } from '../../type/schema';
 import { buildSchema } from '../../utilities/buildASTSchema';
 
 import { validate, validateSDL } from '../validate';
-import type { ValidationRule, SDLValidationRule } from '../ValidationContext';
+import type { SDLValidationRule, ValidationRule } from '../ValidationContext';
 
 export const testSchema: GraphQLSchema = buildSchema(`
   interface Mammal {
diff --git a/src/validation/__tests__/validation-test.ts b/src/validation/__tests__/validation-test.ts
index b4933202..e5b13183 100644
--- a/src/validation/__tests__/validation-test.ts
+++ b/src/validation/__tests__/validation-test.ts
@@ -8,11 +8,11 @@ import { GraphQLError } from '../../error/GraphQLError';
 import type { DirectiveNode } from '../../language/ast';
 import { parse } from '../../language/parser';
 
-import { TypeInfo } from '../../utilities/TypeInfo';
 import { buildSchema } from '../../utilities/buildASTSchema';
+import { TypeInfo } from '../../utilities/TypeInfo';
 
-import type { ValidationContext } from '../ValidationContext';
 import { validate } from '../validate';
+import type { ValidationContext } from '../ValidationContext';
 
 import { testSchema } from './harness';