graphql / graphql/graphql-js

Feature request: prettyPrint

Open
#1,799 3 comments 6 reactions 0 assignees View on GitHub
enhancement
Dominant language
TypeScript
Stars
20.3k
Forks
2.1k
Avg merge
44m
Merged PRs (30d)
6

Description

# Request: Add a Pretty-Printing function to go from AST => well-formatted string

This is a utility I've wanted to exist as part of the core library for a long time. @adek05 began a simple implementation of this in #1557. The Prettier library has even implemented a version of this: https://github.com/prettier/prettier/tree/master/src/language-graphql

## Ideal API (I think)
- Should take in a "max-width" as configuration (default to 80 chars?)
- Should preserve comments from the original source
- Should be extensible in the future to support prettier-like configs

## Why not re-use `print`?
- Ideally, `print` is as high-performance as possible. I imagine calculating line-width will be a non-trivial performance regression, as would preserving comments.
- `print` currently does not preserve comments, and it would potentially break tooling that depends on this comment-stripping feature.
- This would likely be experimental. We should make sure the output is "ideal" before making the default print functionality be "pretty".

## What are potential use cases?
- Codemod tooling that wants to do a one-time insertion of an AST node into existing GraphQL source files. The current `print` re-formats and strips comments, and leads to super-long lines if, for instance, your query has more than 4 variable definitions.
- Test output snapshots would be easier to read, and easier to see how they change over time
- Prettier and prettier-like tooling could consume this new print function directly

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.