Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/brodycj/prettierx

a less opinionated fork of Prettier code formatter
https://github.com/brodycj/prettierx

Last synced: 7 days ago
JSON representation

a less opinionated fork of Prettier code formatter

Awesome Lists containing this project

README

        

# prettierX - a less opinionated fork of Prettier

[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE)
[![npm](https://img.shields.io/npm/v/prettierx.svg)](https://www.npmjs.com/package/prettierx)

An unofficial fork of the Prettier code formatter, intended to provide some additional options to help improve consistency with ["Standard JS"](https://standardjs.com/) ([`feross/standard`](https://github.com/standard/standard)) and [`Flet/semistandard`](https://github.com/Flet/semistandard). This fork is an attempt to pick up where [`arijs/prettier-miscellaneous`](https://github.com/arijs/prettier-miscellaneous) left off.

## Major THANKS

**Major thanks** is due to **[@adalinesimonian](https://github.com/adalinesimonian)** for contributions in [PR #603](https://github.com/brodybits/prettierx/pull/603) that enabled updates from Prettier 2.3.2.

## prettierX as a Prettier plugin

[`prettier-plugin-x`](https://www.npmjs.com/package/prettier-plugin-x) - provides the additional formatting options in a prettier plugin

## CLI Usage

**Quick CLI usage:**

```sh
prettierx
```

## Additional prettierX options

- `--align-object-properties` (`alignObjectProperties: true`): Align colons in multiline object literals (not applied with any of the JSON parsers).
- `--offset-ternary-expressions` (`offsetTernaryExpressions: true`): Indent and align ternary expression branches more consistently with "Standard JS" (similar to the corresponding eslint option).
- `--space-before-function-paren` (`spaceBeforeFunctionParen: true`): Put a space before function parenthesis in all declarations (similar to the corresponding eslint option). (Default is to put a space before function parenthesis for untyped anonymous functions only.)
- `--generator-star-spacing` (`generatorStarSpacing: true`): Put spaces around the star (`*`) in generator functions (before and after - similar to the corresponding eslint option). (Default is after only.)
- `--yield-star-spacing` (`yieldStarSpacing: true`): Put spaces around the star (`*`) in `yield*` expressions (before and after - similar to the corresponding eslint option). (Default is after only.)
- `--no-indent-chains` (`indentChains: false`): Disable indents at the start of chained calls.
- `--break-before-else` (`breakBeforeElse: true`): Always add a line break before else.
- --import-formatting (importFormatting: ""): Formatting of import statements, may be `oneline` to avoid conflict with VSCode "Organize Imports" feature.
- `--html-void-tags` (`htmlVoidTags: true`): Format void HTML elements as void tags.
- `--break-long-method-chains` (`breakLongMethodChains: true`): Break method chains with more than 3 method calls, like Prettier 1.x.
- `--array-bracket-spacing` (`arrayBracketSpacing: true`): Put spaces between array brackets (similar to the corresponding eslint option). Status: experimental, with limited testing.
- `--css-paren-spacing` (`cssParenSpacing: true`): Put spaces between parens in CSS, WordPress style. Status: experimental, with limited testing.
- `--computed-property-spacing` (`computedPropertySpacing: true`): Put spaces between computed property brackets (similar to the corresponding eslint option). Status: experimental, with limited testing.",
- `--space-in-parens` (`spaceInParens: true`): Print spaces in between parens, WordPress style (similar to the corresponding eslint option). Not recommended in combination with the default `arrowParens: "always"` option. Status: experimental, with limited testing.
- `--space-unary-ops` (`spaceUnaryOps: true`): Put spaces after unary operator symbols, except in the middle of `!!` (similar to the corresponding eslint option). Status: experimental, with limited testing.
- `--template-curly-spacing` (`templateCurlySpacing: true`): Put spaces between template curly brackets (similar to the corresponding eslint option). Status: experimental, with limited testing.
- `--type-angle-bracket-spacing` (`typeAngleBracketSpacing: true`): Put spaces between type angle brackets. Status: experimental, with limited testing.
- `--type-bracket-spacing` (`typeBracketSpacing: true`): Put spaces between type brackets. Status: experimental, with limited testing.
- `--no-export-curly-spacing` (`exportCurlySpacing: false`): Put or disable spaces between export curly braces.
- `--no-import-curly-spacing` (`importCurlySpacing: false`): Put or disable spaces between import curly braces.
- `--no-object-curly-spacing` (`objectCurlySpacing: false`): Disable spaces between object curly braces (similar to the corresponding eslint option).
- `--no-graphql-curly-spacing` (`graphqlCurlySpacing: false`): Disable spaces between curly braces for GraphQL.
- `--no-yaml-bracket-spacing` (`yamlBracketSpacing: false`): Disable spaces between brackets / curly braces for YAML.
- `--no-type-curly-spacing` (`typeCurlySpacing: false`): Disable spaces between type curly braces.

(See [`docs/options.md`](docs/options.md) for more information.)

## "Standard JS" formatting options

The following options should be used to _format_ the code _as consistently as possible_ with ["Standard JS"](https://standardjs.com/):

- `--arrow-parens avoid` (`arrowParens: "avoid"`)
- `--generator-star-spacing` (`generatorStarSpacing: true`)
- `--space-before-function-paren` (`spaceBeforeFunctionParen: true`)
- `--single-quote` (`singleQuote: true`)
- `--jsx-single-quote` (`jsxSingleQuote: true`)
- `--no-semi` (`semi: false`)
- `--offset-ternary-expressions` (`offsetTernaryExpressions: true`)
- `--yield-star-spacing` (`yieldStarSpacing: true`)
- `--trailing-comma none` (`trailingComma: "none"`)

Note that this tool does **not** follow any of the other ["Standard JS"](https://standardjs.com/) rules. It is recommended to use this tool together with eslint, in some form, to archive correct formatting according to ["Standard JS"](https://standardjs.com/).

Any known conflicts with ["Standard JS"](https://standardjs.com/) will be tracked in [open issues with the `conflict-with-standard` tag](https://github.com/brodybits/prettierx/issues?q=is%3Aissue+label%3Aconflict-with-standard+is%3Aopen).

## some recommended options

- `--arrow-parens avoid` (`arrowParens: "avoid"`), especially in combination with `--space-in-parens` (`spaceInParens: true`).
- `--break-long-method-chains` (`breakLongMethodChains: true`)
- `--offset-ternary-expressions` (`offsetTernaryExpressions: true`)

## options removed

- `--no-align-ternary-lines` - replaced with: `--offset-ternary-expressions`
- `--paren-spacing` - replaced with finer-grained options:
- `--array-bracket-spacing`
- `--css-paren-spacing`
- `--computed-property-spacing`
- `--space-in-parens`
- `--space-unary-ops`
- `--template-curly-spacing`
- `--type-angle-bracket-spacing`
- `--type-bracket-spacing`
- `no-bracket-spacing` - replaced with finer-grained options:
- `--no-export-curly-spacing`
- `--no-import-curly-spacing`
- `--no-object-curly-spacing`
- `--no-graphql-curly-spacing`
- `--no-yaml-bracket-spacing`
- `--no-type-curly-spacing`

### Input

```js
foo(reallyLongArg(), omgSoManyParameters(), IShouldRefactorThis(), isThereSeriouslyAnotherOne());
```

### Output

```js
foo(
reallyLongArg(),
omgSoManyParameters(),
IShouldRefactorThis(),
isThereSeriouslyAnotherOne()
);
```

## Integration with eslint

A couple packages by [@aMarCruz (Alberto Martínez)](https://github.com/aMarCruz):

- [`eslint-plugin-prettierx`](https://www.npmjs.com/package/eslint-plugin-prettierx)
- [`eslint-config-standardized`](https://www.npmjs.com/package/eslint-config-standardize)

---

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md).