言語が違えばまた、違った歴史があるのだなあ・・・。
graphql-js
- Prettierは、
graphql-jsを使ってGraphQLをパースする- https://github.com/graphql/graphql-js
graphql-jsは、GraphQLという言語にとってのいわゆるリファレンス実装でもある
- GraphQL Spec自体は日付ベースでカットされる
- 最新だとSep2025、Oct2021など
- https://spec.graphql.org/
そして、Prettierが使ってるgraphql-jsのバージョンはこの通り。
- v3.8.4(latest): v16
- v3.9.x(main): v17
少しややこしいのは、graphql-jsのバージョンと、Specのバージョンは対応してるわけではないってところ。
たとえば、2025で仕様入りした”executable descriptions”は、v16.12の時点でもパースできる。また、@oneOfというディレクティブも2025仕様だが、ASTとしては元々パースできてたり。
Draft features
また、リファレンス実装なので、まだ正式仕様になってないものも対応してる。
たとえば、graphql-jsのv16では、allowLegacyFragmentVariables: trueを指定してる。
そしてこれがv17になると、experimentalFragmentArguments: trueに変わってる。
Fragment Arguments | GraphQL https://www.graphql-js.org/docs/fragment-arguments/
詳しいことは知らないけど、要するに名前が変わって、さらにできることも増えたという感じらしい。(定義側だけでなく、呼び出し側の引数でも使えるように)
また、リファレンス実装だからか、まだRFC段階の”Directives on Directive Definitions”も、v17からオプションなしでパースされるようになってたり・・・。
Directives on Directive Definitions | GraphQL https://www.graphql-js.org/docs/directives-on-directives/
Prettier互換を謳い続ける限り、PrettierのCHANGELOGを追い続ける必要がある!