Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion oxlint.config.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { felixicaza } from '@felixicaza/oxlint-config'

export default felixicaza(
{},
{
vitest: true
},
[
{
ignorePatterns: ['packages/*/tests/fixtures/**', '**/.eslint-config-inspector']
Expand Down
31 changes: 20 additions & 11 deletions packages/oxlint-config/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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

Expand Down Expand Up @@ -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

Expand All @@ -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
},
[
{
Expand Down Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions packages/oxlint-config/package.json
Original file line number Diff line number Diff line change
@@ -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"
Expand All @@ -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",
Expand Down
4 changes: 4 additions & 0 deletions packages/oxlint-config/src/configs/eslint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down Expand Up @@ -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',
Expand Down
1 change: 1 addition & 0 deletions packages/oxlint-config/src/configs/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
3 changes: 3 additions & 0 deletions packages/oxlint-config/src/configs/jsdoc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
20 changes: 20 additions & 0 deletions packages/oxlint-config/src/configs/vitest.ts
Original file line number Diff line number Diff line change
@@ -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 }]
}
}
8 changes: 5 additions & 3 deletions packages/oxlint-config/src/presets.ts
Original file line number Diff line number Diff line change
@@ -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],
Expand All @@ -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<Record<PresetName, boolean>> = {
Expand All @@ -23,5 +24,6 @@ export const defaultOptions: Readonly<Record<PresetName, boolean>> = {
node: true,
eslint: true,
oxc: true,
typescript: true
typescript: true,
vitest: false
}
3 changes: 2 additions & 1 deletion packages/oxlint-config/tests/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ const allDisabled: Required<Options> = {
oxc: false,
promise: false,
stylistic: false,
typescript: false
typescript: false,
vitest: false
}

describe('index public API', () => {
Expand Down
16 changes: 10 additions & 6 deletions packages/oxlint-config/tests/selectPresetConfigs.test.ts
Original file line number Diff line number Diff line change
@@ -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', () => {
Expand All @@ -14,7 +14,8 @@ describe('utils/selectPresetConfigs', () => {
oxc: false,
promise: false,
stylistic: false,
typescript: false
typescript: false,
vitest: false
})

expect(result).toEqual([])
Expand All @@ -30,7 +31,8 @@ describe('utils/selectPresetConfigs', () => {
oxc: false,
promise: false,
stylistic: false,
typescript: false
typescript: false,
vitest: false
})

expect(result).toEqual([complexity])
Expand All @@ -46,7 +48,8 @@ describe('utils/selectPresetConfigs', () => {
oxc: false,
promise: false,
stylistic: false,
typescript: false
typescript: false,
vitest: false
})

expect(result).toEqual([eslint, jsdoc])
Expand All @@ -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])
})
})
Loading