diff --git a/oxlint.config.ts b/oxlint.config.ts index c6b0873..868f672 100644 --- a/oxlint.config.ts +++ b/oxlint.config.ts @@ -1,7 +1,9 @@ import { felixicaza } from '@felixicaza/oxlint-config' export default felixicaza( - {}, + { + vitest: true + }, [ { ignorePatterns: ['packages/*/tests/fixtures/**', '**/.eslint-config-inspector'] diff --git a/packages/oxlint-config/README.md b/packages/oxlint-config/README.md index 99155d6..5bca0b8 100644 --- a/packages/oxlint-config/README.md +++ b/packages/oxlint-config/README.md @@ -3,7 +3,7 @@ # ⚓ @felixicaza/oxlint-config [![npm version](https://img.shields.io/npm/v/@felixicaza/oxlint-config?color=07b8e1&logo=npm&logoColor=888888&labelColor=ffffff)](https://npmx.dev/package/@felixicaza/oxlint-config) -![GitHub actions workflow tests status](https://img.shields.io/github/actions/workflow/status/felixicaza/configs/tests.yml?color=07b8e1&logo=rocket&logoColor=888888&label=tests&labelColor=ffffff) +[![GitHub actions workflow tests status](https://img.shields.io/github/actions/workflow/status/felixicaza/configs/tests.yml?color=07b8e1&logo=rocket&logoColor=888888&label=tests&labelColor=ffffff)](https://github.com/felixicaza/configs/actions/workflows/tests.yml) [![license](https://img.shields.io/github/license/felixicaza/configs?color=07b8e1&logo=googledocs&logoColor=888888&labelColor=ffffff)](https://github.com/felixicaza/configs/blob/main/LICENSE) Configuración de Oxlint con opiniones propias para mantener un código limpio y libre de errores comunes. @@ -19,6 +19,7 @@ Configuración de Oxlint con opiniones propias para mantener un código limpio y - 🖥️ Reglas para Node. - ⚓ Reglas de Oxc. - 🎨 Reglas para formato de ESLint Stylistic. +- 🔭 Reglas para testing con Vitest. ## 📦 Instalación @@ -67,15 +68,16 @@ Configuraciones del preset: Un objeto que contiene los presets de configuración a usar. Por defecto, se incluyen todos los presets disponibles. -- `stylistic` (boolean) — Habilita o deshabilita el preset de configuración para formato con ESLint Stylistic. -- `jsdoc` (boolean) — Habilita o deshabilita el preset de configuración para comentarios de JSDoc. -- `complexity` (boolean) — Habilita o deshabilita el preset de configuración para complejidad ciclomática. -- `imports` (boolean) — Habilita o deshabilita el preset de configuración para imports. -- `promise` (boolean) — Habilita o deshabilita el preset de configuración para Promises. -- `node` (boolean) — Habilita o deshabilita el preset de configuración para Node. -- `eslint` (boolean) — Habilita o deshabilita el preset de configuración para reglas nativas y portadas de ESLint. -- `oxc` (boolean) — Habilita o deshabilita el preset de configuración para reglas de Oxc. -- `typescript` (boolean) — Habilita o deshabilita el preset de configuración para TypeScript. +- `stylistic` (boolean) — Habilita o deshabilita el preset de configuración para formato con ESLint Stylistic. `true` por defecto. +- `jsdoc` (boolean) — Habilita o deshabilita el preset de configuración para comentarios de JSDoc. `true` por defecto. +- `complexity` (boolean) — Habilita o deshabilita el preset de configuración para complejidad ciclomática. `true` por defecto. +- `imports` (boolean) — Habilita o deshabilita el preset de configuración para imports. `true` por defecto. +- `promise` (boolean) — Habilita o deshabilita el preset de configuración para Promises. `true` por defecto. +- `node` (boolean) — Habilita o deshabilita el preset de configuración para Node. `true` por defecto. +- `eslint` (boolean) — Habilita o deshabilita el preset de configuración para reglas nativas y portadas de ESLint. `true` por defecto. +- `oxc` (boolean) — Habilita o deshabilita el preset de configuración para reglas de Oxc. `true` por defecto. +- `typescript` (boolean) — Habilita o deshabilita el preset de configuración para TypeScript. `true` por defecto. +- `vitest` (boolean) — Habilita o deshabilita el preset de configuración para testing con Vitest. `false` por defecto. #### `userConfigs` (object[]) — opcional @@ -98,7 +100,8 @@ Un array que recibe objetos de configuración de usuario adicionales, [compatibl node: false, eslint: true, oxc: true, - typescript: true + typescript: true, + vitest: true }, [ { @@ -139,6 +142,12 @@ Para obtener este paquete de manera sencilla y sin el historial de Git por detr $ npx giget@latest gh:felixicaza/configs/packages/oxlint-config oxlint-config ``` +Remueve el paquete que tiene el prefijo `workspace:*` en las dependencias de desarrollo: + +```sh +$ npm uninstall @felixicaza/tsdown-config +``` + Instalar las dependencias de desarrollo: ```sh diff --git a/packages/oxlint-config/package.json b/packages/oxlint-config/package.json index dac18f4..c43cffa 100644 --- a/packages/oxlint-config/package.json +++ b/packages/oxlint-config/package.json @@ -1,7 +1,7 @@ { "name": "@felixicaza/oxlint-config", "version": "0.1.1", - "description": "Configuración de Oxlint con opiniones propias para mantener un código limpio y libre de errores comunes.", + "description": "⚓ Configuración de Oxlint con opiniones propias para mantener un código limpio y libre de errores comunes.", "keywords": [ "oxlint", "oxlint-config" @@ -12,7 +12,8 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/felixicaza/configs.git" + "url": "git+https://github.com/felixicaza/configs.git", + "directory": "packages/oxlint-config" }, "license": "MIT", "author": "Felix Icaza", diff --git a/packages/oxlint-config/src/configs/eslint.ts b/packages/oxlint-config/src/configs/eslint.ts index 213d737..b6f222c 100644 --- a/packages/oxlint-config/src/configs/eslint.ts +++ b/packages/oxlint-config/src/configs/eslint.ts @@ -21,8 +21,10 @@ const eslintBuiltInRules: DummyRuleMap = { 'default-param-last': 'error', eqeqeq: ['error', 'smart'], 'for-direction': 'error', + 'func-name-matching': ['error', 'always', { considerPropertyDescriptor: true }], 'getter-return': 'error', 'grouped-accessor-pairs': ['warn', 'getBeforeSet', { enforceForTSTypes: true }], + 'logical-assignment-operators': ['error', 'always', { enforceForIfStatements: true }], 'new-cap': ['error', { newIsCap: true, capIsNew: false, properties: true }], 'no-alert': 'warn', 'no-array-constructor': 'error', @@ -121,9 +123,11 @@ const eslintBuiltInRules: DummyRuleMap = { 'no-with': 'error', 'object-shorthand': ['error', 'always', { avoidQuotes: true, ignoreConstructors: false }], 'operator-assignment': 'warn', + 'prefer-arrow-callback': ['error', { allowNamedFunctions: false, allowUnboundThis: true }], 'prefer-const': ['warn', { destructuring: 'all', ignoreReadBeforeAssign: true }], 'prefer-exponentiation-operator': 'error', 'prefer-promise-reject-errors': 'error', + 'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }], 'prefer-rest-params': 'error', 'prefer-spread': 'error', 'prefer-template': 'error', diff --git a/packages/oxlint-config/src/configs/index.ts b/packages/oxlint-config/src/configs/index.ts index b5ed900..dc441b8 100644 --- a/packages/oxlint-config/src/configs/index.ts +++ b/packages/oxlint-config/src/configs/index.ts @@ -9,3 +9,4 @@ export { node } from './node.ts' export { eslint } from './eslint.ts' export { oxc } from './oxc.ts' export { typescript } from './typescript.ts' +export { vitest } from './vitest.ts' diff --git a/packages/oxlint-config/src/configs/jsdoc.ts b/packages/oxlint-config/src/configs/jsdoc.ts index 3195425..eba156e 100644 --- a/packages/oxlint-config/src/configs/jsdoc.ts +++ b/packages/oxlint-config/src/configs/jsdoc.ts @@ -24,6 +24,9 @@ export const jsdoc: OxlintConfig = { 'jsdoc/require-property-description': 'warn', 'jsdoc/require-property-name': 'warn', 'jsdoc/require-returns-description': 'warn', + 'jsdoc/require-throws-description': 'error', + 'jsdoc/require-throws-type': 'error', + 'jsdoc/require-yields-type': 'error', 'jsdoc-js/check-param-names': 'warn', 'jsdoc-js/check-types': 'warn', 'jsdoc-js/no-multi-asterisks': 'warn', diff --git a/packages/oxlint-config/src/configs/vitest.ts b/packages/oxlint-config/src/configs/vitest.ts new file mode 100644 index 0000000..620484e --- /dev/null +++ b/packages/oxlint-config/src/configs/vitest.ts @@ -0,0 +1,20 @@ +import type { OxlintConfig } from 'oxlint' + +/** + * Vitest rules configuration. + * + * Vitest rules help ensure that your code follows best practices and avoids common pitfalls when using Vitest. + * @see https://oxc.rs/docs/guide/usage/linter/rules.html?sort=name&dir=asc&scope=vitest + */ +export const vitest: OxlintConfig = { + plugins: ['vitest'], + rules: { + 'vitest/consistent-test-it': ['error', { fn: 'it', withinDescribe: 'it' }], + 'vitest/no-identical-title': 'error', + 'vitest/no-import-node-test': 'error', + 'vitest/prefer-hooks-in-order': 'error', + 'vitest/prefer-hooks-on-top': 'error', + 'vitest/prefer-lowercase-title': 'error', + 'vitest/valid-title': ['error', { allowArguments: true }] + } +} diff --git a/packages/oxlint-config/src/presets.ts b/packages/oxlint-config/src/presets.ts index 406621b..e6a7f74 100644 --- a/packages/oxlint-config/src/presets.ts +++ b/packages/oxlint-config/src/presets.ts @@ -1,6 +1,6 @@ import type { PresetName } from './types/index.ts' -import { stylistic, jsdoc, complexity, imports, promise, node, eslint, oxc, typescript } from './configs/index.ts' +import { stylistic, jsdoc, complexity, imports, promise, node, eslint, oxc, typescript, vitest } from './configs/index.ts' export const presetEntries = [ ['stylistic', stylistic], @@ -11,7 +11,8 @@ export const presetEntries = [ ['node', node], ['eslint', eslint], ['oxc', oxc], - ['typescript', typescript] + ['typescript', typescript], + ['vitest', vitest] ] as const export const defaultOptions: Readonly> = { @@ -23,5 +24,6 @@ export const defaultOptions: Readonly> = { node: true, eslint: true, oxc: true, - typescript: true + typescript: true, + vitest: false } diff --git a/packages/oxlint-config/tests/index.test.ts b/packages/oxlint-config/tests/index.test.ts index 1af299c..73725d6 100644 --- a/packages/oxlint-config/tests/index.test.ts +++ b/packages/oxlint-config/tests/index.test.ts @@ -16,7 +16,8 @@ const allDisabled: Required = { oxc: false, promise: false, stylistic: false, - typescript: false + typescript: false, + vitest: false } describe('index public API', () => { diff --git a/packages/oxlint-config/tests/selectPresetConfigs.test.ts b/packages/oxlint-config/tests/selectPresetConfigs.test.ts index 8762ad0..ba37b5e 100644 --- a/packages/oxlint-config/tests/selectPresetConfigs.test.ts +++ b/packages/oxlint-config/tests/selectPresetConfigs.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' -import { complexity, eslint, imports, jsdoc, node, oxc, promise, stylistic, typescript } from '../src/configs/index.ts' +import { complexity, eslint, imports, jsdoc, node, oxc, promise, stylistic, typescript, vitest } from '../src/configs/index.ts' import { selectPresetConfigs } from '../src/utils/selectPresetConfigs.ts' describe('utils/selectPresetConfigs', () => { @@ -14,7 +14,8 @@ describe('utils/selectPresetConfigs', () => { oxc: false, promise: false, stylistic: false, - typescript: false + typescript: false, + vitest: false }) expect(result).toEqual([]) @@ -30,7 +31,8 @@ describe('utils/selectPresetConfigs', () => { oxc: false, promise: false, stylistic: false, - typescript: false + typescript: false, + vitest: false }) expect(result).toEqual([complexity]) @@ -46,7 +48,8 @@ describe('utils/selectPresetConfigs', () => { oxc: false, promise: false, stylistic: false, - typescript: false + typescript: false, + vitest: false }) expect(result).toEqual([eslint, jsdoc]) @@ -62,9 +65,10 @@ describe('utils/selectPresetConfigs', () => { oxc: true, promise: true, stylistic: true, - typescript: true + typescript: true, + vitest: true }) - expect(result).toEqual([complexity, eslint, imports, jsdoc, node, oxc, promise, stylistic, typescript]) + expect(result).toEqual([complexity, eslint, imports, jsdoc, node, oxc, promise, stylistic, typescript, vitest]) }) })