OxLint: Linter ultrarápido

Revisión de errores y problemas en Javascript|


Durante años, en el ecosistema Javascript se ha utilizado ESLint, un linter Javascript que se ha vuelto el estándar para la revisión de código Javascript. Sin embargo, en los últimos años han aparecido varias herramientas creadas con el objetivo de ser mucho más rápidas y sustituir a ESLint. Es el caso de OxLint.

¿Qué es OxLint?

OxLint es una herramienta, que forma parte de Oxidation Compiler, una suite de herramientas desarrolladas en Rust con la intención de ser muy rápidas y eficientes para realizar varias tareas como revisión, parseo, formateo, minificación o transformación de código.

La principal ventaja de OxLint sobre ESLint es su velocidad. Es muchísimo más rápido revisando reglas y encontrando errores en el código, lo que reduce los tiempos en que nuestro navegador está leyendo el código y se queda bloqueado, sobre todo si tenemos una máquina lenta. Además, la configuración está simplificada y está preparado para que funcione de forma sencilla, soportando incluso configuraciones actuales de ESLint.

Instalación de OxLint

Para instalar oxlint en nuestro proyecto, simplemente escribimos lo siguiente:

$ npm install -D oxlint

Lo ideal es instalar una extensión en nuestro editor de código que sea capaz de comunicarse con OxLint. En nuestro caso, si usamos VSCode, utilizaremos la extensión oxc.

El comando oxlint no requiere Node, por lo que también puede descargarse manualmente desde los releases de GitHub. También podemos ejecutarlo sin instalarlo, con un npx oxlint.

Reglas de OxLint

OxLint funciona igual que EsLint o la mayoría de estos linters. Sigue una serie de reglas para asegurarse que el código de tu proyecto cumple dichas normas. Puedes ampliar estas reglas, activar nuevas reglas o modificar las actuales. En el momento de escribir esto, OxLint tiene un total de 520 reglas y tiene activadas por defecto 123.

En la página Reglas de OxLint puedes encontrar varias tablas explicativas de todas las reglas existentes, teniendo en cuenta que son facilmente configurables por el desarrollador. También puedes consultarlas desde una terminal con el comando oxlint --rules.

Simplemente, creamos un fichero .oxlintrc.json en el raíz del proyecto:

{
  "rules": {
    "no-unused-vars": "warn"
  }
}

Como puedes ver, dentro de rules, podemos definir (O redefinir) las reglas e indicar cuál es el comportamiento que buscamos. Simplemente colocando un "error", "warn" o "off", podemos indicar que queremos que se marque como un error con el linter (en rojo), como un warning (en amarillo) o simplemente desactivarla y que no la use.

En ciertos casos puedes hacer uno de un . Normalmente esto se hace para indicar parámetros a la regla, por ejemplo "max-lines": ["error", 250]. Esta regla configura que si un fichero tiene más de 250 lineas, se marque como error, en rojo.

Extender configuración

OxLint nos permite crear configuraciones modulares. Por ejemplo, podemos crear varios ficheros por tecnología usada, de modo que sea muy fácil extender la configuración. Por ejemplo, observa el contenido de este fichero .oxlintrc.json:

{
  "extends": [".oxlint-typescript.json"],
  "rules": {
    "no-unused-vars": "warn"
  }
}

Este fichero sólo tiene una regla que afecta a Javascript nativo. Sin embargo, está extendiendo de la configuración indicada en el fichero .oxlint-typescript.json, que es un fichero externo donde definiremos las reglas de Typescript. De esta forma, podemos extender y activar/desactivar fácilmente configuraciones. El contenido del fichero .oxlint-typescript.json:

{
  "plugins": ["typescript"],
  "rules": {
    "typescript/no-explicit-any": "error"
  }
}

Observa que en este caso, usamos el plugin typescript y configuramos las reglas para este plugin, que se prefijan con typescript/. Aquí puedes encontrar los plugins soportados por OxLint en este momento.

Probando oxlint desde terminal

Aunque con la instalación de la extensión anterior, ya deberíamos poder utilizar OxLint. Una buena forma de probar las configuraciones o simplemente probar el linter, es utilizar la consola o terminal.

Vamos a usar el comando oxlint para comprobar como se ve en un fichero .js que simplemente tiene la linea var hello = "Hola!";:

$ npx oxlint index.js

  ⚠ eslint(no-unused-vars): Variable 'hello' is declared but never used. Unused
  variables should start with a '_'.

   ╭─[index.js:1:5]
 1 │ var hello = "Hola!";
   ·     ──┬──
   ·       ╰── 'hello' is declared here
   ╰────
  help: Consider removing this declaration.

Observa que nos indica el error que ha detectado, la regla implicada, e incluso algo de ayuda para resolver el error.

Ahora, creamos un fichero .oxlintrc.json con el siguiente contenido:

{
  "rules": {
    "no-unused-vars": "off",
    "eslint/no-var": "error"
  }
}

En este caso, hemos deshabilitado la regla no-unused-vars para que no la revise, y hemos habilitado la regla no-var del plugin eslint (activado por defecto) para que la muestre como un error. Ahora, en una nueva comprobación de oxlint debería mostrarnos sólo la última regla, que te prohibe usar var a favor de let o const.

Excepciones o ignorar linter

En ciertos casos nos puede interesar desactivar el linter en una linea, fichero, o con una regla concreta. Para ello, podemos añadir comentarios de código con esta misión:

/* oxlint-disable */
// Desactiva oxlint en todo el fichero

/* oxlint-disable no-unused-vars */
// Desactiva la regla `no-unused-vars` en este fichero

/* oxlint-disable no-unused-vars, no-console */
// Desactiva varias reglas en este fichero

/* oxlint-disable-next-line no-console */
// Desactiva la regla `no-console` en la siguiente linea

/* oxlint-disable-next-line */
// Desactiva el linter en la siguiente linea

// oxlint-disable-line
// Desactiva el linter en la linea actual

Recuerda usar esto sólo en casos muy puntuales, donde evitar el linter está justificado, y no sólo lo ignoras por evitar el linter. Lo ideal siempre es respetar los consejos y recomendaciones del linter.

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev