Skip to content

Файл конфигурации Oxlint

Эта конфигурация согласована со схемой ESLint v8 (eslintrc.json).

Использование: oxlint -c oxlintrc.json

Пример

.oxlintrc.json

json
{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "plugins": ["import", "typescript", "unicorn"],
  "env": {
    "browser": true
  },
  "globals": {
    "foo": "readonly"
  },
  "settings": {
    "react": {
      "version": "18.2.0"
    },
    "custom": {
      "option": true
    }
  },
  "rules": {
    "eqeqeq": "warn",
    "import/no-cycle": "error",
    "react/self-closing-comp": [
      "error",
      {
        "html": false
      }
    ]
  },
  "overrides": [
    {
      "files": ["*.test.ts", "*.spec.ts"],
      "rules": {
        "@typescript-eslint/no-explicit-any": "off"
      }
    }
  ]
}

oxlint.config.ts

ts
import { defineConfig } from "oxlint";

export default defineConfig({
  plugins: ["import", "typescript", "unicorn"],
  env: {
    browser: true,
  },
  globals: {
    foo: "readonly",
  },
  settings: {
    react: {
      version: "18.2.0",
    },
    custom: { option: true },
  },
  rules: {
    eqeqeq: "warn",
    "import/no-cycle": "error",
    "react/self-closing-comp": ["error", { html: false }],
  },
  overrides: [
    {
      files: ["*.test.ts", "*.spec.ts"],
      rules: {
        "@typescript-eslint/no-explicit-any": "off",
      },
    },
  ],
});

$schema

type: string

URI схемы для подсказок редактора.

categories

type: object

Задаёт целую категорию правил одним значением.

Включение или отключение через категории перекрывается отдельными правилами в поле rules.

Пример

json
{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "categories": {
    "correctness": "warn"
  },
  "rules": {
    "eslint/no-unused-vars": "error"
  }
}

categories.correctness

categories.nursery

categories.pedantic

categories.perf

categories.restriction

categories.style

categories.suspicious

env

type: Record<string, boolean>

Предопределённые глобальные переменные.

Среды задают, какие глобалы считаются объявленными заранее. Доступные среды:

  • amd — глобалы require() и define().
  • applescript — глобалы AppleScript.
  • astro — глобалы Astro.
  • atomtest — глобалы тестов Atom.
  • audioworklet — глобалы AudioWorklet.
  • browser — глобалы браузера.
  • builtin — актуальные глобалы ECMAScript, эквивалентно es2026.
  • commonjs — глобалы и область CommonJS.
  • embertest — глобалы тестов Ember.
  • es2015 — глобалы ECMAScript 2015.
  • es2016 — глобалы ECMAScript 2016.
  • es2017 — глобалы ECMAScript 2017.
  • es2018 — глобалы ECMAScript 2018.
  • es2019 — глобалы ECMAScript 2019.
  • es2020 — глобалы ECMAScript 2020.
  • es2021 — глобалы ECMAScript 2021.
  • es2022 — глобалы ECMAScript 2022.
  • es2023 — глобалы ECMAScript 2023.
  • es2024 — глобалы ECMAScript 2024.
  • es2025 — глобалы ECMAScript 2025.
  • es2026 — глобалы ECMAScript 2026.
  • es6 — глобалы ECMAScript 6, кроме модулей.
  • greasemonkey — глобалы GreaseMonkey.
  • jasmine — глобалы Jasmine.
  • jest — глобалы Jest.
  • jquery — глобалы jQuery.
  • meteor — глобалы Meteor.
  • mocha — глобалы Mocha.
  • mongo — глобалы MongoDB.
  • nashorn — глобалы Java 8 Nashorn.
  • node — глобалы и область Node.js.
  • phantomjs — глобалы PhantomJS.
  • prototypejs — глобалы Prototype.js.
  • protractor — глобалы Protractor.
  • qunit — глобалы QUnit.
  • serviceworker — глобалы Service Worker.
  • shared-node-browser — общие глобалы Node.js и браузера.
  • shelljs — глобалы ShellJS.
  • svelte — глобалы Svelte.
  • vitest — глобалы Vitest.
  • vue — глобалы Vue.
  • webextensions — глобалы WebExtensions.
  • worker — глобалы Web Workers.

extends

type: string[]

Пути к конфигурационным файлам, которые наследует этот файл. Пути разрешаются относительно файла, в котором указано свойство extends. Конфиги объединяются по порядку массива; последний перекрывает предыдущие.

globals

type: Record<string, string>

Добавить или убрать глобальные переменные.

Для каждого глобала задайте "writable", чтобы разрешить перезапись, или "readonly", чтобы запретить.

Глобал можно отключить значением "off". Например, если доступны большинство глобалов ES2015, но нет Promise:

json
{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "env": {
    "es6": true
  },
  "globals": {
    "Promise": "off"
  }
}

Также допускаются "readable" или false вместо "readonly", и "writeable" или true вместо "writable".

ignorePatterns

type: string[]

default: []

Glob-шаблоны игнорируемых при линтинге путей. Разрешаются относительно файла конфигурации.

jsPlugins

type: array

JS-плагины: использование ESLint-плагинов в Oxlint.

Подробнее — в документации.

Примечание: JS-плагины в alpha, semver не гарантируется.

Примеры:

Базовый вариант с локальным путём к плагину.

json
{
  "jsPlugins": ["./custom-plugin.js"],
  "rules": {
    "custom/rule-name": "warn"
  }
}

Базовый вариант с плагином на TypeScript по локальному пути.

Файлы плагинов на TypeScript поддерживаются в таких средах:

  • Deno и Bun: TypeScript нативно.
  • Node.js >=22.18.0 и Node.js ^20.19.0: TypeScript нативно со встроенным удалением типов по умолчанию.

В более старых версиях Node плагины на TypeScript не поддерживаются. Используйте плагины на JavaScript или обновите Node.

json
{
  "jsPlugins": ["./custom-plugin.ts"],
  "rules": {
    "custom/rule-name": "warn"
  }
}

Одновременное использование встроенного Rust-плагина и JS-плагина с тем же именем через псевдоним для JS-плагина.

json
{
  "plugins": ["import"],
  "jsPlugins": [{ "name": "import-js", "specifier": "eslint-plugin-import" }],
  "rules": {
    "import/no-cycle": "error",
    "import-js/no-unresolved": "warn"
  }
}

jsPlugins[n]

type: object | string

jsPlugins[n].name

type: string

Пользовательское имя / псевдоним плагина.

Примечание: следующие имена зарезервированы — реализованы нативно на Rust в oxlint и не могут использоваться для JS-плагинов:

  • react (includes react-hooks)
  • unicorn
  • typescript (includes @typescript-eslint)
  • oxc
  • import (includes import-x)
  • jsdoc
  • jest
  • vitest
  • jsx-a11y
  • nextjs
  • react-perf
  • promise
  • node
  • vue
  • eslint

Если нужна JavaScript-версия любого из этих плагинов, задайте отдельный псевдоним, чтобы избежать конфликтов.

jsPlugins[n].specifier

type: string

Путь к плагину или имя пакета

options

type: object

Опции линтера.

options.denyWarnings

type: boolean

Ненулевой код выхода при предупреждениях.

Эквивалентно --deny-warnings в CLI.

options.maxWarnings

type: integer

Порог числа предупреждений. Превышение — статус ошибки.

Эквивалентно --max-warnings в CLI.

options.reportUnusedDisableDirectives

type: "allow" | "off" | "warn" | "error" | "deny" | integer"

