Biome 2.5.13: reglas nuevas y lint con tipos más rápido
Esta versión suma reglas nursery, corrige el lint type-aware con librerías como Zod y mejora la velocidad del formateador hasta un 50%.
Tres reglas nuevas en nursery
useLayeredStyles exige que los estilos y los @import estén dentro de una cascade layer. useBetterDomTraversing marca el uso de índices posicionales (childNodes[0], children[0], parentElement.parentElement) o querySelector encadenado, y sugiere firstChild, firstElementChild o closest(). noXorAsExponentiation detecta cuando usás ^ entre dos enteros decimales, un error común cuando se quiso escribir **.
const kibibyte = 2 ^ 10; // 8, not 1024Lint con tipos vuelve a ser rápido con Zod
Biome dejó de inferir por completo una declaración genérica importada solo para resolver sus argumentos de tipo, lo que restaura el rendimiento en librerías grandes como Zod. Esto afecta a useRegexpExec, noFloatingPromises, noMisusedPromises, useNullishCoalescing y noUnsafePlusOperands. Además, ahora se infiere el tipo de un parámetro de callback sin anotar a partir de la firma de la función a la que se pasa, lo que mejora la detección en varias reglas más.
interface Context { doSomething(): Promise<void>;}declare function test(callback: (ctx: Context) => Promise<void>): void;test(async (ctx) => { ctx.doSomething(); // now reported as a floating promise});El formateador gana hasta 50% de velocidad
El rendimiento del formateador de Biome mejoró hasta un 50% en algunos casos. No hay más detalle sobre qué escenarios se benefician exactamente, pero si formateás proyectos grandes en CI vas a notar la diferencia en el tiempo total.
Fixes puntuales en reglas existentes
noUselessConstructor ya no marca constructores de TypeScript que reenvían al menos un argumento a super, incluso cuando la firma del padre y del hijo es idéntica. useAriaPropsForRole y useFocusableInteractive dejaron de reportar elementos con role="separator" que no son focusable. noUnusedPrivateClassMembers ahora reconoce asignaciones compuestas como ??= y lecturas por destructuring desde this. noUnusedVariables trata los escapes Unicode en identificadores como el mismo binding que su forma decodificada. useReactCompiler desactivó sus chequeos experimentales de llamadas capitalizadas y dependencias de efectos, alineándose con el preset recomendado upstream.
Correcciones en CSS y HTML
Se arregló el parseo de URLs CSS sin comillas que empiezan con @ o !, como url(@/assets/icon.svg), y se preserva el whitespace escapado o no-ASCII en URLs crudas al formatear. El formateador HTML ya no inserta espacio entre expresiones Svelte adyacentes cuando la línea combinada supera el ancho configurado. También se corrigió que los comentarios de suppression de Astro (biome-ignore lint) silencien diagnósticos HTML en la línea siguiente cuando el soporte completo de HTML está activado.
<span>- {head.median - base.median >= 0 ? "+" : "−"}- {formatMs(Math.abs(head.median - base.median))}+ {head.median - base.median >= 0 ? "+" : "−"}{formatMs(Math.abs(head.median - base.median))} </span>Qué te llevas
Sumaste reglas nursery nuevas: useLayeredStyles, useBetterDomTraversing y noXorAsExponentiation.
Si lintás con reglas type-aware sobre librerías con muchos genéricos como Zod, el rendimiento vuelve a los niveles esperados.
El formateador es hasta 50% más rápido en algunos casos.
Hay una lista larga de correcciones puntuales en reglas existentes (constructores, aria, miembros privados, variables no usadas) que vale revisar si usás esas reglas.
¿Quieres una clase de esto?
Si varias personas lo piden, entra al programa. No hace falta dejar mail ni nombre.