Fork of eslint rule that sorts keys in objects (https://eslint.org/docs/rules/sort-keys) with extra features
npm install eslint-plugin-sort-keys-plusFork of eslint rule that sorts keys in objects (https://eslint.org/docs/rules/sort-keys) with autofix enabled
You'll first need to install ESLint:
```
$ npm i eslint --save-dev
Next, install eslint-plugin-sort-keys-plus:
``
$ npm install eslint-plugin-sort-keys-plus --save-dev
Note: If you installed ESLint globally (using the -g flag) then you must also install eslint-plugin-sort-keys-plus globally.
Add sort-keys-plus to the plugins section of your .eslintrc configuration file. You can omit the eslint-plugin- prefix:
`json`
{
"plugins": [
"sort-keys-plus"
]
}
Then add sort-keys-plus rule under the rules section.
`json`
{
"rules": {
"sort-keys-plus/sort-keys": "warn"
}
}
Often it makes sense to enable sort-keys-plus only for certain files/directories. For cases like that, use override key of eslint config:
`jsonc`
{
"rules": {
// ...
},
"overrides": [
{
"files": ["src/alphabetical.js", "bin/.js", "lib/.js"],
"rules": {
"sort-keys-plus/sort-keys-plus": "warn"
}
}
]
}
In some cases, there should be a specific order for some properties of an
object, such as with mongodb aggregations. For that, use the override key of
the configuration:
`json`
{
"rules": {
"sort-keys-plus/sort-keys": ["warn", "asc", {
"overrides": [
{
"properties": ["$lookup"],
"order": ["from", "localField", "foreignField", "as"]
}
]
}]
}
}
For available config options, see official sort-keys reference. All options supported by sort-keys are supported by sort-keys-plus.
`json`
{
"sort-keys-shorthand/sort-keys-shorthand": [
"error",
"asc",
{
"caseSensitive": true,
"minKeys": 2,
"natural": false,
"ignoreSingleLine": false,
"allCaps": "ignore",
"shorthand": "ignore",
"overrides": [],
}
]
}
Additional properties that can be set in the 2nd option object supported are as follows:
- ignoreSingleline - if true, this rule is ignored on single line objects. Default is false.allCaps
- handling for ALL_CAPS propertiesignore
- no rules for all capsfirst
- all caps properties must be firstlast
- all caps properties must be lastshorthand
- handling for shorthand propertiesignore
- no rules for shorthandsfirst
- shorthand properties must be firstlast
- shrothand properties must be last
shorthand is checked after allCaps, so ALL_CAPS will be before shorthand when both are 'first'.
- overrides allows custom orders for specific sets of keys, or sub-objects with a specific parent key. See below for configuration.
Examples of incorrect code for the {ignoreSingleLine: true} option:
`js`
/eslint sort-keys-plus/sort-keys: ["error", "asc", {ignoreSingleLine: true}]/
/eslint-env es6/
let obj = {
e: 1,
c: 3,
C: 4,
b: 2
};
Examples of correct code for the {ignoreSingleLine: true} option:
`js`
/eslint sort-keys-plus/sort-keys: ["error", "asc", {ignoreSingleLine: true}]/
/eslint-env es6/
let obj = { e: 1, b: 2, c: 3, C: 4 };
Examples of incorrect code for the {allCaps: 'first'} option:
`js`
/eslint sort-keys-plus/sort-keys: ["error", "asc", {allCaps: 'first'}]/
/eslint-env es6/
let obj = {
a: 1,
B_CONSTANT: 2, // not sorted correctly (should be 1st key)
c: 3,
d: 4
};
Examples of correct code for the {allCaps: 'first'} option:
`js`
/eslint sort-keys-plus/sort-keys: ["error", "asc", {allCaps: 'first'}]//
/eslint-env es6/
let obj = {
B_CONSTANT: 2,
a: 1,
c: 3,
};
Examples of incorrect code for the {shorthand: 'first'} option:
`js`
/eslint sort-keys-plus/sort-keys: ["error", "asc", {shorthand: 'first'}]/
/eslint-env es6/
const b = 2;
let obj = {
a: 1,
b, // not sorted correctly (should be 1st key)
c: 3,
d: 4
};
Examples of correct code for the {shorthand: 'first'} option:
`js`
/eslint sort-keys-plus/sort-keys: ["error", "asc", {shorthand: 'first'}]//
/eslint-env es6/
const b = 2;
let obj = {
b,
a: 1,
c: 3,
};
Configuration:
`jsontitle
"overrides": [
{
"order": ["title", "description"],
"message": " should be before description",`
},
{
"properties": ["anyOrder"],
"ignore": true
}
],
* order define the property keys that should be orderedignore
* allow any property key orderesquery
* define an esquery filter which must match the target object for this override to applyproperties
* define parent property key for this rule. Equivalent to esquery: 'Property:is([key.name=property1], [key.name=property2]) > .value';esquery
* If neither or properties are not provided, the override will apply to all objects with a subset of the keys in ordermessage
* optional custom message when the rule is violated
Examples of incorrect code for the {overrides: [{order: ['b', 'a', 'd']}]} option:
`js`
/eslint sort-keys-plus/sort-keys: ["error", "asc", {overrides: [{order: ['b', 'a', 'd']}]}]/
/eslint-env es6/
let obj = {
a: 1,
b: 2, // not sorted correctly (should be 1st key)
d: 4
};
Examples of correct code for the {overrides: [{order: ['b', 'a', 'd']}]} option:
`js`
/eslint sort-keys-plus/sort-keys: ["error", "asc", {overrides: [{order: ['b', 'a', 'd']}]}]/
/eslint-env es6/
let obj = {
b: 2,
a: 1,
d: 4
};
// has additional properties
let obj = {
a: 1,
b: 2,
c: 3,
d: 4
};
Examples of incorrect code for the {overrides: [{esquery: 'Property[key.name=a] > .value', order: ['b', 'a', 'd']}]} or {overrides: [{properties: ['a'], order: ['b', 'a', 'd']}]} option:
`js`
/eslint sort-keys-plus/sort-keys: ["error", "asc", {overrides: [{properties: ['a'], order: ['b', 'a', 'd']}]}]/
/eslint-env es6/
let obj = { a:
{
a: 1,
b: 2, // not sorted correctly (should be 1st key)
c: 3,
d: 4 // not sorted correctly (should be 3rd key)
};
Examples of correct code for the {overrides: [{esquery: 'Property[key.name=a] > .value', order: ['b', 'a', 'd']}]} or {overrides: [{properties: ['a'], order: ['b', 'a', 'd']}]} option:
`js``
/eslint sort-keys-plus/sort-keys: ["error", "asc", {overrides: [{overrides: [{properties: ['a'], order: ['b', 'a', 'd']}]}/
/eslint-env es6/
let obj = {
b: 2,
a: 1,
d: 4,
c: 3
};