Skip to content

JS-плагины

Oxlint поддерживает плагины на JS — свои или из npm.

API плагинов совместим с ESLint v9+, поэтому большинство существующих ESLint-плагинов должны работать с Oxlint из коробки.

Почти весь API ESLint для плагинов уже реализован (см. ниже), так что большинство плагинов совместимы без доработок.

INFO

JS-плагины в стадии alpha и активно развиваются.

Поведение API должно совпадать с ESLint. Любые расхождения — баг; сообщите.

Подключение JS-плагинов

  1. Добавьте путь к плагину в .oxlintrc.json в jsPlugins.
  2. Подключите правила в rules.

Путь — любой корректный спецификатор импорта: ./plugin.js, eslint-plugin-foo, @foo/eslint-plugin. Разрешение относительно файла конфигурации.

jsonc
{
  "jsPlugins": ["./path/to/my-plugin.js", "eslint-plugin-whatever", "@foobar/eslint-plugin"],
  "rules": {
    "my-plugin/rule1": "error",
    "my-plugin/rule2": "warn",
    "whatever/rule1": "error",
    "whatever/rule2": "warn",
    "@foobar/rule1": "error",
  },
  // ... other config ...
}
ts
import { defineConfig } from "oxlint";

export default defineConfig({
  jsPlugins: ["./path/to/my-plugin.js", "eslint-plugin-whatever", "@foobar/eslint-plugin"],
  rules: {
    "my-plugin/rule1": "error",
    "my-plugin/rule2": "warn",
    "whatever/rule1": "error",
    "whatever/rule2": "warn",
    "@foobar/rule1": "error",
  },
  // ... other config ...
});

Псевдонимы плагинов

Можно задать другое имя (alias), если:

  • Имя по умолчанию конфликтует с встроенным плагином Oxlint (jsdoc, react и т.д.).
  • Имя слишком длинное.
  • Нужен плагин, встроенный в Oxlint, но конкретное правило в нативной версии ещё не реализовано.
jsonc
{
  "jsPlugins": [
    // `jsdoc` — зарезервировано, в Oxlint есть нативная поддержка
    {
      "name": "jsdoc-js",
      "specifier": "eslint-plugin-jsdoc",
    },
    // Короткое имя
    {
      "name": "short",
      "specifier": "eslint-plugin-with-name-so-very-very-long",
    },
    // Плагины без алиаса — просто строкой
    "eslint-plugin-whatever",
  ],
  "rules": {
    "jsdoc-js/check-alignment": "error",
    "short/rule1": "error",
    "whatever/rule2": "error",
  },
}
ts
import { defineConfig } from "oxlint";

export default defineConfig({
  jsPlugins: [
    // `jsdoc` — зарезервировано, в Oxlint есть нативная поддержка
    {
      name: "jsdoc-js",
      specifier: "eslint-plugin-jsdoc",
    },
    // Короткое имя
    {
      name: "short",
      specifier: "eslint-plugin-with-name-so-very-very-long",
    },
    // Плагины без алиаса — просто строкой
    "eslint-plugin-whatever",
  ],
  rules: {
    "jsdoc-js/check-alignment": "error",
    "short/rule1": "error",
    "whatever/rule2": "error",
  },
});

См. Написание JS-плагинов про создание собственных плагинов и правил.

Плагины ESLint с проверенной поддержкой

Прогоняются conformance-тесты на ряде популярных ESLint-плагинов:

Список не исчерпывающий; многие другие плагины тоже работают. Это те, что мы явно тестируем.

Дополнительно — обсуждение на GitHub.

Поддержка API

Oxlint покрывает почти всю поверхность API ESLint:

  • Обход AST.
  • Навигация по AST (node.parent, context.sourceCode.getAncestors).
  • Исправления (fixes).
  • Опции правил.
  • Селекторы (документация ESLint).
  • API SourceCode (например context.sourceCode.getText(node)).
  • API токенов SourceCode (например context.sourceCode.getTokens(node)).
  • Анализ области видимости.
  • Анализ потока управления (code paths).
  • Инлайн-директивы отключения (// oxlint-disable).
  • Языковой сервер (IDE) + предложения (диагностики и quick-fixes в редакторе)

Пока не поддерживается:

  • Пользовательские форматы файлов и парсеры (Svelte, Vue, Angular и т.п.).
  • Правила, требующие информацию о типах TypeScript.

API ESLint, удалённые в v9 или ранее, в большинстве случаев не будут реализованы. Необновлённые плагины может понадобиться патчить или заменить.

Оставшиеся возможности планируем доработать в ближайшие месяцы, ориентируясь на 100% покрытия плагинного API ESLint.