src/content/docs/assist/actions/use-sorted-keys.mdx
import { Tabs, TabItem } from '@astrojs/starlight/components'; import EditorAction from "@/components/EditorAction.astro";
<Tabs> <TabItem label="JSON (and super languages)" icon="seti:json"> ## Summary - Rule available since: `v1.9.0` - Diagnostic Category: [`assist/source/useSortedKeys`](/reference/diagnostics#diagnostic-category) - Sources: - Same as [`json/sort-keys`](https://github.com/eslint/json/blob/main/docs/rules/sort-keys.md)## Description
Sort the keys of a JSON object in natural order.
[Natural order](https://en.wikipedia.org/wiki/Natural_sort_order) means
that uppercase letters come before lowercase letters (e.g. `A` < `a` <
`B` < `b`) and numbers are compared in a human way (e.g. `9` < `10`).
## Examples
```json
{
"vase": "fancy",
"nested": {
"omega": "bar",
"alpha": "foo"
}
}
This actions accepts following options
sortOrderThis options supports natural and lexicographic values. Where as natural is the default.
Following will apply the natural sort order.
{
"assist": {
"actions": {
"source": {
"useSortedKeys": {
"options": {
"sortOrder": "natural"
}
}
}
}
}
}
{
"val13": 1,
"val1": 1,
"val2": 1,
"val21": 1,
"val11": 1
}
Following will apply the lexicographic sort order.
{
"assist": {
"actions": {
"source": {
"useSortedKeys": {
"options": {
"sortOrder": "lexicographic"
}
}
}
}
}
}
{
"val13": 1,
"val1": 1,
"val2": 1,
"val21": 1,
"val11": 1
}
groupByNestingWhen enabled, groups object keys by their value's nesting depth before sorting alphabetically. Simple values (primitives, single-line arrays, and single-line objects) are sorted first, followed by nested values (multi-line arrays and multi-line objects).
Default:
false
{
"assist": {
"actions": {
"source": {
"useSortedKeys": {
"options": {
"groupByNesting": true
}
}
}
}
}
}
{
"name": "Sample",
"details": {
"description": "nested"
},
"id": 123
}
## Description
Sort properties of a JS object in natural order.
[Natural order](https://en.wikipedia.org/wiki/Natural_sort_order) means
that uppercase letters come before lowercase letters (e.g. `A` < `a` <
`B` < `b`) and numbers are compared in a human way (e.g. `9` < `10`).
This rule will consider spread/calculated keys e.g [k]: 1 as
non-sortable. Instead, whenever it encounters a non-sortable key, it
will sort all the previous sortable keys up until the nearest
non-sortable key, if one exist. This prevents breaking the override of
certain keys using spread keys.
Sorting the keys of an object technically changes the semantics of the
program. It affects the result of operations like
`Object.getOwnPropertyNames`. Since ES2020, operations like `for-in`
loops, `Object.keys`, and `JSON.stringify` are guaranteed to process
string keys in insertion order.
In cases where the order of such operations is important, you can
disable the assist action using a suppression comment:
`// biome-ignore assist/source/useSortedKeys`
## Examples
```js
const obj = {
x: 1,
a: 2,
};
const obj = {
x: 1,
...f,
y: 4,
a: 2,
[calculated()]: true,
b: 3,
a: 1,
};
const obj = {
get aab() {
return this._aab;
},
set aac(v) {
this._aac = v;
},
w: 1,
x: 1,
...g,
get aaa() {
return "";
},
u: 1,
v: 1,
[getProp()]: 2,
o: 1,
p: 1,
q: 1,
}
This actions accepts following options
sortOrderThis options supports natural and lexicographic values. Where as natural is the default.
Following will apply the natural sort order.
{
"assist": {
"actions": {
"source": {
"useSortedKeys": {
"options": {
"sortOrder": "natural"
}
}
}
}
}
}
const obj = {
val13: 1,
val1: 1,
val2: 1,
val21: 1,
val11: 1,
};
Following will apply the lexicographic sort order.
{
"assist": {
"actions": {
"source": {
"useSortedKeys": {
"options": {
"sortOrder": "lexicographic"
}
}
}
}
}
}
const obj = {
val13: 1,
val1: 1,
val2: 1,
val21: 1,
val11: 1,
};
groupByNestingWhen enabled, groups object keys by their value's nesting depth before sorting alphabetically. Simple values (primitives, single-line arrays, and single-line objects) are sorted first, followed by nested values (multi-line arrays and multi-line objects).
Default:
false
{
"assist": {
"actions": {
"source": {
"useSortedKeys": {
"options": {
"groupByNesting": true
}
}
}
}
}
}
const obj = {
name: "Sample",
details: {
description: "nested"
},
id: 123
};