Сообщать о неиспользуемых директивах отключения (например // oxlint-disable-line или // eslint-disable-line).

Эквивалентно --report-unused-disable-directives-severity в CLI. При одновременной установке приоритет у флагов CLI. Только в корневом файле конфигурации.

options.respectEslintDisableDirectives

type: boolean

Учитывать ли директивы eslint-disable* и eslint-enable* вместе с нативными oxlint-*.

По умолчанию true. Только в корневом файле конфигурации.

options.typeAware

type: boolean

Включить правила, требующие информации о типах.

Эквивалентно --type-aware в CLI.

Требуется установленный пакет oxlint-tsgolint.

options.typeCheck

type: boolean

Экспериментальная проверка типов (включая диагностики компилятора TypeScript).

Эквивалентно --type-check в CLI.

Требуется установленный пакет oxlint-tsgolint.

overrides

type: array

overrides[n]

type: object

overrides[n].env

type: object

Среды включают и отключают наборы глобальных переменных.

overrides[n].files

type: string[]

Набор glob-шаблонов.

overrides[n].globals

type: object

Включение или отключение отдельных глобалов.

overrides[n].jsPlugins

type: array

JS-плагины для этого override: использование ESLint-плагинов в Oxlint.

Подробнее — в документации.

Примечание: JS-плагины в alpha, semver не гарантируется.

overrides[n].jsPlugins[n]

type: object | string

overrides[n].jsPlugins[n].name

type: string

Пользовательское имя / псевдоним плагина.

Примечание: следующие имена зарезервированы — реализованы нативно на Rust в oxlint и не могут использоваться для JS-плагинов:

  • react (includes react-hooks)
  • unicorn
  • typescript (includes @typescript-eslint)
  • oxc
  • import (includes import-x)
  • jsdoc
  • jest
  • vitest
  • jsx-a11y
  • nextjs
  • react-perf
  • promise
  • node
  • vue
  • eslint

Если нужна JavaScript-версия любого из этих плагинов, задайте отдельный псевдоним, чтобы избежать конфликтов.

overrides[n].jsPlugins[n].specifier

type: string

Путь к плагину или имя пакета

overrides[n].plugins

type: array

default: null

По желанию меняет список плагинов для этого override. Если не указано, используются плагины базового конфига.

overrides[n].plugins[n]

type: "eslint" | "react" | "unicorn" | "typescript" | "oxc" | "import" | "jsdoc" | "jest" | "vitest" | "jsx-a11y" | "nextjs" | "react-perf" | "promise" | "node" | "vue"

overrides[n].rules

type: object

См. правила Oxlint

plugins

type: array

default: null

Встроенные плагины Oxlint. Список доступных плагинов на сайте.

ВАЖНО: поле plugins заменяет базовый набор плагинов. Массив plugins должен перечислять все нужные плагины.

plugins[n]

type: "eslint" | "react" | "unicorn" | "typescript" | "oxc" | "import" | "jsdoc" | "jest" | "vitest" | "jsx-a11y" | "nextjs" | "react-perf" | "promise" | "node" | "vue"

rules

type: object

См. правила Oxlint

settings

type: object

Настройка поведения плагинов линтера.

Пример для Next.js в монорепо:

json
{
  "settings": {
    "next": {
      "rootDir": "apps/dashboard/"
    },
    "react": {
      "linkComponents": [
        {
          "name": "Link",
          "linkAttribute": "to"
        }
      ]
    },
    "jsx-a11y": {
      "components": {
        "Link": "a",
        "Button": "button"
      }
    }
  }
}

settings.jest

type: object

Настройки правил плагина Jest.

Полный справочник — в конфигурации eslint-plugin-jest.

settings.jest.version

type: integer | string

default: null

Версия Jest — число (29) или semver-строка ("29.1.0" или "v29.1.0"), сохраняется только мажорная часть.

WARNING

Эта настройка перекроет набор опций для no-deprecated-functions.

settings.jsdoc

type: object

settings.jsdoc.augmentsExtendsReplacesDocs

type: boolean

default: false

Только для правила require-(yields|returns|description|example|param|throws)

settings.jsdoc.exemptDestructuredRootsFromChecks

type: boolean

default: false

Только для правил require-param-type и require-param-description

settings.jsdoc.ignoreInternal

type: boolean

default: false

Для всех правил, кроме empty-tags

settings.jsdoc.ignorePrivate

type: boolean

default: false

Для всех правил, кроме check-access и empty-tags

settings.jsdoc.ignoreReplacesDocs

type: boolean

default: true

Только для правила require-(yields|returns|description|example|param|throws)

settings.jsdoc.implementsReplacesDocs

type: boolean

default: false

Только для правила require-(yields|returns|description|example|param|throws)

settings.jsdoc.overrideReplacesDocs

type: boolean

default: true

Только для правила require-(yields|returns|description|example|param|throws)

settings.jsdoc.tagNamePreference

type: object

default: {}

settings.jsx-a11y

type: object

Настройки плагина JSX A11y.

Полный справочник — в конфигурации eslint-plugin-jsx-a11y.

settings.jsx-a11y.attributes

type: Record<string, array>

default: {}

Соответствие имён атрибутов DOM-эквивалентам. Полезно для не-React фреймворков с другими именами атрибутов.

Пример:

json
{
  "settings": {
    "jsx-a11y": {
      "attributes": {
        "for": ["htmlFor", "for"]
      }
    }
  }
}

settings.jsx-a11y.components

type: Record<string, string>

default: {}

Чтобы пользовательские компоненты проверялись как DOM-элементы, задайте соответствие имён компонентов имёнам DOM-элементов.

Пример:

json
{
  "settings": {
    "jsx-a11y": {
      "components": {
        "Link": "a",
        "IconButton": "button"
      }
    }
  }
}

settings.jsx-a11y.polymorphicPropName

type: string

Необязательно: имя пропса для полиморфных компонентов. По нему правила с семантическим контекстом определяют тип элемента.

Например, если polymorphicPropName равен as, то элемент

jsx
<Box as="h3">Hello</Box>

будет обрабатываться как h3. Если не задано — как компонент Box.

settings.next

type: object

Настройки плагина Next.js.

settings.next.rootDir

type: array | string

settings.next.rootDir[n]

type: string

settings.react

type: object

Настройки плагина React.

На основе eslint-plugin-react

settings.react.componentWrapperFunctions

type: string[]

default: []

Функции, оборачивающие компоненты React и считающиеся HOC.

Пример:

jsonc
{
  "settings": {
    "react": {
      "componentWrapperFunctions": ["observer", "withRouter"],
    },
  },
}

settings.react.formComponents

type: array

default: []

Компоненты вместо <form> для форм, например <Formik>.

Пример:

jsonc
{
  "settings": {
    "react": {
      "formComponents": [
        "CustomForm",
        // OtherForm is considered a form component and has an endpoint attribute
        { "name": "OtherForm", "formAttribute": "endpoint" },
        // allows specifying multiple properties if necessary
        { "name": "Form", "formAttribute": ["registerEndpoint", "loginEndpoint"] },
      ],
    },
  },
}
settings.react.formComponents[n]

type: object | string

settings.react.formComponents[n].attribute

type: string

settings.react.formComponents[n].name

type: string

settings.react.linkComponents

type: array

default: []

Компоненты вместо <a> для ссылок, например <Link>.

Пример:

jsonc
{
  "settings": {
    "react": {
      "linkComponents": [
        "HyperLink",
        // Use `linkAttribute` for components that use a different prop name
        // than `href`.
        { "name": "MyLink", "linkAttribute": "to" },
        // allows specifying multiple properties if necessary
        { "name": "Link", "linkAttribute": ["to", "href"] },
      ],
    },
  },
}
settings.react.linkComponents[n]

type: object | string

settings.react.linkComponents[n].attribute

type: string

settings.react.linkComponents[n].name

type: string

settings.react.version

type: string

default: null

Версия React для правил, зависящих от версии.

Допускаются semver-строки (например "18.2.0", "17.0").

Пример:

jsonc
{
  "settings": {
    "react": {
      "version": "18.2.0",
    },
  },
}

settings.vitest

type: object

Настройки плагина Vitest.

Полный справочник — в конфигурации eslint-plugin-vitest.

settings.vitest.typecheck

type: boolean

default: false

Включить режим typecheck для правил Vitest. При включении часть правил пропускает отдельные проверки для блоков describe в сценариях проверки типов TypeScript.