Skip to content

Commit

Permalink
feat: improve type suggestions with specific defineFlatConfig (#150)
Browse files Browse the repository at this point in the history
Co-authored-by: Shinigami92 <chrissi92@hotmail.de>
  • Loading branch information
sxzz and Shinigami92 committed Oct 30, 2022
1 parent a0ee545 commit c83e66c
Show file tree
Hide file tree
Showing 7 changed files with 69 additions and 25 deletions.
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -73,6 +73,7 @@
"eslint-plugin-unicorn": "~44.0.2",
"eslint-plugin-vue": "~9.6.0",
"eslint-plugin-vue-pug": "~0.5.4",
"expect-type": "~0.15.0",
"json-schema": "~0.4.0",
"json-schema-to-typescript": "~11.0.2",
"prettier": "2.7.1",
Expand Down
6 changes: 6 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 1 addition & 5 deletions src/flat-config/index.d.ts
@@ -1,6 +1,5 @@
import type { ESLint, Linter } from 'eslint';
import type { Rules } from '../rules';
import type { LiteralUnion } from '../utility-types';
import type { LanguageOptions } from './language-options';
import type { LinterOptions } from './linter-options';

Expand Down Expand Up @@ -63,12 +62,9 @@ export interface FlatESLintConfigItem {
*
* @see [Using predefined configurations](https://eslint.org/docs/latest/user-guide/configuring/configuration-files-new#using-predefined-configurations)
*/
export type PredefinedConfig = LiteralUnion<
'eslint:recommended' | 'eslint:all'
>;
export type PredefinedConfig = 'eslint:recommended' | 'eslint:all';

export type FlatESLintConfig = FlatESLintConfigItem | PredefinedConfig;
export type FlatESLintConfigs = Array<FlatESLintConfig>;

export * from './language-options';
export * from './linter-options';
8 changes: 5 additions & 3 deletions src/index.d.ts
@@ -1,5 +1,5 @@
import type { ESLintConfig } from './config';
import type { FlatESLintConfig, FlatESLintConfigs } from './flat-config';
import type { FlatESLintConfig } from './flat-config';

/**
* Define an ESLint config.
Expand All @@ -17,7 +17,7 @@ export function defineConfig(config: ESLintConfig): ESLintConfig;
* @param config an item of Flat ESLint config.
* @returns an item of Flat ESLint config.
*/
export function defineConfig(config: FlatESLintConfig): FlatESLintConfig;
export function defineFlatConfig(config: FlatESLintConfig): FlatESLintConfig;

/**
* Define a flat ESLint config.
Expand All @@ -27,7 +27,9 @@ export function defineConfig(config: FlatESLintConfig): FlatESLintConfig;
* @param config Flat ESLint config.
* @returns Flat ESLint config.
*/
export function defineConfig(config: FlatESLintConfigs): FlatESLintConfigs;
export function defineFlatConfig(
config: readonly FlatESLintConfig[],
): FlatESLintConfig[];

export * from './config';
export * from './flat-config';
Expand Down
14 changes: 3 additions & 11 deletions src/index.js
Expand Up @@ -2,15 +2,7 @@

exports.__esModule = true;
exports.defineConfig = void 0;
exports.defineFlatConfig = void 0;

/**
* Define an ESLint config.
*
* @param config ESLint config.
* @returns ESLint config.
*/
function defineConfig(config) {
return config;
}

exports.defineConfig = defineConfig;
exports.defineConfig = (config) => config;
exports.defineFlatConfig = (config) => config;
10 changes: 4 additions & 6 deletions src/index.mjs
@@ -1,9 +1,7 @@
/**
* Define an eslint config.
*
* @param config Eslint config.
* @returns Eslint config.
*/
export function defineConfig(config) {
return config;
}

export function defineFlatConfig(config) {
return config;
}
49 changes: 49 additions & 0 deletions tests/define.test.ts
@@ -0,0 +1,49 @@
import { expectTypeOf } from 'expect-type';
import { describe, test } from 'vitest';
import type { ESLintConfig, FlatESLintConfig } from '../src';
import { defineConfig, defineFlatConfig } from '../src';

describe('define', () => {
test('define empty config', () => {
expectTypeOf(defineConfig({})).toEqualTypeOf<ESLintConfig>();
});

test('define ESLint config', () => {
expectTypeOf(
defineConfig({
env: {},
extends: [],
rules: {},
}),
).toEqualTypeOf<ESLintConfig>();
});

test('define an item of flat ESLint config', () => {
expectTypeOf(
defineFlatConfig({
ignores: [],
plugins: {},
rules: {},
}),
).toEqualTypeOf<FlatESLintConfig>();
});

test('define predefined flat ESLint config', () => {
expectTypeOf(
defineFlatConfig('eslint:recommended'),
).toEqualTypeOf<FlatESLintConfig>();
});

test('define flat ESLint config', () => {
expectTypeOf(
defineFlatConfig([
'eslint:recommended',
{
ignores: [],
plugins: {},
rules: {},
},
]),
).toEqualTypeOf<FlatESLintConfig[]>();
});
});

0 comments on commit c83e66c

Please sign in to comment.