Skip to content

Commit

Permalink
Merge pull request #8 from npetruzzelli/develop
Browse files Browse the repository at this point in the history
Merge v3.0.0 from Develop into Master
  • Loading branch information
npetruzzelli authored Jun 18, 2019
2 parents 0f41fe2 + 594bafd commit 99a8137
Show file tree
Hide file tree
Showing 16 changed files with 259 additions and 104 deletions.
13 changes: 11 additions & 2 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ root = true

[*]

# change these settings to your own preference
# General Settings: change these as needed
indent_style = space
indent_size = 2

# we recommend you to keep these unchanged
# keep these unchanged
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
Expand All @@ -23,3 +23,12 @@ trim_trailing_whitespace = false
[{package,bower}.json]
indent_style = space
indent_size = 2

# Force JavaScript settings to match ESLint rules
[*.js]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
35 changes: 1 addition & 34 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,34 +1 @@
const _ = { merge: require('lodash.merge') }
const prettierConfig = _.merge(
{},
require('./lib/base').rules['prettier/prettier'][1]
)

module.exports = {
extends: [
'./lib/prettier-standard.js'
],
overrides: [
{
files: [
'lib/**/*.js'
],
rules:{
/* Force double quotes to make it easier to copy the source JavaScript into
* JSON files
*/
quotes: ['error', 'double'],
'prettier/prettier': [
'error',
_.merge(
{},
prettierConfig,
{
'singleQuote': false
}
)
]
}
}
]
}
module.exports = require('./prettier-file')
2 changes: 2 additions & 0 deletions .npmignore
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@
# ------------------------------------------------------------------------------
.editorconfig
.eslintrc.js
.gitattributes
.gitignore
# ==============================================================================


Expand Down
2 changes: 2 additions & 0 deletions .prettierrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// Use the same configuration that we expose to users for our own formatting.
module.exports = require('./prettierrc.js')
213 changes: 184 additions & 29 deletions README.markdown
Original file line number Diff line number Diff line change
@@ -1,24 +1,29 @@
# eslint-config-prettier-standard

