ESLint rules for Aurelia projects.
You'll first need to install ESLint:
$ npm i eslint --save-dev
Next, install eslint-plugin-aurelia
:
$ npm install eslint-plugin-aurelia --save-dev
Note: If you installed ESLint globally (using the -g
flag) then you must also install eslint-plugin-aurelia
globally.
Add aurelia
to the plugins section of your .eslintrc
configuration file. You can omit the eslint-plugin-
prefix:
{
"plugins": [
"aurelia"
]
}
Then configure the rules you want to use under the rules section.
{
"rules": {
"aurelia/inject-type": [2, "property"],
"aurelia/inject-matches-ctor": 2,
"aurelia/no-conventions": 0,
"aurelia/no-console-log": 0,
"aurelia/store-subscriptions": [0, {
"setTimeout": true,
"setInterval": true,
"subscribe": true
}],
"aurelia/sort-class-members": [0, {
"order": [
{ "name": "metadata", "type": "method", "static": true },
"[static-properties]",
"[static-methods]",
"[properties]",
{ "name": "inject", "static": true },
"constructor",
"[everything-else]",
"[lifecycle]",
]
}]
}
}
Require that injected dependencies are consistently declared using decorators, static methods, or static properties. Available options: "property"
, "method"
, "decorator"
.
Verify that inject decorators declare the same number of dependencies as the class constructor accepts.
Disallow classes from relying on Aurelia's naming conventions (e.g., FooCustomAttribute
) without explicitly declaring resource types with decorators. It is unsafe to relying on naming conventions in library code because a consuming application may change those conventions.
Suggest that logging code use Aurelia's LogManager
instead of console methods.
Require that the return value of setTimeout
, setInterval
, and subscribe
methods be stored so they can be canceled. It's easy to forget to cancel outstanding timers or intervals and unsubscribe from EventAggregator
or property observation subscriptions when a view is destroyed. Enable this rule to require the return value of those functions to be stored in a property or variable so cleanup is possible.
Enforce consistent ordering of class properties and methods.
This rule delegates to the eslint-plugin-sort-class-members
plugin. Please refer to the documentation for that package for configuration information.
This rule also provides the following groups available for sort order options:
[lifecycle]
: matches Aurelia component and router lifecycle methods in the order in which they occur. E.g.,bind
must come beforedeactivate
.[component-lifecycle]
: matches Aurelia component lifecycle methods in the order in which they occur[router-lifecycle]
: matches Aurelia router lifecycle methods in the order in which they occur