From b28c7d2c62c19319adaa4da31949e6eab1e3102e Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Wed, 30 Aug 2023 15:31:13 -0300 Subject: [PATCH] =?UTF-8?q?refactor!:=20=F0=9F=92=A5=20=E2=99=BB=EF=B8=8F?= =?UTF-8?q?=20restructure=20the=20config=20and=20presets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Now each config is related to a specific language and or purpose, having different "flavors" or levels of strictness for them Presets now have the purpose of simply grouping said configs for easier of them. BREAKING CHANGE --- eslint.config.js | 9 +-- packages/config/index.d.ts | 39 +--------- packages/config/src/configs/common.js | 53 ------------- packages/config/src/configs/core.js | 42 ++++++++++ packages/config/src/configs/environments.js | 45 ----------- packages/config/src/configs/formatting.js | 47 +++++------- packages/config/src/configs/index.js | 13 ++-- packages/config/src/configs/javascript.js | 28 +++++++ packages/config/src/configs/jsdoc.js | 15 ---- packages/config/src/configs/recommended.js | 85 --------------------- packages/config/src/configs/typescript.js | 61 +++++---------- packages/config/src/constants.js | 4 + packages/config/src/eslintrc-compact.js | 17 ----- packages/config/src/index.js | 17 ----- packages/config/src/presets/default.js | 23 ------ packages/config/src/presets/index.js | 5 +- packages/config/src/presets/recommended.js | 9 +++ packages/config/src/types.d.ts | 56 -------------- 18 files changed, 138 insertions(+), 430 deletions(-) delete mode 100644 packages/config/src/configs/common.js create mode 100644 packages/config/src/configs/core.js delete mode 100644 packages/config/src/configs/environments.js create mode 100644 packages/config/src/configs/javascript.js delete mode 100644 packages/config/src/configs/jsdoc.js delete mode 100644 packages/config/src/configs/recommended.js create mode 100644 packages/config/src/constants.js delete mode 100644 packages/config/src/eslintrc-compact.js delete mode 100644 packages/config/src/presets/default.js create mode 100644 packages/config/src/presets/recommended.js delete mode 100644 packages/config/src/types.d.ts diff --git a/eslint.config.js b/eslint.config.js index 91f9b65..ccb9c31 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,6 +1,5 @@ -import { configs, defineConfig, presets } from '@eslegant/config'; +import { presets } from '@eslegant/config'; -export default defineConfig([ - ...presets.default, - configs.environments.node, -]); +export default [ + ...presets.recommended, +]; diff --git a/packages/config/index.d.ts b/packages/config/index.d.ts index fbdbe3b..ad19f11 100644 --- a/packages/config/index.d.ts +++ b/packages/config/index.d.ts @@ -1,20 +1,6 @@ -import type { Config, EnvOptions } from './src/types'; import type { Linter } from 'eslint'; -/** - * Helper functions for creating/configuring ESLint. - * @param config - Array or function returning an array of ESLint's configuration objects array to be used. - * @param environment - An object with environment variables to be declared and used by the configuration. - * @returns The array of ESLint's configuration objects. - */ -async function defineConfig(config: Config, environment?: EnvOptions): Promise; - const configs: Readonly<{ - /** - * **This configuration is necessary to be used before any other one**. - * Common configuration for using ESLit rules overrides. - */ - common: Linter.FlatConfig /** * Recommended configuration overrides of ESLit */ @@ -27,31 +13,10 @@ const configs: Readonly<{ * Typescript specific configuration overrides */ typescript: Linter.FlatConfig - /** - * Configuration objects for different development environments. - */ - environments: { - /** - * Configuration for Node development environment - */ - node: Linter.FlatConfig - /** - * Configuration for Deno development environment - */ - deno: Linter.FlatConfig - /** - * Configuration for browser development environment - */ - browser: Linter.FlatConfig - } - /** - * JSDoc rules overrides - */ - jsdoc: Linter.FlatConfig }>; const presets: Readonly<{ - default: Linter.FlatConfig[] + recommended: Linter.FlatConfig[] }>; -export { presets, configs, defineConfig }; +export { configs, presets }; diff --git a/packages/config/src/configs/common.js b/packages/config/src/configs/common.js deleted file mode 100644 index ac3e018..0000000 --- a/packages/config/src/configs/common.js +++ /dev/null @@ -1,53 +0,0 @@ -import tsESLint from '@typescript-eslint/eslint-plugin'; -import tsParser from '@typescript-eslint/parser'; - -// eslint-disable-next-line import/namespace, import/default, import/no-named-as-default, import/no-named-as-default-member -import jsdoc from 'eslint-plugin-jsdoc'; -import importPlugin from 'eslint-plugin-i'; - -/** - * **This configuration is necessary to be used before any other one**. - * Common configuration for using ESLit rules overrides. - * @type {Readonly} - */ -const config = { - files: ['**/*.js', '**/*.cjs', '**/*.mjs', '**/*.ts', '**/*.cts', '**/*.mts'], - plugins: { - '@typescript-eslint': tsESLint, - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - 'jsdoc': jsdoc, - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - 'import': importPlugin, - }, - settings: { - 'import/extensions': ['.js', '.cjs', '.mjs', '.ts', '.cts', '.mts'], - 'import/parsers': { - '@typescript-eslint/parser': ['.js', '.cjs', '.mjs', '.ts', '.cts', '.mts'], - }, - 'import/resolver': { - typescript: true, - node: true, - }, - }, - languageOptions: { - parser: tsParser, - parserOptions: { - project: process.env.ESLIT_TSCONFIG ?? [ - './{ts,js}config{.eslint,}.json', - './packages/*/{ts,js}config{.eslint,}.json', - './apps/*/{ts,js}config{.eslint,}.json', - ], - tsconfigRootDir: process.env.ESLIT_ROOT ?? process.cwd(), - }, - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - ecmaVersion: ( - /** @type {import('eslint').Linter.ParserOptions['ecmaVersion']} */ - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - () => {return JSON.parse(process.env.ESLIT_ECMASCRIPT ?? '"latest"');} - )(), - }, - rules: { - ...importPlugin.configs['typescript'].rules, - }, -}; -export default config; diff --git a/packages/config/src/configs/core.js b/packages/config/src/configs/core.js new file mode 100644 index 0000000..fb36dba --- /dev/null +++ b/packages/config/src/configs/core.js @@ -0,0 +1,42 @@ +import tsESLint from '@typescript-eslint/eslint-plugin'; +import { tsFiles, jsFiles } from '../constants.js'; + +// @ts-expect-error TEMPORALLY COMMENT +import tsParser from '@typescript-eslint/parser'; +import jsdocPlugin from 'eslint-plugin-jsdoc'; +import importPlugin from 'eslint-plugin-i'; +import process from 'node:process'; + +/** @type {import('eslint').Linter.FlatConfig}*/ +const config = { + files: [...tsFiles, ...jsFiles], + plugins: { + '@typescript-eslint': tsESLint, + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + 'jsdoc': jsdocPlugin, + 'import': importPlugin, + }, + settings: { + 'import/extensions': [...tsFiles, ...jsFiles], + 'import/parsers': { + '@typescript-eslint/parser': [...tsFiles, ...jsFiles ], + }, + 'import/resolver': { + typescript: true, + node: true, + }, + }, + languageOptions: { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + parser: tsParser, + parserOptions: { + project: process.env.ESLEGANT_TSCONFIG ?? [ + './{ts,js}config{.eslint,}.json', + './packages/*/{ts,js}config{.eslint,}.json', + './apps/*/{ts,js}config{.eslint,}.json', + ], + tsconfigRootDir: process.env.ESLEGANT_ROOT ?? process.cwd(), + }, + }, +}; +export default config; diff --git a/packages/config/src/configs/environments.js b/packages/config/src/configs/environments.js deleted file mode 100644 index f8f21d7..0000000 --- a/packages/config/src/configs/environments.js +++ /dev/null @@ -1,45 +0,0 @@ -import globals from 'globals'; - -/** - * Configuration for Node development environment - * @type {import('eslint').Linter.FlatConfig} - */ -const node = { - files: ['**/*.js', '**/*.cjs', '**/*.mjs', '**/*.ts', '**/*.cts', '**/*.mts'], - languageOptions: { - globals: { - ...globals.nodeBuiltin, - }, - }, -}; - -/** - * Configuration for Deno development environment - * @type {import('eslint').Linter.FlatConfig} - */ -const deno = { - files: ['**/*.js', '**/*.ts'], - languageOptions: { - globals: { - Deno: true, - ...globals.browser, - }, - }, -}; - -/** - * Configuration for browser development environment - * @type {import('eslint').Linter.FlatConfig} - */ -const browser = { - files: ['**/*.js', '**/*.ts'], - languageOptions: { - globals: { - Deno: true, - ...globals.browser, - }, - }, -}; - -const environments = { node, deno, browser }; -export default environments; diff --git a/packages/config/src/configs/formatting.js b/packages/config/src/configs/formatting.js index 0210dea..d3eecbb 100644 --- a/packages/config/src/configs/formatting.js +++ b/packages/config/src/configs/formatting.js @@ -1,8 +1,8 @@ -/** - * Formatting rules/configuration overrides for Javascript and Typescript - * @type {Readonly} - */ -const config = { +import coreConfig from './core.js'; + +/** @type {import('eslint').Linter.FlatConfig} */ +const recommended = { + ...coreConfig, files: ['**/*.js', '**/*.cjs', '**/*.mjs', '**/*.ts', '**/*.cts', '**/*.mts'], rules: { // Formatting rules @@ -24,28 +24,16 @@ const config = { '@typescript-eslint/comma-dangle': ['error', 'always-multiline'], 'indent': 'off', - '@typescript-eslint/indent': ['error', (() => { - /** @type {import('../types').EnvOptions['ESLIT_INDENT']} */ - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const indent = JSON.parse(process.env.ESLINT_INDENT ?? '"tab"'); - - if (indent === 'space') return 2; - else return indent; - })(), { - SwitchCase: 1, + '@typescript-eslint/indent': ['error', 'tab', { SwitchCase: 1, VariableDeclarator: 1, outerIIFEBody: 1, MemberExpression: 1, - FunctionDeclaration: { parameters: 1, body: 1 }, - FunctionExpression: { parameters: 1, body: 1 }, - CallExpression: { arguments: 1 }, - ArrayExpression: 1, + FunctionDeclaration: { parameters: 1, + body: 1 }, FunctionExpression: { parameters: 1, + body: 1 }, CallExpression: { arguments: 1 }, ArrayExpression: 1, ObjectExpression: 1, ImportDeclaration: 1, - flatTernaryExpressions: false, - offsetTernaryExpressions: true, - ignoreComments: false, - ignoredNodes: [ + flatTernaryExpressions: false, offsetTernaryExpressions: true, ignoreComments: false, ignoredNodes: [ 'TemplateLiteral *', 'JSXElement', 'JSXElement > *', @@ -56,7 +44,7 @@ const config = { 'JSXSpreadAttribute', 'JSXExpressionContainer', 'JSXOpeningElement', - 'JSXClosingElement', + 'Element', 'JSXFragment', 'JSXOpeningFragment', 'JSXClosingFragment', @@ -83,13 +71,13 @@ const config = { '@typescript-eslint/object-curly-spacing': ['error', 'always'], 'quotes': 'off', - '@typescript-eslint/quotes': ['error', process.env.ESLINT_QUOTES ?? 'single'], + '@typescript-eslint/quotes': ['error', 'single'], 'semi': 'off', '@typescript-eslint/semi': ['error', 'always'], 'space-before-blocks': 'off', - '@typescript-eslint/space-before-blocks': ['error', process.env.ESLIT_SEMI ?? 'always'], + '@typescript-eslint/space-before-blocks': ['error', 'always'], 'space-before-function-paren': 'off', '@typescript-eslint/space-before-function-paren': ['error', { @@ -103,4 +91,11 @@ const config = { }, }; -export default config; + +/** @type {import('eslint').Linter.FlatConfig} */ +const strict = { + ...recommended, +}; + +const formatting = { recommended, strict }; +export default formatting; diff --git a/packages/config/src/configs/index.js b/packages/config/src/configs/index.js index 1f5ada2..7af043e 100644 --- a/packages/config/src/configs/index.js +++ b/packages/config/src/configs/index.js @@ -1,9 +1,8 @@ -import formatting from './formatting.js'; -import jsdoc from './jsdoc.js'; -import typescript from './typescript.js'; -import recommended from './recommended.js'; -import environments from './environments.js'; -import common from './common.js'; -const configs = { formatting, jsdoc, typescript, recommended, environments, common }; +import core from './core.js'; +import javascript from './javascript.js'; +import typescript from './typescript.js'; +import formatting from './formatting.js'; + +const configs = { core, javascript, typescript, formatting }; export default configs; diff --git a/packages/config/src/configs/javascript.js b/packages/config/src/configs/javascript.js new file mode 100644 index 0000000..6e62d80 --- /dev/null +++ b/packages/config/src/configs/javascript.js @@ -0,0 +1,28 @@ +import coreConfig from './core.js'; +import tsESLint from '@typescript-eslint/eslint-plugin'; +import js from '@eslint/js'; +import importPlugin from 'eslint-plugin-i'; +import jsdocPlugin from 'eslint-plugin-jsdoc'; + +/** @type {import('eslint').Linter.FlatConfig}*/ +const recommended = { + ...coreConfig, + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + rules: { + ...js.configs.recommended.rules, + ...tsESLint.configs.recommended.rules, + ...tsESLint.configs['recommended-requiring-type-checking'].rules, + ...tsESLint.configs['eslint-recommended'].rules, + ...tsESLint.configs.strict.rules, + ...importPlugin.configs['recommended'].rules, + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + ...jsdocPlugin.configs['recommended-typescript-flavor-error'].rules, + }, +}; + +/** @type {import('eslint').Linter.FlatConfig}*/ +const strict = { + ...recommended, +}; +const javascript = { recommended, strict }; +export default javascript; diff --git a/packages/config/src/configs/jsdoc.js b/packages/config/src/configs/jsdoc.js deleted file mode 100644 index f3169f6..0000000 --- a/packages/config/src/configs/jsdoc.js +++ /dev/null @@ -1,15 +0,0 @@ -import jsdoc from 'eslint-plugin-jsdoc'; - -/** - * JSDoc rules overrides - * @type {Readonly} - */ -const config = { - files: ['**/*.js', '**/*.cjs', '**/*.mjs', '**/*.ts', '**/*.cts', '**/*.mts'], - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - rules: { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - ...jsdoc.configs['recommended-typescript-flavor-error'].rules, - }, -}; -export default config; diff --git a/packages/config/src/configs/recommended.js b/packages/config/src/configs/recommended.js deleted file mode 100644 index f63bba3..0000000 --- a/packages/config/src/configs/recommended.js +++ /dev/null @@ -1,85 +0,0 @@ -import tsESlint from '@typescript-eslint/eslint-plugin'; -import js from '@eslint/js'; -import importPlugin from 'eslint-plugin-i'; - -/** - * Recommended configuration overrides of ESLit - * @type {Readonly} - */ -const config = { - rules: { - ...js.configs.recommended.rules, - ...tsESlint.configs.recommended.rules, - ...tsESlint.configs['recommended-requiring-type-checking'].rules, - ...tsESlint.configs['eslint-recommended'].rules, - ...tsESlint.configs.strict.rules, - ...importPlugin.configs['recommended'].rules, - - 'import/extensions': ['error', 'always', { ignorePackages: true }], - - 'import/no-anonymous-default-export': ['error'], - - 'import/no-absolute-path': 'error', - - 'import/no-amd': 'error', - - 'import/no-commonjs': 'error', - - 'import/no-cycle': 'error', - - 'import/no-deprecated': 'error', - - 'import/no-duplicates': ['error', { 'prefer-inline': false }], - - 'import/no-empty-named-blocks': 'error', - - 'import/no-extraneous-dependencies': 'error', - - 'import/no-import-module-exports': 'error', - - 'import/no-mutable-exports': 'error', - - 'import/no-named-as-default-member': 'error', - - 'import/no-named-as-default': 'warn', - - 'import/no-named-default': 'error', - - 'import/no-namespace': 'error', - - 'import/no-relative-packages': 'error', - - 'import/no-self-import': 'error', - - 'import/no-unassigned-import': ['error', { allow: ['**/*.{scss,less,css}'] }], - - 'import/no-useless-path-segments': 'error', - - 'import/prefer-default-export': 'error', - - '@typescript-eslint/ban-ts-comment': ['error', { - 'ts-ignore': 'allow-with-description', - }], - '@typescript-eslint/ban-tslint-comment': 'error', - - '@typescript-eslint/no-require-imports': 'error', - - // Extension rules - - 'no-dupe-class-members': 'off', - '@typescript-eslint/no-dupe-class-members': 'error', - - 'no-invalid-this': 'off', - '@typescript-eslint/no-invalid-this': 'error', - - 'no-redeclare': 'off', - '@typescript-eslint/no-redeclare': 'error', - - 'no-use-before-define': 'off', - '@typescript-eslint/no-use-before-define': 'error', - - 'no-empty-function': 'off', - '@typescript-eslint/no-empty-function': 'error', - }, -}; -export default config; diff --git a/packages/config/src/configs/typescript.js b/packages/config/src/configs/typescript.js index 65e9f41..93f3b9f 100644 --- a/packages/config/src/configs/typescript.js +++ b/packages/config/src/configs/typescript.js @@ -1,18 +1,18 @@ -import jsdoc from 'eslint-plugin-jsdoc'; -/** - * Typescript specific configuration overrides - * @type {Readonly} - */ -const config = { - files: ['**/*.ts', '**/*.cts', '**/*.mts'], - // See plugins['jsdoc'] on index.js for more info on this error +import coreConfig from './core.js'; +import { tsFiles } from '../constants.js'; +import jsdocPlugin from 'eslint-plugin-jsdoc'; +import importPlugin from 'eslint-plugin-i'; + +/** @type {import('eslint').Linter.FlatConfig}*/ +const recommended = { + ...coreConfig, + files: [...tsFiles], // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment rules: { - - // See plugins['jsdoc'] on index.js for more info on this error // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - ...jsdoc.configs['recommended-typescript-error'].rules, + ...jsdocPlugin.configs['recommended-typescript-error'].rules, + ...importPlugin.configs['typescript'].rules, '@typescript-eslint/adjacent-overload-signatures': 'error', '@typescript-eslint/array-type': 'error', @@ -30,35 +30,14 @@ const config = { '@typescript-eslint/prefer-for-of': 'error', '@typescript-eslint/prefer-function-type': 'error', '@typescript-eslint/prefer-namespace-keyword': 'error', - - ...( - /** @type {() => import('eslint').Linter.RulesRecord} */ - () => { - /** @type {import('../types').inferrableTypesOptions} */ - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const inferrableTypes = JSON.parse(process.env.ESLIT_INFER_TYPES ?? '"never"'); - - if (typeof inferrableTypes === 'string') { - return { - '@typescript-eslint/explicit-function-return-type': inferrableTypes === 'always' ? 'off' : 'error', - '@typescript-eslint/no-inferrable-types': inferrableTypes === 'always' ? 'off' : 'error', - }; - } - else { - return { - '@typescript-eslint/explicit-function-return-type': inferrableTypes[1].returnValues ? 'off' : 'error', - '@typescript-eslint/no-inferrable-types': [ - inferrableTypes[0] === 'always' ? 'off' : 'error', - { - ignoreParameters: inferrableTypes[1].parameters ?? false, - ignoreProperties: inferrableTypes[1].properties ?? false, - }, - ], - }; - } - } - )(), - + '@typescript-eslint/explicit-function-return-type': 'error', + '@typescript-eslint/no-inferrable-types': 'error', }, }; -export default config; + +/** @type {import('eslint').Linter.FlatConfig}*/ +const strict = { + ...recommended, +}; +const typescript = { recommended, strict }; +export default typescript; diff --git a/packages/config/src/constants.js b/packages/config/src/constants.js new file mode 100644 index 0000000..7c2f941 --- /dev/null +++ b/packages/config/src/constants.js @@ -0,0 +1,4 @@ +const jsFiles = ['**/*.js', '**/*.mjs', '**/*.cjs', '**/*.jsx']; +const tsFiles = ['**/*.ts', '**/*.mts', '**/*.cts', '**/*.tsx']; + +export { jsFiles, tsFiles }; diff --git a/packages/config/src/eslintrc-compact.js b/packages/config/src/eslintrc-compact.js deleted file mode 100644 index c51e6d1..0000000 --- a/packages/config/src/eslintrc-compact.js +++ /dev/null @@ -1,17 +0,0 @@ -import { FlatCompat } from '@eslint/eslintrc'; -import javascript from '@eslint/js'; - -import path from 'node:path'; -import { fileURLToPath } from 'node:url'; - -// mimic CommonJS variables -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -const eslintrc = new FlatCompat({ - baseDirectory: __dirname, - recommendedConfig: javascript.configs.recommended, - allConfig: javascript.configs.all, -}); - -export { eslintrc, __filename, __dirname }; diff --git a/packages/config/src/index.js b/packages/config/src/index.js index 9b2c515..63f5e31 100644 --- a/packages/config/src/index.js +++ b/packages/config/src/index.js @@ -1,20 +1,3 @@ -import { eslintrc } from './eslintrc-compact.js'; - -/** - * @param {import('./types').Config} config - * Array or function returning an array of ESLint's configuration objects array to be used. - * @param {import('./types').EnvOptions | undefined} environment - * An object with environment variables to be declared and used by the configuration. - * @returns {Promise} - * The array of ESLint's configuration objects. - */ -export async function defineConfig(config, environment = {}) { - for (const [key, value] of Object.entries(environment)) { - process.env[key] = JSON.stringify(value); - } - return typeof config === 'function' ? await config(eslintrc) : config; -} - export { default as configs } from './configs/index.js'; export { default as presets } from './presets/index.js'; diff --git a/packages/config/src/presets/default.js b/packages/config/src/presets/default.js deleted file mode 100644 index 72e7a39..0000000 --- a/packages/config/src/presets/default.js +++ /dev/null @@ -1,23 +0,0 @@ -import configs from '../configs/index.js'; - -/** - * @type {Readonly} - */ -const preset = [ - { - ignores: [ - '**/node_modules', - '**/dist', - '**/fixtures', - '**/pnpm-lock.yaml', - '**/yarn.lock', - '**/package-lock.json', - ], - }, - configs.common, - configs.recommended, - configs.formatting, - configs.jsdoc, - configs.typescript, -]; -export default preset; diff --git a/packages/config/src/presets/index.js b/packages/config/src/presets/index.js index 9db6564..1dd82e7 100644 --- a/packages/config/src/presets/index.js +++ b/packages/config/src/presets/index.js @@ -1,5 +1,4 @@ +import recommended from './recommended.js'; -import defaultPreset from './default.js'; - -const presets = { default: defaultPreset }; +const presets = { recommended }; export default presets; diff --git a/packages/config/src/presets/recommended.js b/packages/config/src/presets/recommended.js new file mode 100644 index 0000000..9a6c113 --- /dev/null +++ b/packages/config/src/presets/recommended.js @@ -0,0 +1,9 @@ +import configs from '../configs/index.js'; + +/** @type {import('eslint').Linter.FlatConfig[]}*/ +const recommended = [ + configs.javascript.recommended, + configs.typescript.recommended, + configs.formatting.recommended, +]; +export default recommended; diff --git a/packages/config/src/types.d.ts b/packages/config/src/types.d.ts deleted file mode 100644 index dee115a..0000000 --- a/packages/config/src/types.d.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type { FlatCompat } from '@eslint/eslintrc'; -import type { Linter } from 'eslint'; - -type MaybePromise = Promise | T; -type Config = Linter.FlatConfig[] | ((eslintrc: FlatCompat) => MaybePromise); - -interface EnvOptions { - ESLIT_TSCONFIG?: string | string[] | true - ESLIT_ROOT?: string - ESLIT_INDENT?: 'tab' | 'space' | number - ESLIT_ECMASCRIPT?: Linter.ParserOptions['ecmaVersion'] - ESLIT_QUOTES?: 'single' | 'double' - ESLIT_SEMI?: 'never' | 'always' - /** - * Typescript's type-checking is able to infer types from parameters. - * So using an explicit `:` type annotation isn't obligatory. - * - * But, **by default in strict mode**, type annotations are always mandated to make - * the code more readable, explicit and robust to changes. - * - * See {@link https://typescript-eslint.io/rules/no-inferrable-types typescript-eslint documentation } - * for more info. - * --- - * **Option: `never`** (default) - * Types are always explicit in Typescript - * @example ```ts - // Typescript - const id: number = 10; - const name: string = 'foo'; - ``` - * --- - * **Option: `always`** - * Types are always inferred in Typescript - * @example ```ts - // Typescript - const id = 10; - const name = 'foo'; - ``` - */ - ESLIT_INFER_TYPES?: inferrableTypesOptions - [ENV: string]: unknown -} - -type inferrableTypesOptions = [ - 'never' | 'always', - { - /** @see {@link https://typescript-eslint.io/rules/no-inferrable-types#ignoreparameters} */ - parameters?: boolean - /** @see {@link https://typescript-eslint.io/rules/no-inferrable-types#ignoreproperties} */ - properties?: boolean - /** @see {@link https://typescript-eslint.io/rules/explicit-function-return-type} */ - returnValues?: boolean - }, -] | 'never' | 'always'; - -export type { inferrableTypesOptions, EnvOptions, Config };