An ESLint [shareable config](http://eslint.org/docs/developer-guide/shareable-configs) for projects using **Prettier** and **JavaScript Standard Style** as ESLint rules.
An ESLint [shareable config](http://eslint.org/docs/developer-guide/shareable-configs)
for projects using **Prettier** and **JavaScript Standard Style** as ESLint
rules.

## Installation

### One Line Installation
These instructions assume that you've already installed ESLint
(`npm install --save-dev eslint`).

### Two Line Installation

```
npm install --save-dev eslint-config-prettier-standard eslint eslint-config-prettier eslint-config-standard eslint-plugin-import eslint-plugin-node eslint-plugin-promise eslint-plugin-standard eslint-plugin-prettier prettier
npm install --save-dev eslint-config-prettier eslint-config-prettier-standard eslint-config-standard eslint-plugin-import eslint-plugin-node eslint-plugin-prettier eslint-plugin-promise eslint-plugin-standard prettier-config-standard
npm install --save-dev --save-exact prettier
```

### Line By Line Installation

Install the peer dependencies:

```
npm install --save-dev eslint
npm install --save-dev eslint-config-prettier
npm install --save-dev eslint-config-standard eslint-plugin-import eslint-plugin-node eslint-plugin-promise eslint-plugin-standard
npm install --save-dev eslint-plugin-prettier prettier
npm install --save-dev eslint-config-standard eslint-plugin-standard eslint-plugin-promise eslint-plugin-import eslint-plugin-node
npm install --save-dev eslint-plugin-prettier eslint-config-prettier prettier-config-standard
npm install --save-dev --save-exact prettier
```

Then install eslint-config-prettier-standard:
Expand All @@ -30,7 +35,12 @@ npm install --save-dev eslint-config-prettier-standard
<details>
<summary>Peer Dependencies</summary>

**eslint-config-prettier-standard** has three peer dependencies ([**eslint-config-prettier**](https://github.com/prettier/eslint-config-prettier), [**eslint-config-standard**](https://github.com/standard/eslint-config-standard) and [**eslint-plugin-prettier**](https://github.com/prettier/eslint-plugin-prettier)). Each of which have their own peer dependencies.
**eslint-config-prettier-standard** has four peer dependencies:
[**eslint-config-prettier**](https://github.com/prettier/eslint-config-prettier),
[**eslint-config-standard**](https://github.com/standard/eslint-config-standard),
[**eslint-plugin-prettier**](https://github.com/prettier/eslint-plugin-prettier),
and [**prettier-config-standard**](https://github.com/npetruzzelli/prettier-config-standard).
Some of which have their own peer dependencies.

| Descendant `peerDependency` | depended upon by |
| --------------------------- | ------------------------ |
Expand All @@ -43,10 +53,13 @@ npm install --save-dev eslint-config-prettier-standard

</details>

## Setup
## Usage

Once you've finished installation, add eslint-config-prettier-standard to the "extends" array in your `.eslintrc.*` file. Make sure to put it last, so that it gets the chance to override other configs.
**Basic Use**

Once you've finished installation, add eslint-config-prettier-standard to the
"extends" array in your ESLint configuration. Make sure to put it last, so that
it gets the chance to override other configs that could conflict with Prettier.

```json
{
Expand All @@ -56,42 +69,184 @@ Once you've finished installation, add eslint-config-prettier-standard to the "e
}
```

If you are making a custom configuration that absolutely must extend a different configuration between Standard and Prettier, you can extend the base configuration instead.
<details>
<summary>Advanced Use</summary>

### Extending The Base Configuration.

If you are making a custom configuration that absolutely must extend a different
configuration between Standard and Prettier, you can extend the base
configuration instead.

```json
{
"extends": [
"prettier-standard/lib/base",
"prettier-standard/eslint-file-base",
"foo",
"bar",
"prettier",
"prettier/standard"
"prettier-standard/end"
]
}
```

## Extending Prettier
_`prettier-standard/eslint-file-base` is available for those configuring
Prettier through its own configuration files. See "Partial Configurations" for
possible options._

Prettier is a single rule, so the entire configuration object gets overridden when you extend `prettier/prettier`. See [**eslint-plugin-prettier**](https://github.com/prettier/eslint-plugin-prettier) to see a complete list of options available to you. Any options you don't provide will fallback to the plugin's defaults for that option.
### Other Prettier Configurations

You will have to redefine all Prettier options if you want to change any part of Prettier until if/when the plugin supports individual rules.
**eslint-config-prettier** comes with a number of additional configurations. To
use them, extend them after "prettier-standard".

<details>
<summary>Hypothetical Example</summary>

If the plugin were to support multiple rules in the future, they might look like this:

- `prettier/bracketSpacing`
- `prettier/jsxBracketSameLine`
- `prettier/printWidth`
- `prettier/semi`
- `prettier/singleQuote`
- `prettier/tabWidth`
- `prettier/trailingComma`
- `prettier/useTabs`
```json
{
"extends": [
"prettier-standard",
"prettier/flowtype",
"prettier/react"
]
}
```

_These configurations disable rules provided by their respective plugins that
could conflict with Prettier. Configurations like this that are provided by
other modules should be placed after "prettier-standard" for consistent and
expect behavior._
</details>

## Available Configurations

There are two ways to use this configuration. Each option describes how or where
Prettier will be configured.


### `eslint-file`

**`prettier-standard/eslint-file`** is the default configuration, and it can be
referenced with just **`prettier-standard`**. It is effectively the same
configuration used by this configuration prior to version 3.

It combines the `prettier-standard/eslint-file-base` and `prettier-standard/end`
partial configurations to create a complete configuration.

```diff
Prettier's configuration will be included in the ESLint configuration.
+ You don't need to worry about a seperate file or property for configuring Prettier
- Extending Prettier options is a little more complex.
- Prettier used for other file types (such as stylesheets or HTML) will need to be configured seperately.
```

```jsonc
{
"extends": [
"prettier-standard"

// EFFECTIVELY THE SAME AS:
// "prettier-standard/eslint-file"
]
}
```


### `prettier-file`

**`prettier-standard/prettier-file`** combines the
`prettier-standard/prettier-file-base` and `prettier-standard/end` partial
configurations to create a complete configuration.

```diff
Prettier is expected to be configured in its own file
+ Extending Prettier options is more simple.
+ Keeps multiple Prettier workflows consistent by configuring it in one location.
- One additional file to setup
```

- See Prettier's documentation on the
[Configuration File](https://prettier.io/docs/en/configuration.html) to
learn more.
- We expose a reference to the Prettier configuration for ease of
modification. See "partial configurations" for more information.


```jsonc
// .eslintrc.json
{
"extends": [
"prettier-standard/prettier-file"
]
}
```

```jsonc
// .prettierrc.json
"prettier-config-standard"
```

### Why Configure Prettier In A Seperate File?

- To make tooling in build systems and IDEs more consistent and to make
Prettier options easier to extend.
- Prettier is used for more than just JavaScript. Configuring it once in a
standard location and letting the tools find it makes maintainence easier
and reduces confusion. It doesn't make sense to maintain a configuration for
ESLint, then again for Stylelint, and again for whatever other language you
may be using Prettier with.


## Partial Configurations

These are provided as a convenience to aid with extending configurations.

- **eslint-config-prettier-standard/prettierrc**: The Prettier configuration
as an object. Since this won't be used in the context of ESLint's "extends",
the complete module name must be used. This partial configuration is
provided for anyone who absolutely must be certain that they are using the
same version of the Prettier config that this ESLint config can resolve and
consume.

_In most cases, importing `prettier-config-standard` directly is recommended._
- **prettier-standard/base**: Extends the JavaScript Standard Style shareable
config and includes the Prettier plugin.
- **prettier-standard/end**: This kicks of the last of the shareable configs
you should be using. Disables conflicting ESLint rules (Including those from
the JavaScript Standard Style plugin) by extending the Prettier shareable
configs.
- **prettier-standard/eslint-file-base**: Extends `prettier-standard/base`.
Sets the `prettier/prettier` ESLint rule to "error", reads
`prettier-standard/prettierrc`, and passes it as the configuration for the
`prettier/prettier` ESLint rule.
- **prettier-standard/prettier-file-base**: Extends `prettier-standard/base`.
Sets the `prettier/prettier` rule to "error".


## Extending The Configuration

Extending ESLint rules works normally, but extending Prettier can range from
simple to complex, depending on how many shareable Prettier configurations you
are working with and what you are trying to accomplish.

All Prettier options count as a single ESLint `prettier/prettier` rule
configuration, so they can not be individually extended.

All of your shareable Prettier configurations need to be imported, extended in
the proper order, modified as you desire, and then you export the combined
configuration.

The following references may be helpful:

- [Extending Shared Configurations](https://github.com/npetruzzelli/prettier-config-standard#extending-shared-configurations)
from **prettier-config-standard**
- [Sharing configurations](https://prettier.io/docs/en/configuration.html#sharing-configurations)
from Prettier's documentation on the "Configuration File".


## Deprecated

Use of resources in the `lib` directory is deprecated. These resources will be
deleted in a future major release.


## "BSD-3-Clause" License

- [LICENSE](LICENSE)
Expand Down
4 changes: 4 additions & 0 deletions base.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module.exports = {
plugins: ['prettier'],
extends: ['standard']
}
3 changes: 3 additions & 0 deletions end.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = {
extends: ['prettier', 'prettier/standard']
}
8 changes: 8 additions & 0 deletions eslint-file-base.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
const prettierConfig = require('./prettierrc.js')

module.exports = {
extends: ['./base.js'],
rules: {
'prettier/prettier': ['error', prettierConfig]
}
}
3 changes: 3 additions & 0 deletions eslint-file.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = {
extends: ['./eslint-file-base.js', './end.js']
}
1 change: 1 addition & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = require('./eslint-file')
Loading

0 comments on commit 99a8137

Please sign in to comment.