Skip to content

Commit 7a2233d

Browse files
committed
fix: spread syntax crashes in order-in-* rules
And add spread syntax configuration support to these rules.
1 parent 4768303 commit 7a2233d

16 files changed

+76
-9
lines changed

docs/rules/order-in-components.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const rules = {
1010
2,
1111
{
1212
order: [
13+
'spread',
1314
'service',
1415
'property',
1516
'empty-method',

docs/rules/order-in-controllers.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const rules = {
1010
2,
1111
{
1212
order: [
13+
'spread',
1314
'controller',
1415
'service',
1516
'query-params',

docs/rules/order-in-models.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const rules = {
1111
{
1212
// eslint-disable-next-line prettier/prettier
1313
order: [
14+
'spread',
1415
'attribute',
1516
'relationship',
1617
'single-line-function',

docs/rules/order-in-routes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const rules = {
1010
2,
1111
{
1212
order: [
13+
'spread',
1314
'service',
1415
'inherited-property',
1516
'property',

lib/rules/order-in-components.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const reportUnorderedProperties = propOrder.reportUnorderedProperties;
77
const addBackwardsPosition = propOrder.addBackwardsPosition;
88

99
const ORDER = [
10+
'spread',
1011
'service',
1112
'property',
1213
'empty-method',

lib/rules/order-in-controllers.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const reportUnorderedProperties = propOrder.reportUnorderedProperties;
77
const addBackwardsPosition = propOrder.addBackwardsPosition;
88

99
const ORDER = [
10+
'spread',
1011
'controller',
1112
'service',
1213
'query-params',

lib/rules/order-in-models.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,13 @@ const propOrder = require('../utils/property-order');
66
const reportUnorderedProperties = propOrder.reportUnorderedProperties;
77
const addBackwardsPosition = propOrder.addBackwardsPosition;
88

9-
const ORDER = ['attribute', 'relationship', 'single-line-function', 'multi-line-function'];
9+
const ORDER = [
10+
'spread',
11+
'attribute',
12+
'relationship',
13+
'single-line-function',
14+
'multi-line-function',
15+
];
1016

1117
//------------------------------------------------------------------------------
1218
// Organizing - Organize your models

lib/rules/order-in-routes.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const reportUnorderedProperties = propOrder.reportUnorderedProperties;
77
const addBackwardsPosition = propOrder.addBackwardsPosition;
88

99
const ORDER = [
10+
'spread',
1011
'service',
1112
'inherited-property',
1213
'property',

lib/utils/ember.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,12 @@ function isRouteProperty(name) {
473473
}
474474

475475
function isRouteDefaultProp(property) {
476-
return isRouteProperty(property.key.name) && property.key.name !== 'actions';
476+
return (
477+
types.isProperty(property) &&
478+
types.isIdentifier(property.key) &&
479+
isRouteProperty(property.key.name) &&
480+
property.key.name !== 'actions'
481+
);
477482
}
478483

479484
function isControllerProperty(name) {
@@ -490,7 +495,12 @@ function isControllerProperty(name) {
490495
}
491496

492497
function isControllerDefaultProp(property) {
493-
return isControllerProperty(property.key.name) && property.key.name !== 'actions';
498+
return (
499+
types.isProperty(property) &&
500+
types.isIdentifier(property.key) &&
501+
isControllerProperty(property.key.name) &&
502+
property.key.name !== 'actions'
503+
);
494504
}
495505

496506
function getModuleProperties(module) {

lib/utils/property-order.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ const NAMES = {
4242
serialize: 'lifecycle hook',
4343
service: 'service injection',
4444
setupController: 'lifecycle hook',
45+
spread: 'spread property',
4546
unknown: 'unknown property type',
4647
willClearRender: 'lifecycle hook',
4748
willDestroyElement: 'lifecycle hook',
@@ -60,18 +61,18 @@ function determinePropertyType(node, parentType, ORDER) {
6061
return 'controller';
6162
}
6263

63-
if (node.key.name === 'init') {
64+
if (types.isIdentifier(node.key) && node.key.name === 'init') {
6465
return 'init';
6566
}
6667

6768
if (parentType === 'component') {
68-
if (ember.isComponentLifecycleHook(node)) {
69+
if (types.isIdentifier(node.key) && ember.isComponentLifecycleHook(node)) {
6970
return node.key.name;
7071
}
7172
}
7273

7374
if (parentType === 'controller') {
74-
if (node.key.name === 'queryParams') {
75+
if (types.isIdentifier(node.key) && node.key.name === 'queryParams') {
7576
return 'query-params';
7677
} else if (ember.isControllerDefaultProp(node)) {
7778
return 'inherited-property';
@@ -131,6 +132,10 @@ function determinePropertyType(node, parentType, ORDER) {
131132
return 'method';
132133
}
133134

135+
if (node.type === 'ExperimentalSpreadProperty') {
136+
return 'spread';
137+
}
138+
134139
return 'unknown';
135140
}
136141

@@ -166,7 +171,7 @@ function getNodeKeyName(node) {
166171

167172
function getName(type, node) {
168173
let prefix;
169-
if (!node.computed && type !== 'actions' && type !== 'model') {
174+
if (!node.computed && type !== 'actions' && type !== 'model' && type !== 'spread') {
170175
prefix = getNodeKeyName(node);
171176
}
172177

0 commit comments

Comments
 (0)