🔧 This rule is automatically fixable by the --fix CLI option.
Note: this rule will not be added to the recommended configuration because it enforces an opinionated, stylistic preference.
| Name | Type |
|---|---|
order |
Array |
const rules = {
'ember/order-in-models': [
2,
{
order: ['spread', 'attribute', 'relationship', 'single-line-function', 'multi-line-function'],
},
],
};If you want some of properties to be treated equally in order you can group them into arrays, like so:
order: ['attribute', 'relationship', ['single-line-function', 'multi-line-function']];If you would like to specify ordering for a property type that is not listed, you can use the custom property syntax custom:myPropertyName in the order list to specify where the property should go.
You can find the full list of properties in property-order.js.
You should write code grouped and ordered in this way:
- Attributes
- Relations
- Single line computed properties
- Multiline computed properties
- Other structures (custom methods etc.)
This rule checks ordering only; it does not enforce indentation or other whitespace formatting.
// GOOD
export default Model.extend({
// 1. Attributes
shape: attr('string'),
// 2. Relations
behaviors: hasMany('behaviour'),
// 3. Computed Properties
mood: computed('health', 'hunger', function () {
const result = this.health * this.hunger;
return result;
}),
});// BAD
export default Model.extend({
mood: computed('health', 'hunger', function () {
const result = this.health * this.hunger;
return result;
}),
hat: attr('string'),
behaviors: hasMany('behaviour'),
shape: attr('string'),
});