Plugins JS
O Oxlint aceita plugins em JS — escritos por você ou do npm.
A API é compatível com ESLint v9+; boa parte dos plugins existentes deve funcionar.
Quase toda a API de plugin ESLint já está disponível (seção Suporte à API).
INFO
Plugins JS estão em alfa e em desenvolvimento ativo.
Comportamento deve coincidir com o ESLint. Divergências são bug — abra um issue.
Usar plugins JS
- Liste o plugin em
jsPluginsna config. - Ative regras em
rules.
O caminho pode ser qualquer especificador de import válido: ./plugin.js, eslint-plugin-foo, @foo/eslint-plugin. Resolvido em relação ao arquivo de config.
{
"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",
},
// ... resto ...
}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",
},
// ... resto ...
});Apelidos (alias)
Útil quando:
- o nome padrão conflita com plugin nativo (react, unicorn, typescript, oxc, import, jest, vitest, jsx-a11y, nextjs…);
- o nome é longo;
- há versão nativa mas falta alguma regra — use o pacote JS com outro
name.
{
"jsPlugins": [
{
"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: [
{
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",
},
});Escreva plugins próprios: Escrevendo plugins JS.
Plugins ESLint com testes de conformidade
Roda contra vários populares:
eslint-plugin-cypress(resultados)@e18e/eslint-plugin(resultados)eslint-plugin-mocha(resultados)eslint-plugin-playwright(resultados)eslint-plugin-react-hooks(resultados) — parte das regras já existe nativamente; prefira nativo quando possíveleslint-plugin-regexp(resultados)eslint-plugin-sonarjs(resultados)eslint-plugin-storybook(resultados)@stylistic/eslint-plugin(resultados)eslint-plugin-testing-library(resultados)
Lista não é exaustiva. Discussion no GitHub.
Suporte à API
Quase toda superfície da API ESLint:
- Percorrimento AST
- Exploração AST (
node.parent,context.sourceCode.getAncestors) - Fixes
- Opções de regra
- Seletores (docs ESLint)
- APIs de
SourceCode(texto, tokens etc.) - Análise de escopo
- Análise de fluxo de controle (code paths)
- Diretivas inline (
// oxlint-disable) - LSP + sugestões (diagnósticos e quick fixes)
Ainda não:
- Formatos/parser customizado (Svelte, Vue template completo, Angular)
- Regras que precisam de informação de tipos TypeScript
APIs removidas no ESLint v9 ou antes em geral não serão implementadas. Plugin antigo sem migração v9 pode exigir fork ou substituto.
Próximos meses: fechar lacunas rumo a 100% da API de plugins.