From b4ff00eef21e3feafa448ee206e1d800dd02314a Mon Sep 17 00:00:00 2001 From: "hugo.prunaux" Date: Wed, 23 Oct 2024 01:20:30 +0200 Subject: [PATCH] docs: adds documentation --- docs/content/rules/sort-heritage-clauses.mdx | 249 +++++++++++++++++++ 1 file changed, 249 insertions(+) create mode 100644 docs/content/rules/sort-heritage-clauses.mdx diff --git a/docs/content/rules/sort-heritage-clauses.mdx b/docs/content/rules/sort-heritage-clauses.mdx new file mode 100644 index 00000000..36c4b14b --- /dev/null +++ b/docs/content/rules/sort-heritage-clauses.mdx @@ -0,0 +1,249 @@ +--- +title: sort-heritage-clauses +description: Enforce sorting of heritage clauses for improved readability and maintainability. Use this ESLint rule to keep your heritage clauses well-organized +shortDescription: Enforce sorted heritage clauses +keywords: + - eslint + - sort heritage clauses + - sort implements + - sort extends + - eslint rule + - coding standards + - code quality + - javascript linting + - typescript heritage clauses sorting +--- + +import CodeExample from '../../components/CodeExample.svelte' +import Important from '../../components/Important.astro' +import CodeTabs from '../../components/CodeTabs.svelte' +import { dedent } from 'ts-dedent' + +Enforce sorted heritage clauses. + +This rule detects instances where heritage clauses are not sorted and raises linting errors, encouraging developers to arrange elements in the desired order. + +## Try it out + + + +## Options + +This rule accepts an options object with the following properties: + +### type + +default: `'alphabetical'` + +Specifies the sorting method. + +- `'alphabetical'` — Sort items alphabetically (e.g., “a” < “b” < “c”). +- `'natural'` — Sort items in a natural order (e.g., “item2” < “item10”). +- `'line-length'` — Sort items by the length of the code line (shorter lines first). + +### order + +default: `'asc'` + +Determines whether the sorted items should be in ascending or descending order. + +- `'asc'` — Sort items in ascending order (A to Z, 1 to 9). +- `'desc'` — Sort items in descending order (Z to A, 9 to 1). + +### ignoreCase + +default: `true` + +Controls whether sorting should be case-sensitive or not. + +- `true` — Ignore case when sorting alphabetically or naturally (e.g., “A” and “a” are the same). +- `false` — Consider case when sorting (e.g., “A” comes before “a”). + +### specialCharacters + +default: `keep` + +Controls whether special characters should be trimmed, removed or kept before sorting. + +- `'keep'` — Keep special characters when sorting (e.g., “_a” comes before “a”). +- `'trim'` — Trim special characters when sorting alphabetically or naturally (e.g., “_a” and “a” are the same). +- `'remove'` — Remove special characters when sorting (e.g., “/a/b” and “ab” are the same). + +### groups + + + type: `Array` + +default: `[]` + +Allows you to specify a list of heritage clause groups for sorting. + +Predefined groups: + +- `'unknown'` — Heritage Clauses that don’t fit into any group specified in the `groups` option. + +If the `unknown` group is not specified in the `groups` option, it will automatically be added to the end of the list. + +Each heritage clause will be assigned a single group specified in the `groups` option (or the `unknown` group if no match is found). +The order of items in the `groups` option determines how groups are ordered. + +Within a given group, members will be sorted according to the `type`, `order`, `ignoreCase`, etc. options. + +Individual groups can be combined together by placing them in an array. The order of groups in that array does not matter. +All members of the groups in the array will be sorted together as if they were part of a single group. + +### customGroups + + + type: `{ [groupName: string]: string | string[] }` + +default: `{}` + +You can define your own groups and use custom glob patterns or regex to match specific heritage clauses. + +Use the `matcher` option to specify the pattern matching method. + +Each key of `customGroups` represents a group name which you can then use in the `groups` option. The value for each key can either be of type: +- `string` — A heritage clause's name matching the value will be marked as part of the group referenced by the key. +- `string[]` — A heritage clause's name matching any of the values of the array will be marked as part of the group referenced by the key. +The order of values in the array does not matter. + +Custom group matching takes precedence over predefined group matching. + +#### Example: + +Put the `WithId` clause before anything else: + +```ts +interface Interface extends WithId, Logged, Startable { + // ... +} +``` + +`groups` and `customGroups` configuration: + +```js + { + groups: [ + 'withIdInterface', // [!code ++] + 'unknown' + ], ++ customGroups: { // [!code ++] ++ withIdInterface: 'WithId' // [!code ++] ++ } // [!code ++] + } +``` + +### matcher + +default: `'minimatch'` + +Determines the matcher used for patterns in the `customGroups` option. + +- `'minimatch'` — Use the [minimatch](https://github.com/isaacs/minimatch) library for pattern matching. +- `'regex'` — Use regular expressions for pattern matching. + +## Usage + + + +## Version + +This rule was introduced in [v4.0.0](https://github.com/azat-io/eslint-plugin-perfectionist/releases/tag/v4.0.0). + +## Resources + +- [Rule source](https://github.com/azat-io/eslint-plugin-perfectionist/blob/main/rules/sort-heritage-clauses.ts) +- [Test source](https://github.com/azat-io/eslint-plugin-perfectionist/blob/main/test/sort-heritage-clauses.test.ts)