JS-плагины
Oxlint поддерживает плагины на JS — свои или из npm.
API плагинов совместим с ESLint v9+, поэтому большинство существующих ESLint-плагинов должны работать с Oxlint из коробки.
Почти весь API ESLint для плагинов уже реализован (см. ниже), так что большинство плагинов совместимы без доработок.
INFO
JS-плагины в стадии alpha и активно развиваются.
Поведение API должно совпадать с ESLint. Любые расхождения — баг; сообщите.
Подключение JS-плагинов
- Добавьте путь к плагину в
.oxlintrc.jsonвjsPlugins. - Подключите правила в
rules.
Путь — любой корректный спецификатор импорта: ./plugin.js, eslint-plugin-foo, @foo/eslint-plugin. Разрешение относительно файла конфигурации.
{
"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 ...
}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, но конкретное правило в нативной версии ещё не реализовано.
{
"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",
},
}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-плагинов:
eslint-plugin-cypress(результаты)@e18e/eslint-plugin(результаты)eslint-plugin-mocha(результаты)eslint-plugin-playwright(результаты)eslint-plugin-react-hooks(результаты): часть правил уже в Oxlint нативно — предпочитайте нативныеeslint-plugin-regexp(результаты)eslint-plugin-sonarjs(результаты)eslint-plugin-storybook(результаты)@stylistic/eslint-plugin(результаты)eslint-plugin-testing-library(результаты)
Список не исчерпывающий; многие другие плагины тоже работают. Это те, что мы явно тестируем.
Дополнительно — обсуждение на 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.