An ESlint plugin that provides set of rules for Ember Applications based on commonly known good practices.
yarn add --dev eslint-plugin-ember
Or
npm install --save-dev eslint-plugin-ember
// .eslintrc.js
module.exports = {
plugins: [
'ember'
],
extends: [
'eslint:recommended',
'plugin:ember/recommended' // or other configuration
],
rules: {
// override rule settings here
'ember/no-jquery': 'error'
}
}
Name | Description | |
---|---|---|
base | contains no rules settings, but the basic eslint configuration suitable for any ember project. You can use it to configure rules as you wish. | |
β | recommended | extends the base configuration by enabling the recommended rules. |
π | octane | extends the recommended configuration by enabling octane rules. This ruleset is currently considered unstable and experimental |
Rules are grouped by category to help you understand their purpose.
Each rule has emojis denoting what configuration it belongs to and/or a π§ if the rule is fixable via the --fix
command line option.
Rule ID | Description | |
---|---|---|
alias-model-in-controller | enforce aliasing model in controllers | |
β | avoid-using-needs-in-controllers | disallow using needs in controllers |
β | closure-actions | enforce usage of closure actions |
named-functions-in-promises | enforce usage of named functions in promises | |
β | new-module-imports | enforce using "New Module Imports" from Ember RFC #176 |
β | no-function-prototype-extensions | disallow usage of Ember's function prototype extensions |
π | no-get-with-default | disallow usage of the Ember's getWithDefault function |
ππ§ | no-get | require using ES5 getters instead of Ember's get / getProperties functions |
β | no-global-jquery | disallow usage of global jQuery object |
π | no-jquery | disallow any usage of jQuery |
β | no-new-mixins | disallow the creation of new mixins |
β | no-observers | disallow usage of observers |
β π§ | no-old-shims | disallow usage of old shims for modules |
β | no-on-calls-in-components | disallow usage of on to call lifecycle hooks in components |
β | no-restricted-resolver-tests | disallow the use of patterns that use the restricted resolver in tests |
no-unnecessary-index-route | disallow unnecessary index route definition |
|
β π§ | no-unnecessary-route-path-option | disallow unnecessary usage of the route path option |
π§ | no-unnecessary-service-injection-argument | disallow unnecessary argument when injecting services |
β | no-volatile-computed-properties | disallow volatile computed properties |
π§ | require-computed-macros | require using computed property macros when possible |
route-path-style | enforce usage of kebab-case (instead of snake_case or camelCase) in route paths | |
π§ | use-ember-get-and-set | enforce usage of Ember.get and Ember.set |
Rule ID | Description | |
---|---|---|
β | avoid-leaking-state-in-ember-objects | disallow state leakage |
π | classic-decorator-hooks | enforce using correct hooks for both classic and non-classic classes |
π | classic-decorator-no-classic-methods | disallow usage of classic APIs such as get /set in classes that aren't explicitly decorated with @classic |
computed-property-getters | enforce the consistent use of getters in computed properties | |
no-proxies | disallow using array or object proxies |
Rule ID | Description | |
---|---|---|
β | jquery-ember-run | disallow usage of jQuery without an Ember run loop |
β | no-arrow-function-computed-properties | disallow arrow functions in computed properties |
β | no-attrs-in-components | disallow usage of this.attrs in components |
β | no-attrs-snapshot | disallow use of attrs snapshot in the didReceiveAttrs and didUpdateAttrs hooks |
β | no-capital-letters-in-routes | disallow routes with uppercased letters in router.js |
β | no-deeply-nested-dependent-keys-with-each | disallow usage of deeply-nested computed property dependent keys with @each |
β | no-duplicate-dependent-keys | disallow repeating computed property dependent keys |
β π§ | no-ember-super-in-es-classes | disallow use of this._super in ES class methods |
β | no-ember-testing-in-module-scope | disallow use of Ember.testing in module scope |
β | no-incorrect-calls-with-inline-anonymous-functions | disallow inline anonymous functions as arguments to debounce , once , and scheduleOnce |
β | no-invalid-debug-function-arguments | disallow usages of Ember's assert() / warn() / deprecate() functions that have the arguments passed in the wrong order. |
β | no-side-effects | disallow unexpected side effects in computed properties |
π§ | require-computed-property-dependencies | require dependencies to be declared statically in computed properties |
β | require-return-from-computed | disallow missing return statements in computed properties |
β | require-super-in-init | require this._super to be called in init hooks |
β | routes-segments-snake-case | enforce usage of snake_cased dynamic segments in routes |
Rule ID | Description | |
---|---|---|
π | no-actions-hash | disallow the actions hash in components, controllers, and routes |
π | no-classic-classes | disallow "classic" classes in favor of native JS classes |
π | no-classic-components | enforce using Glimmer components |
π | no-computed-properties-in-native-classes | disallow using computed properties in native classes |
π | require-tagless-components | disallow using the wrapper element of a component |
Rule ID | Description | |
---|---|---|
no-empty-attrs | disallow usage of empty attributes in Ember Data models | |
π§ | use-ember-data-rfc-395-imports | enforce usage of @ember-data/ packages instead ember-data |
Rule ID | Description | |
---|---|---|
no-pause-test | disallow usage of the pauseTest helper in tests |
|
no-test-and-then | disallow usage of the andThen test wait helper |
|
no-test-import-export | disallow importing of "-test.js" in a test file and exporting from a test file | |
no-test-module-for | disallow usage of moduleFor , moduleForComponent , etc |
Rule ID | Description | |
---|---|---|
π§ | order-in-components | enforce proper order of properties in components |
π§ | order-in-controllers | enforce proper order of properties in controllers |
π§ | order-in-models | enforce proper order of properties in models |
π§ | order-in-routes | enforce proper order of properties in routes |
β | use-brace-expansion | enforce usage of brace expansion in computed property dependent keys |
For the simplified list of rules, go here.
In order to add a new rule, you should:
- Create an issue on GitHub 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
If you have any suggestions, ideas, or problems feel free to create an issue, but first please make sure your question does not repeat previous ones.
- Adrian Zalewski
- Alex LaFroscia
- Bryan Mishkin
- Casey Watts
- Jacek Bandura
- Kamil Ejsymont
- MichaΕ SajnΓ³g
- RafaΕ LeszczyΕski
- Robert Wagner
- Steve Gargan
- Tobias Bieniek
- 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).