kategengler / eslint-plugin-ember

An ESlint plugin that provides set of rules for Ember Applications based on commonly known good practices.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

eslint-plugin-ember

NPM version NPM downloads Build Status

An ESlint plugin that provides set of rules for Ember Applications based on commonly known good practices.

❗️Requirements

🚀 Usage

1. Install plugin

yarn add --dev eslint-plugin-ember

Or

npm install --save-dev eslint-plugin-ember

2. Modify your .eslintrc.js

// .eslintrc.js
module.exports = {
  plugins: [
    'ember'
  ],
  extends: [
    'eslint:recommended',
    'plugin:ember/recommended' // or other configuration
  ],
  rules: {
    // override rule settings here
    'ember/no-jquery': 'error'
  }
}

🧰 Configurations

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 ⚠️ as rules may be added and removed until the final ruleset is settled upon.

🍟 Rules

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.

Best Practices

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-controllers disallow non-essential controllers
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

Ember Object

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

Possible Errors

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

Ember Octane

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

Ember Data

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

Testing

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

Stylistic Issues

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.

🍻 Contribution guide

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.

⭐️ Contributors

🙌 Credits

🔓 License

See the LICENSE file for license rights and limitations (MIT).

About

An ESlint plugin that provides set of rules for Ember Applications based on commonly known good practices.

License:MIT License


Languages

Language:JavaScript 100.0%