Skip to content

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

  1. Liste o plugin em jsPlugins na config.
  2. 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.

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",
  },
  // ... resto ...
}
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",
  },
  // ... 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.
jsonc
{
  "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",
  },
}
ts
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:

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.