Skip to content

Commit 8154204

Browse files
docs: mark rules that are frozen on rules index page (#11467)
* feat: mark these rule as frozen * docs: add section for frozen * docs: show snowflake for frozen rule in rule table * docs: section for frozen info in the rule * chore: generate config * feat: add frozen property at docs meta data * Revert "feat: mark these rule as frozen" This reverts commit 3447143. * feat: mark these rule as frozen with frozen property * Revert "chore: generate config" This reverts commit 081c034. * docs: mark as frozen with emoji on rule docs * fix: lint * fix: use inline flex * refactor: JSDoc more info * Update packages/utils/src/ts-eslint/Rule.ts --------- Co-authored-by: Josh Goldberg ✨ <git@joshuakgoldberg.com>
1 parent b44fde8 commit 8154204

12 files changed

Lines changed: 49 additions & 3 deletions

File tree

‎packages/eslint-plugin/docs/rules/README.md‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,16 @@ module.exports = {
5555
```
5656

5757
[Search for `🧱 extension rule`s](?=extension#rules) in this page to see all extension rules.
58+
59+
## Frozen Rules
60+
61+
When rules are feature complete, they are marked as frozen (indicated with ❄️ in the documentation). This applies to standalone rules that are complete, as well as [extension rules](#extension-rules) whose underlying core ESLint rules are frozen. After that point, we expect users to use [disable comments](https://eslint.org/docs/latest/use/configure/rules#using-configuration-comments-1) when they find an edge case that isn’t covered.
62+
63+
When a rule is frozen, it means:
64+
65+
- **Bug fixes**: We will still fix confirmed bugs.
66+
- **New ECMAScript features**: We will ensure compatibility with new ECMAScript features, meaning the rule will not break on new syntax.
67+
- **TypeScript support**: We will ensure compatibility with TypeScript syntax, meaning the rule will not break on TypeScript syntax and violations are appropriate for TypeScript.
68+
- **New options**: We will not add any new options unless an option is the only way to fix a bug or support a newly-added ECMAScript feature.
69+
70+
If you find that a frozen rule would work better for you with a change, we recommend copying the rule source code and modifying it to fit your needs.

‎packages/eslint-plugin/src/rules/default-param-last.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export default createRule({
1111
docs: {
1212
description: 'Enforce default parameters to be last',
1313
extendsBaseRule: true,
14+
frozen: true,
1415
},
1516
messages: {
1617
shouldBeLast: 'Default parameters should be last.',

‎packages/eslint-plugin/src/rules/dot-notation.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export default createRule<Options, MessageIds>({
3535
docs: {
3636
description: 'Enforce dot notation whenever possible',
3737
extendsBaseRule: true,
38+
frozen: true,
3839
recommended: 'stylistic',
3940
requiresTypeChecking: true,
4041
},

‎packages/eslint-plugin/src/rules/init-declarations.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export default createRule<Options, MessageIds>({
2424
description:
2525
'Require or disallow initialization in variable declarations',
2626
extendsBaseRule: true,
27+
frozen: true,
2728
},
2829
hasSuggestions: baseRule.meta.hasSuggestions,
2930
messages: baseRule.meta.messages,

‎packages/eslint-plugin/src/rules/member-ordering.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,7 @@ export default createRule<Options, MessageIds>({
728728
type: 'suggestion',
729729
docs: {
730730
description: 'Require a consistent member declaration order',
731+
frozen: true,
731732
},
732733
messages: {
733734
incorrectGroupOrder:

‎packages/eslint-plugin/src/rules/naming-convention.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ export default createRule<Options, MessageIds>({
7070
description:
7171
'Enforce naming conventions for everything across a codebase',
7272
// technically only requires type checking if the user uses "type" modifiers
73+
frozen: true,
7374
requiresTypeChecking: true,
7475
},
7576
messages: {

‎packages/eslint-plugin/src/rules/no-magic-numbers.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export default createRule<Options, MessageIds>({
5353
docs: {
5454
description: 'Disallow magic numbers',
5555
extendsBaseRule: true,
56+
frozen: true,
5657
},
5758
messages: baseRule.meta.messages,
5859
schema: [schema],

‎packages/eslint-plugin/src/rules/prefer-destructuring.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ export default createRule<Options, MessageIds>({
7676
docs: {
7777
description: 'Require destructuring from arrays and/or objects',
7878
extendsBaseRule: true,
79+
frozen: true,
7980
requiresTypeChecking: true,
8081
},
8182
fixable: baseRule.meta.fixable,

‎packages/utils/src/ts-eslint/Rule.ts‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ export interface RuleMetaDataDocs {
2525
* The URL of the rule's docs.
2626
*/
2727
url?: string;
28+
29+
/**
30+
* Mark this rule as feature-frozen.
31+
*/
32+
frozen?: boolean;
2833
}
2934

3035
export interface ExternalSpecifier {

‎packages/website/src/components/RulesTable/index.tsx‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,12 @@ function RuleRow({
5555
return (
5656
<tr>
5757
<td>
58-
<Link to={new URL(rule.docs.url).pathname}>
59-
<code>@typescript-eslint/{rule.name}</code>
60-
</Link>
58+
<div className={styles.ruleNameWrapper}>
59+
<Link to={new URL(rule.docs.url).pathname}>
60+
<code>@typescript-eslint/{rule.name}</code>
61+
</Link>
62+
{rule.docs.frozen && <span>❄️</span>}
63+
</div>
6164
<br />
6265
{interpolateCode(rule.docs.description)}
6366
</td>

0 commit comments

Comments
 (0)