Ruff v0.16.0: nuevas reglas por defecto y formato para bloques de código en Markdown

Fuentes: Ruff v0.16.0

Ruff, el linter y formateador de Python escrito en Rust por Astral, ha publicado su versión 0.16.0, disponible en PyPI y mediante gestores como uv. La actualización amplía de forma notable el conjunto de reglas activas por defecto: pasa de 59 a 413 reglas habilitadas de un catálogo que ha crecido desde la versión 0.1.0 de 708 a 968 reglas. La medida pretende sacar a la luz errores sintácticos y de ejecución inmediata que hasta ahora requerían configuración explícita, e incorpora por defecto selecciones populares de flake8-bugbear (B) y pyupgrade (UP), además de la categoría propia RUF. Para quienes necesiten conservar el comportamiento anterior, basta con fijar select = ["E4", "E7", "E9", "F"] en la configuración.

Entre las novedades destacadas, Ruff v0.16 incorpora formateo de bloques de código Python embebidos en archivos Markdown, reconociendo los info strings python, py, python3, py3, pyi y pycon, así como la sintaxis {python} propia de Quarto. Se mantiene la posibilidad de suprimir el formateo con comentarios fmt: off / fmt: on, con HTML para regiones completas, o mediante extend-exclude con un patrón *.md.

La versión también amplía los mecanismos de supresión con tres nuevos comentarios nativos: ruff: ignore (en línea o en la línea lógica siguiente, al estilo noqa), ruff: file-ignore (para todo el archivo) y pares ruff: disable / ruff: enable ya introducidos en v0.15. Cada comentario admite un campo "reason" justificando la supresión, y la nueva bandera CLI --add-ignore permite insertarlos automáticamente. En modo preview, además, aceptan nombres de regla en lugar de códigos.

Otra mejora relevante es que los arreglos aplicables se muestran ahora como parte de la salida por defecto de check y format --check, junto al diagnóstico principal, en lugar de requerir --diff por separado. format --check pasa a admitir el conjunto completo de formatos de salida del linter, incluidos JSON legible por máquina y los formatos de anotaciones de GitHub y GitLab para CI. Como cambio compatible menor, varios campos del JSON de salida pueden ahora ser null en lugar de cadenas vacías.

Por último, se han estabilizado varias reglas que dejan de estar en preview: AIR303, CPY001, FURB164, FURB192, ISC004 y LOG.