Skip to content

Commit

Permalink
refactor: use default settings when 'settings["react-x"]' is not set
Browse files Browse the repository at this point in the history
  • Loading branch information
Rel1cx committed Dec 15, 2024
1 parent 79f0748 commit 40ca3bd
Show file tree
Hide file tree
Showing 10 changed files with 54 additions and 57 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,12 @@ ruleTester.run(RULE_NAME, rule, {
const toArr = Children.toArray;
return null;
}
function Component2() {
const Children = {
toArray: () => {},
}
const toArr = Children.toArray;
}
`,
errors: [
{ messageId: "isFromReact", data: { name: "React", importSource: "@pika/react" } },
Expand Down
19 changes: 0 additions & 19 deletions packages/plugins/eslint-plugin-react-dom/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import type { ESLintReactSettings } from "@eslint-react/shared";

import { name, version } from "../package.json";
import noChildrenInVoidDomElements from "./rules/no-children-in-void-dom-elements";
import noDangerouslySetInnerHTML from "./rules/no-dangerously-set-innerhtml";
Expand All @@ -14,21 +12,6 @@ import noUnknownProperty from "./rules/no-unknown-property";
import noUnsafeIframeSandbox from "./rules/no-unsafe-iframe-sandbox";
import noUnsafeTargetBlank from "./rules/no-unsafe-target-blank";

const DEFAULT_ESLINT_REACT_SETTINGS = {
additionalComponents: [
{
name: "Link",
as: "a",
attributes: [
{
name: "to",
as: "href",
},
],
},
],
} as const satisfies ESLintReactSettings;

export default {
meta: {
name,
Expand All @@ -48,6 +31,4 @@ export default {
"no-unsafe-iframe-sandbox": noUnsafeIframeSandbox,
"no-unsafe-target-blank": noUnsafeTargetBlank,
},
// eslint-disable-next-line perfectionist/sort-objects
DEFAULT_ESLINT_REACT_SETTINGS,
} as const;
6 changes: 0 additions & 6 deletions packages/plugins/eslint-plugin-react-web-api/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
import type { ESLintReactSettings } from "@eslint-react/shared";

import { name, version } from "../package.json";
import noLeakedEventListener from "./rules/no-leaked-event-listener";
import noLeakedInterval from "./rules/no-leaked-interval";
import noLeakedResizeObserver from "./rules/no-leaked-resize-observer";
import noLeakedTimeout from "./rules/no-leaked-timeout";

const DEFAULT_ESLINT_REACT_SETTINGS = {} as const satisfies ESLintReactSettings;

export default {
meta: {
name,
Expand All @@ -19,6 +15,4 @@ export default {
"no-leaked-resize-observer": noLeakedResizeObserver,
"no-leaked-timeout": noLeakedTimeout,
},
// eslint-disable-next-line perfectionist/sort-objects
DEFAULT_ESLINT_REACT_SETTINGS,
};
15 changes: 0 additions & 15 deletions packages/plugins/eslint-plugin-react-x/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
/* eslint-disable perfectionist/sort-objects */
import type { ESLintReactSettings } from "@eslint-react/shared";

import { name, version } from "../package.json";
import avoidShorthandBoolean from "./rules/avoid-shorthand-boolean";
import avoidShorthandFragment from "./rules/avoid-shorthand-fragment";
Expand Down Expand Up @@ -53,18 +51,6 @@ import preferReadOnlyProps from "./rules/prefer-read-only-props";
import preferShorthandBoolean from "./rules/prefer-shorthand-boolean";
import preferShorthandFragment from "./rules/prefer-shorthand-fragment";

/**
* The default ESLint settings for "react-x".
*/
const DEFAULT_ESLINT_REACT_SETTINGS = {
additionalHooks: {
useLayoutEffect: ["useIsomorphicLayoutEffect"],
},
polymorphicPropName: "as",
strictImportCheck: true,
version: "detect",
} as const satisfies ESLintReactSettings;

export default {
meta: {
name,
Expand Down Expand Up @@ -125,5 +111,4 @@ export default {
/** @deprecated Use `no-complex-conditional-rendering` instead. */
"no-complicated-conditional-rendering": noComplexConditionalRendering,
},
DEFAULT_ESLINT_REACT_SETTINGS,
};
3 changes: 2 additions & 1 deletion packages/plugins/eslint-plugin/src/configs/core.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { DEFAULT_ESLINT_REACT_SETTINGS } from "@eslint-react/shared";
import type { RulePreset } from "@eslint-react/types";
import react from "eslint-plugin-react-x";

Expand Down Expand Up @@ -48,5 +49,5 @@ export const plugins = {
};

export const settings = {
"react-x": react.DEFAULT_ESLINT_REACT_SETTINGS,
"react-x": DEFAULT_ESLINT_REACT_SETTINGS,
};
3 changes: 2 additions & 1 deletion packages/plugins/eslint-plugin/src/configs/dom.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { DEFAULT_ESLINT_REACT_SETTINGS } from "@eslint-react/shared";
import type { RulePreset } from "@eslint-react/types";
import reactDom from "eslint-plugin-react-dom";

Expand All @@ -24,5 +25,5 @@ export const plugins = {
};

export const settings = {
"react-x": reactDom.DEFAULT_ESLINT_REACT_SETTINGS,
"react-x": DEFAULT_ESLINT_REACT_SETTINGS,
};
2 changes: 1 addition & 1 deletion packages/shared/docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
## Variables

- [CustomComponentNormalizedSchema](variables/CustomComponentNormalizedSchema.md)
- [DEFAULT\_ESLINT\_REACT\_SETTINGS](variables/DEFAULT_ESLINT_REACT_SETTINGS.md)
- [GITHUB\_URL](variables/GITHUB_URL.md)
- [INITIAL\_ESLINT\_REACT\_SETTINGS](variables/INITIAL_ESLINT_REACT_SETTINGS.md)
- [NPM\_SCOPE](variables/NPM_SCOPE.md)
- [RE\_CAMEL\_CASE](variables/RE_CAMEL_CASE.md)
- [RE\_CONSTANT\_CASE](variables/RE_CONSTANT_CASE.md)
Expand Down
33 changes: 33 additions & 0 deletions packages/shared/docs/variables/DEFAULT_ESLINT_REACT_SETTINGS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
[**@eslint-react/shared**](../README.md)

***

[@eslint-react/shared](../README.md) / DEFAULT\_ESLINT\_REACT\_SETTINGS

# Variable: DEFAULT\_ESLINT\_REACT\_SETTINGS

> `const` **DEFAULT\_ESLINT\_REACT\_SETTINGS**: `object`
The default ESLint settings for "react-x".

## Type declaration

### additionalHooks

> `readonly` **additionalHooks**: `object`
#### additionalHooks.useLayoutEffect

> `readonly` **useLayoutEffect**: [`"useIsomorphicLayoutEffect"`]
### polymorphicPropName

> `readonly` **polymorphicPropName**: `"as"` = `"as"`
### strictImportCheck

> `readonly` **strictImportCheck**: `false` = `false`
### version

> `readonly` **version**: `"detect"` = `"detect"`
11 changes: 0 additions & 11 deletions packages/shared/docs/variables/INITIAL_ESLINT_REACT_SETTINGS.md

This file was deleted.

13 changes: 10 additions & 3 deletions packages/shared/src/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,16 @@ import { ESLintSettingsSchema } from "./schemas";
// #region Constants

/**
* The initial settings for "react-x".
* The default ESLint settings for "react-x".
*/
export const INITIAL_ESLINT_REACT_SETTINGS = {} as const satisfies ESLintReactSettings;
export const DEFAULT_ESLINT_REACT_SETTINGS = {
additionalHooks: {
useLayoutEffect: ["useIsomorphicLayoutEffect"],
},
polymorphicPropName: "as",
strictImportCheck: false,
version: "detect",
} as const satisfies ESLintReactSettings;

// #endregion

Expand All @@ -41,7 +48,7 @@ export function unsafeReadSettings(data: unknown): PartialDeep<ESLintReactSettin
*/
export const decodeSettings = memoize((data: unknown) => {
return {
...INITIAL_ESLINT_REACT_SETTINGS,
...DEFAULT_ESLINT_REACT_SETTINGS,
...parse(ESLintSettingsSchema, data)["react-x"] ?? {},
} as const satisfies ESLintReactSettings;
}, { isEqual: (a, b) => a === b });
Expand Down

0 comments on commit 40ca3bd

Please sign in to comment.