@codeyourfuture/eslint-config-standard
v5.1.0
Published
A standard ESLint configuration for all CYF examples/projects.
Downloads
362
Readme
CYF ESLint Configuration
A standard ESLint configuration for all CYF examples/projects.
Versioning
This configuration uses SemVer, interpreted as follows:
Patch release (
x.y.z
->x.y.z+1
): bugfixes and tooling updates mean that code that previously passed linting should continue to pass after the update.Minor release (
x.y.z
->x.y+1.0
): a change to an existing rule means that code that previously failed linting may now pass, or a new configuration means that code that previously passed linting should continue to pass.Major release (
x.y.z
->x+1.0.0
): a new rule, or a change to an existing rule, means that code that previously passed linting will not pass any more.
Please bear these definitions in mind when reporting any bugs.
Usage
Install this package along with ESLint itself:
npm install --save-dev eslint @codeyourfuture/eslint-config-standard
Then create an ESLint config file and add this config:
const cyfConfig = require("@codeyourfuture/eslint-config-standard");
module.exports = [cyfConfig];
or using ES module syntax:
import cyfConfig from "@codeyourfuture/eslint-config-standard";
export default [cyfConfig];
Alternatively, for a slightly more permissive set of rules, you can use @codeyourfuture/eslint-config-standard/lax
.
.eslintrc
If you have not yet migrated to the newer ESLint "flat config", you can apply these rules to the deprecated config using "extends"
:
{
"extends": ["@codeyourfuture/standard"]
}
Principles
- Errors only - don't teach trainees to ignore any output, all rules should either be
"error"
or"off"
- Maximise consistency - where there are options (e.g. braces for single-line statements, parentheses around arrow function parameters), be consistent with the non-optional cases
- Minimise change set size - keep commits small so trainees can focus on the important changes
Rules
This config starts from js.configs.recommended
then adds the following rules:
| Configuration| Rule | Setting | Principles/rationale |
|---|---|---|---|
| standard, lax | arrow-parens | | 2, 3 |
| standard, lax | brace-style | "1tbs", { "allowSingleLine": false }
| |
| standard, lax | comma-dangle | "always-multiline"
| 3 |
| standard, lax | curly | | 2 |
| standard | indent | "tab", { "SwitchCase": 1 }
| Tabs are more accessible |
| standard | linebreak-style | "unix"
| |
| standard, lax | no-trailing-spaces | | |
| standard, lax | no-unused-vars | { "ignoreRestSiblings": true }
| |
| standard, lax | no-var | | Stick with let
and const
for more predictable behaviour |
| standard, lax | object-curly-spacing | "always"
| |
| standard, lax | operator-linebreak | "before"
| |
| standard, lax | quotes | "double", { "avoidEscape": true, "allowTemplateLiterals": false }
| More likely to need '
inside a string than "
|
| standard, lax | semi | | Trainees shouldn't have to memorise the ASI rules |
Development
You can clone this repo and run npm install
to install the development dependencies. Two scripts are provided:
lint
: uses the version of ESLint installed as a dev dependency to lintindex.js
against its own rules.test:examples
: runsbin/examples.sh
to test the configuration against thepass.js
andfail.js
examples inexamples/
.pass.js
contains code that should pass linting according to the configuration,fail.js
contains code that should fail linting.test:install
: runsbin/test.sh
to create a package, installs ESLint (version defined by the required environment variableESLINT_VERSION
) and the current version of this configuration, then checks that there are no version conflicts and lintsindex.js
. E.g.ESLINT_VERSION=6 npm run test
will test that this configuration works with the latest version of ESLint 6.