@danwithabox/eslint-entree
Version:
An appetizer for linting 🥂
831 lines (830 loc) • 26.7 kB
TypeScript
import gitignore from "eslint-config-flat-gitignore";
import { defineConfig } from "eslint/config";
import { RuleOptions } from "@stylistic/eslint-plugin";
import { Linter } from "eslint";
import { RuleOptions as RuleOptions$1 } from "eslint-plugin-vue/lib/eslint-typegen";
import { Simplify } from "type-fest";
//#region src/entree-configs.d.ts
/**
* ESLint config for TypeScript + .gitignore file support from `eslint-config-flat-gitignore`.
*/
declare function typeScript(config: {
gitignore: boolean;
typeScriptRules: Linter.RulesRecord;
}): Array<Linter.Config>;
/**
* ESLint config for TypeScript & Vue 3 + .gitignore file support from `eslint-config-flat-gitignore`.
*
* Vue 3 support is focused on Single File Components with Composition API and `<script setup>`
*/
declare function vue3(config: {
gitignore: boolean;
typeScriptRules: Linter.RulesRecord;
vue3Rules: Linter.RulesRecord;
}): Array<Linter.Config>;
/**
* ESLint config for TypeScript & React + .gitignore file support from `eslint-config-flat-gitignore`.
*/
declare function react(config: {
gitignore: boolean;
typeScriptRules: Linter.RulesRecord;
reactRules: Linter.RulesRecord;
}): Array<Linter.Config>;
/**
* Configs bundled with the library.
*/
declare const entreeConfigs: {
typeScript: typeof typeScript;
vue3: typeof vue3;
react: typeof react;
};
//#endregion
//#region src/entree-rules.d.ts
/**
* Every collection of hand-picked rules.
*/
declare const entreeRules: {
react(): any;
vue3(): {
"vue/array-bracket-spacing": ["warn", "never"];
"vue/arrow-spacing": ["warn"];
"vue/comma-dangle": ["warn", {
arrays: "always-multiline";
objects: "always";
imports: "never";
exports: "always-multiline";
functions: "always-multiline";
}];
"vue/comma-spacing": ["warn", {
before: false;
after: true;
}];
"vue/key-spacing": ["warn", {
singleLine: {
beforeColon: false;
afterColon: true;
};
multiLine: {
beforeColon: false;
afterColon: true;
};
align: {
beforeColon: false;
afterColon: true;
on: "value";
};
}];
"vue/keyword-spacing": ["warn", {
before: true;
after: true;
}];
"vue/object-curly-spacing": ["warn", "always", {
arraysInObjects: false;
objectsInObjects: false;
}];
"vue/space-in-parens": ["warn", "never"];
"vue/space-infix-ops": ["warn", {
int32Hint: true;
}];
"vue/block-order": ["warn", {
order: string[];
}];
"vue/no-duplicate-attr-inheritance": ["error"];
"vue/no-required-prop-with-default": ["warn", {
autofix: true;
}];
"vue/no-restricted-v-bind": ["error", {
argument: string;
message: string;
}];
"vue/no-undef-components": ["error", {
ignorePatterns: string[];
}];
"vue/no-unused-refs": ["error"];
"vue/padding-line-between-blocks": ["warn", "always"];
"vue/prefer-define-options": ["warn"];
"vue/prefer-separate-static-class": ["warn"];
"vue/require-macro-variable-name": ["error", {
defineProps: string;
defineEmits: string;
defineSlots: string;
useSlots: string;
useAttrs: string;
}];
"vue/require-typed-ref": ["error"];
"vue/v-for-delimiter-style": ["warn", "in"];
"vue/valid-define-options": ["error"];
"vue/block-lang": ["error", {
script: {
lang: string;
};
}];
"vue/component-api-style": ["error", ["script-setup"]];
"vue/component-name-in-template-casing": ["warn", "PascalCase", {
registeredComponentsOnly: true;
ignores: never[];
globals: string[];
}];
"vue/custom-event-name-casing": ["warn", "camelCase", {
ignores: never[];
}];
"vue/define-emits-declaration": ["warn", "type-literal"];
"vue/define-props-declaration": ["warn", "type-based"];
"vue/html-button-has-type": ["warn", {
button: true;
submit: false;
reset: false;
}];
"vue/attributes-order": ["warn", {
order: ("DEFINITION" | "LIST_RENDERING" | "CONDITIONALS" | "RENDER_MODIFIERS" | "GLOBAL" | "UNIQUE" | "SLOT" | "TWO_WAY_BINDING" | "OTHER_DIRECTIVES" | "ATTR_STATIC" | "ATTR_DYNAMIC" | "ATTR_SHORTHAND_BOOL" | "EVENTS" | "CONTENT")[];
alphabetical: false;
}];
"vue/no-lone-template": ["warn", {
ignoreAccessible: true;
}];
"vue/no-multiple-slot-args": ["warn"];
"vue/no-v-html": ["warn"];
"vue/attribute-hyphenation": ["warn"];
"vue/html-closing-bracket-spacing": ["warn"];
"vue/html-self-closing": ["warn", {
html: {
void: "never";
normal: "never";
component: "any";
};
svg: "any";
math: "any";
}];
"vue/html-quotes": ["warn", "double", {
avoidEscape: true;
}];
"vue/mustache-interpolation-spacing": ["warn", "always"];
"vue/no-multi-spaces": ["warn", {
ignoreProperties: true;
}];
"vue/no-spaces-around-equal-signs-in-attribute": ["warn"];
"vue/no-template-shadow": ["warn"];
"vue/v-bind-style": ["warn", "shorthand"];
"vue/v-on-event-hyphenation": ["warn", "always", {
autofix: true;
}];
"vue/v-on-style": ["warn", "shorthand"];
"vue/v-slot-style": ["warn", {
atComponent: "shorthand";
default: "shorthand";
named: "shorthand";
}];
"vue/no-dupe-keys": ["error"];
"vue/no-side-effects-in-computed-properties": ["error"];
"vue/no-ref-as-operand": ["error"];
"vue/no-async-in-computed-properties": ["error"];
"vue/no-child-content": ["error"];
"vue/no-dupe-v-else-if": ["error"];
"vue/no-duplicate-attributes": ["error"];
"vue/no-export-in-script-setup": ["error"];
"vue/no-expose-after-await": ["error"];
"vue/no-lifecycle-after-await": ["error"];
"vue/no-reserved-keys": ["error"];
"vue/no-reserved-props": ["error"];
"vue/no-template-key": ["error"];
"vue/no-textarea-mustache": ["error"];
"vue/no-use-v-if-with-v-for": ["error"];
"vue/no-useless-template-attributes": ["error"];
"vue/no-v-for-template-key-on-child": ["error"];
"vue/no-v-text-v-html-on-component": ["error"];
"vue/no-watch-after-await": ["error"];
"vue/prefer-import-from-vue": ["error"];
"vue/require-component-is": ["error"];
"vue/require-render-return": ["error"];
"vue/require-toggle-inside-transition": ["error"];
"vue/use-v-on-exact": ["error"];
"vue/valid-attribute-name": ["error"];
"vue/valid-define-emits": ["error"];
"vue/valid-define-props": ["error"];
"vue/valid-next-tick": ["error"];
"vue/valid-template-root": ["error"];
"vue/valid-v-bind": ["error"];
"vue/valid-v-cloak": ["error"];
"vue/valid-v-else-if": ["error"];
"vue/valid-v-else": ["error"];
"vue/valid-v-html": ["error"];
"vue/valid-v-if": ["error"];
"vue/valid-v-is": ["error"];
"vue/valid-v-memo": ["error"];
"vue/valid-v-model": ["error"];
"vue/valid-v-on": ["error"];
"vue/valid-v-once": ["error"];
"vue/valid-v-pre": ["error"];
"vue/valid-v-show": ["error"];
"vue/valid-v-slot": ["error"];
"vue/valid-v-text": ["error"];
"vue/comment-directive": ["error"];
};
vue3_base(): {
"vue/comment-directive": ["error"];
};
vue3_essential(): {
"vue/no-dupe-keys": ["error"];
"vue/no-side-effects-in-computed-properties": ["error"];
"vue/no-ref-as-operand": ["error"];
"vue/no-async-in-computed-properties": ["error"];
"vue/no-child-content": ["error"];
"vue/no-dupe-v-else-if": ["error"];
"vue/no-duplicate-attributes": ["error"];
"vue/no-export-in-script-setup": ["error"];
"vue/no-expose-after-await": ["error"];
"vue/no-lifecycle-after-await": ["error"];
"vue/no-reserved-keys": ["error"];
"vue/no-reserved-props": ["error"];
"vue/no-template-key": ["error"];
"vue/no-textarea-mustache": ["error"];
"vue/no-use-v-if-with-v-for": ["error"];
"vue/no-useless-template-attributes": ["error"];
"vue/no-v-for-template-key-on-child": ["error"];
"vue/no-v-text-v-html-on-component": ["error"];
"vue/no-watch-after-await": ["error"];
"vue/prefer-import-from-vue": ["error"];
"vue/require-component-is": ["error"];
"vue/require-render-return": ["error"];
"vue/require-toggle-inside-transition": ["error"];
"vue/use-v-on-exact": ["error"];
"vue/valid-attribute-name": ["error"];
"vue/valid-define-emits": ["error"];
"vue/valid-define-props": ["error"];
"vue/valid-next-tick": ["error"];
"vue/valid-template-root": ["error"];
"vue/valid-v-bind": ["error"];
"vue/valid-v-cloak": ["error"];
"vue/valid-v-else-if": ["error"];
"vue/valid-v-else": ["error"];
"vue/valid-v-html": ["error"];
"vue/valid-v-if": ["error"];
"vue/valid-v-is": ["error"];
"vue/valid-v-memo": ["error"];
"vue/valid-v-model": ["error"];
"vue/valid-v-on": ["error"];
"vue/valid-v-once": ["error"];
"vue/valid-v-pre": ["error"];
"vue/valid-v-show": ["error"];
"vue/valid-v-slot": ["error"];
"vue/valid-v-text": ["error"];
};
vue3_strongly_recommended(): {
"vue/attribute-hyphenation": ["warn"];
"vue/html-closing-bracket-spacing": ["warn"];
"vue/html-self-closing": ["warn", {
html: {
void: "never";
normal: "never";
component: "any";
};
svg: "any";
math: "any";
}];
"vue/html-quotes": ["warn", "double", {
avoidEscape: true;
}];
"vue/mustache-interpolation-spacing": ["warn", "always"];
"vue/no-multi-spaces": ["warn", {
ignoreProperties: true;
}];
"vue/no-spaces-around-equal-signs-in-attribute": ["warn"];
"vue/no-template-shadow": ["warn"];
"vue/v-bind-style": ["warn", "shorthand"];
"vue/v-on-event-hyphenation": ["warn", "always", {
autofix: true;
}];
"vue/v-on-style": ["warn", "shorthand"];
"vue/v-slot-style": ["warn", {
atComponent: "shorthand";
default: "shorthand";
named: "shorthand";
}];
};
vue3_recommended(): {
"vue/attributes-order": ["warn", {
order: ("DEFINITION" | "LIST_RENDERING" | "CONDITIONALS" | "RENDER_MODIFIERS" | "GLOBAL" | "UNIQUE" | "SLOT" | "TWO_WAY_BINDING" | "OTHER_DIRECTIVES" | "ATTR_STATIC" | "ATTR_DYNAMIC" | "ATTR_SHORTHAND_BOOL" | "EVENTS" | "CONTENT")[];
alphabetical: false;
}];
"vue/no-lone-template": ["warn", {
ignoreAccessible: true;
}];
"vue/no-multiple-slot-args": ["warn"];
"vue/no-v-html": ["warn"];
};
vue3_uncategorized(): {
"vue/block-order": ["warn", {
order: string[];
}];
"vue/no-duplicate-attr-inheritance": ["error"];
"vue/no-required-prop-with-default": ["warn", {
autofix: true;
}];
"vue/no-restricted-v-bind": ["error", {
argument: string;
message: string;
}];
"vue/no-undef-components": ["error", {
ignorePatterns: string[];
}];
"vue/no-unused-refs": ["error"];
"vue/padding-line-between-blocks": ["warn", "always"];
"vue/prefer-define-options": ["warn"];
"vue/prefer-separate-static-class": ["warn"];
"vue/require-macro-variable-name": ["error", {
defineProps: string;
defineEmits: string;
defineSlots: string;
useSlots: string;
useAttrs: string;
}];
"vue/require-typed-ref": ["error"];
"vue/v-for-delimiter-style": ["warn", "in"];
"vue/valid-define-options": ["error"];
"vue/block-lang": ["error", {
script: {
lang: string;
};
}];
"vue/component-api-style": ["error", ["script-setup"]];
"vue/component-name-in-template-casing": ["warn", "PascalCase", {
registeredComponentsOnly: true;
ignores: never[];
globals: string[];
}];
"vue/custom-event-name-casing": ["warn", "camelCase", {
ignores: never[];
}];
"vue/define-emits-declaration": ["warn", "type-literal"];
"vue/define-props-declaration": ["warn", "type-based"];
"vue/html-button-has-type": ["warn", {
button: true;
submit: false;
reset: false;
}];
};
vue3_extension_rules_forTemplateExpressions(): {
"vue/array-bracket-spacing": ["warn", "never"];
"vue/arrow-spacing": ["warn"];
"vue/comma-dangle": ["warn", {
arrays: "always-multiline";
objects: "always";
imports: "never";
exports: "always-multiline";
functions: "always-multiline";
}];
"vue/comma-spacing": ["warn", {
before: false;
after: true;
}];
"vue/key-spacing": ["warn", {
singleLine: {
beforeColon: false;
afterColon: true;
};
multiLine: {
beforeColon: false;
afterColon: true;
};
align: {
beforeColon: false;
afterColon: true;
on: "value";
};
}];
"vue/keyword-spacing": ["warn", {
before: true;
after: true;
}];
"vue/object-curly-spacing": ["warn", "always", {
arraysInObjects: false;
objectsInObjects: false;
}];
"vue/space-in-parens": ["warn", "never"];
"vue/space-infix-ops": ["warn", {
int32Hint: true;
}];
};
typeScript(): {
"@typescript-eslint/no-import-type-side-effects": ["warn"];
"no-unused-expressions": ["off"];
"@typescript-eslint/no-unused-expressions": ["warn", {
allowShortCircuit: boolean;
allowTernary: boolean;
allowTaggedTemplates: boolean;
}];
"@typescript-eslint/no-useless-empty-export": ["error"];
"@typescript-eslint/no-invalid-void-type": ["warn", {
allowInGenericTypeArguments: boolean;
allowAsThisParameter: boolean;
}];
"@typescript-eslint/no-non-null-assertion": ["error"];
"@typescript-eslint/prefer-ts-expect-error": ["error"];
"@typescript-eslint/consistent-type-assertions": ["warn", {
assertionStyle: string;
objectLiteralTypeAssertions: string;
}];
"@typescript-eslint/no-confusing-non-null-assertion": ["warn"];
"@typescript-eslint/ban-ts-comment": ["error", {
"ts-expect-error": string;
"ts-ignore": string;
"ts-nocheck": string;
"ts-check": boolean;
}];
"@typescript-eslint/no-empty-object-type": ["error", {
allowInterfaces: string;
allowObjectTypes: string;
}];
"@typescript-eslint/no-unsafe-function-type": ["error"];
"@typescript-eslint/no-wrapper-object-types": ["error"];
"@typescript-eslint/no-duplicate-enum-values": ["error"];
"no-loss-of-precision": ["off"];
"@typescript-eslint/no-loss-of-precision": ["error"];
"@typescript-eslint/no-misused-new": ["error"];
"@typescript-eslint/no-namespace": ["warn", {
allowDeclarations: boolean;
allowDefinitionFiles: boolean;
}];
"@typescript-eslint/no-unnecessary-type-constraint": ["error"];
"@typescript-eslint/no-unsafe-declaration-merging": ["error"];
"@typescript-eslint/prefer-as-const": ["error"];
"@stylistic/type-annotation-spacing": ["warn", {
before: false;
after: true;
overrides: {
arrow: {
before: true;
after: true;
};
};
}];
"@stylistic/space-before-function-paren": ["warn", {
anonymous: "always";
named: "never";
asyncArrow: "always";
}];
"@stylistic/semi": ["warn", "always"];
"@stylistic/no-extra-semi": ["warn"];
"@stylistic/no-trailing-spaces": ["warn", {
ignoreComments: true;
}];
"@stylistic/space-infix-ops": ["warn", {
int32Hint: true;
}];
"@stylistic/object-curly-spacing": ["warn", "always", {
arraysInObjects: false;
objectsInObjects: false;
}];
"@stylistic/comma-spacing": ["warn", {
before: false;
after: true;
}];
"@stylistic/keyword-spacing": ["warn", {
before: true;
after: true;
}];
"@stylistic/quotes": ["warn", "double", {
avoidEscape: true;
allowTemplateLiterals: true;
}];
"@stylistic/space-in-parens": ["warn", "never"];
"@stylistic/array-bracket-spacing": ["warn", "never"];
"@stylistic/arrow-spacing": ["warn"];
"@stylistic/eol-last": ["warn", "always"];
"@stylistic/comma-dangle": ["warn", {
arrays: "always-multiline";
objects: "always";
imports: "never";
exports: "always-multiline";
functions: "always-multiline";
}];
"@stylistic/member-delimiter-style": ["warn", {
singleline: {
delimiter: "comma";
requireLast: true;
};
multiline: {
delimiter: "comma";
requireLast: true;
};
multilineDetection: "brackets";
}];
"@stylistic/key-spacing": ["warn", {
singleLine: {
beforeColon: false;
afterColon: true;
};
multiLine: {
beforeColon: false;
afterColon: true;
};
align: {
beforeColon: false;
afterColon: true;
on: "value";
};
}];
"no-compare-neg-zero": ["error"];
"no-debugger": ["error"];
"no-irregular-whitespace": ["error", {
skipComments: boolean;
skipJSXText: boolean;
skipRegExps: boolean;
skipStrings: boolean;
skipTemplates: boolean;
}];
"no-promise-executor-return": ["warn", {
allowVoid: boolean;
}];
"no-self-assign": ["warn", {
props: boolean;
}];
"no-self-compare": ["warn"];
"require-atomic-updates": ["error", {
allowProperties: boolean;
}];
"use-isnan": ["warn", {
enforceForSwitchCase: boolean;
enforceForIndexOf: boolean;
}];
"no-caller": ["error"];
eqeqeq: ["warn", string, {
null: string;
}];
"default-case-last": ["warn"];
"default-case": ["warn", {
commentPattern: string;
}];
"no-implicit-coercion": ["warn", {
boolean: boolean;
number: boolean;
string: boolean;
disallowTemplateShorthand: boolean;
allow: never[];
}];
"no-octal": ["warn"];
"no-nonoctal-decimal-escape": ["warn"];
"no-throw-literal": ["warn"];
"no-undefined": ["warn"];
"no-useless-escape": ["warn"];
"no-useless-rename": ["warn", {
ignoreImport: boolean;
ignoreExport: boolean;
ignoreDestructuring: boolean;
}];
"no-var": ["warn"];
"prefer-const": ["warn", {
destructuring: string;
ignoreReadBeforeAssign: boolean;
}];
"prefer-promise-reject-errors": ["warn", {
allowEmptyReject: boolean;
}];
"prefer-template": ["warn"];
"require-unicode-regexp": ["warn"];
"symbol-description": ["warn"];
};
typeScript_eslint(): {
"no-compare-neg-zero": ["error"];
"no-debugger": ["error"];
"no-irregular-whitespace": ["error", {
skipComments: boolean;
skipJSXText: boolean;
skipRegExps: boolean;
skipStrings: boolean;
skipTemplates: boolean;
}];
"no-promise-executor-return": ["warn", {
allowVoid: boolean;
}];
"no-self-assign": ["warn", {
props: boolean;
}];
"no-self-compare": ["warn"];
"require-atomic-updates": ["error", {
allowProperties: boolean;
}];
"use-isnan": ["warn", {
enforceForSwitchCase: boolean;
enforceForIndexOf: boolean;
}];
"no-caller": ["error"];
eqeqeq: ["warn", string, {
null: string;
}];
"default-case-last": ["warn"];
"default-case": ["warn", {
commentPattern: string;
}];
"no-implicit-coercion": ["warn", {
boolean: boolean;
number: boolean;
string: boolean;
disallowTemplateShorthand: boolean;
allow: never[];
}];
"no-octal": ["warn"];
"no-nonoctal-decimal-escape": ["warn"];
"no-throw-literal": ["warn"];
"no-undefined": ["warn"];
"no-useless-escape": ["warn"];
"no-useless-rename": ["warn", {
ignoreImport: boolean;
ignoreExport: boolean;
ignoreDestructuring: boolean;
}];
"no-var": ["warn"];
"prefer-const": ["warn", {
destructuring: string;
ignoreReadBeforeAssign: boolean;
}];
"prefer-promise-reject-errors": ["warn", {
allowEmptyReject: boolean;
}];
"prefer-template": ["warn"];
"require-unicode-regexp": ["warn"];
"symbol-description": ["warn"];
};
typeScript_stylistic(): {
"@stylistic/type-annotation-spacing": ["warn", {
before: false;
after: true;
overrides: {
arrow: {
before: true;
after: true;
};
};
}];
"@stylistic/space-before-function-paren": ["warn", {
anonymous: "always";
named: "never";
asyncArrow: "always";
}];
"@stylistic/semi": ["warn", "always"];
"@stylistic/no-extra-semi": ["warn"];
"@stylistic/no-trailing-spaces": ["warn", {
ignoreComments: true;
}];
"@stylistic/space-infix-ops": ["warn", {
int32Hint: true;
}];
"@stylistic/object-curly-spacing": ["warn", "always", {
arraysInObjects: false;
objectsInObjects: false;
}];
"@stylistic/comma-spacing": ["warn", {
before: false;
after: true;
}];
"@stylistic/keyword-spacing": ["warn", {
before: true;
after: true;
}];
"@stylistic/quotes": ["warn", "double", {
avoidEscape: true;
allowTemplateLiterals: true;
}];
"@stylistic/space-in-parens": ["warn", "never"];
"@stylistic/array-bracket-spacing": ["warn", "never"];
"@stylistic/arrow-spacing": ["warn"];
"@stylistic/eol-last": ["warn", "always"];
"@stylistic/comma-dangle": ["warn", {
arrays: "always-multiline";
objects: "always";
imports: "never";
exports: "always-multiline";
functions: "always-multiline";
}];
"@stylistic/member-delimiter-style": ["warn", {
singleline: {
delimiter: "comma";
requireLast: true;
};
multiline: {
delimiter: "comma";
requireLast: true;
};
multilineDetection: "brackets";
}];
"@stylistic/key-spacing": ["warn", {
singleLine: {
beforeColon: false;
afterColon: true;
};
multiLine: {
beforeColon: false;
afterColon: true;
};
align: {
beforeColon: false;
afterColon: true;
on: "value";
};
}];
};
typeScript_filteredBy_recommended(): {
"@typescript-eslint/ban-ts-comment": ["error", {
"ts-expect-error": string;
"ts-ignore": string;
"ts-nocheck": string;
"ts-check": boolean;
}];
"@typescript-eslint/no-empty-object-type": ["error", {
allowInterfaces: string;
allowObjectTypes: string;
}];
"@typescript-eslint/no-unsafe-function-type": ["error"];
"@typescript-eslint/no-wrapper-object-types": ["error"];
"@typescript-eslint/no-duplicate-enum-values": ["error"];
"no-loss-of-precision": ["off"];
"@typescript-eslint/no-loss-of-precision": ["error"];
"@typescript-eslint/no-misused-new": ["error"];
"@typescript-eslint/no-namespace": ["warn", {
allowDeclarations: boolean;
allowDefinitionFiles: boolean;
}];
"@typescript-eslint/no-unnecessary-type-constraint": ["error"];
"@typescript-eslint/no-unsafe-declaration-merging": ["error"];
"@typescript-eslint/prefer-as-const": ["error"];
};
typeScript_filteredBy_tsStylistic(): {
"@typescript-eslint/consistent-type-assertions": ["warn", {
assertionStyle: string;
objectLiteralTypeAssertions: string;
}];
"@typescript-eslint/no-confusing-non-null-assertion": ["warn"];
};
typeScript_filteredBy_strict(): {
"@typescript-eslint/no-invalid-void-type": ["warn", {
allowInGenericTypeArguments: boolean;
allowAsThisParameter: boolean;
}];
"@typescript-eslint/no-non-null-assertion": ["error"];
"@typescript-eslint/prefer-ts-expect-error": ["error"];
};
typeScript_filteredBy_miscellaneous(): {
"@typescript-eslint/no-import-type-side-effects": ["warn"];
"no-unused-expressions": ["off"];
"@typescript-eslint/no-unused-expressions": ["warn", {
allowShortCircuit: boolean;
allowTernary: boolean;
allowTaggedTemplates: boolean;
}];
"@typescript-eslint/no-useless-empty-export": ["error"];
};
};
//#endregion
//#region src/entree-utils.d.ts
type stylistic_RuleOptions = { [K in keyof RuleOptions]?: Linter.RuleEntry<RuleOptions[K]> };
declare module "eslint" {
namespace Linter {
interface RulesRecord extends stylistic_RuleOptions, RuleOptions$1 {}
}
}
/**
* A simple helper to make working with rules in `@ts-check`-enabled files easier
* by returning a narrowly typed object with explicitly known keys.
*
* Needed for {@link entreeFilterRules} to work correctly.
*
* Is not not needed for ESLint otherwise.
*/
declare function entreeDefineRules<T extends Linter.RulesRecord>(rules: T): T;
/**
* Provide a rules object to receive a getter function that returns the option of the given rule.
*
* Useful for sharing options between a base rule, and a rule that extends the base rule,
* e.g. in the case of `eslint-plugin-vue` extension rules and the corresponding base `@stylistic` rules.
*/
declare function entreeAdoptOptionsFromRules<T extends Linter.RulesRecord>(rules: T): {
getOptionsOf: <K extends keyof T>(keyOfRule: K) => NonNullable<T[K]>;
};
/**
* Filter rules for adoption or debugging purposes by excluding and picking rules.
*
* ---
*
* Filtering is meant to help in the adoption process.
*
* Ideally, the filtering is entirely removed after processing the whole codebase, and all rules are fully covering the code.
*
* - `exclude` is used to cut down on the printed result of eslint, to set aside rules that overwhelm the output
* - `pick` is used to select from the remaining results the ones you currently want to fix, and to verify their adoption
*
* After the rule(s) in `pick` are done, run eslint again, and pick again from the results.
*
* After everything you picked is done, process the rules that you previously excluded, if there were any.
*/
declare function entreeFilterRules<T extends Linter.RulesRecord, const TExcludeKeys extends keyof T, const TPickableKeys extends keyof Omit<T, TExcludeKeys>>(rules: T, opts?: ({
exclude: readonly TExcludeKeys[];
pick?: undefined;
debug?: boolean;
} | {
exclude: readonly TExcludeKeys[];
pick: TPickableKeys[];
debug?: boolean;
})): Simplify<Pick<Omit<T, TExcludeKeys>, TPickableKeys>>;
//#endregion
export { defineConfig, entreeAdoptOptionsFromRules, entreeConfigs, entreeDefineRules, entreeFilterRules, entreeRules, gitignore };
//# sourceMappingURL=index.d.ts.map