@isentinel/eslint-config 6.0.0-beta.33 → 6.0.0-beta.35
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/dist/cli.mjs +4 -1
- package/dist/index.d.mts +236 -4
- package/dist/index.mjs +86 -5
- package/dist/lint-cli.mjs +1 -1
- package/dist/oxlint.d.mts +232 -2
- package/dist/oxlint.mjs +101 -7
- package/package.json +7 -2
package/dist/cli.mjs
CHANGED
|
@@ -9,7 +9,7 @@ import path from "node:path";
|
|
|
9
9
|
import { existsSync, readFileSync } from "fs";
|
|
10
10
|
import { execSync } from "node:child_process";
|
|
11
11
|
//#region package.json
|
|
12
|
-
var version = "6.0.0-beta.
|
|
12
|
+
var version = "6.0.0-beta.35";
|
|
13
13
|
var package_default = {
|
|
14
14
|
name: "@isentinel/eslint-config",
|
|
15
15
|
version,
|
|
@@ -156,6 +156,7 @@ var package_default = {
|
|
|
156
156
|
"eslint-plugin-react-jsx": "catalog:peer",
|
|
157
157
|
"eslint-plugin-react-naming-convention": "catalog:peer",
|
|
158
158
|
"eslint-plugin-react-x": "catalog:peer",
|
|
159
|
+
"eslint-plugin-testing-library": "catalog:peer",
|
|
159
160
|
"eslint-typegen": "catalog:dev",
|
|
160
161
|
"jiti": "catalog:dev",
|
|
161
162
|
"oxlint": "catalog:peer",
|
|
@@ -179,6 +180,7 @@ var package_default = {
|
|
|
179
180
|
"eslint-plugin-react-jsx": "^5.10.0",
|
|
180
181
|
"eslint-plugin-react-naming-convention": "^5.10.0",
|
|
181
182
|
"eslint-plugin-react-x": "^5.10.0",
|
|
183
|
+
"eslint-plugin-testing-library": "^7.16.2",
|
|
182
184
|
"oxlint": ">=1.73.0",
|
|
183
185
|
"oxlint-tsgolint": ">=0.24.0"
|
|
184
186
|
},
|
|
@@ -191,6 +193,7 @@ var package_default = {
|
|
|
191
193
|
"eslint-plugin-react-jsx": { "optional": true },
|
|
192
194
|
"eslint-plugin-react-naming-convention": { "optional": true },
|
|
193
195
|
"eslint-plugin-react-x": { "optional": true },
|
|
196
|
+
"eslint-plugin-testing-library": { "optional": true },
|
|
194
197
|
"oxlint": { "optional": true },
|
|
195
198
|
"oxlint-tsgolint": { "optional": true }
|
|
196
199
|
},
|
package/dist/index.d.mts
CHANGED
|
@@ -13346,6 +13346,151 @@ interface RuleOptions {
|
|
|
13346
13346
|
* @deprecated
|
|
13347
13347
|
*/
|
|
13348
13348
|
'template-tag-spacing'?: Linter.RuleEntry<TemplateTagSpacing>;
|
|
13349
|
+
/**
|
|
13350
|
+
* Enforce promises from async event methods are handled
|
|
13351
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/await-async-events.md
|
|
13352
|
+
*/
|
|
13353
|
+
'testing-library/await-async-events'?: Linter.RuleEntry<TestingLibraryAwaitAsyncEvents>;
|
|
13354
|
+
/**
|
|
13355
|
+
* Enforce promises from async queries to be handled
|
|
13356
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/await-async-queries.md
|
|
13357
|
+
*/
|
|
13358
|
+
'testing-library/await-async-queries'?: Linter.RuleEntry<[]>;
|
|
13359
|
+
/**
|
|
13360
|
+
* Enforce promises from async utils to be awaited properly
|
|
13361
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/await-async-utils.md
|
|
13362
|
+
*/
|
|
13363
|
+
'testing-library/await-async-utils'?: Linter.RuleEntry<[]>;
|
|
13364
|
+
/**
|
|
13365
|
+
* Ensures consistent usage of `data-testid`
|
|
13366
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/consistent-data-testid.md
|
|
13367
|
+
*/
|
|
13368
|
+
'testing-library/consistent-data-testid'?: Linter.RuleEntry<TestingLibraryConsistentDataTestid>;
|
|
13369
|
+
/**
|
|
13370
|
+
* Disallow unnecessary `await` for sync events
|
|
13371
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-await-sync-events.md
|
|
13372
|
+
*/
|
|
13373
|
+
'testing-library/no-await-sync-events'?: Linter.RuleEntry<TestingLibraryNoAwaitSyncEvents>;
|
|
13374
|
+
/**
|
|
13375
|
+
* Disallow unnecessary `await` for sync queries
|
|
13376
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-await-sync-queries.md
|
|
13377
|
+
*/
|
|
13378
|
+
'testing-library/no-await-sync-queries'?: Linter.RuleEntry<[]>;
|
|
13379
|
+
/**
|
|
13380
|
+
* Disallow the use of `container` methods
|
|
13381
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-container.md
|
|
13382
|
+
*/
|
|
13383
|
+
'testing-library/no-container'?: Linter.RuleEntry<[]>;
|
|
13384
|
+
/**
|
|
13385
|
+
* Disallow the use of debugging utilities like `debug`
|
|
13386
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-debugging-utils.md
|
|
13387
|
+
*/
|
|
13388
|
+
'testing-library/no-debugging-utils'?: Linter.RuleEntry<TestingLibraryNoDebuggingUtils>;
|
|
13389
|
+
/**
|
|
13390
|
+
* Disallow importing from DOM Testing Library
|
|
13391
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-dom-import.md
|
|
13392
|
+
*/
|
|
13393
|
+
'testing-library/no-dom-import'?: Linter.RuleEntry<TestingLibraryNoDomImport>;
|
|
13394
|
+
/**
|
|
13395
|
+
* Disallow the use of the global RegExp flag (/g) in queries
|
|
13396
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-global-regexp-flag-in-query.md
|
|
13397
|
+
*/
|
|
13398
|
+
'testing-library/no-global-regexp-flag-in-query'?: Linter.RuleEntry<[]>;
|
|
13399
|
+
/**
|
|
13400
|
+
* Disallow the use of `cleanup`
|
|
13401
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-manual-cleanup.md
|
|
13402
|
+
*/
|
|
13403
|
+
'testing-library/no-manual-cleanup'?: Linter.RuleEntry<[]>;
|
|
13404
|
+
/**
|
|
13405
|
+
* Disallow direct Node access
|
|
13406
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-node-access.md
|
|
13407
|
+
*/
|
|
13408
|
+
'testing-library/no-node-access'?: Linter.RuleEntry<TestingLibraryNoNodeAccess>;
|
|
13409
|
+
/**
|
|
13410
|
+
* Disallow the use of promises passed to a `fireEvent` method
|
|
13411
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-promise-in-fire-event.md
|
|
13412
|
+
*/
|
|
13413
|
+
'testing-library/no-promise-in-fire-event'?: Linter.RuleEntry<[]>;
|
|
13414
|
+
/**
|
|
13415
|
+
* Disallow the use of `render` in testing frameworks setup functions
|
|
13416
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-render-in-lifecycle.md
|
|
13417
|
+
*/
|
|
13418
|
+
'testing-library/no-render-in-lifecycle'?: Linter.RuleEntry<TestingLibraryNoRenderInLifecycle>;
|
|
13419
|
+
/**
|
|
13420
|
+
* Ensure no `data-testid` queries are used
|
|
13421
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-test-id-queries.md
|
|
13422
|
+
*/
|
|
13423
|
+
'testing-library/no-test-id-queries'?: Linter.RuleEntry<[]>;
|
|
13424
|
+
/**
|
|
13425
|
+
* Disallow wrapping Testing Library utils or empty callbacks in `act`
|
|
13426
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-unnecessary-act.md
|
|
13427
|
+
*/
|
|
13428
|
+
'testing-library/no-unnecessary-act'?: Linter.RuleEntry<TestingLibraryNoUnnecessaryAct>;
|
|
13429
|
+
/**
|
|
13430
|
+
* Disallow the use of multiple `expect` calls inside `waitFor`
|
|
13431
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-wait-for-multiple-assertions.md
|
|
13432
|
+
*/
|
|
13433
|
+
'testing-library/no-wait-for-multiple-assertions'?: Linter.RuleEntry<[]>;
|
|
13434
|
+
/**
|
|
13435
|
+
* Disallow the use of side effects in `waitFor`
|
|
13436
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-wait-for-side-effects.md
|
|
13437
|
+
*/
|
|
13438
|
+
'testing-library/no-wait-for-side-effects'?: Linter.RuleEntry<[]>;
|
|
13439
|
+
/**
|
|
13440
|
+
* Ensures no snapshot is generated inside of a `waitFor` call
|
|
13441
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-wait-for-snapshot.md
|
|
13442
|
+
*/
|
|
13443
|
+
'testing-library/no-wait-for-snapshot'?: Linter.RuleEntry<[]>;
|
|
13444
|
+
/**
|
|
13445
|
+
* Suggest using explicit assertions rather than standalone queries
|
|
13446
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-explicit-assert.md
|
|
13447
|
+
*/
|
|
13448
|
+
'testing-library/prefer-explicit-assert'?: Linter.RuleEntry<TestingLibraryPreferExplicitAssert>;
|
|
13449
|
+
/**
|
|
13450
|
+
* Suggest using `find(All)By*` query instead of `waitFor` + `get(All)By*` to wait for elements
|
|
13451
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-find-by.md
|
|
13452
|
+
*/
|
|
13453
|
+
'testing-library/prefer-find-by'?: Linter.RuleEntry<[]>;
|
|
13454
|
+
/**
|
|
13455
|
+
* Suggest using implicit assertions for getBy* & findBy* queries
|
|
13456
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-implicit-assert.md
|
|
13457
|
+
*/
|
|
13458
|
+
'testing-library/prefer-implicit-assert'?: Linter.RuleEntry<[]>;
|
|
13459
|
+
/**
|
|
13460
|
+
* Ensure appropriate `get*`/`query*` queries are used with their respective matchers
|
|
13461
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-presence-queries.md
|
|
13462
|
+
*/
|
|
13463
|
+
'testing-library/prefer-presence-queries'?: Linter.RuleEntry<TestingLibraryPreferPresenceQueries>;
|
|
13464
|
+
/**
|
|
13465
|
+
* Suggest using `queryBy*` queries when waiting for disappearance
|
|
13466
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-query-by-disappearance.md
|
|
13467
|
+
*/
|
|
13468
|
+
'testing-library/prefer-query-by-disappearance'?: Linter.RuleEntry<[]>;
|
|
13469
|
+
/**
|
|
13470
|
+
* Ensure the configured `get*`/`query*` query is used with the corresponding matchers
|
|
13471
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-query-matchers.md
|
|
13472
|
+
*/
|
|
13473
|
+
'testing-library/prefer-query-matchers'?: Linter.RuleEntry<TestingLibraryPreferQueryMatchers>;
|
|
13474
|
+
/**
|
|
13475
|
+
* Suggest using `screen` while querying
|
|
13476
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-screen-queries.md
|
|
13477
|
+
*/
|
|
13478
|
+
'testing-library/prefer-screen-queries'?: Linter.RuleEntry<[]>;
|
|
13479
|
+
/**
|
|
13480
|
+
* Suggest using `userEvent` over `fireEvent` for simulating user interactions
|
|
13481
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-user-event.md
|
|
13482
|
+
*/
|
|
13483
|
+
'testing-library/prefer-user-event'?: Linter.RuleEntry<TestingLibraryPreferUserEvent>;
|
|
13484
|
+
/**
|
|
13485
|
+
* Suggest using userEvent with setup() instead of direct methods
|
|
13486
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-user-event-setup.md
|
|
13487
|
+
*/
|
|
13488
|
+
'testing-library/prefer-user-event-setup'?: Linter.RuleEntry<[]>;
|
|
13489
|
+
/**
|
|
13490
|
+
* Enforce a valid naming for return value from `render`
|
|
13491
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/render-result-naming-convention.md
|
|
13492
|
+
*/
|
|
13493
|
+
'testing-library/render-result-naming-convention'?: Linter.RuleEntry<[]>;
|
|
13349
13494
|
/**
|
|
13350
13495
|
* enforce linebreaks after opening and before closing array brackets
|
|
13351
13496
|
* @see https://ota-meshi.github.io/eslint-plugin-toml/rules/array-bracket-newline.html
|
|
@@ -24744,6 +24889,66 @@ type SwitchColonSpacing = [] | [{
|
|
|
24744
24889
|
type TemplateCurlySpacing = [] | [("always" | "never")];
|
|
24745
24890
|
// ----- template-tag-spacing -----
|
|
24746
24891
|
type TemplateTagSpacing = [] | [("always" | "never")];
|
|
24892
|
+
// ----- testing-library/await-async-events -----
|
|
24893
|
+
type TestingLibraryAwaitAsyncEvents = [] | [{
|
|
24894
|
+
eventModule?: (("fireEvent" | "userEvent") | ("fireEvent" | "userEvent")[]);
|
|
24895
|
+
}];
|
|
24896
|
+
// ----- testing-library/consistent-data-testid -----
|
|
24897
|
+
type TestingLibraryConsistentDataTestid = [] | [{
|
|
24898
|
+
testIdPattern: string;
|
|
24899
|
+
testIdAttribute?: (string | string[]);
|
|
24900
|
+
customMessage?: string;
|
|
24901
|
+
}];
|
|
24902
|
+
// ----- testing-library/no-await-sync-events -----
|
|
24903
|
+
type TestingLibraryNoAwaitSyncEvents = [] | [{
|
|
24904
|
+
eventModules?: [("fire-event" | "user-event"), ...(("fire-event" | "user-event"))[]];
|
|
24905
|
+
}];
|
|
24906
|
+
// ----- testing-library/no-debugging-utils -----
|
|
24907
|
+
type TestingLibraryNoDebuggingUtils = [] | [{
|
|
24908
|
+
utilsToCheckFor?: {
|
|
24909
|
+
prettyFormat?: boolean;
|
|
24910
|
+
logDOM?: boolean;
|
|
24911
|
+
logRoles?: boolean;
|
|
24912
|
+
prettyDOM?: boolean;
|
|
24913
|
+
logTestingPlaygroundURL?: boolean;
|
|
24914
|
+
debug?: boolean;
|
|
24915
|
+
};
|
|
24916
|
+
}];
|
|
24917
|
+
// ----- testing-library/no-dom-import -----
|
|
24918
|
+
type TestingLibraryNoDomImport = [] | [string];
|
|
24919
|
+
// ----- testing-library/no-node-access -----
|
|
24920
|
+
type TestingLibraryNoNodeAccess = [] | [{
|
|
24921
|
+
allowContainerFirstChild?: boolean;
|
|
24922
|
+
}];
|
|
24923
|
+
// ----- testing-library/no-render-in-lifecycle -----
|
|
24924
|
+
type TestingLibraryNoRenderInLifecycle = [] | [{
|
|
24925
|
+
allowTestingFrameworkSetupHook?: ("beforeEach" | "beforeAll");
|
|
24926
|
+
}];
|
|
24927
|
+
// ----- testing-library/no-unnecessary-act -----
|
|
24928
|
+
type TestingLibraryNoUnnecessaryAct = [] | [{
|
|
24929
|
+
isStrict?: boolean;
|
|
24930
|
+
}];
|
|
24931
|
+
// ----- testing-library/prefer-explicit-assert -----
|
|
24932
|
+
type TestingLibraryPreferExplicitAssert = [] | [{
|
|
24933
|
+
assertion?: ("toBeOnTheScreen" | "toBeInTheDocument" | "toBeTruthy" | "toBeDefined");
|
|
24934
|
+
includeFindQueries?: boolean;
|
|
24935
|
+
}];
|
|
24936
|
+
// ----- testing-library/prefer-presence-queries -----
|
|
24937
|
+
type TestingLibraryPreferPresenceQueries = [] | [{
|
|
24938
|
+
presence?: boolean;
|
|
24939
|
+
absence?: boolean;
|
|
24940
|
+
}];
|
|
24941
|
+
// ----- testing-library/prefer-query-matchers -----
|
|
24942
|
+
type TestingLibraryPreferQueryMatchers = [] | [{
|
|
24943
|
+
validEntries?: {
|
|
24944
|
+
query?: ("get" | "query");
|
|
24945
|
+
matcher?: string;
|
|
24946
|
+
}[];
|
|
24947
|
+
}];
|
|
24948
|
+
// ----- testing-library/prefer-user-event -----
|
|
24949
|
+
type TestingLibraryPreferUserEvent = [] | [{
|
|
24950
|
+
allowedMethods?: unknown[];
|
|
24951
|
+
}];
|
|
24747
24952
|
// ----- toml/array-bracket-newline -----
|
|
24748
24953
|
type TomlArrayBracketNewline = [] | [(("always" | "never" | "consistent") | {
|
|
24749
24954
|
multiline?: boolean;
|
|
@@ -26665,7 +26870,7 @@ type Yoda = [] | [("always" | "never")] | [("always" | "never"), {
|
|
|
26665
26870
|
onlyEquality?: boolean;
|
|
26666
26871
|
}];
|
|
26667
26872
|
// Names of all the configs
|
|
26668
|
-
type ConfigNames = 'isentinel/eslint/comments' | 'isentinel/eslint/comments/src' | 'isentinel/e18e/rules' | 'isentinel/eslint-plugin/setup' | 'isentinel/eslint-plugin/rules' | 'isentinel/flawless/setup' | 'isentinel/flawless/rules' | 'isentinel/flawless/markdown-code' | 'isentinel/flawless/rules-type-aware' | 'isentinel/gitignore' | 'isentinel/ignores' | 'isentinel/imports/rules' | 'isentinel/imports/game' | 'isentinel/javascript/setup' | 'isentinel/javascript/rules' | 'isentinel/jsdoc/setup' | 'isentinel/jsdoc' | 'isentinel/jsonc/setup' | 'isentinel/jsonc/rules' | 'isentinel/jsonc/tsconfig' | 'isentinel/markdown/setup' | 'isentinel/markdown/processor' | 'isentinel/markdown/parser' | 'isentinel/markdown/disables' | 'isentinel/naming/setup' | 'isentinel/naming/ts/rules-type-aware' | 'isentinel/naming/tsx/rules-type-aware' | 'isentinel/node/rules' | 'isentinel/oxfmt/setup' | 'isentinel/oxfmt/javascript' | 'isentinel/oxfmt/typescript' | 'isentinel/oxfmt/css' | 'isentinel/oxfmt/scss' | 'isentinel/oxfmt/less' | 'isentinel/oxfmt/html' | 'isentinel/oxfmt/markdown' | 'isentinel/oxfmt/graphql' | 'isentinel/oxfmt/json' | 'isentinel/oxfmt/yaml' | 'isentinel/package-json/setup' | 'isentinel/package-json' | 'isentinel/package-json/root' | 'isentinel/perfectionist/setup' | 'isentinel/perfectionist' | 'isentinel/perfectionist/jsx' | 'isentinel/pnpm/setup' | 'isentinel/pnpm/package-json' | 'isentinel/pnpm/pnpm-workspace-yaml' | 'isentinel/promise' | 'isentinel/react/setup' | 'isentinel/react/setup/naming' | 'isentinel/react/rules' | 'isentinel/react/type-aware-rules' | 'isentinel/roblox/setup' | 'isentinel/roblox/parser' | 'isentinel/roblox/type-aware-parser' | 'isentinel/roblox' | 'isentinel/roblox/rules-type-aware' | 'isentinel/roblox/format-lua/setup' | 'isentinel/roblox/format-lua' | 'isentinel/small-rules/setup' | 'isentinel/small-rules' | 'isentinel/sonarjs' | 'isentinel/spelling/setup' | 'isentinel/spelling' | 'isentinel/stylistic/setup' | 'isentinel/stylistic' | 'isentinel/test/jest/setup' | 'isentinel/test/jest/rules' | 'isentinel/test/jest/type-tests' | 'isentinel/test/vitest/setup' | 'isentinel/test/vitest/rules' | 'isentinel/test/vitest/type-tests' | 'isentinel/toml/setup' | 'isentinel/toml/rules' | 'isentinel/typescript/setup' | 'isentinel/typescript/parser' | 'isentinel/typescript/type-aware-parser' | 'isentinel/typescript/rules' | 'isentinel/typescript/rules-type-aware' | 'isentinel/typescript/erasable-syntax-only' | 'isentinel/unicorn/setup' | 'isentinel/unicorn/rules' | 'isentinel/unicorn/root' | 'isentinel/yaml/setup' | 'isentinel/yaml/rules';
|
|
26873
|
+
type ConfigNames = 'isentinel/eslint/comments' | 'isentinel/eslint/comments/src' | 'isentinel/e18e/rules' | 'isentinel/eslint-plugin/setup' | 'isentinel/eslint-plugin/rules' | 'isentinel/flawless/setup' | 'isentinel/flawless/rules' | 'isentinel/flawless/markdown-code' | 'isentinel/flawless/rules-type-aware' | 'isentinel/gitignore' | 'isentinel/ignores' | 'isentinel/imports/rules' | 'isentinel/imports/game' | 'isentinel/javascript/setup' | 'isentinel/javascript/rules' | 'isentinel/jsdoc/setup' | 'isentinel/jsdoc' | 'isentinel/jsonc/setup' | 'isentinel/jsonc/rules' | 'isentinel/jsonc/tsconfig' | 'isentinel/markdown/setup' | 'isentinel/markdown/processor' | 'isentinel/markdown/parser' | 'isentinel/markdown/disables' | 'isentinel/naming/setup' | 'isentinel/naming/ts/rules-type-aware' | 'isentinel/naming/tsx/rules-type-aware' | 'isentinel/node/rules' | 'isentinel/oxfmt/setup' | 'isentinel/oxfmt/javascript' | 'isentinel/oxfmt/typescript' | 'isentinel/oxfmt/css' | 'isentinel/oxfmt/scss' | 'isentinel/oxfmt/less' | 'isentinel/oxfmt/html' | 'isentinel/oxfmt/markdown' | 'isentinel/oxfmt/graphql' | 'isentinel/oxfmt/json' | 'isentinel/oxfmt/yaml' | 'isentinel/package-json/setup' | 'isentinel/package-json' | 'isentinel/package-json/root' | 'isentinel/perfectionist/setup' | 'isentinel/perfectionist' | 'isentinel/perfectionist/jsx' | 'isentinel/pnpm/setup' | 'isentinel/pnpm/package-json' | 'isentinel/pnpm/pnpm-workspace-yaml' | 'isentinel/promise' | 'isentinel/react/setup' | 'isentinel/react/setup/naming' | 'isentinel/react/setup/testing-library' | 'isentinel/react/rules' | 'isentinel/react/type-aware-rules' | 'isentinel/roblox/setup' | 'isentinel/roblox/parser' | 'isentinel/roblox/type-aware-parser' | 'isentinel/roblox' | 'isentinel/roblox/rules-type-aware' | 'isentinel/roblox/format-lua/setup' | 'isentinel/roblox/format-lua' | 'isentinel/small-rules/setup' | 'isentinel/small-rules' | 'isentinel/sonarjs' | 'isentinel/spelling/setup' | 'isentinel/spelling' | 'isentinel/stylistic/setup' | 'isentinel/stylistic' | 'isentinel/test/jest/setup' | 'isentinel/test/jest/rules' | 'isentinel/test/jest/type-tests' | 'isentinel/test/vitest/setup' | 'isentinel/test/vitest/rules' | 'isentinel/test/vitest/type-tests' | 'isentinel/toml/setup' | 'isentinel/toml/rules' | 'isentinel/typescript/setup' | 'isentinel/typescript/parser' | 'isentinel/typescript/type-aware-parser' | 'isentinel/typescript/rules' | 'isentinel/typescript/rules-type-aware' | 'isentinel/typescript/erasable-syntax-only' | 'isentinel/unicorn/setup' | 'isentinel/unicorn/rules' | 'isentinel/unicorn/root' | 'isentinel/yaml/setup' | 'isentinel/yaml/rules';
|
|
26669
26874
|
//#endregion
|
|
26670
26875
|
//#region src/utils.d.ts
|
|
26671
26876
|
type ExtractRuleOptions<T> = T extends Linter.RuleEntry<infer U> ? U : never;
|
|
@@ -26722,12 +26927,23 @@ interface JsdocOptions {
|
|
|
26722
26927
|
full?: boolean;
|
|
26723
26928
|
}
|
|
26724
26929
|
type Rules = Record<string, Linter.RuleEntry<any> | undefined> & RuleOptions;
|
|
26930
|
+
type ConfigSettings = NonNullable<Linter.Config["settings"]> & {
|
|
26931
|
+
"testing-library"?: {
|
|
26932
|
+
/**
|
|
26933
|
+
* Package name for DOM Testing Library.
|
|
26934
|
+
*
|
|
26935
|
+
* When React testing support is enabled, importing this package is
|
|
26936
|
+
* forbidden in favor of `react-testing-library-lua`.
|
|
26937
|
+
*/
|
|
26938
|
+
domPackage?: string;
|
|
26939
|
+
};
|
|
26940
|
+
};
|
|
26725
26941
|
/**
|
|
26726
26942
|
* An updated version of ESLint's `Linter.Config`, which provides autocompletion
|
|
26727
26943
|
* for `rules` and relaxes type limitations for `plugins` and `rules`, because
|
|
26728
26944
|
* many plugins still lack proper type definitions.
|
|
26729
26945
|
*/
|
|
26730
|
-
type TypedFlatConfigItem = Omit<Linter.Config<Linter.RulesRecord & Rules>, "plugins"> & {
|
|
26946
|
+
type TypedFlatConfigItem = Omit<Linter.Config<Linter.RulesRecord & Rules>, "plugins" | "settings"> & {
|
|
26731
26947
|
/**
|
|
26732
26948
|
* The base directory that `files` and `ignores` patterns in this config
|
|
26733
26949
|
* object are resolved against. Defaults to the location ESLint derives the
|
|
@@ -26750,6 +26966,8 @@ type TypedFlatConfigItem = Omit<Linter.Config<Linter.RulesRecord & Rules>, "plug
|
|
|
26750
26966
|
* files.
|
|
26751
26967
|
*/
|
|
26752
26968
|
rules?: Rules;
|
|
26969
|
+
/** Shared settings consumed by configured plugins and presets. */
|
|
26970
|
+
settings?: ConfigSettings;
|
|
26753
26971
|
};
|
|
26754
26972
|
interface OptionsComponentExtensions {
|
|
26755
26973
|
/** Additional extensions for components. */
|
|
@@ -27087,6 +27305,14 @@ type ReactConfig = OptionsOverridesTypeAware & ReactSettings & {
|
|
|
27087
27305
|
* @default true
|
|
27088
27306
|
*/
|
|
27089
27307
|
reactCompiler?: boolean;
|
|
27308
|
+
/**
|
|
27309
|
+
* Whether to enable Testing Library rules for testing-library-lua.
|
|
27310
|
+
*
|
|
27311
|
+
* Requires installing `eslint-plugin-testing-library`.
|
|
27312
|
+
*
|
|
27313
|
+
* @default false
|
|
27314
|
+
*/
|
|
27315
|
+
testing?: boolean;
|
|
27090
27316
|
} & {
|
|
27091
27317
|
filenameCase?: "kebabCase" | "pascalCase";
|
|
27092
27318
|
};
|
|
@@ -27326,6 +27552,10 @@ interface OptionsConfig extends OptionsComponentExtensions, OptionsProjectType {
|
|
|
27326
27552
|
*
|
|
27327
27553
|
* - `eslint-plugin-react-naming-convention`.
|
|
27328
27554
|
*
|
|
27555
|
+
* If `testing` is enabled, also requires:
|
|
27556
|
+
*
|
|
27557
|
+
* - `eslint-plugin-testing-library`.
|
|
27558
|
+
*
|
|
27329
27559
|
* @default false
|
|
27330
27560
|
*/
|
|
27331
27561
|
react?: boolean | ReactConfig;
|
|
@@ -27749,7 +27979,9 @@ declare function pnpm(options: OptionsPnpm & Required<OptionsIsInEditor>): Promi
|
|
|
27749
27979
|
declare function promise(): Array<TypedFlatConfigItem>;
|
|
27750
27980
|
//#endregion
|
|
27751
27981
|
//#region src/eslint/configs/react.d.ts
|
|
27752
|
-
declare function react(options?: OptionsComponentExtensions & OptionsFiles & OptionsStylistic & OptionsTypeScriptParserOptions & OptionsTypeScriptWithTypes & ReactConfig
|
|
27982
|
+
declare function react(options?: OptionsComponentExtensions & OptionsFiles & OptionsStylistic & OptionsTypeScriptParserOptions & OptionsTypeScriptWithTypes & ReactConfig & {
|
|
27983
|
+
settings?: ConfigSettings;
|
|
27984
|
+
}): Promise<Array<TypedFlatConfigItem>>;
|
|
27753
27985
|
//#endregion
|
|
27754
27986
|
//#region src/eslint/configs/roblox.d.ts
|
|
27755
27987
|
declare function roblox$1(options?: OptionsComponentExtensions & OptionsFilesTypeAware & OptionsOverridesTypeAware & OptionsStylistic & OptionsTypeScriptParserOptions & OptionsTypeScriptWithTypes, formatLua?: boolean): Promise<Array<TypedFlatConfigItem>>;
|
|
@@ -27849,4 +28081,4 @@ declare function unicorn({ complementIgnores, nameReplacements, roblox, root: cu
|
|
|
27849
28081
|
//#region src/eslint/configs/yaml.d.ts
|
|
27850
28082
|
declare function yaml({ files, overrides, stylistic }?: OptionsFiles & OptionsOverrides & OptionsStylistic): Promise<Array<TypedFlatConfigItem>>;
|
|
27851
28083
|
//#endregion
|
|
27852
|
-
export { type Awaitable, type ConfigNames, type FlatConfigComposer, GLOB_ALL_JSON, GLOB_ALL_SRC, GLOB_BIN, GLOB_BUILD_CONFIGS, GLOB_CSS, GLOB_DTS, GLOB_EXCLUDE, GLOB_GRAPHQL, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_LINTABLE_EXTENSIONS, GLOB_LUA, GLOB_MARKDOWN, GLOB_MARKDOWN_BLOCKS, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_MISE, GLOB_PACKAGE_JSON, GLOB_PACKAGE_JSON_ROOT, GLOB_POSTCSS, GLOB_ROOT, GLOB_ROOT_SRC, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_SRC_EXTENSIONS, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSCONFIG, GLOB_TSX, GLOB_TYPE_TESTS, GLOB_XML, GLOB_YAML, GitignoreOptions, type JsdocOptions, MARKDOWN_PROCESSOR_NAME, type NamedFlatConfigItem, type NamedOptionsConfig, type NamingConfig, type NamingSelector, type OptionsComponentExtensions, type OptionsConfig, type OptionsE18e, type OptionsFiles, type OptionsFilesTypeAware, type OptionsFormatters, type OptionsHasRoblox, type OptionsHasTypeScript, type OptionsIsInEditor, type OptionsJest, type OptionsOverrides, type OptionsOverridesTypeAware, type OptionsPnpm, type OptionsProjectType, type OptionsStylistic, type OptionsTestFramework, type OptionsTypeScriptErasableOnly, type OptionsTypeScriptParserOptions, type OptionsTypeScriptWithTypes, type OptionsTypescript, type OptionsUnicorn, type OptionsVitest, type OxfmtOptions, type PerfectionistConfig, type PrettierOptions, type ReactConfig, type ReactSettings, type Rules, type SpellCheckConfig, type StylisticConfig, StylisticConfigDefaults, type TypedFlatConfigItem, comments, isentinel as default, isentinel, defaultPluginRenaming, disables, e18e, eslintPlugin, flawless, gitignore, ignores$1 as ignores, imports, isAgentAutofixDisabled, isInAgentSession, isInEditorEnvironment, isInGitHooksOrLintStaged, javascript, jsdoc, jsonc, loadSmallRulesPlugin, markdown, naming, node, oxfmt, packageJson, perfectionist, pnpm, promise, react, roblox$1 as roblox, smallRules, sonarjs, sortCspell, sortGithubAction, sortMiseToml, sortPnpmWorkspace, sortRojoProject, sortTsconfig, spelling, stylistic$1 as stylistic, test, toml, typescript, unicorn, yaml };
|
|
28084
|
+
export { type Awaitable, type ConfigNames, type ConfigSettings, type FlatConfigComposer, GLOB_ALL_JSON, GLOB_ALL_SRC, GLOB_BIN, GLOB_BUILD_CONFIGS, GLOB_CSS, GLOB_DTS, GLOB_EXCLUDE, GLOB_GRAPHQL, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_LINTABLE_EXTENSIONS, GLOB_LUA, GLOB_MARKDOWN, GLOB_MARKDOWN_BLOCKS, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_MISE, GLOB_PACKAGE_JSON, GLOB_PACKAGE_JSON_ROOT, GLOB_POSTCSS, GLOB_ROOT, GLOB_ROOT_SRC, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_SRC_EXTENSIONS, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSCONFIG, GLOB_TSX, GLOB_TYPE_TESTS, GLOB_XML, GLOB_YAML, GitignoreOptions, type JsdocOptions, MARKDOWN_PROCESSOR_NAME, type NamedFlatConfigItem, type NamedOptionsConfig, type NamingConfig, type NamingSelector, type OptionsComponentExtensions, type OptionsConfig, type OptionsE18e, type OptionsFiles, type OptionsFilesTypeAware, type OptionsFormatters, type OptionsHasRoblox, type OptionsHasTypeScript, type OptionsIsInEditor, type OptionsJest, type OptionsOverrides, type OptionsOverridesTypeAware, type OptionsPnpm, type OptionsProjectType, type OptionsStylistic, type OptionsTestFramework, type OptionsTypeScriptErasableOnly, type OptionsTypeScriptParserOptions, type OptionsTypeScriptWithTypes, type OptionsTypescript, type OptionsUnicorn, type OptionsVitest, type OxfmtOptions, type PerfectionistConfig, type PrettierOptions, type ReactConfig, type ReactSettings, type Rules, type SpellCheckConfig, type StylisticConfig, StylisticConfigDefaults, type TypedFlatConfigItem, comments, isentinel as default, isentinel, defaultPluginRenaming, disables, e18e, eslintPlugin, flawless, gitignore, ignores$1 as ignores, imports, isAgentAutofixDisabled, isInAgentSession, isInEditorEnvironment, isInGitHooksOrLintStaged, javascript, jsdoc, jsonc, loadSmallRulesPlugin, markdown, naming, node, oxfmt, packageJson, perfectionist, pnpm, promise, react, roblox$1 as roblox, smallRules, sonarjs, sortCspell, sortGithubAction, sortMiseToml, sortPnpmWorkspace, sortRojoProject, sortTsconfig, spelling, stylistic$1 as stylistic, test, toml, typescript, unicorn, yaml };
|
package/dist/index.mjs
CHANGED
|
@@ -3578,6 +3578,20 @@ function promise() {
|
|
|
3578
3578
|
//#endregion
|
|
3579
3579
|
//#region src/rules/react.ts
|
|
3580
3580
|
/**
|
|
3581
|
+
* Build the direct DOM Testing Library import restriction shared by both
|
|
3582
|
+
* engines.
|
|
3583
|
+
*
|
|
3584
|
+
* @param domPackage - Package name for DOM Testing Library.
|
|
3585
|
+
* @returns The configured restriction, or `undefined` when no package is set.
|
|
3586
|
+
*/
|
|
3587
|
+
function restrictedDomImportRule(domPackage) {
|
|
3588
|
+
if (domPackage === void 0) return;
|
|
3589
|
+
return ["error", { paths: [{
|
|
3590
|
+
name: domPackage,
|
|
3591
|
+
message: "Import from react-testing-library-lua instead; it re-exports the DOM utilities, and eslint-plugin-testing-library only detects one module per file."
|
|
3592
|
+
}] }];
|
|
3593
|
+
}
|
|
3594
|
+
/**
|
|
3581
3595
|
* React rules shared between the ESLint and oxlint factories.
|
|
3582
3596
|
*
|
|
3583
3597
|
* The type-aware react rules stay in the ESLint config (oxlint jsPlugins have
|
|
@@ -3586,7 +3600,8 @@ function promise() {
|
|
|
3586
3600
|
* @param options - Shared rule options.
|
|
3587
3601
|
* @returns The rule map.
|
|
3588
3602
|
*/
|
|
3589
|
-
function reactRules({ filenameCase = "kebabCase", reactCompiler = true, stylistic = true } = {}) {
|
|
3603
|
+
function reactRules({ domPackage, filenameCase = "kebabCase", reactCompiler = true, stylistic = true, testing = false } = {}) {
|
|
3604
|
+
const restrictedDomImport = testing ? restrictedDomImportRule(domPackage) : void 0;
|
|
3590
3605
|
return {
|
|
3591
3606
|
"flawless/no-unnecessary-use-callback": "error",
|
|
3592
3607
|
"flawless/no-unnecessary-use-memo": "error",
|
|
@@ -3684,6 +3699,28 @@ function reactRules({ filenameCase = "kebabCase", reactCompiler = true, stylisti
|
|
|
3684
3699
|
enforceAssignment: false,
|
|
3685
3700
|
enforceSetterName: false
|
|
3686
3701
|
}],
|
|
3702
|
+
...testing ? {
|
|
3703
|
+
"testing-library/await-async-queries": "error",
|
|
3704
|
+
"testing-library/await-async-utils": "error",
|
|
3705
|
+
"testing-library/no-await-sync-events": ["error", { eventModules: ["fire-event"] }],
|
|
3706
|
+
"testing-library/no-await-sync-queries": "error",
|
|
3707
|
+
"testing-library/no-container": "error",
|
|
3708
|
+
"testing-library/no-debugging-utils": "error",
|
|
3709
|
+
"testing-library/no-manual-cleanup": "error",
|
|
3710
|
+
"testing-library/no-promise-in-fire-event": "error",
|
|
3711
|
+
"testing-library/no-render-in-lifecycle": "error",
|
|
3712
|
+
"testing-library/no-unnecessary-act": "error",
|
|
3713
|
+
"testing-library/no-wait-for-multiple-assertions": "error",
|
|
3714
|
+
"testing-library/no-wait-for-side-effects": "error",
|
|
3715
|
+
"testing-library/no-wait-for-snapshot": "error",
|
|
3716
|
+
"testing-library/prefer-explicit-assert": "error",
|
|
3717
|
+
"testing-library/prefer-find-by": "error",
|
|
3718
|
+
"testing-library/prefer-presence-queries": "error",
|
|
3719
|
+
"testing-library/prefer-query-by-disappearance": "error",
|
|
3720
|
+
"testing-library/prefer-screen-queries": "error",
|
|
3721
|
+
"testing-library/render-result-naming-convention": "error",
|
|
3722
|
+
...restrictedDomImport !== void 0 ? { "no-restricted-imports": restrictedDomImport } : {}
|
|
3723
|
+
} : {},
|
|
3687
3724
|
...stylistic !== false ? {
|
|
3688
3725
|
"flawless/jsx-shorthand-boolean": "warn",
|
|
3689
3726
|
"flawless/jsx-shorthand-fragment": "warn",
|
|
@@ -3783,9 +3820,11 @@ function smallRules(options = {}) {
|
|
|
3783
3820
|
//#region src/eslint/configs/react.ts
|
|
3784
3821
|
init_globs();
|
|
3785
3822
|
async function react(options = {}) {
|
|
3786
|
-
const { filenameCase = "kebabCase", files = [GLOB_JSX, GLOB_TSX], filesTypeAware = [GLOB_TSX], ignoresTypeAware = [`${GLOB_MARKDOWN}/**`], importSource, overrides = {}, overridesTypeAware, reactCompiler = true, stylistic = true, typeAware = true } = options;
|
|
3823
|
+
const { filenameCase = "kebabCase", files = [GLOB_JSX, GLOB_TSX], filesTypeAware = [GLOB_TSX], ignoresTypeAware = [`${GLOB_MARKDOWN}/**`], importSource, overrides = {}, overridesTypeAware, reactCompiler = true, stylistic = true, testing = false, typeAware = true } = options;
|
|
3824
|
+
const domPackage = options.settings?.["testing-library"]?.domPackage;
|
|
3787
3825
|
await ensurePackages(["eslint-plugin-react-x", "eslint-plugin-react-jsx"]);
|
|
3788
3826
|
if (stylistic !== false) await ensurePackages(["eslint-plugin-react-naming-convention"]);
|
|
3827
|
+
if (testing) await ensurePackages(["eslint-plugin-testing-library"]);
|
|
3789
3828
|
const pluginSmallRules = loadSmallRulesPlugin();
|
|
3790
3829
|
const pluginStylistic = lazyPlugin("@stylistic/eslint-plugin");
|
|
3791
3830
|
const [pluginReactCore, pluginReactJsx, pluginFlawless, pluginTs, pluginUnicorn, pluginUnusedImports] = await Promise.all([
|
|
@@ -3826,6 +3865,10 @@ async function react(options = {}) {
|
|
|
3826
3865
|
name: "isentinel/react/setup/naming",
|
|
3827
3866
|
plugins: { "react-naming-convention": await interopDefault(import("eslint-plugin-react-naming-convention")) }
|
|
3828
3867
|
}] : [],
|
|
3868
|
+
...testing ? [{
|
|
3869
|
+
name: "isentinel/react/setup/testing-library",
|
|
3870
|
+
plugins: { "testing-library": await interopDefault(import("eslint-plugin-testing-library")) }
|
|
3871
|
+
}] : [],
|
|
3829
3872
|
{
|
|
3830
3873
|
name: "isentinel/react/rules",
|
|
3831
3874
|
files,
|
|
@@ -3835,13 +3878,18 @@ async function react(options = {}) {
|
|
|
3835
3878
|
},
|
|
3836
3879
|
rules: {
|
|
3837
3880
|
...reactRules({
|
|
3881
|
+
domPackage,
|
|
3838
3882
|
filenameCase,
|
|
3839
3883
|
reactCompiler,
|
|
3840
|
-
stylistic
|
|
3884
|
+
stylistic,
|
|
3885
|
+
testing
|
|
3841
3886
|
}),
|
|
3842
3887
|
...overrides
|
|
3843
3888
|
},
|
|
3844
|
-
settings: {
|
|
3889
|
+
settings: {
|
|
3890
|
+
"react-x": reactSettings,
|
|
3891
|
+
...testing ? { "testing-library/utils-module": "testing-library-lua" } : {}
|
|
3892
|
+
}
|
|
3845
3893
|
},
|
|
3846
3894
|
...isTypeAware ? [{
|
|
3847
3895
|
name: "isentinel/react/type-aware-rules",
|
|
@@ -15065,6 +15113,7 @@ const typeAwarePrefixes = /* @__PURE__ */ new Set([
|
|
|
15065
15113
|
"small-rules",
|
|
15066
15114
|
"sonar",
|
|
15067
15115
|
"style",
|
|
15116
|
+
"testing-library",
|
|
15068
15117
|
"toml",
|
|
15069
15118
|
"ts",
|
|
15070
15119
|
"unicorn",
|
|
@@ -15314,6 +15363,7 @@ var init_adapters = __esmMin((() => {
|
|
|
15314
15363
|
"small-rules": "@pobammer-ts/small-rules",
|
|
15315
15364
|
"sonar": "eslint-plugin-sonarjs",
|
|
15316
15365
|
"style": "@stylistic/eslint-plugin",
|
|
15366
|
+
"testing-library": "eslint-plugin-testing-library",
|
|
15317
15367
|
"ts": "@typescript-eslint/eslint-plugin",
|
|
15318
15368
|
"unicorn-js": "eslint-plugin-unicorn",
|
|
15319
15369
|
"unused-imports": "eslint-plugin-unused-imports",
|
|
@@ -15380,6 +15430,7 @@ var init_adapters = __esmMin((() => {
|
|
|
15380
15430
|
"small-rules": NATIVE_FIRST,
|
|
15381
15431
|
"sonar": NATIVE_FIRST,
|
|
15382
15432
|
"style": NATIVE_FIRST,
|
|
15433
|
+
"testing-library": "js-plugin",
|
|
15383
15434
|
"toml": ESLINT_ONLY,
|
|
15384
15435
|
"ts": NATIVE_FIRST,
|
|
15385
15436
|
"unicorn": NATIVE_FIRST,
|
|
@@ -16797,6 +16848,35 @@ var init_oxlint_capabilities = __esmMin((() => {
|
|
|
16797
16848
|
"symbol-description",
|
|
16798
16849
|
"template-curly-spacing",
|
|
16799
16850
|
"template-tag-spacing",
|
|
16851
|
+
"testing-library/await-async-events",
|
|
16852
|
+
"testing-library/await-async-queries",
|
|
16853
|
+
"testing-library/await-async-utils",
|
|
16854
|
+
"testing-library/consistent-data-testid",
|
|
16855
|
+
"testing-library/no-await-sync-events",
|
|
16856
|
+
"testing-library/no-await-sync-queries",
|
|
16857
|
+
"testing-library/no-container",
|
|
16858
|
+
"testing-library/no-debugging-utils",
|
|
16859
|
+
"testing-library/no-dom-import",
|
|
16860
|
+
"testing-library/no-global-regexp-flag-in-query",
|
|
16861
|
+
"testing-library/no-manual-cleanup",
|
|
16862
|
+
"testing-library/no-node-access",
|
|
16863
|
+
"testing-library/no-promise-in-fire-event",
|
|
16864
|
+
"testing-library/no-render-in-lifecycle",
|
|
16865
|
+
"testing-library/no-test-id-queries",
|
|
16866
|
+
"testing-library/no-unnecessary-act",
|
|
16867
|
+
"testing-library/no-wait-for-multiple-assertions",
|
|
16868
|
+
"testing-library/no-wait-for-side-effects",
|
|
16869
|
+
"testing-library/no-wait-for-snapshot",
|
|
16870
|
+
"testing-library/prefer-explicit-assert",
|
|
16871
|
+
"testing-library/prefer-find-by",
|
|
16872
|
+
"testing-library/prefer-implicit-assert",
|
|
16873
|
+
"testing-library/prefer-presence-queries",
|
|
16874
|
+
"testing-library/prefer-query-by-disappearance",
|
|
16875
|
+
"testing-library/prefer-query-matchers",
|
|
16876
|
+
"testing-library/prefer-screen-queries",
|
|
16877
|
+
"testing-library/prefer-user-event",
|
|
16878
|
+
"testing-library/prefer-user-event-setup",
|
|
16879
|
+
"testing-library/render-result-naming-convention",
|
|
16800
16880
|
"ts/adjacent-overload-signatures",
|
|
16801
16881
|
"ts/array-type",
|
|
16802
16882
|
"ts/await-thenable",
|
|
@@ -19711,7 +19791,8 @@ async function isentinel(options, ...userConfigs) {
|
|
|
19711
19791
|
}
|
|
19712
19792
|
if (enableReact !== false) configs.push(react({
|
|
19713
19793
|
...resolveSubOptions(options, "react"),
|
|
19714
|
-
...getOverrides(options, "react")
|
|
19794
|
+
...getOverrides(options, "react"),
|
|
19795
|
+
settings: options.settings
|
|
19715
19796
|
}));
|
|
19716
19797
|
if (enableJsonc !== false && !typeAwareOnly) {
|
|
19717
19798
|
configs.push(jsonc({
|
package/dist/lint-cli.mjs
CHANGED
|
@@ -38,7 +38,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
38
38
|
}) : target, mod));
|
|
39
39
|
//#endregion
|
|
40
40
|
//#region package.json
|
|
41
|
-
var version = "6.0.0-beta.
|
|
41
|
+
var version = "6.0.0-beta.35";
|
|
42
42
|
//#endregion
|
|
43
43
|
//#region src/lint-cli/lib/cli/types.ts
|
|
44
44
|
/**
|
package/dist/oxlint.d.mts
CHANGED
|
@@ -10750,6 +10750,151 @@ interface RuleOptions {
|
|
|
10750
10750
|
* @deprecated
|
|
10751
10751
|
*/
|
|
10752
10752
|
'template-tag-spacing'?: Linter.RuleEntry<TemplateTagSpacing>;
|
|
10753
|
+
/**
|
|
10754
|
+
* Enforce promises from async event methods are handled
|
|
10755
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/await-async-events.md
|
|
10756
|
+
*/
|
|
10757
|
+
'testing-library/await-async-events'?: Linter.RuleEntry<TestingLibraryAwaitAsyncEvents>;
|
|
10758
|
+
/**
|
|
10759
|
+
* Enforce promises from async queries to be handled
|
|
10760
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/await-async-queries.md
|
|
10761
|
+
*/
|
|
10762
|
+
'testing-library/await-async-queries'?: Linter.RuleEntry<[]>;
|
|
10763
|
+
/**
|
|
10764
|
+
* Enforce promises from async utils to be awaited properly
|
|
10765
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/await-async-utils.md
|
|
10766
|
+
*/
|
|
10767
|
+
'testing-library/await-async-utils'?: Linter.RuleEntry<[]>;
|
|
10768
|
+
/**
|
|
10769
|
+
* Ensures consistent usage of `data-testid`
|
|
10770
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/consistent-data-testid.md
|
|
10771
|
+
*/
|
|
10772
|
+
'testing-library/consistent-data-testid'?: Linter.RuleEntry<TestingLibraryConsistentDataTestid>;
|
|
10773
|
+
/**
|
|
10774
|
+
* Disallow unnecessary `await` for sync events
|
|
10775
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-await-sync-events.md
|
|
10776
|
+
*/
|
|
10777
|
+
'testing-library/no-await-sync-events'?: Linter.RuleEntry<TestingLibraryNoAwaitSyncEvents>;
|
|
10778
|
+
/**
|
|
10779
|
+
* Disallow unnecessary `await` for sync queries
|
|
10780
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-await-sync-queries.md
|
|
10781
|
+
*/
|
|
10782
|
+
'testing-library/no-await-sync-queries'?: Linter.RuleEntry<[]>;
|
|
10783
|
+
/**
|
|
10784
|
+
* Disallow the use of `container` methods
|
|
10785
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-container.md
|
|
10786
|
+
*/
|
|
10787
|
+
'testing-library/no-container'?: Linter.RuleEntry<[]>;
|
|
10788
|
+
/**
|
|
10789
|
+
* Disallow the use of debugging utilities like `debug`
|
|
10790
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-debugging-utils.md
|
|
10791
|
+
*/
|
|
10792
|
+
'testing-library/no-debugging-utils'?: Linter.RuleEntry<TestingLibraryNoDebuggingUtils>;
|
|
10793
|
+
/**
|
|
10794
|
+
* Disallow importing from DOM Testing Library
|
|
10795
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-dom-import.md
|
|
10796
|
+
*/
|
|
10797
|
+
'testing-library/no-dom-import'?: Linter.RuleEntry<TestingLibraryNoDomImport>;
|
|
10798
|
+
/**
|
|
10799
|
+
* Disallow the use of the global RegExp flag (/g) in queries
|
|
10800
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-global-regexp-flag-in-query.md
|
|
10801
|
+
*/
|
|
10802
|
+
'testing-library/no-global-regexp-flag-in-query'?: Linter.RuleEntry<[]>;
|
|
10803
|
+
/**
|
|
10804
|
+
* Disallow the use of `cleanup`
|
|
10805
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-manual-cleanup.md
|
|
10806
|
+
*/
|
|
10807
|
+
'testing-library/no-manual-cleanup'?: Linter.RuleEntry<[]>;
|
|
10808
|
+
/**
|
|
10809
|
+
* Disallow direct Node access
|
|
10810
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-node-access.md
|
|
10811
|
+
*/
|
|
10812
|
+
'testing-library/no-node-access'?: Linter.RuleEntry<TestingLibraryNoNodeAccess>;
|
|
10813
|
+
/**
|
|
10814
|
+
* Disallow the use of promises passed to a `fireEvent` method
|
|
10815
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-promise-in-fire-event.md
|
|
10816
|
+
*/
|
|
10817
|
+
'testing-library/no-promise-in-fire-event'?: Linter.RuleEntry<[]>;
|
|
10818
|
+
/**
|
|
10819
|
+
* Disallow the use of `render` in testing frameworks setup functions
|
|
10820
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-render-in-lifecycle.md
|
|
10821
|
+
*/
|
|
10822
|
+
'testing-library/no-render-in-lifecycle'?: Linter.RuleEntry<TestingLibraryNoRenderInLifecycle>;
|
|
10823
|
+
/**
|
|
10824
|
+
* Ensure no `data-testid` queries are used
|
|
10825
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-test-id-queries.md
|
|
10826
|
+
*/
|
|
10827
|
+
'testing-library/no-test-id-queries'?: Linter.RuleEntry<[]>;
|
|
10828
|
+
/**
|
|
10829
|
+
* Disallow wrapping Testing Library utils or empty callbacks in `act`
|
|
10830
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-unnecessary-act.md
|
|
10831
|
+
*/
|
|
10832
|
+
'testing-library/no-unnecessary-act'?: Linter.RuleEntry<TestingLibraryNoUnnecessaryAct>;
|
|
10833
|
+
/**
|
|
10834
|
+
* Disallow the use of multiple `expect` calls inside `waitFor`
|
|
10835
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-wait-for-multiple-assertions.md
|
|
10836
|
+
*/
|
|
10837
|
+
'testing-library/no-wait-for-multiple-assertions'?: Linter.RuleEntry<[]>;
|
|
10838
|
+
/**
|
|
10839
|
+
* Disallow the use of side effects in `waitFor`
|
|
10840
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-wait-for-side-effects.md
|
|
10841
|
+
*/
|
|
10842
|
+
'testing-library/no-wait-for-side-effects'?: Linter.RuleEntry<[]>;
|
|
10843
|
+
/**
|
|
10844
|
+
* Ensures no snapshot is generated inside of a `waitFor` call
|
|
10845
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/no-wait-for-snapshot.md
|
|
10846
|
+
*/
|
|
10847
|
+
'testing-library/no-wait-for-snapshot'?: Linter.RuleEntry<[]>;
|
|
10848
|
+
/**
|
|
10849
|
+
* Suggest using explicit assertions rather than standalone queries
|
|
10850
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-explicit-assert.md
|
|
10851
|
+
*/
|
|
10852
|
+
'testing-library/prefer-explicit-assert'?: Linter.RuleEntry<TestingLibraryPreferExplicitAssert>;
|
|
10853
|
+
/**
|
|
10854
|
+
* Suggest using `find(All)By*` query instead of `waitFor` + `get(All)By*` to wait for elements
|
|
10855
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-find-by.md
|
|
10856
|
+
*/
|
|
10857
|
+
'testing-library/prefer-find-by'?: Linter.RuleEntry<[]>;
|
|
10858
|
+
/**
|
|
10859
|
+
* Suggest using implicit assertions for getBy* & findBy* queries
|
|
10860
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-implicit-assert.md
|
|
10861
|
+
*/
|
|
10862
|
+
'testing-library/prefer-implicit-assert'?: Linter.RuleEntry<[]>;
|
|
10863
|
+
/**
|
|
10864
|
+
* Ensure appropriate `get*`/`query*` queries are used with their respective matchers
|
|
10865
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-presence-queries.md
|
|
10866
|
+
*/
|
|
10867
|
+
'testing-library/prefer-presence-queries'?: Linter.RuleEntry<TestingLibraryPreferPresenceQueries>;
|
|
10868
|
+
/**
|
|
10869
|
+
* Suggest using `queryBy*` queries when waiting for disappearance
|
|
10870
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-query-by-disappearance.md
|
|
10871
|
+
*/
|
|
10872
|
+
'testing-library/prefer-query-by-disappearance'?: Linter.RuleEntry<[]>;
|
|
10873
|
+
/**
|
|
10874
|
+
* Ensure the configured `get*`/`query*` query is used with the corresponding matchers
|
|
10875
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-query-matchers.md
|
|
10876
|
+
*/
|
|
10877
|
+
'testing-library/prefer-query-matchers'?: Linter.RuleEntry<TestingLibraryPreferQueryMatchers>;
|
|
10878
|
+
/**
|
|
10879
|
+
* Suggest using `screen` while querying
|
|
10880
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-screen-queries.md
|
|
10881
|
+
*/
|
|
10882
|
+
'testing-library/prefer-screen-queries'?: Linter.RuleEntry<[]>;
|
|
10883
|
+
/**
|
|
10884
|
+
* Suggest using `userEvent` over `fireEvent` for simulating user interactions
|
|
10885
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-user-event.md
|
|
10886
|
+
*/
|
|
10887
|
+
'testing-library/prefer-user-event'?: Linter.RuleEntry<TestingLibraryPreferUserEvent>;
|
|
10888
|
+
/**
|
|
10889
|
+
* Suggest using userEvent with setup() instead of direct methods
|
|
10890
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/prefer-user-event-setup.md
|
|
10891
|
+
*/
|
|
10892
|
+
'testing-library/prefer-user-event-setup'?: Linter.RuleEntry<[]>;
|
|
10893
|
+
/**
|
|
10894
|
+
* Enforce a valid naming for return value from `render`
|
|
10895
|
+
* @see https://github.com/testing-library/eslint-plugin-testing-library/tree/main/docs/rules/render-result-naming-convention.md
|
|
10896
|
+
*/
|
|
10897
|
+
'testing-library/render-result-naming-convention'?: Linter.RuleEntry<[]>;
|
|
10753
10898
|
/**
|
|
10754
10899
|
* enforce linebreaks after opening and before closing array brackets
|
|
10755
10900
|
* @see https://ota-meshi.github.io/eslint-plugin-toml/rules/array-bracket-newline.html
|
|
@@ -22148,6 +22293,66 @@ type SwitchColonSpacing = [] | [{
|
|
|
22148
22293
|
type TemplateCurlySpacing = [] | [("always" | "never")];
|
|
22149
22294
|
// ----- template-tag-spacing -----
|
|
22150
22295
|
type TemplateTagSpacing = [] | [("always" | "never")];
|
|
22296
|
+
// ----- testing-library/await-async-events -----
|
|
22297
|
+
type TestingLibraryAwaitAsyncEvents = [] | [{
|
|
22298
|
+
eventModule?: (("fireEvent" | "userEvent") | ("fireEvent" | "userEvent")[]);
|
|
22299
|
+
}];
|
|
22300
|
+
// ----- testing-library/consistent-data-testid -----
|
|
22301
|
+
type TestingLibraryConsistentDataTestid = [] | [{
|
|
22302
|
+
testIdPattern: string;
|
|
22303
|
+
testIdAttribute?: (string | string[]);
|
|
22304
|
+
customMessage?: string;
|
|
22305
|
+
}];
|
|
22306
|
+
// ----- testing-library/no-await-sync-events -----
|
|
22307
|
+
type TestingLibraryNoAwaitSyncEvents = [] | [{
|
|
22308
|
+
eventModules?: [("fire-event" | "user-event"), ...(("fire-event" | "user-event"))[]];
|
|
22309
|
+
}];
|
|
22310
|
+
// ----- testing-library/no-debugging-utils -----
|
|
22311
|
+
type TestingLibraryNoDebuggingUtils = [] | [{
|
|
22312
|
+
utilsToCheckFor?: {
|
|
22313
|
+
prettyFormat?: boolean;
|
|
22314
|
+
logDOM?: boolean;
|
|
22315
|
+
logRoles?: boolean;
|
|
22316
|
+
prettyDOM?: boolean;
|
|
22317
|
+
logTestingPlaygroundURL?: boolean;
|
|
22318
|
+
debug?: boolean;
|
|
22319
|
+
};
|
|
22320
|
+
}];
|
|
22321
|
+
// ----- testing-library/no-dom-import -----
|
|
22322
|
+
type TestingLibraryNoDomImport = [] | [string];
|
|
22323
|
+
// ----- testing-library/no-node-access -----
|
|
22324
|
+
type TestingLibraryNoNodeAccess = [] | [{
|
|
22325
|
+
allowContainerFirstChild?: boolean;
|
|
22326
|
+
}];
|
|
22327
|
+
// ----- testing-library/no-render-in-lifecycle -----
|
|
22328
|
+
type TestingLibraryNoRenderInLifecycle = [] | [{
|
|
22329
|
+
allowTestingFrameworkSetupHook?: ("beforeEach" | "beforeAll");
|
|
22330
|
+
}];
|
|
22331
|
+
// ----- testing-library/no-unnecessary-act -----
|
|
22332
|
+
type TestingLibraryNoUnnecessaryAct = [] | [{
|
|
22333
|
+
isStrict?: boolean;
|
|
22334
|
+
}];
|
|
22335
|
+
// ----- testing-library/prefer-explicit-assert -----
|
|
22336
|
+
type TestingLibraryPreferExplicitAssert = [] | [{
|
|
22337
|
+
assertion?: ("toBeOnTheScreen" | "toBeInTheDocument" | "toBeTruthy" | "toBeDefined");
|
|
22338
|
+
includeFindQueries?: boolean;
|
|
22339
|
+
}];
|
|
22340
|
+
// ----- testing-library/prefer-presence-queries -----
|
|
22341
|
+
type TestingLibraryPreferPresenceQueries = [] | [{
|
|
22342
|
+
presence?: boolean;
|
|
22343
|
+
absence?: boolean;
|
|
22344
|
+
}];
|
|
22345
|
+
// ----- testing-library/prefer-query-matchers -----
|
|
22346
|
+
type TestingLibraryPreferQueryMatchers = [] | [{
|
|
22347
|
+
validEntries?: {
|
|
22348
|
+
query?: ("get" | "query");
|
|
22349
|
+
matcher?: string;
|
|
22350
|
+
}[];
|
|
22351
|
+
}];
|
|
22352
|
+
// ----- testing-library/prefer-user-event -----
|
|
22353
|
+
type TestingLibraryPreferUserEvent = [] | [{
|
|
22354
|
+
allowedMethods?: unknown[];
|
|
22355
|
+
}];
|
|
22151
22356
|
// ----- toml/array-bracket-newline -----
|
|
22152
22357
|
type TomlArrayBracketNewline = [] | [(("always" | "never" | "consistent") | {
|
|
22153
22358
|
multiline?: boolean;
|
|
@@ -24094,12 +24299,23 @@ interface JsdocOptions {
|
|
|
24094
24299
|
full?: boolean;
|
|
24095
24300
|
}
|
|
24096
24301
|
type Rules = Record<string, Linter.RuleEntry<any> | undefined> & RuleOptions;
|
|
24302
|
+
type ConfigSettings = NonNullable<Linter.Config["settings"]> & {
|
|
24303
|
+
"testing-library"?: {
|
|
24304
|
+
/**
|
|
24305
|
+
* Package name for DOM Testing Library.
|
|
24306
|
+
*
|
|
24307
|
+
* When React testing support is enabled, importing this package is
|
|
24308
|
+
* forbidden in favor of `react-testing-library-lua`.
|
|
24309
|
+
*/
|
|
24310
|
+
domPackage?: string;
|
|
24311
|
+
};
|
|
24312
|
+
};
|
|
24097
24313
|
/**
|
|
24098
24314
|
* An updated version of ESLint's `Linter.Config`, which provides autocompletion
|
|
24099
24315
|
* for `rules` and relaxes type limitations for `plugins` and `rules`, because
|
|
24100
24316
|
* many plugins still lack proper type definitions.
|
|
24101
24317
|
*/
|
|
24102
|
-
type TypedFlatConfigItem = Omit<Linter.Config<Linter.RulesRecord & Rules>, "plugins"> & {
|
|
24318
|
+
type TypedFlatConfigItem = Omit<Linter.Config<Linter.RulesRecord & Rules>, "plugins" | "settings"> & {
|
|
24103
24319
|
/**
|
|
24104
24320
|
* The base directory that `files` and `ignores` patterns in this config
|
|
24105
24321
|
* object are resolved against. Defaults to the location ESLint derives the
|
|
@@ -24122,6 +24338,8 @@ type TypedFlatConfigItem = Omit<Linter.Config<Linter.RulesRecord & Rules>, "plug
|
|
|
24122
24338
|
* files.
|
|
24123
24339
|
*/
|
|
24124
24340
|
rules?: Rules;
|
|
24341
|
+
/** Shared settings consumed by configured plugins and presets. */
|
|
24342
|
+
settings?: ConfigSettings;
|
|
24125
24343
|
};
|
|
24126
24344
|
interface OptionsComponentExtensions {
|
|
24127
24345
|
/** Additional extensions for components. */
|
|
@@ -24442,6 +24660,14 @@ type ReactConfig = OptionsOverridesTypeAware & ReactSettings & {
|
|
|
24442
24660
|
* @default true
|
|
24443
24661
|
*/
|
|
24444
24662
|
reactCompiler?: boolean;
|
|
24663
|
+
/**
|
|
24664
|
+
* Whether to enable Testing Library rules for testing-library-lua.
|
|
24665
|
+
*
|
|
24666
|
+
* Requires installing `eslint-plugin-testing-library`.
|
|
24667
|
+
*
|
|
24668
|
+
* @default false
|
|
24669
|
+
*/
|
|
24670
|
+
testing?: boolean;
|
|
24445
24671
|
} & {
|
|
24446
24672
|
filenameCase?: "kebabCase" | "pascalCase";
|
|
24447
24673
|
};
|
|
@@ -24681,6 +24907,10 @@ interface OptionsConfig extends OptionsComponentExtensions, OptionsProjectType {
|
|
|
24681
24907
|
*
|
|
24682
24908
|
* - `eslint-plugin-react-naming-convention`.
|
|
24683
24909
|
*
|
|
24910
|
+
* If `testing` is enabled, also requires:
|
|
24911
|
+
*
|
|
24912
|
+
* - `eslint-plugin-testing-library`.
|
|
24913
|
+
*
|
|
24684
24914
|
* @default false
|
|
24685
24915
|
*/
|
|
24686
24916
|
react?: boolean | ReactConfig;
|
|
@@ -32714,7 +32944,7 @@ type OxlintCommentsRequireDescription = [] | [{
|
|
|
32714
32944
|
ignore?: ("oxlint-disable" | "oxlint-disable-line" | "oxlint-disable-next-line" | "oxlint-enable")[];
|
|
32715
32945
|
}];
|
|
32716
32946
|
/** JsPlugin prefixes whose rules keep their ESLint-side names in oxlint configs. */
|
|
32717
|
-
type OxlintKeptJsPluginPrefix = '@cspell' | 'antfu' | 'better-max-params' | 'comment-length' | 'de-morgan' | 'e18e' | 'erasable-syntax-only' | 'eslint-plugin' | 'flawless' | 'jest-extended' | 'oxfmt' | 'perfectionist' | 'react-jsx' | 'react-naming-convention' | 'roblox' | 'sentinel' | 'small-rules' | 'sonar' | 'style' | 'ts' | 'unused-imports';
|
|
32947
|
+
type OxlintKeptJsPluginPrefix = '@cspell' | 'antfu' | 'better-max-params' | 'comment-length' | 'de-morgan' | 'e18e' | 'erasable-syntax-only' | 'eslint-plugin' | 'flawless' | 'jest-extended' | 'oxfmt' | 'perfectionist' | 'react-jsx' | 'react-naming-convention' | 'roblox' | 'sentinel' | 'small-rules' | 'sonar' | 'style' | 'testing-library' | 'ts' | 'unused-imports';
|
|
32718
32948
|
/** JsPlugin rules whose oxlint names match the ESLint-side names. */
|
|
32719
32949
|
type OxlintKeptJsPluginRuleOptions = { [K in keyof RuleOptions as K extends `${OxlintKeptJsPluginPrefix}/${string}` ? K : never]: RuleOptions[K]; };
|
|
32720
32950
|
/** All rules known to the oxlint factory, keyed by canonical oxlint rule name. */
|
package/dist/oxlint.mjs
CHANGED
|
@@ -1223,6 +1223,35 @@ const jsPluginRuleNames = /* @__PURE__ */ new Set([
|
|
|
1223
1223
|
"symbol-description",
|
|
1224
1224
|
"template-curly-spacing",
|
|
1225
1225
|
"template-tag-spacing",
|
|
1226
|
+
"testing-library/await-async-events",
|
|
1227
|
+
"testing-library/await-async-queries",
|
|
1228
|
+
"testing-library/await-async-utils",
|
|
1229
|
+
"testing-library/consistent-data-testid",
|
|
1230
|
+
"testing-library/no-await-sync-events",
|
|
1231
|
+
"testing-library/no-await-sync-queries",
|
|
1232
|
+
"testing-library/no-container",
|
|
1233
|
+
"testing-library/no-debugging-utils",
|
|
1234
|
+
"testing-library/no-dom-import",
|
|
1235
|
+
"testing-library/no-global-regexp-flag-in-query",
|
|
1236
|
+
"testing-library/no-manual-cleanup",
|
|
1237
|
+
"testing-library/no-node-access",
|
|
1238
|
+
"testing-library/no-promise-in-fire-event",
|
|
1239
|
+
"testing-library/no-render-in-lifecycle",
|
|
1240
|
+
"testing-library/no-test-id-queries",
|
|
1241
|
+
"testing-library/no-unnecessary-act",
|
|
1242
|
+
"testing-library/no-wait-for-multiple-assertions",
|
|
1243
|
+
"testing-library/no-wait-for-side-effects",
|
|
1244
|
+
"testing-library/no-wait-for-snapshot",
|
|
1245
|
+
"testing-library/prefer-explicit-assert",
|
|
1246
|
+
"testing-library/prefer-find-by",
|
|
1247
|
+
"testing-library/prefer-implicit-assert",
|
|
1248
|
+
"testing-library/prefer-presence-queries",
|
|
1249
|
+
"testing-library/prefer-query-by-disappearance",
|
|
1250
|
+
"testing-library/prefer-query-matchers",
|
|
1251
|
+
"testing-library/prefer-screen-queries",
|
|
1252
|
+
"testing-library/prefer-user-event",
|
|
1253
|
+
"testing-library/prefer-user-event-setup",
|
|
1254
|
+
"testing-library/render-result-naming-convention",
|
|
1226
1255
|
"ts/adjacent-overload-signatures",
|
|
1227
1256
|
"ts/array-type",
|
|
1228
1257
|
"ts/await-thenable",
|
|
@@ -3427,6 +3456,25 @@ const enabledPresetRuleNames = /* @__PURE__ */ new Set([
|
|
|
3427
3456
|
"style/wrap-iife",
|
|
3428
3457
|
"style/yield-star-spacing",
|
|
3429
3458
|
"symbol-description",
|
|
3459
|
+
"testing-library/await-async-queries",
|
|
3460
|
+
"testing-library/await-async-utils",
|
|
3461
|
+
"testing-library/no-await-sync-events",
|
|
3462
|
+
"testing-library/no-await-sync-queries",
|
|
3463
|
+
"testing-library/no-container",
|
|
3464
|
+
"testing-library/no-debugging-utils",
|
|
3465
|
+
"testing-library/no-manual-cleanup",
|
|
3466
|
+
"testing-library/no-promise-in-fire-event",
|
|
3467
|
+
"testing-library/no-render-in-lifecycle",
|
|
3468
|
+
"testing-library/no-unnecessary-act",
|
|
3469
|
+
"testing-library/no-wait-for-multiple-assertions",
|
|
3470
|
+
"testing-library/no-wait-for-side-effects",
|
|
3471
|
+
"testing-library/no-wait-for-snapshot",
|
|
3472
|
+
"testing-library/prefer-explicit-assert",
|
|
3473
|
+
"testing-library/prefer-find-by",
|
|
3474
|
+
"testing-library/prefer-presence-queries",
|
|
3475
|
+
"testing-library/prefer-query-by-disappearance",
|
|
3476
|
+
"testing-library/prefer-screen-queries",
|
|
3477
|
+
"testing-library/render-result-naming-convention",
|
|
3430
3478
|
"toml/array-bracket-newline",
|
|
3431
3479
|
"toml/array-bracket-spacing",
|
|
3432
3480
|
"toml/array-element-newline",
|
|
@@ -4698,6 +4746,7 @@ const oxlintJsPlugins = {
|
|
|
4698
4746
|
"small-rules": "@pobammer-ts/small-rules",
|
|
4699
4747
|
"sonar": "eslint-plugin-sonarjs",
|
|
4700
4748
|
"style": "@stylistic/eslint-plugin",
|
|
4749
|
+
"testing-library": "eslint-plugin-testing-library",
|
|
4701
4750
|
"ts": "@typescript-eslint/eslint-plugin",
|
|
4702
4751
|
"unicorn-js": "eslint-plugin-unicorn",
|
|
4703
4752
|
"unused-imports": "eslint-plugin-unused-imports",
|
|
@@ -4787,6 +4836,7 @@ const oxlintFamilyPolicies = {
|
|
|
4787
4836
|
"small-rules": NATIVE_FIRST,
|
|
4788
4837
|
"sonar": NATIVE_FIRST,
|
|
4789
4838
|
"style": NATIVE_FIRST,
|
|
4839
|
+
"testing-library": "js-plugin",
|
|
4790
4840
|
"toml": ESLINT_ONLY,
|
|
4791
4841
|
"ts": NATIVE_FIRST,
|
|
4792
4842
|
"unicorn": NATIVE_FIRST,
|
|
@@ -7777,6 +7827,20 @@ function oxlintPromise() {
|
|
|
7777
7827
|
//#endregion
|
|
7778
7828
|
//#region src/rules/react.ts
|
|
7779
7829
|
/**
|
|
7830
|
+
* Build the direct DOM Testing Library import restriction shared by both
|
|
7831
|
+
* engines.
|
|
7832
|
+
*
|
|
7833
|
+
* @param domPackage - Package name for DOM Testing Library.
|
|
7834
|
+
* @returns The configured restriction, or `undefined` when no package is set.
|
|
7835
|
+
*/
|
|
7836
|
+
function restrictedDomImportRule(domPackage) {
|
|
7837
|
+
if (domPackage === void 0) return;
|
|
7838
|
+
return ["error", { paths: [{
|
|
7839
|
+
name: domPackage,
|
|
7840
|
+
message: "Import from react-testing-library-lua instead; it re-exports the DOM utilities, and eslint-plugin-testing-library only detects one module per file."
|
|
7841
|
+
}] }];
|
|
7842
|
+
}
|
|
7843
|
+
/**
|
|
7780
7844
|
* React rules shared between the ESLint and oxlint factories.
|
|
7781
7845
|
*
|
|
7782
7846
|
* The type-aware react rules stay in the ESLint config (oxlint jsPlugins have
|
|
@@ -7785,7 +7849,8 @@ function oxlintPromise() {
|
|
|
7785
7849
|
* @param options - Shared rule options.
|
|
7786
7850
|
* @returns The rule map.
|
|
7787
7851
|
*/
|
|
7788
|
-
function reactRules({ filenameCase = "kebabCase", reactCompiler = true, stylistic = true } = {}) {
|
|
7852
|
+
function reactRules({ domPackage, filenameCase = "kebabCase", reactCompiler = true, stylistic = true, testing = false } = {}) {
|
|
7853
|
+
const restrictedDomImport = testing ? restrictedDomImportRule(domPackage) : void 0;
|
|
7789
7854
|
return {
|
|
7790
7855
|
"flawless/no-unnecessary-use-callback": "error",
|
|
7791
7856
|
"flawless/no-unnecessary-use-memo": "error",
|
|
@@ -7883,6 +7948,28 @@ function reactRules({ filenameCase = "kebabCase", reactCompiler = true, stylisti
|
|
|
7883
7948
|
enforceAssignment: false,
|
|
7884
7949
|
enforceSetterName: false
|
|
7885
7950
|
}],
|
|
7951
|
+
...testing ? {
|
|
7952
|
+
"testing-library/await-async-queries": "error",
|
|
7953
|
+
"testing-library/await-async-utils": "error",
|
|
7954
|
+
"testing-library/no-await-sync-events": ["error", { eventModules: ["fire-event"] }],
|
|
7955
|
+
"testing-library/no-await-sync-queries": "error",
|
|
7956
|
+
"testing-library/no-container": "error",
|
|
7957
|
+
"testing-library/no-debugging-utils": "error",
|
|
7958
|
+
"testing-library/no-manual-cleanup": "error",
|
|
7959
|
+
"testing-library/no-promise-in-fire-event": "error",
|
|
7960
|
+
"testing-library/no-render-in-lifecycle": "error",
|
|
7961
|
+
"testing-library/no-unnecessary-act": "error",
|
|
7962
|
+
"testing-library/no-wait-for-multiple-assertions": "error",
|
|
7963
|
+
"testing-library/no-wait-for-side-effects": "error",
|
|
7964
|
+
"testing-library/no-wait-for-snapshot": "error",
|
|
7965
|
+
"testing-library/prefer-explicit-assert": "error",
|
|
7966
|
+
"testing-library/prefer-find-by": "error",
|
|
7967
|
+
"testing-library/prefer-presence-queries": "error",
|
|
7968
|
+
"testing-library/prefer-query-by-disappearance": "error",
|
|
7969
|
+
"testing-library/prefer-screen-queries": "error",
|
|
7970
|
+
"testing-library/render-result-naming-convention": "error",
|
|
7971
|
+
...restrictedDomImport !== void 0 ? { "no-restricted-imports": restrictedDomImport } : {}
|
|
7972
|
+
} : {},
|
|
7886
7973
|
...stylistic !== false ? {
|
|
7887
7974
|
"flawless/jsx-shorthand-boolean": "warn",
|
|
7888
7975
|
"flawless/jsx-shorthand-fragment": "warn",
|
|
@@ -7929,7 +8016,7 @@ function reactRules({ filenameCase = "kebabCase", reactCompiler = true, stylisti
|
|
|
7929
8016
|
* @returns The react config fragments.
|
|
7930
8017
|
*/
|
|
7931
8018
|
function oxlintReact(options = {}) {
|
|
7932
|
-
const { filenameCase = "kebabCase", importSource, overrides = {}, reactCompiler = true, roblox = true, stylistic = true } = options;
|
|
8019
|
+
const { domPackage = options.settings?.["testing-library"]?.domPackage, filenameCase = "kebabCase", importSource, overrides = {}, reactCompiler = true, roblox = true, stylistic = true, testing = false } = options;
|
|
7933
8020
|
const files = options.files?.flat() ?? ["**/*.{,c,m}jsx", "**/*.{,c,m}tsx"];
|
|
7934
8021
|
const performanceRule = roblox ? ["error", { nativeAllowList: "all" }] : "error";
|
|
7935
8022
|
return [...createOxlintConfigs({
|
|
@@ -7937,14 +8024,20 @@ function oxlintReact(options = {}) {
|
|
|
7937
8024
|
files,
|
|
7938
8025
|
overrides,
|
|
7939
8026
|
rules: reactRules({
|
|
8027
|
+
domPackage,
|
|
7940
8028
|
filenameCase,
|
|
7941
8029
|
reactCompiler,
|
|
7942
|
-
stylistic
|
|
8030
|
+
stylistic,
|
|
8031
|
+
testing
|
|
7943
8032
|
}),
|
|
7944
|
-
settings: {
|
|
7945
|
-
|
|
7946
|
-
|
|
7947
|
-
|
|
8033
|
+
settings: {
|
|
8034
|
+
"react-x": {
|
|
8035
|
+
importSource: importSource ?? "@rbxts",
|
|
8036
|
+
version: "17.0.2"
|
|
8037
|
+
},
|
|
8038
|
+
...testing ? { "testing-library/utils-module": "testing-library-lua" } : {},
|
|
8039
|
+
...options.settings?.["testing-library"] ? { "testing-library": options.settings["testing-library"] } : {}
|
|
8040
|
+
}
|
|
7948
8041
|
}), {
|
|
7949
8042
|
name: "isentinel/react/perf",
|
|
7950
8043
|
files,
|
|
@@ -9200,6 +9293,7 @@ function isentinel(factoryOptions, ...userConfigs) {
|
|
|
9200
9293
|
const reactOptions = typeof enableReact === "object" ? enableReact : {};
|
|
9201
9294
|
configs.push(oxlintReact({
|
|
9202
9295
|
roblox: enableRoblox,
|
|
9296
|
+
settings: options.settings,
|
|
9203
9297
|
stylistic: stylisticOptions,
|
|
9204
9298
|
...reactOptions
|
|
9205
9299
|
}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@isentinel/eslint-config",
|
|
3
|
-
"version": "6.0.0-beta.
|
|
3
|
+
"version": "6.0.0-beta.35",
|
|
4
4
|
"description": "iSentinel's ESLint config",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eslint-config",
|
|
@@ -130,6 +130,7 @@
|
|
|
130
130
|
"eslint-plugin-react-jsx": "5.17.3",
|
|
131
131
|
"eslint-plugin-react-naming-convention": "5.17.3",
|
|
132
132
|
"eslint-plugin-react-x": "5.17.3",
|
|
133
|
+
"eslint-plugin-testing-library": "7.16.2",
|
|
133
134
|
"eslint-typegen": "2.3.1",
|
|
134
135
|
"jiti": "2.7.0",
|
|
135
136
|
"oxlint": "1.74.0",
|
|
@@ -142,7 +143,7 @@
|
|
|
142
143
|
"typescript": "6.0.3",
|
|
143
144
|
"unplugin-unused": "0.5.7",
|
|
144
145
|
"vitest": "4.1.10",
|
|
145
|
-
"@isentinel/eslint-config": "6.0.0-beta.
|
|
146
|
+
"@isentinel/eslint-config": "6.0.0-beta.35"
|
|
146
147
|
},
|
|
147
148
|
"peerDependencies": {
|
|
148
149
|
"@vitest/eslint-plugin": "^1.6.4",
|
|
@@ -154,6 +155,7 @@
|
|
|
154
155
|
"eslint-plugin-react-jsx": "^5.10.0",
|
|
155
156
|
"eslint-plugin-react-naming-convention": "^5.10.0",
|
|
156
157
|
"eslint-plugin-react-x": "^5.10.0",
|
|
158
|
+
"eslint-plugin-testing-library": "^7.16.2",
|
|
157
159
|
"oxlint": ">=1.73.0",
|
|
158
160
|
"oxlint-tsgolint": ">=0.24.0"
|
|
159
161
|
},
|
|
@@ -182,6 +184,9 @@
|
|
|
182
184
|
"eslint-plugin-react-x": {
|
|
183
185
|
"optional": true
|
|
184
186
|
},
|
|
187
|
+
"eslint-plugin-testing-library": {
|
|
188
|
+
"optional": true
|
|
189
|
+
},
|
|
185
190
|
"oxlint": {
|
|
186
191
|
"optional": true
|
|
187
192
|
},
|