@isentinel/eslint-config 5.0.0-beta.1 → 5.0.0-beta.10
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/README.md +2 -2
- package/dist/index.d.mts +19 -45
- package/dist/index.mjs +168 -224
- package/package.json +2 -4
package/README.md
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -46,14 +46,12 @@ interface FlatGitignoreOptions {
|
|
|
46
46
|
cwd?: string;
|
|
47
47
|
}
|
|
48
48
|
//#endregion
|
|
49
|
-
//#region src/configs/
|
|
50
|
-
|
|
51
|
-
declare function prettier(options?: OptionsComponentExtensions & OptionsFiles & OptionsOverrides & OptionsTypeScriptParserOptions & {
|
|
49
|
+
//#region src/configs/oxfmt.d.ts
|
|
50
|
+
declare function oxfmt(options?: OptionsComponentExtensions & OptionsFiles & OptionsOverrides & {
|
|
52
51
|
formatters?: OptionsFormatters | true;
|
|
53
|
-
|
|
52
|
+
oxfmtConfigOptions?: FormatOptions;
|
|
53
|
+
oxfmtOptions?: FormatOptions;
|
|
54
54
|
prettierOptions?: Options;
|
|
55
|
-
stylistic?: StylisticConfig;
|
|
56
|
-
tsFormatter?: FormatterEngine;
|
|
57
55
|
}): Promise<Array<TypedFlatConfigItem>>;
|
|
58
56
|
//#endregion
|
|
59
57
|
//#region src/typegen.d.ts
|
|
@@ -833,10 +831,6 @@ interface RuleOptions {
|
|
|
833
831
|
* Use stylua to format lua files
|
|
834
832
|
*/
|
|
835
833
|
'format-lua/stylua'?: Linter.RuleEntry<FormatLuaStylua>;
|
|
836
|
-
/**
|
|
837
|
-
* @see https://github.com/prettier/eslint-plugin-prettier#options
|
|
838
|
-
*/
|
|
839
|
-
'format/prettier'?: Linter.RuleEntry<FormatPrettier>;
|
|
840
834
|
/**
|
|
841
835
|
* Require or disallow spacing between function identifiers and their invocations
|
|
842
836
|
* @see https://eslint.org/docs/latest/rules/func-call-spacing
|
|
@@ -9731,16 +9725,6 @@ type FormatLuaStylua = [] | [{
|
|
|
9731
9725
|
[k: string]: unknown | undefined;
|
|
9732
9726
|
};
|
|
9733
9727
|
[k: string]: unknown | undefined;
|
|
9734
|
-
}]; // ----- format/prettier -----
|
|
9735
|
-
type FormatPrettier = [] | [{
|
|
9736
|
-
[k: string]: unknown | undefined;
|
|
9737
|
-
}] | [{
|
|
9738
|
-
[k: string]: unknown | undefined;
|
|
9739
|
-
}, {
|
|
9740
|
-
usePrettierrc?: boolean;
|
|
9741
|
-
fileInfoOptions?: {
|
|
9742
|
-
[k: string]: unknown | undefined;
|
|
9743
|
-
};
|
|
9744
9728
|
}]; // ----- func-call-spacing -----
|
|
9745
9729
|
type FuncCallSpacing = ([] | ["never"] | [] | ["always"] | ["always", {
|
|
9746
9730
|
allowNewlines?: boolean;
|
|
@@ -17590,10 +17574,13 @@ type Yoda = [] | [("always" | "never")] | [("always" | "never"), {
|
|
|
17590
17574
|
exceptRange?: boolean;
|
|
17591
17575
|
onlyEquality?: boolean;
|
|
17592
17576
|
}]; // Names of all the configs
|
|
17593
|
-
type ConfigNames = 'isentinel/cease-nonsense' | 'isentinel/eslint/comments' | 'isentinel/eslint/comments/src' | 'isentinel/eslint-plugin/setup' | 'isentinel/eslint-plugin/rules' | 'isentinel/flawless/setup' | 'isentinel/flawless/ts/rules-type-aware' | 'isentinel/flawless/tsx/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/markdown/setup' | 'isentinel/markdown/processor' | 'isentinel/markdown/parser' | 'isentinel/markdown/disables' | 'isentinel/node/rules' | 'isentinel/oxfmt/setup' | 'isentinel/oxfmt/javascript' | 'isentinel/oxfmt/typescript' | 'isentinel/
|
|
17577
|
+
type ConfigNames = 'isentinel/cease-nonsense' | 'isentinel/eslint/comments' | 'isentinel/eslint/comments/src' | 'isentinel/eslint-plugin/setup' | 'isentinel/eslint-plugin/rules' | 'isentinel/flawless/setup' | 'isentinel/flawless/ts/rules-type-aware' | 'isentinel/flawless/tsx/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/markdown/setup' | 'isentinel/markdown/processor' | 'isentinel/markdown/parser' | 'isentinel/markdown/disables' | '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/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/sonarjs' | 'isentinel/spelling/setup' | 'isentinel/spelling' | 'isentinel/stylistic/setup' | 'isentinel/stylistic' | 'isentinel/stylistic/ts' | 'isentinel/stylistic/js' | 'isentinel/stylistic/markdown-code' | 'isentinel/test/jest/setup' | 'isentinel/test/jest/rules' | 'isentinel/test/vitest/setup' | 'isentinel/test/vitest/rules' | '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' | 'isentinel/unicorn/root' | 'isentinel/yaml/setup' | 'isentinel/yaml/rules';
|
|
17594
17578
|
//#endregion
|
|
17595
17579
|
//#region src/utils.d.ts
|
|
17596
17580
|
type ExtractRuleOptions<T> = T extends Linter.RuleEntry<infer U> ? U : never;
|
|
17581
|
+
declare function isInGitHooksOrLintStaged(): boolean;
|
|
17582
|
+
declare function isInAgentSession(): boolean;
|
|
17583
|
+
declare function isInEditorEnvironment(): boolean;
|
|
17597
17584
|
//#endregion
|
|
17598
17585
|
//#region src/types.d.ts
|
|
17599
17586
|
type Awaitable<T> = Promise<T> | T;
|
|
@@ -17652,7 +17639,6 @@ interface OptionsFilesTypeAware extends OptionsFiles {
|
|
|
17652
17639
|
*/
|
|
17653
17640
|
ignoresTypeAware?: Array<string>;
|
|
17654
17641
|
}
|
|
17655
|
-
type FormatterEngine = "oxfmt" | "prettier";
|
|
17656
17642
|
interface OptionsFormatters {
|
|
17657
17643
|
/**
|
|
17658
17644
|
* Enable formatting support for CSS, Less, Sass, and SCSS.
|
|
@@ -17672,12 +17658,6 @@ interface OptionsFormatters {
|
|
|
17672
17658
|
* @default true
|
|
17673
17659
|
*/
|
|
17674
17660
|
html?: boolean;
|
|
17675
|
-
/**
|
|
17676
|
-
* Formatter engine for JavaScript files.
|
|
17677
|
-
*
|
|
17678
|
-
* @default "oxfmt"
|
|
17679
|
-
*/
|
|
17680
|
-
javascript?: FormatterEngine;
|
|
17681
17661
|
/**
|
|
17682
17662
|
* Enable formatting support for JSON(C|5).
|
|
17683
17663
|
*
|
|
@@ -17704,15 +17684,10 @@ interface OptionsFormatters {
|
|
|
17704
17684
|
/**
|
|
17705
17685
|
* Custom options for Prettier.
|
|
17706
17686
|
*
|
|
17707
|
-
*
|
|
17687
|
+
* Used for arrow-return-style-x and as a migration source for oxfmt
|
|
17688
|
+
* options.
|
|
17708
17689
|
*/
|
|
17709
17690
|
prettierOptions?: PrettierOptions;
|
|
17710
|
-
/**
|
|
17711
|
-
* Formatter engine for TypeScript files.
|
|
17712
|
-
*
|
|
17713
|
-
* @default "oxfmt"
|
|
17714
|
-
*/
|
|
17715
|
-
typescript?: FormatterEngine;
|
|
17716
17691
|
/**
|
|
17717
17692
|
* Enable formatting support for YAML.
|
|
17718
17693
|
*
|
|
@@ -17752,6 +17727,14 @@ interface OptionsJest {
|
|
|
17752
17727
|
extended?: boolean;
|
|
17753
17728
|
}
|
|
17754
17729
|
interface OptionsVitest {
|
|
17730
|
+
/**
|
|
17731
|
+
* Enable the `eslint-plugin-jest-extended` ruleset.
|
|
17732
|
+
*
|
|
17733
|
+
* Requires `jest-extended` to be installed.
|
|
17734
|
+
*
|
|
17735
|
+
* @default false
|
|
17736
|
+
*/
|
|
17737
|
+
extended?: boolean;
|
|
17755
17738
|
/**
|
|
17756
17739
|
* Enable typecheck rules for Vitest.
|
|
17757
17740
|
*
|
|
@@ -18130,15 +18113,6 @@ declare function markdown(options?: OptionsComponentExtensions & OptionsFiles &
|
|
|
18130
18113
|
//#region src/configs/node.d.ts
|
|
18131
18114
|
declare function node(): Promise<Array<TypedFlatConfigItem>>;
|
|
18132
18115
|
//#endregion
|
|
18133
|
-
//#region src/configs/oxfmt.d.ts
|
|
18134
|
-
declare function oxfmt(options?: OptionsComponentExtensions & OptionsFiles & OptionsOverrides & {
|
|
18135
|
-
jsFormatter?: FormatterEngine;
|
|
18136
|
-
oxfmtConfigOptions?: FormatOptions;
|
|
18137
|
-
oxfmtOptions?: FormatOptions;
|
|
18138
|
-
prettierOptions?: PrettierOptions;
|
|
18139
|
-
tsFormatter?: FormatterEngine;
|
|
18140
|
-
}): Promise<Array<TypedFlatConfigItem>>;
|
|
18141
|
-
//#endregion
|
|
18142
18116
|
//#region src/configs/package-json.d.ts
|
|
18143
18117
|
declare function packageJson(options?: OptionsHasRoblox & OptionsProjectType & OptionsStylistic): Promise<Array<TypedFlatConfigItem>>;
|
|
18144
18118
|
//#endregion
|
|
@@ -18282,4 +18256,4 @@ declare const GLOB_BUILD_TOOLS: Array<string>;
|
|
|
18282
18256
|
declare const GLOB_ALL_SRC: string[];
|
|
18283
18257
|
declare const GLOB_EXCLUDE: string[];
|
|
18284
18258
|
//#endregion
|
|
18285
|
-
export { Awaitable, type ConfigNames, type FlatConfigComposer,
|
|
18259
|
+
export { Awaitable, type ConfigNames, type FlatConfigComposer, GLOB_ALL_JSON, GLOB_ALL_SRC, GLOB_BUILD_TOOLS, GLOB_CSS, GLOB_DTS, GLOB_EXCLUDE, GLOB_GRAPHQL, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_LUA, GLOB_MARKDOWN, GLOB_MARKDOWN_BLOCKS, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_POSTCSS, GLOB_ROOT, GLOB_ROOT_SRC, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_XML, GLOB_YAML, GitignoreOptions, JsdocOptions, NamedFlatConfigItem, NamedOptionsConfig, OptionsComponentExtensions, OptionsConfig, OptionsFiles, OptionsFilesTypeAware, OptionsFormatters, OptionsHasRoblox, OptionsHasTypeScript, OptionsIsInEditor, OptionsJest, OptionsOverrides, OptionsOverridesTypeAware, OptionsPnpm, OptionsProjectType, OptionsStylistic, OptionsTestFramework, OptionsTypeScriptErasableOnly, OptionsTypeScriptParserOptions, OptionsTypeScriptWithTypes, OptionsTypescript, OptionsVitest, type OxfmtOptions, PerfectionistConfig, type PrettierOptions, ReactConfig, Rules, SpellCheckConfig, StylisticConfig, StylisticConfigDefaults, TypedFlatConfigItem, ceaseNonsense, comments, isentinel as default, isentinel, defaultPluginRenaming, disables, eslintPlugin, flawless, gitignore, ignores, imports, isInAgentSession, isInEditorEnvironment, isInGitHooksOrLintStaged, javascript, jsdoc, jsonc, markdown, node, oxfmt, packageJson, perfectionist, pnpm, promise, react, roblox, sonarjs, sortGithubAction, sortPnpmWorkspace, sortRojoProject, sortTsconfig, spelling, stylistic, test, toml, typescript, unicorn, yaml };
|
package/dist/index.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { isPackageExists } from "local-pkg";
|
|
|
3
3
|
import fs from "node:fs";
|
|
4
4
|
import path, { dirname, join, relative, resolve } from "node:path";
|
|
5
5
|
import process from "node:process";
|
|
6
|
-
import prettier
|
|
6
|
+
import prettier from "prettier";
|
|
7
7
|
import { findUp, findUpSync } from "find-up-simple";
|
|
8
8
|
import { convertIgnorePatternToMinimatch } from "@eslint/compat";
|
|
9
9
|
import fs$1 from "node:fs/promises";
|
|
@@ -142,6 +142,7 @@ function isInGitHooksOrLintStaged() {
|
|
|
142
142
|
function isInAgentSession() {
|
|
143
143
|
return [
|
|
144
144
|
process.env["CLAUDECODE"],
|
|
145
|
+
process.env["CLAUDE_CODE_ENTRYPOINT"],
|
|
145
146
|
process.env["CODEX_THREAD_ID"],
|
|
146
147
|
process.env["CURSOR_AGENT"],
|
|
147
148
|
process.env["GEMINI_CLI"],
|
|
@@ -187,13 +188,6 @@ function mergeGlobs(globs, additionalPatterns) {
|
|
|
187
188
|
} else result.push(pattern);
|
|
188
189
|
return result;
|
|
189
190
|
}
|
|
190
|
-
function mergePrettierOptions(options, overrides = {}) {
|
|
191
|
-
return {
|
|
192
|
-
...options,
|
|
193
|
-
...overrides,
|
|
194
|
-
plugins: [...overrides.plugins ?? [], ...options.plugins ?? []]
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
191
|
/**
|
|
198
192
|
* Rename plugin prefixes in a rule object. Accepts a map of prefixes to rename.
|
|
199
193
|
*
|
|
@@ -232,7 +226,7 @@ function renameRules(rules, map) {
|
|
|
232
226
|
*/
|
|
233
227
|
async function resolvePrettierConfigOptions() {
|
|
234
228
|
try {
|
|
235
|
-
return await prettier
|
|
229
|
+
return await prettier.resolveConfig("package.json", { editorconfig: true }) ?? {};
|
|
236
230
|
} catch {
|
|
237
231
|
return {};
|
|
238
232
|
}
|
|
@@ -247,8 +241,9 @@ async function resolveOxfmtConfigOptions() {
|
|
|
247
241
|
for (const filename of OXFMT_CONFIG_FILES) {
|
|
248
242
|
const configPath = path.resolve(process.cwd(), filename);
|
|
249
243
|
try {
|
|
250
|
-
const content = fs.
|
|
251
|
-
|
|
244
|
+
const content = await fs.promises.readFile(configPath, "utf-8");
|
|
245
|
+
const { $schema: _, ...config } = JSON.parse(content);
|
|
246
|
+
return config;
|
|
252
247
|
} catch {
|
|
253
248
|
continue;
|
|
254
249
|
}
|
|
@@ -256,27 +251,17 @@ async function resolveOxfmtConfigOptions() {
|
|
|
256
251
|
return {};
|
|
257
252
|
}
|
|
258
253
|
/**
|
|
259
|
-
* Check if a feature should be enabled based on options. Handles the pattern
|
|
260
|
-
* where features can be disabled globally or individually.
|
|
261
|
-
*
|
|
262
|
-
* @template T - The type of the options object.
|
|
263
|
-
* @template K - The key type within the options object.
|
|
264
|
-
* @param options - The options object (true | false | undefined | object).
|
|
265
|
-
* @param key - The key to check within the options object.
|
|
266
|
-
* @param defaultValue - Default value when key is not specified.
|
|
267
|
-
* @returns Whether the feature should be enabled.
|
|
268
|
-
*/
|
|
269
|
-
/**
|
|
270
254
|
* Override the severity of all rules in a rules object, preserving rule
|
|
271
255
|
* options. Rules set to `"off"` are not affected.
|
|
272
256
|
*
|
|
273
257
|
* @param rules - The rules object to override.
|
|
274
258
|
* @param severity - The target severity level.
|
|
259
|
+
* @param excludeRules - Rules to exclude from the severity override.
|
|
275
260
|
* @returns A new rules object with overridden severities.
|
|
276
261
|
*/
|
|
277
|
-
function overrideRuleSeverity(rules, severity) {
|
|
262
|
+
function overrideRuleSeverity(rules, severity, excludeRules = /* @__PURE__ */ new Set()) {
|
|
278
263
|
return Object.fromEntries(Object.entries(rules).map(([key, value]) => {
|
|
279
|
-
if (value === "off" || value === 0) return [key, value];
|
|
264
|
+
if (value === "off" || value === 0 || excludeRules.has(key)) return [key, value];
|
|
280
265
|
if (Array.isArray(value)) {
|
|
281
266
|
const [currentSeverity, ...options] = value;
|
|
282
267
|
if (currentSeverity === "off" || currentSeverity === 0) return [key, value];
|
|
@@ -398,7 +383,7 @@ const GLOB_EXCLUDE = [
|
|
|
398
383
|
"**/.cache",
|
|
399
384
|
"**/.changeset",
|
|
400
385
|
"**/.agents",
|
|
401
|
-
"**/.claude",
|
|
386
|
+
"**/.claude/**/*",
|
|
402
387
|
"**/.gemini",
|
|
403
388
|
"**/.kilocode",
|
|
404
389
|
"**/.opencode",
|
|
@@ -462,8 +447,8 @@ async function comments(options = {}) {
|
|
|
462
447
|
name: "isentinel/eslint/comments/src",
|
|
463
448
|
files: [GLOB_SRC],
|
|
464
449
|
rules: { "comment-length/limit-single-line-comments": ["error", {
|
|
465
|
-
maxLength: Number(prettierOptions["jsdocPrintWidth"]) + 2,
|
|
466
|
-
tabSize: prettierOptions.tabWidth
|
|
450
|
+
maxLength: (Number(prettierOptions["jsdocPrintWidth"]) || 80) + 2,
|
|
451
|
+
tabSize: prettierOptions.tabWidth ?? 4
|
|
467
452
|
}] }
|
|
468
453
|
}] : []];
|
|
469
454
|
}
|
|
@@ -504,7 +489,8 @@ async function disables(options) {
|
|
|
504
489
|
files: ["**/bin/**/*", `**/bin.${GLOB_SRC_EXT}`],
|
|
505
490
|
rules: {
|
|
506
491
|
"antfu/no-import-dist": "off",
|
|
507
|
-
"antfu/no-import-node-modules-by-path": "off"
|
|
492
|
+
"antfu/no-import-node-modules-by-path": "off",
|
|
493
|
+
"antfu/no-top-level-await": "off"
|
|
508
494
|
}
|
|
509
495
|
},
|
|
510
496
|
{
|
|
@@ -531,8 +517,10 @@ async function disables(options) {
|
|
|
531
517
|
"max-lines-per-function": "off",
|
|
532
518
|
"no-empty-function": "off",
|
|
533
519
|
"no-unused-expressions": "off",
|
|
520
|
+
"sonar/no-duplicate-string": "off",
|
|
534
521
|
"ts/explicit-function-return-type": "off",
|
|
535
522
|
"ts/no-empty-function": "off",
|
|
523
|
+
"ts/no-extraneous-class": "off",
|
|
536
524
|
"ts/no-non-null-assertion": "off",
|
|
537
525
|
"ts/unbound-method": "off",
|
|
538
526
|
"unicorn/consistent-function-scoping": "off"
|
|
@@ -1726,11 +1714,12 @@ const defaultPluginRenaming = {
|
|
|
1726
1714
|
"yml": "yaml"
|
|
1727
1715
|
};
|
|
1728
1716
|
async function isentinel(options, ...userConfigs) {
|
|
1729
|
-
const { autoRenamePlugins = true, componentExts: componentExtensions = [], eslintPlugin: enableEslintPlugin = false, formatters, gitignore: enableGitignore = true, jsdoc: enableJsdoc = true, jsx: enableJsx = true, pnpm: enableCatalogs = findUpSync("pnpm-workspace.yaml") !== void 0, react: enableReact = false, root: customRootGlobs, spellCheck: enableSpellCheck
|
|
1717
|
+
const { autoRenamePlugins = true, componentExts: componentExtensions = [], eslintPlugin: enableEslintPlugin = false, formatters, gitignore: enableGitignore = true, jsdoc: enableJsdoc = true, jsx: enableJsx = true, pnpm: enableCatalogs = findUpSync("pnpm-workspace.yaml") !== void 0, react: enableReact = false, root: customRootGlobs, spellCheck: enableSpellCheck } = options;
|
|
1730
1718
|
const rootGlobs = mergeGlobs(GLOB_ROOT, customRootGlobs);
|
|
1731
1719
|
const enableRoblox = options.roblox !== false;
|
|
1720
|
+
const inAgentSession = isInAgentSession();
|
|
1732
1721
|
let { defaultSeverity, isInEditor } = options;
|
|
1733
|
-
if (defaultSeverity === void 0 &&
|
|
1722
|
+
if (defaultSeverity === void 0 && inAgentSession) defaultSeverity = "error";
|
|
1734
1723
|
if (isInEditor === void 0) {
|
|
1735
1724
|
isInEditor = isInEditorEnvironment();
|
|
1736
1725
|
if (isInEditor) console.log("[@isentinel/eslint-config] Detected running in editor, some rules are disabled.");
|
|
@@ -1747,24 +1736,17 @@ async function isentinel(options, ...userConfigs) {
|
|
|
1747
1736
|
})();
|
|
1748
1737
|
if (stylisticOptions !== false && !("jsx" in stylisticOptions)) stylisticOptions.jsx = enableJsx;
|
|
1749
1738
|
const formatterOptions = typeof options.formatters === "object" ? options.formatters : {};
|
|
1750
|
-
const jsFormatter = formatterOptions.javascript ?? "oxfmt";
|
|
1751
|
-
const tsFormatter = formatterOptions.typescript ?? "oxfmt";
|
|
1752
|
-
const useOxfmt = options.formatters !== false && (jsFormatter === "oxfmt" || tsFormatter === "oxfmt");
|
|
1753
1739
|
const prettierOptions = formatterOptions.prettierOptions ?? {};
|
|
1754
1740
|
const editorConfigOptions = await resolvePrettierConfigOptions();
|
|
1755
|
-
const oxfmtConfigOptions =
|
|
1741
|
+
const oxfmtConfigOptions = options.formatters !== false ? await resolveOxfmtConfigOptions() : {};
|
|
1756
1742
|
const prettierSettings = Object.assign({
|
|
1757
1743
|
arrowParens: "always",
|
|
1758
|
-
jsdocPreferCodeFences: true,
|
|
1759
|
-
jsdocPrintWidth: 80,
|
|
1760
|
-
plugins: [require$1.resolve("prettier-plugin-jsdoc")],
|
|
1761
1744
|
printWidth: 100,
|
|
1762
1745
|
quoteProps: "consistent",
|
|
1763
1746
|
semi: true,
|
|
1764
1747
|
singleQuote: false,
|
|
1765
1748
|
tabWidth: 4,
|
|
1766
1749
|
trailingComma: "all",
|
|
1767
|
-
tsdoc: true,
|
|
1768
1750
|
useTabs: true
|
|
1769
1751
|
}, editorConfigOptions, prettierOptions);
|
|
1770
1752
|
const configs = [];
|
|
@@ -1871,26 +1853,20 @@ async function isentinel(options, ...userConfigs) {
|
|
|
1871
1853
|
isInEditor
|
|
1872
1854
|
}));
|
|
1873
1855
|
configs.push(disables({ root: rootGlobs }));
|
|
1874
|
-
if (stylisticOptions !== false) {
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
oxfmtConfigOptions,
|
|
1889
|
-
oxfmtOptions: formatterOptions.oxfmtOptions,
|
|
1890
|
-
prettierOptions: prettierSettings,
|
|
1891
|
-
tsFormatter
|
|
1892
|
-
}));
|
|
1893
|
-
}
|
|
1856
|
+
if (stylisticOptions !== false) configs.push(oxfmt({
|
|
1857
|
+
componentExts: componentExtensions,
|
|
1858
|
+
formatters: formatters !== false ? formatters : {
|
|
1859
|
+
css: false,
|
|
1860
|
+
graphql: false,
|
|
1861
|
+
html: false,
|
|
1862
|
+
json: false,
|
|
1863
|
+
markdown: false,
|
|
1864
|
+
yaml: false
|
|
1865
|
+
},
|
|
1866
|
+
oxfmtConfigOptions,
|
|
1867
|
+
oxfmtOptions: formatterOptions.oxfmtOptions,
|
|
1868
|
+
prettierOptions: prettierSettings
|
|
1869
|
+
}));
|
|
1894
1870
|
if ("files" in options) throw new Error("[@isentinel/eslint-config] The first argument should not contain the \"files\" property as the options are supposed to be global. Place it in the second or later config instead.");
|
|
1895
1871
|
const fusedConfig = flatConfigProps.reduce((accumulator, key) => {
|
|
1896
1872
|
if (key in options) accumulator[key] = options[key];
|
|
@@ -1900,27 +1876,39 @@ async function isentinel(options, ...userConfigs) {
|
|
|
1900
1876
|
let composer = new FlatConfigComposer();
|
|
1901
1877
|
composer = composer.append(...configs, ...userConfigs);
|
|
1902
1878
|
if (autoRenamePlugins) composer = composer.renamePlugins(defaultPluginRenaming);
|
|
1903
|
-
if (isInEditor) {
|
|
1904
|
-
const disableAutofixRules = [
|
|
1905
|
-
|
|
1906
|
-
"prefer-const",
|
|
1907
|
-
"
|
|
1908
|
-
|
|
1909
|
-
if (
|
|
1879
|
+
if (isInEditor || inAgentSession) {
|
|
1880
|
+
const disableAutofixRules = [];
|
|
1881
|
+
if (isInEditor) {
|
|
1882
|
+
disableAutofixRules.push("no-useless-return", "prefer-const", "unused-imports/no-unused-imports");
|
|
1883
|
+
if (enableRoblox) disableAutofixRules.push("unicorn/no-array-for-each");
|
|
1884
|
+
}
|
|
1885
|
+
if (inAgentSession) disableAutofixRules.push("ts/consistent-type-imports");
|
|
1910
1886
|
composer = composer.disableRulesFix(disableAutofixRules, { builtinRules: async () => {
|
|
1911
1887
|
return (await import("eslint/use-at-your-own-risk")).builtinRules;
|
|
1912
1888
|
} });
|
|
1913
1889
|
}
|
|
1914
|
-
if (defaultSeverity)
|
|
1915
|
-
|
|
1916
|
-
|
|
1890
|
+
if (defaultSeverity) {
|
|
1891
|
+
const severityExcludeRules = new Set(["sonar/todo-tag"]);
|
|
1892
|
+
composer = composer.onResolved((item) => {
|
|
1893
|
+
for (const config of item) if (config.rules) config.rules = overrideRuleSeverity(config.rules, defaultSeverity, severityExcludeRules);
|
|
1894
|
+
});
|
|
1895
|
+
}
|
|
1917
1896
|
return composer;
|
|
1918
1897
|
}
|
|
1919
1898
|
|
|
1920
1899
|
//#endregion
|
|
1921
1900
|
//#region src/configs/oxfmt.ts
|
|
1922
1901
|
async function oxfmt(options) {
|
|
1923
|
-
const { componentExts: componentExtensions = [], files: oxfmtFiles,
|
|
1902
|
+
const { componentExts: componentExtensions = [], files: oxfmtFiles, formatters = {}, oxfmtConfigOptions = {}, oxfmtOptions: userOxfmtOptions, prettierOptions = {} } = options ?? {};
|
|
1903
|
+
const formattingOptions = {
|
|
1904
|
+
css: true,
|
|
1905
|
+
graphql: true,
|
|
1906
|
+
html: true,
|
|
1907
|
+
json: true,
|
|
1908
|
+
markdown: true,
|
|
1909
|
+
yaml: true,
|
|
1910
|
+
...resolveWithDefaults(formatters, {})
|
|
1911
|
+
};
|
|
1924
1912
|
const oxfmtOptions = {
|
|
1925
1913
|
sortImports: {
|
|
1926
1914
|
customGroups: [{
|
|
@@ -1953,6 +1941,7 @@ async function oxfmt(options) {
|
|
|
1953
1941
|
],
|
|
1954
1942
|
newlinesBetween: true
|
|
1955
1943
|
},
|
|
1944
|
+
sortPackageJson: false,
|
|
1956
1945
|
...migratePrettierOptions(prettierOptions),
|
|
1957
1946
|
...oxfmtConfigOptions,
|
|
1958
1947
|
...userOxfmtOptions
|
|
@@ -1965,45 +1954,90 @@ async function oxfmt(options) {
|
|
|
1965
1954
|
name: "isentinel/oxfmt/setup",
|
|
1966
1955
|
plugins: { oxfmt: pluginOxfmt }
|
|
1967
1956
|
}];
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
rules
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
}
|
|
2006
|
-
}
|
|
1957
|
+
const jsFiles = oxfmtFiles ?? [
|
|
1958
|
+
GLOB_JS,
|
|
1959
|
+
GLOB_JSX,
|
|
1960
|
+
`${GLOB_MARKDOWN}/${GLOB_JS}`,
|
|
1961
|
+
`${GLOB_MARKDOWN}/${GLOB_JSX}`
|
|
1962
|
+
];
|
|
1963
|
+
configs.push({
|
|
1964
|
+
name: "isentinel/oxfmt/javascript",
|
|
1965
|
+
files: jsFiles,
|
|
1966
|
+
rules: {
|
|
1967
|
+
...rules,
|
|
1968
|
+
"arrow-body-style": "off",
|
|
1969
|
+
"oxfmt/oxfmt": ["error", oxfmtOptions],
|
|
1970
|
+
"prefer-arrow-callback": "off"
|
|
1971
|
+
}
|
|
1972
|
+
});
|
|
1973
|
+
const tsFiles = oxfmtFiles ?? [
|
|
1974
|
+
GLOB_TS,
|
|
1975
|
+
GLOB_TSX,
|
|
1976
|
+
`${GLOB_MARKDOWN}/${GLOB_TS}`,
|
|
1977
|
+
`${GLOB_MARKDOWN}/${GLOB_TSX}`,
|
|
1978
|
+
...componentExtensions.map((extension) => `**/*.${extension}`)
|
|
1979
|
+
];
|
|
1980
|
+
configs.push({
|
|
1981
|
+
name: "isentinel/oxfmt/typescript",
|
|
1982
|
+
files: tsFiles,
|
|
1983
|
+
rules: {
|
|
1984
|
+
...rules,
|
|
1985
|
+
"arrow-body-style": "off",
|
|
1986
|
+
"oxfmt/oxfmt": ["error", oxfmtOptions],
|
|
1987
|
+
"prefer-arrow-callback": "off"
|
|
1988
|
+
}
|
|
1989
|
+
});
|
|
1990
|
+
if (formattingOptions.css) configs.push({
|
|
1991
|
+
name: "isentinel/oxfmt/css",
|
|
1992
|
+
files: [GLOB_CSS, GLOB_POSTCSS],
|
|
1993
|
+
languageOptions: { parser: parserPlain },
|
|
1994
|
+
rules: { "oxfmt/oxfmt": ["error", oxfmtOptions] }
|
|
1995
|
+
}, {
|
|
1996
|
+
name: "isentinel/oxfmt/scss",
|
|
1997
|
+
files: [GLOB_SCSS],
|
|
1998
|
+
languageOptions: { parser: parserPlain },
|
|
1999
|
+
rules: { "oxfmt/oxfmt": ["error", oxfmtOptions] }
|
|
2000
|
+
}, {
|
|
2001
|
+
name: "isentinel/oxfmt/less",
|
|
2002
|
+
files: [GLOB_LESS],
|
|
2003
|
+
languageOptions: { parser: parserPlain },
|
|
2004
|
+
rules: { "oxfmt/oxfmt": ["error", oxfmtOptions] }
|
|
2005
|
+
});
|
|
2006
|
+
if (formattingOptions.html) configs.push({
|
|
2007
|
+
name: "isentinel/oxfmt/html",
|
|
2008
|
+
files: ["**/*.html"],
|
|
2009
|
+
languageOptions: { parser: parserPlain },
|
|
2010
|
+
rules: { "oxfmt/oxfmt": ["error", oxfmtOptions] }
|
|
2011
|
+
});
|
|
2012
|
+
if (formattingOptions.markdown) configs.push({
|
|
2013
|
+
name: "isentinel/oxfmt/markdown",
|
|
2014
|
+
files: [GLOB_MARKDOWN],
|
|
2015
|
+
rules: { "oxfmt/oxfmt": ["error", {
|
|
2016
|
+
...oxfmtOptions,
|
|
2017
|
+
printWidth: Number(prettierOptions["jsdocPrintWidth"]) || 80,
|
|
2018
|
+
proseWrap: "always"
|
|
2019
|
+
}] }
|
|
2020
|
+
});
|
|
2021
|
+
if (formattingOptions.graphql) configs.push({
|
|
2022
|
+
name: "isentinel/oxfmt/graphql",
|
|
2023
|
+
files: ["**/*.graphql"],
|
|
2024
|
+
languageOptions: { parser: parserPlain },
|
|
2025
|
+
rules: { "oxfmt/oxfmt": ["error", oxfmtOptions] }
|
|
2026
|
+
});
|
|
2027
|
+
if (formattingOptions.json) configs.push({
|
|
2028
|
+
name: "isentinel/oxfmt/json",
|
|
2029
|
+
files: [GLOB_ALL_JSON],
|
|
2030
|
+
rules: { "oxfmt/oxfmt": ["error", oxfmtOptions] }
|
|
2031
|
+
});
|
|
2032
|
+
if (formattingOptions.yaml) configs.push({
|
|
2033
|
+
name: "isentinel/oxfmt/yaml",
|
|
2034
|
+
files: [GLOB_YAML],
|
|
2035
|
+
rules: { "oxfmt/oxfmt": ["error", {
|
|
2036
|
+
...oxfmtOptions,
|
|
2037
|
+
tabWidth: 2,
|
|
2038
|
+
useTabs: false
|
|
2039
|
+
}] }
|
|
2040
|
+
});
|
|
2007
2041
|
return configs;
|
|
2008
2042
|
}
|
|
2009
2043
|
const UNSUPPORTED_PRETTIER_KEYS = new Set([
|
|
@@ -2260,119 +2294,6 @@ async function detectCatalogUsage() {
|
|
|
2260
2294
|
return yaml.includes("catalog:") || yaml.includes("catalogs:");
|
|
2261
2295
|
}
|
|
2262
2296
|
|
|
2263
|
-
//#endregion
|
|
2264
|
-
//#region src/configs/prettier.ts
|
|
2265
|
-
async function prettier(options) {
|
|
2266
|
-
const { componentExts: componentExtensions = [], files: prettierFiles, formatters = {}, jsFormatter = "oxfmt", prettierOptions = {}, tsFormatter = "oxfmt" } = options ?? {};
|
|
2267
|
-
const formattingOptions = {
|
|
2268
|
-
css: true,
|
|
2269
|
-
graphql: true,
|
|
2270
|
-
html: true,
|
|
2271
|
-
json: true,
|
|
2272
|
-
markdown: true,
|
|
2273
|
-
yaml: true,
|
|
2274
|
-
...resolveWithDefaults(formatters, {})
|
|
2275
|
-
};
|
|
2276
|
-
const [configPrettier, pluginPrettier] = await Promise.all([interopDefault(import("eslint-config-prettier/flat")), interopDefault(import("eslint-plugin-prettier"))]);
|
|
2277
|
-
const rulesToIgnore = ["curly", "style/quotes"];
|
|
2278
|
-
const rules = renameRules(configPrettier.rules, defaultPluginRenaming);
|
|
2279
|
-
for (const rule of rulesToIgnore) delete rules[rule];
|
|
2280
|
-
const configs = [{
|
|
2281
|
-
name: "isentinel/prettier/setup",
|
|
2282
|
-
plugins: { format: pluginPrettier }
|
|
2283
|
-
}];
|
|
2284
|
-
if (jsFormatter === "prettier") {
|
|
2285
|
-
const jsFiles = prettierFiles ?? [
|
|
2286
|
-
GLOB_JS,
|
|
2287
|
-
GLOB_JSX,
|
|
2288
|
-
`${GLOB_MARKDOWN}/${GLOB_JS}`,
|
|
2289
|
-
`${GLOB_MARKDOWN}/${GLOB_JSX}`
|
|
2290
|
-
];
|
|
2291
|
-
configs.push({
|
|
2292
|
-
name: "isentinel/prettier/javascript",
|
|
2293
|
-
files: jsFiles,
|
|
2294
|
-
rules: {
|
|
2295
|
-
...rules,
|
|
2296
|
-
"arrow-body-style": "off",
|
|
2297
|
-
"format/prettier": ["error", mergePrettierOptions(prettierOptions, {})],
|
|
2298
|
-
"prefer-arrow-callback": "off"
|
|
2299
|
-
}
|
|
2300
|
-
});
|
|
2301
|
-
}
|
|
2302
|
-
if (tsFormatter === "prettier") {
|
|
2303
|
-
const tsFiles = prettierFiles ?? [
|
|
2304
|
-
GLOB_TS,
|
|
2305
|
-
GLOB_TSX,
|
|
2306
|
-
`${GLOB_MARKDOWN}/${GLOB_TS}`,
|
|
2307
|
-
`${GLOB_MARKDOWN}/${GLOB_TSX}`,
|
|
2308
|
-
...componentExtensions.map((extension) => `**/*.${extension}`)
|
|
2309
|
-
];
|
|
2310
|
-
configs.push({
|
|
2311
|
-
name: "isentinel/prettier/typescript",
|
|
2312
|
-
files: tsFiles,
|
|
2313
|
-
rules: {
|
|
2314
|
-
...rules,
|
|
2315
|
-
"arrow-body-style": "off",
|
|
2316
|
-
"format/prettier": ["error", mergePrettierOptions(prettierOptions, {})],
|
|
2317
|
-
"prefer-arrow-callback": "off"
|
|
2318
|
-
}
|
|
2319
|
-
});
|
|
2320
|
-
}
|
|
2321
|
-
if (formattingOptions.css) configs.push({
|
|
2322
|
-
name: "isentinel/prettier/css",
|
|
2323
|
-
files: [GLOB_CSS, GLOB_POSTCSS],
|
|
2324
|
-
languageOptions: { parser: parserPlain },
|
|
2325
|
-
rules: { "format/prettier": ["error", mergePrettierOptions(prettierOptions, { parser: "css" })] }
|
|
2326
|
-
}, {
|
|
2327
|
-
name: "isentinel/prettier/scss",
|
|
2328
|
-
files: [GLOB_SCSS],
|
|
2329
|
-
languageOptions: { parser: parserPlain },
|
|
2330
|
-
rules: { "format/prettier": ["error", mergePrettierOptions(prettierOptions, { parser: "scss" })] }
|
|
2331
|
-
}, {
|
|
2332
|
-
name: "isentinel/prettier/less",
|
|
2333
|
-
files: [GLOB_LESS],
|
|
2334
|
-
languageOptions: { parser: parserPlain },
|
|
2335
|
-
rules: { "format/prettier": ["error", mergePrettierOptions(prettierOptions, { parser: "less" })] }
|
|
2336
|
-
});
|
|
2337
|
-
if (formattingOptions.html) configs.push({
|
|
2338
|
-
name: "isentinel/prettier/html",
|
|
2339
|
-
files: ["**/*.html"],
|
|
2340
|
-
languageOptions: { parser: parserPlain },
|
|
2341
|
-
rules: { "format/prettier": ["error", mergePrettierOptions(prettierOptions, { parser: "html" })] }
|
|
2342
|
-
});
|
|
2343
|
-
if (formattingOptions.markdown) configs.push({
|
|
2344
|
-
name: "isentinel/prettier/markdown",
|
|
2345
|
-
files: [GLOB_MARKDOWN],
|
|
2346
|
-
rules: { "format/prettier": ["error", mergePrettierOptions(prettierOptions, {
|
|
2347
|
-
embeddedLanguageFormatting: "auto",
|
|
2348
|
-
parser: "markdown",
|
|
2349
|
-
printWidth: Number(prettierOptions["jsdocPrintWidth"]) || 80,
|
|
2350
|
-
proseWrap: "always"
|
|
2351
|
-
})] }
|
|
2352
|
-
});
|
|
2353
|
-
if (formattingOptions.graphql) configs.push({
|
|
2354
|
-
name: "isentinel/prettier/graphql",
|
|
2355
|
-
files: ["**/*.graphql"],
|
|
2356
|
-
languageOptions: { parser: parserPlain },
|
|
2357
|
-
rules: { "format/prettier": ["error", mergePrettierOptions(prettierOptions, { parser: "graphql" })] }
|
|
2358
|
-
});
|
|
2359
|
-
if (formattingOptions.json) configs.push({
|
|
2360
|
-
name: "isentinel/prettier/json",
|
|
2361
|
-
files: [GLOB_ALL_JSON],
|
|
2362
|
-
rules: { "format/prettier": ["error", mergePrettierOptions(prettierOptions, { parser: "json" })] }
|
|
2363
|
-
});
|
|
2364
|
-
if (formattingOptions.yaml) configs.push({
|
|
2365
|
-
name: "isentinel/prettier/yaml",
|
|
2366
|
-
files: [GLOB_YAML],
|
|
2367
|
-
rules: { "format/prettier": ["error", mergePrettierOptions(prettierOptions, {
|
|
2368
|
-
parser: "yaml",
|
|
2369
|
-
tabWidth: 2,
|
|
2370
|
-
useTabs: false
|
|
2371
|
-
})] }
|
|
2372
|
-
});
|
|
2373
|
-
return configs;
|
|
2374
|
-
}
|
|
2375
|
-
|
|
2376
2297
|
//#endregion
|
|
2377
2298
|
//#region src/configs/promise.ts
|
|
2378
2299
|
async function promise() {
|
|
@@ -3324,7 +3245,7 @@ async function stylistic(options = {}, prettierOptions = {}) {
|
|
|
3324
3245
|
maxObjectProperties: 2,
|
|
3325
3246
|
namedExportsAlwaysUseExplicitReturn: true,
|
|
3326
3247
|
objectReturnStyle: "complex-explicit",
|
|
3327
|
-
usePrettier:
|
|
3248
|
+
usePrettier: prettierOptions
|
|
3328
3249
|
}] };
|
|
3329
3250
|
}
|
|
3330
3251
|
return [
|
|
@@ -3520,10 +3441,20 @@ async function test(options = {}) {
|
|
|
3520
3441
|
if (enableVitest) {
|
|
3521
3442
|
await ensurePackages(["@vitest/eslint-plugin"]);
|
|
3522
3443
|
const vitestPlugin = await interopDefault(import("@vitest/eslint-plugin"));
|
|
3444
|
+
const useJestExtended = vitestOptions.extended === true;
|
|
3445
|
+
const jestExtendedPlugin = await (async () => {
|
|
3446
|
+
if (!useJestExtended) return;
|
|
3447
|
+
await ensurePackages(["eslint-plugin-jest-extended"]);
|
|
3448
|
+
return interopDefault(import("eslint-plugin-jest-extended"));
|
|
3449
|
+
})();
|
|
3523
3450
|
pluginVitest ??= { ...vitestPlugin };
|
|
3451
|
+
pluginJestExtended ??= { ...jestExtendedPlugin };
|
|
3524
3452
|
configs.push({
|
|
3525
3453
|
name: "isentinel/test/vitest/setup",
|
|
3526
|
-
plugins: {
|
|
3454
|
+
plugins: {
|
|
3455
|
+
vitest: pluginVitest,
|
|
3456
|
+
...useJestExtended ? { "jest-extended": pluginJestExtended } : {}
|
|
3457
|
+
}
|
|
3527
3458
|
}, {
|
|
3528
3459
|
name: "isentinel/test/vitest/rules",
|
|
3529
3460
|
files,
|
|
@@ -3561,7 +3492,10 @@ async function test(options = {}) {
|
|
|
3561
3492
|
"vitest/no-standalone-expect": "error",
|
|
3562
3493
|
"vitest/no-test-prefixes": "error",
|
|
3563
3494
|
"vitest/no-test-return-statement": "error",
|
|
3495
|
+
"vitest/no-unneeded-async-expect-function": "error",
|
|
3564
3496
|
"vitest/prefer-called-exactly-once-with": "warn",
|
|
3497
|
+
"vitest/prefer-called-once": "error",
|
|
3498
|
+
"vitest/prefer-called-with": "error",
|
|
3565
3499
|
"vitest/prefer-comparison-matcher": "warn",
|
|
3566
3500
|
"vitest/prefer-describe-function-title": "warn",
|
|
3567
3501
|
"vitest/prefer-each": "warn",
|
|
@@ -3583,6 +3517,8 @@ async function test(options = {}) {
|
|
|
3583
3517
|
"vitest/prefer-to-be": "error",
|
|
3584
3518
|
"vitest/prefer-to-be-object": "error",
|
|
3585
3519
|
"vitest/prefer-to-contain": "error",
|
|
3520
|
+
"vitest/prefer-to-have-been-called-times": "error",
|
|
3521
|
+
"vitest/prefer-to-have-length": "error",
|
|
3586
3522
|
"vitest/prefer-todo": "warn",
|
|
3587
3523
|
"vitest/prefer-vi-mocked": "error",
|
|
3588
3524
|
"vitest/require-awaited-expect-poll": "error",
|
|
@@ -3597,6 +3533,13 @@ async function test(options = {}) {
|
|
|
3597
3533
|
ignoreTypeOfDescribeName: true,
|
|
3598
3534
|
mustMatch: { it: ["^should", "Test title must start with \"should\""] }
|
|
3599
3535
|
}],
|
|
3536
|
+
...useJestExtended ? {
|
|
3537
|
+
"jest-extended/prefer-to-be-array": "error",
|
|
3538
|
+
"jest-extended/prefer-to-be-false": "error",
|
|
3539
|
+
"jest-extended/prefer-to-be-object": "error",
|
|
3540
|
+
"jest-extended/prefer-to-be-true": "error",
|
|
3541
|
+
"jest-extended/prefer-to-have-been-called-once": "error"
|
|
3542
|
+
} : {},
|
|
3600
3543
|
...stylistic !== false ? { "vitest/padding-around-all": "warn" } : {},
|
|
3601
3544
|
...overrides
|
|
3602
3545
|
},
|
|
@@ -3673,6 +3616,7 @@ async function typescript(options = {}) {
|
|
|
3673
3616
|
}],
|
|
3674
3617
|
"ts/dot-notation": ["error", { allowKeywords: true }],
|
|
3675
3618
|
"ts/no-confusing-void-expression": "error",
|
|
3619
|
+
"ts/no-deprecated": "error",
|
|
3676
3620
|
"ts/no-duplicate-type-constituents": "error",
|
|
3677
3621
|
"ts/no-empty-object-type": "error",
|
|
3678
3622
|
"ts/no-floating-promises": ["error", { ignoreVoid: true }],
|
|
@@ -4004,4 +3948,4 @@ async function yaml(options = {}) {
|
|
|
4004
3948
|
}
|
|
4005
3949
|
|
|
4006
3950
|
//#endregion
|
|
4007
|
-
export { GLOB_ALL_JSON, GLOB_ALL_SRC, GLOB_BUILD_TOOLS, GLOB_CSS, GLOB_DTS, GLOB_EXCLUDE, GLOB_GRAPHQL, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_LUA, GLOB_MARKDOWN, GLOB_MARKDOWN_BLOCKS, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_POSTCSS, GLOB_ROOT, GLOB_ROOT_SRC, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_XML, GLOB_YAML, StylisticConfigDefaults, ceaseNonsense, comments, isentinel as default, isentinel, defaultPluginRenaming, disables, eslintPlugin, flawless, gitignore, ignores, imports, javascript, jsdoc, jsonc, markdown, node, oxfmt, packageJson, perfectionist, pnpm,
|
|
3951
|
+
export { GLOB_ALL_JSON, GLOB_ALL_SRC, GLOB_BUILD_TOOLS, GLOB_CSS, GLOB_DTS, GLOB_EXCLUDE, GLOB_GRAPHQL, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_LUA, GLOB_MARKDOWN, GLOB_MARKDOWN_BLOCKS, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_POSTCSS, GLOB_ROOT, GLOB_ROOT_SRC, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_XML, GLOB_YAML, StylisticConfigDefaults, ceaseNonsense, comments, isentinel as default, isentinel, defaultPluginRenaming, disables, eslintPlugin, flawless, gitignore, ignores, imports, isInAgentSession, isInEditorEnvironment, isInGitHooksOrLintStaged, javascript, jsdoc, jsonc, markdown, node, oxfmt, packageJson, perfectionist, pnpm, promise, react, roblox, sonarjs, sortGithubAction, sortPnpmWorkspace, sortRojoProject, sortTsconfig, spelling, stylistic, test, toml, typescript, unicorn, yaml };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@isentinel/eslint-config",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.10",
|
|
4
4
|
"description": "iSentinel's ESLint config",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eslint-config",
|
|
@@ -81,7 +81,6 @@
|
|
|
81
81
|
"eslint-plugin-package-json": "0.89.1",
|
|
82
82
|
"eslint-plugin-perfectionist": "5.6.0",
|
|
83
83
|
"eslint-plugin-pnpm": "1.5.0",
|
|
84
|
-
"eslint-plugin-prettier": "5.5.5",
|
|
85
84
|
"eslint-plugin-promise": "7.2.1",
|
|
86
85
|
"eslint-plugin-roblox-ts": "1.4.0",
|
|
87
86
|
"eslint-plugin-sentinel": "0.1.2",
|
|
@@ -96,7 +95,6 @@
|
|
|
96
95
|
"local-pkg": "1.1.2",
|
|
97
96
|
"oxfmt": "0.35.0",
|
|
98
97
|
"prettier": "3.8.1",
|
|
99
|
-
"prettier-plugin-jsdoc": "1.8.0",
|
|
100
98
|
"toml-eslint-parser": "1.0.3",
|
|
101
99
|
"yaml-eslint-parser": "2.0.0",
|
|
102
100
|
"yargs": "18.0.0"
|
|
@@ -133,7 +131,7 @@
|
|
|
133
131
|
"type-fest": "5.4.4",
|
|
134
132
|
"typescript": "5.9.3",
|
|
135
133
|
"unplugin-unused": "0.5.7",
|
|
136
|
-
"@isentinel/eslint-config": "5.0.0-beta.
|
|
134
|
+
"@isentinel/eslint-config": "5.0.0-beta.10"
|
|
137
135
|
},
|
|
138
136
|
"peerDependencies": {
|
|
139
137
|
"@vitest/eslint-plugin": "^1.6.4",
|