An ESlint plugin that provides set of rules for Ember Applications based on commonly known good practices.
- ESLint is required to use this plugin.
- Rules provided by this plugin should be runnable under latest stable, v4 LTS and v6 LTS Node.js versions.
npm install --save-dev eslint-plugin-ember
// .eslintrc.js
module.exports = {
plugins: [
'ember'
],
extends: [
'eslint:recommended',
'plugin:ember/recommended'
],
rules: {
// override rules' settings here
}
}
Possible configurations:
- plugin:ember/base - contains only recommended settings for custom rules defined in this plugin.
- plugin:ember/recommended - extends base configuration with extra rules' settings provided by eslint
If you don't want to use predefined settings, you can use it as a plain plugin and choose which rules you'd like to use by yourself like this:
module.exports = {
plugins: [
'ember'
],
extends: [
'eslint:recommended'
],
rules: {
// add rules' settings here, eg.:
'ember/local-modules': 2
}
}
All rules from this plugin have to be prefixed with ember/
Rules are grouped by category to help you understand their purpose.
All rules below with a check mark ✅ are enabled by default while using plugin:ember/base
or plugin:ember/recommended
configs.
The --fix
option on the command line automatically fixes problems reported by rules which have a wrench 🔧 below.
Rule ID | Description | |
---|---|---|
✅ | alias-model-in-controller | Enforces aliasing model in controller |
Rule ID | Description | |
---|---|---|
✅ | avoid-leaking-state-in-components | Avoids state leakage |
✅ | closure-actions | Enforces usage of closure actions |
✅ | no-attrs-snapshot | Disallow use of attrs snapshot in didReceiveAttrs and didUpdateAttrs |
✅ | no-on-calls-in-components | Prevents usage of on calls in components |
Rule ID | Description | |
---|---|---|
✅ | jquery-ember-run | Prevents usage of jQuery without Ember Run Loop |
local-modules | Enforces usage of local modules | |
✅ | named-functions-in-promises | Enforces usage of named functions in promises |
new-module-imports | Use "New Module Imports" from Ember RFC #176 | |
no-attrs-in-components | Disallow usage of this.attrs in components | |
no-duplicate-dependent-keys | Disallow repeating dependent keys | |
✅ | no-function-prototype-extensions | Prevents usage of Ember's function prototype extensions |
no-global-jquery | Prevents usage of global jQuery object | |
✅ | no-observers | Prevents usage of observers |
🔧 | no-old-shims | Prevents usage of old shims for modules |
✅ | no-side-effects | Warns about unexpected side effects in computed properties |
require-super-in-init | Enforces super calls in init hooks | |
✅ | use-brace-expansion | Enforces usage of brace expansion |
✅🔧 | use-ember-get-and-set | Enforces usage of Ember.get and Ember.set |
Rule ID | Description | |
---|---|---|
✅ | no-capital-letters-in-routes | Raise an error when there is a route with uppercased letters in router.js |
✅ | routes-segments-snake-case | Enforces usage of snake_cased dynamic segments in routes |
Rule ID | Description | |
---|---|---|
✅ | no-empty-attrs | Prevents usage of empty attributes in ember data models |
Rule ID | Description | |
---|---|---|
no-jquery | Disallow any usage of jQuery |
Rule ID | Description | |
---|---|---|
✅ | order-in-components | Enforces proper order of properties in components |
✅ | order-in-controllers | Enforces proper order of properties in controllers |
✅ | order-in-models | Enforces proper order of properties in models |
✅ | order-in-routes | Enforces proper order of properties in routes |
For the simplified list of rules, go here.
In order to add a new rule, you should:
- Create issue on GH with description of proposed rule
- Generate a new rule using the official yeoman generator
- Run
yarn start
- Write test scenarios & implement logic
- Describe the rule in the generated
docs
file - Make sure all tests are passing
- Run
yarn run update
in order to update readme and recommended configuration - Create PR and link created issue in description
Please be aware that we're using yarn
in this repository, so if you plan to add some dependencies - make sure you commit yarn.lock
file too.
If you have any suggestions, ideas or problems feel free to add new issue, but first please make sure your question does not repeat previous ones.
- Michał Sajnóg
- Rafał Leszczyński
- Adrian Zalewski
- Kamil Ejsymont
- Casey Watts
- Steve Gargan
- Alex LaFroscia
- Tobias Bieniek
- Robert Wagner
- DockYard team - for great inspiration with their styleguide
- Rob Hilgefort - for making it possible to redeploy new plugin under existing
eslint-plugin-ember
package name
See the LICENSE file for license rights and limitations (MIT).