@lichens-innovation/eslint-plugin-coding-guide 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +125 -0
- package/dist/ast-utils.d.ts +2 -0
- package/dist/configs/recommended.d.ts +6 -0
- package/dist/create-rule.d.ts +4 -0
- package/dist/eslint.config.d.ts +2 -0
- package/dist/index.d.ts +114 -0
- package/dist/index.js +1294 -0
- package/dist/index.js.map +1 -0
- package/dist/rule-tester.d.ts +2 -0
- package/dist/rules/filename-convention-by-export-shape.d.ts +4 -0
- package/dist/rules/hoist-static-component-constants.d.ts +5 -0
- package/dist/rules/index.d.ts +101 -0
- package/dist/rules/max-params-project.d.ts +8 -0
- package/dist/rules/no-explicit-undefined-optional.d.ts +4 -0
- package/dist/rules/no-exported-mutable-state.d.ts +4 -0
- package/dist/rules/no-hook-returning-jsx.d.ts +4 -0
- package/dist/rules/no-inline-array-chain-in-jsx.d.ts +4 -0
- package/dist/rules/no-inline-curried-handler.d.ts +4 -0
- package/dist/rules/no-inline-guard-chain-handler.d.ts +4 -0
- package/dist/rules/no-inline-object-param-type.d.ts +4 -0
- package/dist/rules/no-inline-render-function.d.ts +5 -0
- package/dist/rules/no-jsx-in-variable.d.ts +4 -0
- package/dist/rules/no-nested-try.d.ts +4 -0
- package/dist/rules/no-non-hook-use-prefix.d.ts +4 -0
- package/dist/rules/no-render-fn-in-usecallback.d.ts +4 -0
- package/dist/rules/no-tests-in-dunder-folder.d.ts +4 -0
- package/dist/rules/no-trivial-usememo.d.ts +4 -0
- package/dist/rules/no-unguarded-json-parse.d.ts +4 -0
- package/dist/rules/prefer-element-ref-type.d.ts +4 -0
- package/dist/rules/prefer-includes-over-or-chain.d.ts +4 -0
- package/dist/rules/prefer-jsx-short-circuit.d.ts +4 -0
- package/dist/rules/prefer-nullish-helpers.d.ts +4 -0
- package/dist/rules/prefer-positive-condition.d.ts +4 -0
- package/dist/rules/prefer-props-with-children.d.ts +4 -0
- package/dist/rules/prefer-reactnode-over-jsxelement-union.d.ts +4 -0
- package/dist/rules/prefer-role-query-over-testid.d.ts +4 -0
- package/dist/rules/prefer-some-over-find-check.d.ts +4 -0
- package/dist/rules/prefer-state-updater-form.d.ts +4 -0
- package/dist/rules/require-effect-cleanup.d.ts +4 -0
- package/dist/rules/require-fallback-on-deep-chain.d.ts +7 -0
- package/dist/rules/require-numeric-enum-initializer.d.ts +4 -0
- package/dist/rules/require-usestate-useref-generic.d.ts +4 -0
- package/dist/rules/todo-ticket-ref.d.ts +12 -0
- package/dist/vite.config.d.mts +2 -0
- package/dist/vitest.config.d.mts +2 -0
- package/package.json +92 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Lichens Innovation
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# eslint-plugin-coding-guide
|
|
2
|
+
|
|
3
|
+
ESLint flat-config plugin enforcing Lichens Innovation TypeScript/React coding standards.
|
|
4
|
+
|
|
5
|
+
[](https://github.com/RichardLitt/standard-readme)
|
|
6
|
+
[](https://www.typescriptlang.org/)
|
|
7
|
+
[](https://eslint.org/)
|
|
8
|
+
[](https://vitest.dev/)
|
|
9
|
+
[](https://bun.sh/)
|
|
10
|
+
|
|
11
|
+
- [eslint-plugin-coding-guide](#eslint-plugin-coding-guide)
|
|
12
|
+
- [Installation](#installation)
|
|
13
|
+
- [Usage](#usage)
|
|
14
|
+
- [Rules](#rules)
|
|
15
|
+
- [Development](#development)
|
|
16
|
+
- [All Scripts](#all-scripts)
|
|
17
|
+
- [Contributions](#contributions)
|
|
18
|
+
- [Library semantic versioning](#library-semantic-versioning)
|
|
19
|
+
- [License](#license)
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install --save-dev @lichens-innovation/eslint-plugin-coding-guide
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Peer dependency: `eslint >= 9.0.0` (flat config only).
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
```js
|
|
32
|
+
// eslint.config.js
|
|
33
|
+
import codingGuide from "@lichens-innovation/eslint-plugin-coding-guide";
|
|
34
|
+
|
|
35
|
+
export default [
|
|
36
|
+
codingGuide.configs.recommended,
|
|
37
|
+
// ...your other config objects
|
|
38
|
+
];
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Each rule can also be enabled individually via `codingGuide.rules["<rule-name>"]` under your own plugin key.
|
|
42
|
+
|
|
43
|
+
## Rules
|
|
44
|
+
|
|
45
|
+
All rules live under the `coding-guide/` namespace and are enabled by `configs.recommended`. See `docs/rules/<name>.md` for details on each.
|
|
46
|
+
|
|
47
|
+
| Rule | Description |
|
|
48
|
+
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
|
|
49
|
+
| [`filename-convention-by-export-shape`](docs/rules/filename-convention-by-export-shape.md) | Enforce filename conventions against a file's exported shape |
|
|
50
|
+
| [`hoist-static-component-constants`](docs/rules/hoist-static-component-constants.md) | Disallow a static array/object literal declared inside a component body |
|
|
51
|
+
| [`max-params-project`](docs/rules/max-params-project.md) | Enforce a maximum number of parameters on project-owned functions |
|
|
52
|
+
| [`no-explicit-undefined-optional`](docs/rules/no-explicit-undefined-optional.md) | Use `?` instead of an explicit `\| undefined` on params/properties that support it |
|
|
53
|
+
| [`no-exported-mutable-state`](docs/rules/no-exported-mutable-state.md) | Disallow exporting a mutable (let/var) module-scoped binding |
|
|
54
|
+
| [`no-hook-returning-jsx`](docs/rules/no-hook-returning-jsx.md) | Disallow a use* hook returning JSX |
|
|
55
|
+
| [`no-inline-array-chain-in-jsx`](docs/rules/no-inline-array-chain-in-jsx.md) | Disallow chained array methods directly inside a JSX expression |
|
|
56
|
+
| [`no-inline-curried-handler`](docs/rules/no-inline-curried-handler.md) | Disallow a curried handler factory declared as a local component variable |
|
|
57
|
+
| [`no-inline-guard-chain-handler`](docs/rules/no-inline-guard-chain-handler.md) | Disallow a JSX prop arrow whose body is a long `&&` guard chain |
|
|
58
|
+
| [`no-inline-object-param-type`](docs/rules/no-inline-object-param-type.md) | Disallow inline object type literals on function parameters |
|
|
59
|
+
| [`no-inline-render-function`](docs/rules/no-inline-render-function.md) | Disallow calling a locally-declared render* helper function from within JSX |
|
|
60
|
+
| [`no-jsx-in-variable`](docs/rules/no-jsx-in-variable.md) | Disallow storing a JSX element/fragment in a variable |
|
|
61
|
+
| [`no-nested-try`](docs/rules/no-nested-try.md) | Disallow nesting a try statement inside another try block or catch handler |
|
|
62
|
+
| [`no-non-hook-use-prefix`](docs/rules/no-non-hook-use-prefix.md) | Disallow a use* named function whose body calls no hook |
|
|
63
|
+
| [`no-render-fn-in-usecallback`](docs/rules/no-render-fn-in-usecallback.md) | Disallow useCallback wrapping a JSX-returning or render*-named function |
|
|
64
|
+
| [`no-tests-in-dunder-folder`](docs/rules/no-tests-in-dunder-folder.md) | Disallow test files inside a `__tests__` folder |
|
|
65
|
+
| [`no-trivial-usememo`](docs/rules/no-trivial-usememo.md) | Disallow useMemo whose body has no function call (likely unnecessary memoization) |
|
|
66
|
+
| [`no-unguarded-json-parse`](docs/rules/no-unguarded-json-parse.md) | Require `JSON.parse(...)` to be wrapped in a try/catch |
|
|
67
|
+
| [`prefer-element-ref-type`](docs/rules/prefer-element-ref-type.md) | Prefer `useRef<ElementRef<"tag">>(null)` over a raw `HTMLXxxElement` type argument |
|
|
68
|
+
| [`prefer-includes-over-or-chain`](docs/rules/prefer-includes-over-or-chain.md) | Prefer `Array#includes` over a chain of `===` comparisons against the same value |
|
|
69
|
+
| [`prefer-jsx-short-circuit`](docs/rules/prefer-jsx-short-circuit.md) | Prefer `&&` short-circuit for optional JSX, with a boolean left side |
|
|
70
|
+
| [`prefer-nullish-helpers`](docs/rules/prefer-nullish-helpers.md) | Prefer `isNullish`/`!isNullish` over a manual null-and-undefined comparison pair |
|
|
71
|
+
| [`prefer-positive-condition`](docs/rules/prefer-positive-condition.md) | Prefer a positive condition in a ternary over a negated one with swapped branches |
|
|
72
|
+
| [`prefer-props-with-children`](docs/rules/prefer-props-with-children.md) | Prefer `PropsWithChildren<Props>` over a hand-declared `children` property |
|
|
73
|
+
| [`prefer-reactnode-over-jsxelement-union`](docs/rules/prefer-reactnode-over-jsxelement-union.md) | Prefer `ReactNode` over a `JSX.Element \| null \| undefined` union |
|
|
74
|
+
| [`prefer-role-query-over-testid`](docs/rules/prefer-role-query-over-testid.md) | Prefer Testing Library's `*ByRole` queries over `*ByTestId` |
|
|
75
|
+
| [`prefer-some-over-find-check`](docs/rules/prefer-some-over-find-check.md) | Prefer `Array#some` over comparing `Array#find`'s result to undefined |
|
|
76
|
+
| [`prefer-state-updater-form`](docs/rules/prefer-state-updater-form.md) | Prefer the updater-function form of a state setter when the new value depends on the current one |
|
|
77
|
+
| [`require-effect-cleanup`](docs/rules/require-effect-cleanup.md) | Require a cleanup return from a `useEffect` that registers a timer/listener/subscription |
|
|
78
|
+
| [`require-fallback-on-deep-chain`](docs/rules/require-fallback-on-deep-chain.md) | Require a `??` fallback on a deep optional chain |
|
|
79
|
+
| [`require-numeric-enum-initializer`](docs/rules/require-numeric-enum-initializer.md) | Require an explicit initializer on every enum member |
|
|
80
|
+
| [`require-usestate-useref-generic`](docs/rules/require-usestate-useref-generic.md) | Require an explicit generic on `useState()`/`useRef()` when the initial value can't infer one |
|
|
81
|
+
| [`todo-ticket-ref`](docs/rules/todo-ticket-ref.md) | Require a ticket reference in the TODO comment |
|
|
82
|
+
|
|
83
|
+
## Development
|
|
84
|
+
|
|
85
|
+
Install [Bun](https://bun.sh/docs/installation) 1.4+ (see `packageManager` in `package.json`), then:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
bun install
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## All Scripts
|
|
92
|
+
|
|
93
|
+
| Command | Description |
|
|
94
|
+
| ------------------- | ----------------------------------------------------------------- |
|
|
95
|
+
| `bun prepare` | Installs husky git hooks (runs on `bun install`) |
|
|
96
|
+
| `bun typecheck` | Checks TypeScript types without emitting files |
|
|
97
|
+
| `bun lint` | Runs ESLint to check code quality |
|
|
98
|
+
| `bun lint:fix` | Runs ESLint with `--fix` |
|
|
99
|
+
| `bun lint:package` | Lints `package.json` via npm-package-json-lint |
|
|
100
|
+
| `bun lint:unused` | Finds unused files, exports, and dependencies (via knip) |
|
|
101
|
+
| `bun format` | Formats all files using Prettier according to .prettierrc rules |
|
|
102
|
+
| `bun format:check` | Checks if files are formatted according to Prettier rules |
|
|
103
|
+
| `bun build` | Cleans `dist`, then Vite library build (`src/index.ts` → `dist/`) |
|
|
104
|
+
| `bun test` | Runs tests using Vitest |
|
|
105
|
+
| `bun test:coverage` | Runs tests with a Vitest coverage report |
|
|
106
|
+
|
|
107
|
+
## Contributions
|
|
108
|
+
|
|
109
|
+
Contributions to the project are made by improving the current codebase and then creating a Pull Request. Every PR runs the CI workflow (lint, typecheck, test, build). When the PR is merged into `main`, the release CI pipeline runs automatically. [semantic-release](https://semantic-release.gitbook.io/) determines the next version from conventional commit messages, updates `CHANGELOG.md` and `package.json`, and publishes the new version — no manual version bump required.
|
|
110
|
+
|
|
111
|
+
## Library semantic versioning
|
|
112
|
+
|
|
113
|
+
Versioning is automated by [semantic-release](https://semantic-release.gitbook.io/) using [Conventional Commits](https://www.conventionalcommits.org/). The release type is derived from commit message prefixes:
|
|
114
|
+
|
|
115
|
+
| Commit prefix | Release type |
|
|
116
|
+
| ----------------------------- | ----------------------------------------------- |
|
|
117
|
+
| `fix:` | `PATCH` — backward-compatible bug fix |
|
|
118
|
+
| `feat:` | `MINOR` — new backward-compatible functionality |
|
|
119
|
+
| `feat!:` / `BREAKING CHANGE:` | `MAJOR` — incompatible API change |
|
|
120
|
+
|
|
121
|
+
Follow [Semantic Versioning](https://semver.org/#summary) (`MAJOR.MINOR.PATCH`) when writing commit messages — the tooling takes care of the rest. Commitlint requires a **scope** (e.g. `feat(rules): add no-foo-bar`).
|
|
122
|
+
|
|
123
|
+
## License
|
|
124
|
+
|
|
125
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ESLintUtils } from '@typescript-eslint/utils';
|
|
2
|
+
export declare const createRule: <Options extends readonly unknown[], MessageIds extends string>({ meta, name, ...rule }: Readonly<ESLintUtils.RuleWithMetaAndName<Options, MessageIds, unknown>>) => ESLintUtils.RuleModule<MessageIds, Options, unknown, ESLintUtils.RuleListener> & {
|
|
3
|
+
name: string;
|
|
4
|
+
};
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { Linter } from 'eslint';
|
|
2
|
+
export type { Options as MaxParamsProjectOptions } from './rules/max-params-project.js';
|
|
3
|
+
export type { Options as RequireFallbackOnDeepChainOptions } from './rules/require-fallback-on-deep-chain.js';
|
|
4
|
+
export type { Options as TodoTicketRefOptions } from './rules/todo-ticket-ref.js';
|
|
5
|
+
declare const plugin: {
|
|
6
|
+
readonly meta: {
|
|
7
|
+
readonly name: "@lichens-innovation/eslint-plugin-coding-guide";
|
|
8
|
+
};
|
|
9
|
+
readonly rules: {
|
|
10
|
+
"filename-convention-by-export-shape": import('@typescript-eslint/utils/ts-eslint').RuleModule<"genericBasename" | "hookFilename" | "suffixFilename", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
11
|
+
name: string;
|
|
12
|
+
};
|
|
13
|
+
"hoist-static-component-constants": import('@typescript-eslint/utils/ts-eslint').RuleModule<"hoist", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
14
|
+
name: string;
|
|
15
|
+
};
|
|
16
|
+
"max-params-project": import('@typescript-eslint/utils/ts-eslint').RuleModule<"exceed", [number | import('./index.js').MaxParamsProjectOptions], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
17
|
+
name: string;
|
|
18
|
+
};
|
|
19
|
+
"no-explicit-undefined-optional": import('@typescript-eslint/utils/ts-eslint').RuleModule<"useOptionalModifier" | "redundantUndefined", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
20
|
+
name: string;
|
|
21
|
+
};
|
|
22
|
+
"no-exported-mutable-state": import('@typescript-eslint/utils/ts-eslint').RuleModule<"noMutableExport", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
23
|
+
name: string;
|
|
24
|
+
};
|
|
25
|
+
"no-hook-returning-jsx": import('@typescript-eslint/utils/ts-eslint').RuleModule<"hookReturnsJsx", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
26
|
+
name: string;
|
|
27
|
+
};
|
|
28
|
+
"no-inline-array-chain-in-jsx": import('@typescript-eslint/utils/ts-eslint').RuleModule<"precompute", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
29
|
+
name: string;
|
|
30
|
+
};
|
|
31
|
+
"no-inline-curried-handler": import('@typescript-eslint/utils/ts-eslint').RuleModule<"extractToUtils", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
32
|
+
name: string;
|
|
33
|
+
};
|
|
34
|
+
"no-inline-guard-chain-handler": import('@typescript-eslint/utils/ts-eslint').RuleModule<"extractHandler", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
35
|
+
name: string;
|
|
36
|
+
};
|
|
37
|
+
"no-inline-object-param-type": import('@typescript-eslint/utils/ts-eslint').RuleModule<"extractInterface", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
38
|
+
name: string;
|
|
39
|
+
};
|
|
40
|
+
"no-inline-render-function": import('@typescript-eslint/utils/ts-eslint').RuleModule<"extractSubcomponent", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
41
|
+
name: string;
|
|
42
|
+
};
|
|
43
|
+
"no-jsx-in-variable": import('@typescript-eslint/utils/ts-eslint').RuleModule<"declareComponent", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
44
|
+
name: string;
|
|
45
|
+
};
|
|
46
|
+
"no-nested-try": import('@typescript-eslint/utils/ts-eslint').RuleModule<"nestedTry", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
47
|
+
name: string;
|
|
48
|
+
};
|
|
49
|
+
"no-non-hook-use-prefix": import('@typescript-eslint/utils/ts-eslint').RuleModule<"misnamed", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
50
|
+
name: string;
|
|
51
|
+
};
|
|
52
|
+
"no-render-fn-in-usecallback": import('@typescript-eslint/utils/ts-eslint').RuleModule<"extractSubcomponent", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
53
|
+
name: string;
|
|
54
|
+
};
|
|
55
|
+
"no-tests-in-dunder-folder": import('@typescript-eslint/utils/ts-eslint').RuleModule<"colocate", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
56
|
+
name: string;
|
|
57
|
+
};
|
|
58
|
+
"no-trivial-usememo": import('@typescript-eslint/utils/ts-eslint').RuleModule<"unnecessaryMemo", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
59
|
+
name: string;
|
|
60
|
+
};
|
|
61
|
+
"no-unguarded-json-parse": import('@typescript-eslint/utils/ts-eslint').RuleModule<"unguarded", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
62
|
+
name: string;
|
|
63
|
+
};
|
|
64
|
+
"prefer-element-ref-type": import('@typescript-eslint/utils/ts-eslint').RuleModule<"preferElementRef", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
65
|
+
name: string;
|
|
66
|
+
};
|
|
67
|
+
"prefer-includes-over-or-chain": import('@typescript-eslint/utils/ts-eslint').RuleModule<"preferIncludes", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
68
|
+
name: string;
|
|
69
|
+
};
|
|
70
|
+
"prefer-jsx-short-circuit": import('@typescript-eslint/utils/ts-eslint').RuleModule<"preferShortCircuit" | "requireBooleanGuard", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
71
|
+
name: string;
|
|
72
|
+
};
|
|
73
|
+
"prefer-nullish-helpers": import('@typescript-eslint/utils/ts-eslint').RuleModule<"preferNotNullish" | "preferNullish", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
74
|
+
name: string;
|
|
75
|
+
};
|
|
76
|
+
"prefer-positive-condition": import('@typescript-eslint/utils/ts-eslint').RuleModule<"preferPositive", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
77
|
+
name: string;
|
|
78
|
+
};
|
|
79
|
+
"prefer-props-with-children": import('@typescript-eslint/utils/ts-eslint').RuleModule<"preferPropsWithChildren", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
80
|
+
name: string;
|
|
81
|
+
};
|
|
82
|
+
"prefer-reactnode-over-jsxelement-union": import('@typescript-eslint/utils/ts-eslint').RuleModule<"preferReactNode", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
83
|
+
name: string;
|
|
84
|
+
};
|
|
85
|
+
"prefer-role-query-over-testid": import('@typescript-eslint/utils/ts-eslint').RuleModule<"preferRole", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
86
|
+
name: string;
|
|
87
|
+
};
|
|
88
|
+
"prefer-some-over-find-check": import('@typescript-eslint/utils/ts-eslint').RuleModule<"preferSome", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
89
|
+
name: string;
|
|
90
|
+
};
|
|
91
|
+
"prefer-state-updater-form": import('@typescript-eslint/utils/ts-eslint').RuleModule<"preferUpdaterForm", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
92
|
+
name: string;
|
|
93
|
+
};
|
|
94
|
+
"require-effect-cleanup": import('@typescript-eslint/utils/ts-eslint').RuleModule<"requireCleanup", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
95
|
+
name: string;
|
|
96
|
+
};
|
|
97
|
+
"require-fallback-on-deep-chain": import('@typescript-eslint/utils/ts-eslint').RuleModule<"requireFallback", [import('./index.js').RequireFallbackOnDeepChainOptions], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
98
|
+
name: string;
|
|
99
|
+
};
|
|
100
|
+
"require-numeric-enum-initializer": import('@typescript-eslint/utils/ts-eslint').RuleModule<"missingInitializer", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
101
|
+
name: string;
|
|
102
|
+
};
|
|
103
|
+
"require-usestate-useref-generic": import('@typescript-eslint/utils/ts-eslint').RuleModule<"requireGeneric", [], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
104
|
+
name: string;
|
|
105
|
+
};
|
|
106
|
+
"todo-ticket-ref": import('@typescript-eslint/utils/ts-eslint').RuleModule<"missingTicket" | "missingTicketWithCommentPattern" | "missingTicketWithDescription", [import('./index.js').TodoTicketRefOptions], unknown, import('@typescript-eslint/utils/ts-eslint').RuleListener> & {
|
|
107
|
+
name: string;
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
export declare const configs: {
|
|
112
|
+
recommended: Linter.Config;
|
|
113
|
+
};
|
|
114
|
+
export default plugin;
|