<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Biome | 博客</title><description/><link>https://biomejs.dev/</link><language>zh-CN</language><item><title>VS Code extension V3</title><link>https://biomejs.dev/zh-cn/blog/2025-05-29-biome-vscode-v3/</link><guid isPermaLink="true">https://biomejs.dev/zh-cn/blog/2025-05-29-biome-vscode-v3/</guid><pubDate>Tue, 29 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We’re excited to announce that version 3 of the Biome VS Code extension is now
available! This release includes a range of new features and improvements to
make your development experience even better:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🗄️ Support for multi-root workspaces&lt;/li&gt;
&lt;li&gt;📝 Support for single-file mode&lt;/li&gt;
&lt;li&gt;👻 Support for unsaved files&lt;/li&gt;
&lt;li&gt;🔄 Automatic reload after updating Biome&lt;/li&gt;
&lt;li&gt;⚙️ Automatic reload after configuration changes&lt;/li&gt;
&lt;li&gt;✨ Improved status indicator&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;multi-root-workspaces&quot;&gt;Multi-root workspaces&lt;/h2&gt;&lt;a href=&quot;#multi-root-workspaces&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Multi-root workspaces”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The Biome extension now supports &lt;a href=&quot;https://code.visualstudio.com/docs/editor/multi-root-workspaces&quot;&gt;multi-root workspaces&lt;/a&gt;, so you can work on
multiple projects side by side in a single VS Code window. Each workspace folder
now runs its own independent Biome instance, keeping your projects isolated.&lt;/p&gt;
&lt;p&gt;:::caution[heads up for pre-release users] If you’ve been using the pre-release
version over the past few months, please note that support for the
&lt;code dir=&quot;auto&quot;&gt;biome.projects&lt;/code&gt; setting has been &lt;strong&gt;removed&lt;/strong&gt; in the final release. We now
recommend using &lt;strong&gt;multiple workspace folders&lt;/strong&gt; instead to manage multiple
projects. :::&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;single-file-mode&quot;&gt;Single-file mode&lt;/h2&gt;&lt;a href=&quot;#single-file-mode&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Single-file mode”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Sometimes you just need to make a quick edit to &lt;em&gt;that one file&lt;/em&gt;. The extension
now fully supports &lt;strong&gt;single-file mode&lt;/strong&gt;, making it easy to work with files that
aren’t part of a full project.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;that-one-file.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;To use this feature, make sure you have &lt;a href=&quot;https://biomejs.dev/guides/manual-installation/&quot;&gt;Biome installed globally&lt;/a&gt;. No worries
if you forget, the extension will let you know if it can’t find Biome in your
&lt;code dir=&quot;auto&quot;&gt;PATH&lt;/code&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;unsaved-files--vs-code-settings&quot;&gt;Unsaved files &amp;#x26; VS Code settings&lt;/h2&gt;&lt;a href=&quot;#unsaved-files--vs-code-settings&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Unsaved files &amp;#x26; VS Code settings”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The extension now supports formatting and linting unsaved (Untitled) files, as
well as your VS Code settings. When you open one of these, the extension will
spin up a global Biome instance on demand.&lt;/p&gt;
&lt;p&gt;As with single-file mode, this feature requires &lt;a href=&quot;https://biomejs.dev/guides/manual-installation/&quot;&gt;Biome to be installed
globally&lt;/a&gt;. The extension will notify you if it’s missing from your PATH.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;automatic-reload&quot;&gt;Automatic reload&lt;/h2&gt;&lt;a href=&quot;#automatic-reload&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Automatic reload”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;When the extension detects that Biome has been updated in your project
dependencies, it will automatically reload the relevant Biome instances to use
the latest version.&lt;/p&gt;
&lt;p&gt;Additionally, any changes to the extension’s configuration will trigger a reload
of the Biome instance to ensure your new settings take effect immediately.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;improved-status-indicator&quot;&gt;Improved status indicator&lt;/h2&gt;&lt;a href=&quot;#improved-status-indicator&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Improved status indicator”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The status bar now more reliably reflects the status of Biome for your active
workspace folder. When you switch between workspace folders, the indicator
updates accordingly.&lt;/p&gt;
&lt;p&gt;Plus, clicking the status indicator opens the logs for the current Biome
instance, making it easier to access logs when troubleshooting.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;retiring-the-downloader&quot;&gt;Retiring the downloader&lt;/h2&gt;&lt;a href=&quot;#retiring-the-downloader&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Retiring the downloader”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;From the start, the downloader was meant to bridge the gap until you installed
Biome as a project dependency.&lt;/p&gt;
&lt;p&gt;Managing the lifecycle of downloaded binaries—including updates and
cross-platform support is complex. We believe package managers handle this
better than we could.&lt;/p&gt;
&lt;p&gt;Going forward, if the extension needs a global Biome installation but can’t find
it, you’ll see a notification with instructions on how to install Biome
globally. And don’t worry, you can easily silence this notification if you
prefer not to be reminded.&lt;/p&gt;</content:encoded></item><item><title>Biome partners with Vercel to improve type inference</title><link>https://biomejs.dev/zh-cn/blog/vercel-partners-biome-type-inference/</link><guid isPermaLink="true">https://biomejs.dev/zh-cn/blog/vercel-partners-biome-type-inference/</guid><pubDate>Wed, 02 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Back at the start of 2024, Biome added an ambitious goal to its
&lt;a href=&quot;https://biomejs.dev/blog/roadmap-2024&quot;&gt;roadmap&lt;/a&gt;: integrate a subset of the
&lt;strong&gt;TypeScript type system&lt;/strong&gt; directly into Biome so that type-informed lint rules
can work out of the box.&lt;/p&gt;
&lt;p&gt;In order to make this feasible, we first needed better infrastructure. The main
blocker for this was multi-file analysis, which is coming with
&lt;a href=&quot;https://biomejs.dev/blog/biome-v2-0-beta&quot;&gt;Biome 2.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Today, we finally have the technical means to implement this goal, but, as a
project, we need more than only technical means. Which is why we are grateful
to announce Vercel as a partner to help us achieve this goal and push the web
forward.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;vercel-becomes-biomes-first-platinum-sponsor&quot;&gt;Vercel becomes Biome’s first platinum sponsor&lt;/h3&gt;&lt;a href=&quot;#vercel-becomes-biomes-first-platinum-sponsor&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Vercel becomes Biome’s first platinum sponsor”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://vercel.com/&quot;&gt;Vercel&lt;/a&gt; has contracted me (one of the Biome lead
developers) to work on our type inference effort for many months. Vercel’s goal
with this partnership is to both help improve their own internal linter DX (as
they have recently standardized on Biome) and share those improvements with the
rest of the JavaScript ecosystem.&lt;/p&gt;
&lt;p&gt;We aim to have a fully
functioning&lt;a href=&quot;#how-can-you-write-a-type-informed-lint-rule-if-you-dont-know-the-type-information-is-correct&quot;&gt;(*)&lt;/a&gt;
versions of the &lt;a href=&quot;https://next.biomejs.dev/linter/rules/no-floating-promises/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noFloatingPromises&lt;/code&gt;&lt;/a&gt;
rule and a similar &lt;code dir=&quot;auto&quot;&gt;noMisusedPromises&lt;/code&gt; rule.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;frequently-asked-questions&quot;&gt;Frequently Asked Questions&lt;/h2&gt;&lt;a href=&quot;#frequently-asked-questions&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Frequently Asked Questions”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Because type inference and type checkers are popular topics in our community,
I have collected a few common questions on this topic.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;are-you-reimplementing-a-type-checker-in-biome&quot;&gt;Are you reimplementing a type checker in Biome?&lt;/h3&gt;&lt;a href=&quot;#are-you-reimplementing-a-type-checker-in-biome&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Are you reimplementing a type checker in Biome?”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;No. TypeScript’s &lt;code dir=&quot;auto&quot;&gt;tsc&lt;/code&gt; is a complex and fully-featured type checker, and we have
no intention to rebuild it. For type &lt;em&gt;checking&lt;/em&gt; you are expected to continue to
use &lt;code dir=&quot;auto&quot;&gt;tsc&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This work focuses on type &lt;em&gt;inference&lt;/em&gt; which is a small subset of the
functionality of a full type checker. The goal is to be able to write lint rules
that act on type information, without needing to prove that this type
information is correct.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;how-can-you-write-a-type-informed-lint-rule-if-you-dont-know-the-type-information-is-correct&quot;&gt;How can you write a type-informed lint rule if you don’t know the type information is correct?&lt;/h3&gt;&lt;a href=&quot;#how-can-you-write-a-type-informed-lint-rule-if-you-dont-know-the-type-information-is-correct&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “How can you write a type-informed lint rule if you don’t know the type information is correct?”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Linters have different aims than type checkers. Where a type checker aims to
detect misuse of types, a linter aims to detect common mistakes in general. But
the goal of detecting common mistakes doesn’t require 100% correctness when it
comes to the types it operates on. In fact, even the
&lt;a href=&quot;https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals&quot;&gt;TypeScript Design Goals&lt;/a&gt;
state they are willing to compromise correctness in favor of productivity.&lt;/p&gt;
&lt;p&gt;For a linter, what’s most important is that we don’t flag &lt;em&gt;false positives&lt;/em&gt;,
instances where our lint rules may think there’s an issue when really there’s
not. False positives are a source of frustration for developers, because they
take time to analyze; time that was wasted when it turns out there really wasn’t
an issue to begin with.&lt;/p&gt;
&lt;p&gt;On the other hand, &lt;em&gt;false negatives&lt;/em&gt; are less problematic. They represent
situations where we wish the lint rule would flag an issue, but didn’t. They can
also represent lost productivity (by not flagging the issue early in the
pipeline), but they are not productivity lost due to the rule itself.&lt;/p&gt;
&lt;p&gt;Hypothetically, a lint rule that has no false positives, but has 20% false
negatives, still offers 80% of the value of a rule that is always correct. So
our goal is simply: Create lint rules that don’t flag false positives,
while trying to get the amount of false negatives down as much as we can.&lt;/p&gt;
&lt;p&gt;We cannot say upfront which percentage we will actually achieve, but since
Vercel is sponsoring this work, we’ll use their repositories as a benchmark and
try to optimise towards their use cases.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;how-does-microsofts-announcement-of-a-go-port-for-tsc-influence-your-work&quot;&gt;How does Microsoft’s announcement of a Go port for &lt;code dir=&quot;auto&quot;&gt;tsc&lt;/code&gt; influence your work?&lt;/h3&gt;&lt;a href=&quot;#how-does-microsofts-announcement-of-a-go-port-for-tsc-influence-your-work&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “How does Microsoft’s announcement of a Go port for tsc influence your work?”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;It’s too early to tell. The Go port is not available to users yet, and the APIs
that should allow it to be used by other tooling aren’t expected until the end
of the year. Additionally, even though the Go port is supposedly much faster
than the Node.js version, it will likely still be significantly slower than an
implementation built into Biome’s core due to inter-process communication and
the need to do duplicate work such as parsing files in separate processes.&lt;/p&gt;
&lt;p&gt;For now, that gives us an opportunity to pursue our own type inference
implementation and see how it goes. When the Go version is available for
integration into other tools, we can always reevaluate our approach.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;can-we-follow-your-progress&quot;&gt;Can we follow your progress?&lt;/h3&gt;&lt;a href=&quot;#can-we-follow-your-progress&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Can we follow your progress?”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Yes! There’s a public project overview that people can inspect:
&lt;a href=&quot;https://github.com/orgs/biomejs/projects/4/views/2&quot;&gt;https://github.com/orgs/biomejs/projects/4/views/2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Note that issues may be continuously added to the project as false negatives
keep popping up.&lt;/p&gt;</content:encoded></item><item><title>Biome v2.0 beta</title><link>https://biomejs.dev/zh-cn/blog/biome-v2-0-beta/</link><guid isPermaLink="true">https://biomejs.dev/zh-cn/blog/biome-v2-0-beta/</guid><pubDate>Mon, 24 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After hard work from our team, Biome’s long-awaited 2.0 release is nearing completion. It will be packed with many large features, so we would like your help testing it with a public beta!&lt;/p&gt;
&lt;p&gt;If you would like to try it out, you can update Biome and migrate your configuration using the following commands:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--save-dev&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--save-exact&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;@biomejs/biome@beta&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;npx&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;@biomejs/biome@beta&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;migrate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Also, make sure you use the prereleases of our IDE extensions. The stable versions of our extensions are not yet prepared for Biome 2.0!&lt;/p&gt;
&lt;p&gt;Documentation for the upcoming release can be found at &lt;a href=&quot;https://next.biomejs.dev/&quot;&gt;https://next.biomejs.dev/&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;new-features&quot;&gt;New features&lt;/h2&gt;&lt;a href=&quot;#new-features&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “New features”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;While the final 2.0 release may still have small changes in its final feature set, here’s what you can expect in the beta:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; You can write custom lint rules using GritQL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domains:&lt;/strong&gt; Domains help to group lint rules by technology, framework, or well, domain. Thanks to domains, your default set of recommended lint rules will only include those that are relevant to your project.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-file analysis:&lt;/strong&gt; Lint rules can now apply analysis based on information from other files, enabling rules such as &lt;code dir=&quot;auto&quot;&gt;noImportCycles&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;noFloatingPromises&lt;/code&gt;:&lt;/strong&gt; Still a proof-of-concept, but our first type-aware lint rule is making an appearance.&lt;/li&gt;
&lt;li&gt;Our &lt;strong&gt;Import Organizer&lt;/strong&gt; has seen a major revamp.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assists:&lt;/strong&gt; Biome Assist can provide actions without diagnostics, such as sorting object keys.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved suppressions:&lt;/strong&gt; Suppress a rule in an entire file using &lt;code dir=&quot;auto&quot;&gt;// biome-ignore-all&lt;/code&gt;, or suppress a range using &lt;code dir=&quot;auto&quot;&gt;// biome-ignore-start&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;// biome-ignore-end&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTML formatter:&lt;/strong&gt; Still in preview, this is the first time we ship an HTML formatter.&lt;/li&gt;
&lt;li&gt;Many, &lt;strong&gt;many&lt;/strong&gt;, fixes, new lint rules, and other improvements.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;plugins&quot;&gt;Plugins&lt;/h3&gt;&lt;a href=&quot;#plugins&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Plugins”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Biome 2.0 comes with our first iteration of &lt;a href=&quot;https://biomejs.dev/linter/plugins&quot;&gt;Linter Plugins&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;These plugins are still limited in scope: They allow for matching code snippets and reporting diagnostics on them.&lt;/p&gt;
&lt;p&gt;Here is an example of a plugin that reports on all usages of &lt;code dir=&quot;auto&quot;&gt;Object.assign()&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;grit&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;`$fn($args)` where {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;$fn &amp;#x3C;: `Object.assign`,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;register_diagnostic(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;span = $fn,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;message = &quot;Prefer object spread instead of `Object.assign()`&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;It’s a first step, but we have plenty of ideas for making them more powerful, and we’ll eagerly hear from our users on what they would like to see prioritised.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;domains&quot;&gt;Domains&lt;/h3&gt;&lt;a href=&quot;#domains&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Domains”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;We’ve introduced a new linter feature: &lt;a href=&quot;https://next.biomejs.dev/linter/domains/&quot;&gt;Domains&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Domains are a new way to organise lint rules by technology, framework, or well, domain. Right now, we have identified four domains:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;next&lt;/code&gt;: Rules related to Next.js.&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;react&lt;/code&gt;: Rules related to React.&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;solid&lt;/code&gt;: Rules related to Solid.js.&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;test&lt;/code&gt;: Rules related to testing, regardless of framework or library.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can enable and disable rules that belong to a domain together:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;biome.jsonc&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json5&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;linter&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;domains&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;all&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#919F9F;--1:#5F636F&quot;&gt;// all rules that belong to this domain are enabled&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;react&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;recommended&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#919F9F;--1:#5F636F&quot;&gt;// only the recommended rules from this domain are enabled&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;solid&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;none&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FFFFFF;--1:#984E4D&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FFFFFF;--1:#984E4D&quot;&gt;rules&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FFFFFF;--1:#984E4D&quot;&gt;related&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FFFFFF;--1:#984E4D&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FFFFFF;--1:#984E4D&quot;&gt;Solid&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FFFFFF;--1:#984E4D&quot;&gt;are&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FFFFFF;--1:#984E4D&quot;&gt;disabled&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;But it gets better: Biome will automatically inspect your &lt;code dir=&quot;auto&quot;&gt;package.json&lt;/code&gt; and determine which domains should be enabled by default. For instance, if you have &lt;code dir=&quot;auto&quot;&gt;react&lt;/code&gt; defined as one of your dependencies, the default setting for the &lt;code dir=&quot;auto&quot;&gt;react&lt;/code&gt; domain automatically becomes &lt;code dir=&quot;auto&quot;&gt;recommended&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This way, Biome’s total set of recommended rules should be most relevant to your specific project needs.&lt;/p&gt;
&lt;p&gt;And finally, domains can add global variables to the &lt;code dir=&quot;auto&quot;&gt;javascript.globals&lt;/code&gt; setting. This should make Biome even easier to setup.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;multi-file-analysis&quot;&gt;Multi-file analysis&lt;/h3&gt;&lt;a href=&quot;#multi-file-analysis&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Multi-file analysis”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Before version 2.0, Biome lint rules could only operate on one file at a time. This brought us far, but many of the more interesting rules require information from other files too.&lt;/p&gt;
&lt;p&gt;To accomplish this, we have added a &lt;em&gt;file scanner&lt;/em&gt; to Biome that scans all the files in your project and indexes them, similar to what an LSP service might do in your IDE. We’re not going to beat around the bush: Scanning projects means that Biome has become slower for many projects. But we do believe the ability to do multi-file analysis is worth it. And without a scanner, multi-file analysis would become &lt;em&gt;even slower&lt;/em&gt;, as rules would need to perform ad-hoc file system access individually.&lt;/p&gt;
&lt;p&gt;That said, this is a beta, and there are certainly more opportunities to improve our scanner and its performance. If you have a repository where you feel our performance became unacceptably slow, please reach out and &lt;a href=&quot;https://github.com/biomejs/biome/issues/new?template=03_bug.yml&quot;&gt;file an issue&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For now, we have a few interesting rules that can make use of our multi-file analysis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://next.biomejs.dev/linter/rules/no-import-cycles/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noImportCycles&lt;/code&gt;&lt;/a&gt; is able to look at import statements and detect cycles between them.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://next.biomejs.dev/linter/rules/no-private-imports/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noPrivateImports&lt;/code&gt;&lt;/a&gt; is a new rule based on the &lt;code dir=&quot;auto&quot;&gt;useImportRestrictions&lt;/code&gt; nursery rule from Biome 1.x, and inspired by ESLint’s &lt;a href=&quot;https://github.com/uhyo/eslint-plugin-import-access&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;plugin-import-access&lt;/code&gt;&lt;/a&gt;. It forbids importing symbols with an &lt;code dir=&quot;auto&quot;&gt;@private&lt;/code&gt; JSDoc tag from other modules, and forbids importing symbols with an &lt;code dir=&quot;auto&quot;&gt;@package&lt;/code&gt; tag if the importing file is not in the same folder or one of its subfolders.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://next.biomejs.dev/linter/rules/use-import-extensions/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;useImportExtensions&lt;/code&gt;&lt;/a&gt; has been improved because it can now determine the actual extension that needs to be used for an import, instead of guessing based on hueristics.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finally, we’ve also designed the multi-file analysis with monorepos in mind. While full monorepo support may not make it in time for the 2.0 release, we expect to be able to deliver more on this front soon.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;nofloatingpromises&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noFloatingPromises&lt;/code&gt;&lt;/h3&gt;&lt;a href=&quot;#nofloatingpromises&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “noFloatingPromises”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;With Biome’s linter we have always strived to provide a battery-included approach to linting. This means we’re not just aiming to replace ESLint, but also its plugins. One of the hardest plugins to replace is &lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;typescript-eslint&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Biome has featured some rules from &lt;code dir=&quot;auto&quot;&gt;typescript-eslint&lt;/code&gt; for a while now, but we could never replace all rules, because they relied on type information for their analysis. And in order to get type information, &lt;code dir=&quot;auto&quot;&gt;typescript-eslint&lt;/code&gt; relies on &lt;code dir=&quot;auto&quot;&gt;tsc&lt;/code&gt; itself, which is rather slow and also complicates setup.&lt;/p&gt;
&lt;p&gt;This is about to change. With Biome 2.0, we’re introducing a first version of the &lt;a href=&quot;https://next.biomejs.dev/linter/rules/no-floating-promises&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noFloatingPromises&lt;/code&gt;&lt;/a&gt; rule, one of the most-requested rules that relies on type information. In fairness, we should not consider it more than a proof-of-concept right now, because there are some notable limitations to its capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It doesn’t understand complex types yet.&lt;/li&gt;
&lt;li&gt;It cannot do type inference yet.&lt;/li&gt;
&lt;li&gt;It can currently only analyse types that occur in the same file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Still, its capabilities are sufficient to catch some of the low-hanging fruit. Consider this small snippet:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;example.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;returnsPromise&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;--0:#919F9F;--1:#5F636F&quot;&gt;/* ... */&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;returnsPromise&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;then&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; {});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt; {});&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;It will trigger the following diagnostic:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;example.js:3:1 lint/nursery/noFloatingPromises ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;ℹ A “floating” Promise was found, meaning it is not properly handled and could lead to ignored errors or unexpected behavior.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;1 │ async function returnsPromise() { /* ... */ }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;2 │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;&gt; 3 │ returnsPromise().then(() =&gt; {});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;5 │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;ℹ This happens when a Promise is not awaited, lacks a .catch or .then rejection handler, or is not explicitly ignored using the void operator.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt; 3 │ returnsPromise().then(() =&gt; {});      │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^    5 │  ℹ This happens when a Promise is not awaited, lacks a .catch or .then rejection handler, or is not explicitly ignored using the void operator.&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;As you can guess, we intend to expand this rule’s capabilities over time. And with our new multi-file analysis in place, we expect to be able to make serious strides with this. Stay tuned for more announcements on this front!&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;import-organizer-revamp&quot;&gt;Import Organizer Revamp&lt;/h3&gt;&lt;a href=&quot;#import-organizer-revamp&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Import Organizer Revamp”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;In Biome 1.x, our Import Organizer had several limitations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Groups of imports or exports would be considered separate &lt;em&gt;chunks&lt;/em&gt;, meaning they would be sorted independently. This meant the following &lt;strong&gt;didn’t work&lt;/strong&gt; as expected:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;example.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { lib2 } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;library2&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { util } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;./utils.js&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { lib1 } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;library1&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;It would correctly sort &lt;code dir=&quot;auto&quot;&gt;&quot;library1&quot;&lt;/code&gt; to be placed above &lt;code dir=&quot;auto&quot;&gt;&quot;./utils.js&quot;&lt;/code&gt;, but it wouldn’t be able to
carry it over the newline to the top. What we got was this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;organizer_v1.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { lib2 } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;library2&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { lib1 } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;library1&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { util } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;./utils.js&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;But instead, what we really wanted was this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;organizer_v2.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { lib1 } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;library1&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { lib2 } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;library2&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { util } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;./utils.js&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Separate imports from the same module wouldn’t be merged. Consider the following example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;example.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { util1 } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;./utils.js&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { util2 } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;./utils.js&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Nothing would be done to merge these import statements, whereas what we would have wanted was this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;organizer_v2.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { util1, util2 } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;./utils.js&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No custom ordering could be configured. Maybe you didn’t really like the default approach of ordering by “distance” from the source file that you’re importing from. Maybe you wanted to organise like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;organizer_v2.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { open } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;node:fs&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { internalLib1 } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;@company/library1&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { internalLib2 } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;@company/library2&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { lib1 } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;library1&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In Biome 2.0, all these limitations are lifted. In fact, if you look at the examples above, all snippets labeled &lt;code dir=&quot;auto&quot;&gt;organizer_v2.js&lt;/code&gt; can be produced just like that by our new import organizer.&lt;/p&gt;
&lt;p&gt;Other improvements include support for organizing &lt;code dir=&quot;auto&quot;&gt;export&lt;/code&gt; statements, support for “detached” comments for explicitly separating import chunks if necessary, and import attribute sorting.&lt;/p&gt;
&lt;p&gt;You can find the documentation on the new import organizer at &lt;a href=&quot;https://next.biomejs.dev/assist/actions/organize-imports/&quot;&gt;https://next.biomejs.dev/assist/actions/organize-imports/&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;assists&quot;&gt;Assists&lt;/h3&gt;&lt;a href=&quot;#assists&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Assists”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The Import Organizer was always a bit of a special case in Biome. It was neither part of the linter, nor of the formatter. This was because we didn’t want it to show diagnostics the way the linter does, while its organizing features went beyond what we expect from the formatter.&lt;/p&gt;
&lt;p&gt;In Biome 2.0, we have generalised such use cases in the form of Biome Assist. The assist is meant to provide &lt;strong&gt;actions&lt;/strong&gt;, which are similar to the &lt;em&gt;fixes&lt;/em&gt; in lint rules, but without the diagnostics.&lt;/p&gt;
&lt;p&gt;The Import Organizer has become an assist, but we’ve started using this approach for new assists too: &lt;a href=&quot;https://next.biomejs.dev/assist/actions/use-sorted-keys/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;useSortedKeys&lt;/code&gt;&lt;/a&gt; can sort keys in object literals, while &lt;a href=&quot;https://next.biomejs.dev/assist/actions/use-sorted-attributes/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;useSortedAttributes&lt;/code&gt;&lt;/a&gt; can sort attributes in JSX.&lt;/p&gt;
&lt;p&gt;For more information about assists, see: &lt;a href=&quot;https://next.biomejs.dev/assist/&quot;&gt;https://next.biomejs.dev/assist/&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;improved-suppressions&quot;&gt;Improved suppressions&lt;/h3&gt;&lt;a href=&quot;#improved-suppressions&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Improved suppressions”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;In addition to the &lt;code dir=&quot;auto&quot;&gt;// biome-ignore&lt;/code&gt; comments we already supported, we now support &lt;code dir=&quot;auto&quot;&gt;// biome-ignore-all&lt;/code&gt; for suppressing a lint rule or the formatter in an entire file.&lt;/p&gt;
&lt;p&gt;We also added support for suppression ranges using &lt;code dir=&quot;auto&quot;&gt;// biome-ignore-start&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;// biome-ignore-end&lt;/code&gt;. Note that &lt;code dir=&quot;auto&quot;&gt;// biome-ignore-end&lt;/code&gt; is optional in case you want to let a range run until the end of the file.&lt;/p&gt;
&lt;p&gt;For more information about suppressions, see: &lt;a href=&quot;https://next.biomejs.dev/linter/#suppress-lint-rules&quot;&gt;https://next.biomejs.dev/linter/#suppress-lint-rules&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;html-formatter&quot;&gt;HTML formatter&lt;/h3&gt;&lt;a href=&quot;#html-formatter&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “HTML formatter”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;After a few months of hard work, we are happy to announce that the HTML formatter is now ready for users to try out and start reporting bugs! This is a huge step towards Biome fully supporting HTML-ish templating languages used in frameworks like Vue and Svelte.&lt;/p&gt;
&lt;p&gt;The HTML formatter only touches actual &lt;code dir=&quot;auto&quot;&gt;.html&lt;/code&gt; files for now, so no formatting of html in &lt;code dir=&quot;auto&quot;&gt;.vue&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;.svelte&lt;/code&gt; files yet. It also won’t format embedded languages like JavaScript or CSS yet. HTML’s options like &lt;code dir=&quot;auto&quot;&gt;attributePosition&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;bracketSameLine&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;whitespaceSensitivity&lt;/code&gt; have been implemented.&lt;/p&gt;
&lt;p&gt;The HTML formatter is still pretty experimental, so it will remain &lt;strong&gt;disabled by default for the full 2.0 release&lt;/strong&gt;. At the time of writing, Biome is able to parse the grand majority of Prettier’s HTML tests, and format 46/124 of them correctly. Despite not matching Prettier yet, we’re pretty confident that it &lt;em&gt;should&lt;/em&gt; output documents that are formatted adequately without destroying anything. If you find a case where it doesn’t, &lt;a href=&quot;https://github.com/biomejs/biome/issues&quot;&gt;please let us know&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;You can enable the HTML formatter by adding the following to your config file:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;html&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;formatter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;new-rules&quot;&gt;New rules&lt;/h3&gt;&lt;a href=&quot;#new-rules&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “New rules”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Several new rules have added since v1.9:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://next.biomejs.dev/linter/rules/no-await-in-loop&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noAwaitInLoop&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://next.biomejs.dev/linter/rules/no-bitwise-operators/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noBitwiseOperators&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://next.biomejs.dev/linter/rules/no-destructured-props/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noDestructuredProps&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://next.biomejs.dev/linter/rules/no-floating-promises&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noFloatingPromises&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://next.biomejs.dev/linter/rules/no-import-cycles&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noImportCycles&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://next.biomejs.dev/linter/rules/no-private-imports/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noPrivateImports&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://next.biomejs.dev/linter/rules/no-ts-ignore&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noTsIgnore&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://next.biomejs.dev/linter/rules/no-unwanted-polyfillio&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noUnwantedPolyfillio&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://next.biomejs.dev/linter/rules/use-consistent-object-definition/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;useConsistentObjectDefinition&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://next.biomejs.dev/linter/rules/use-for-component/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;useForComponent&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;/h3&gt;&lt;a href=&quot;#miscellaneous&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Miscellaneous”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BREAKING:&lt;/strong&gt; The configuration fields &lt;code dir=&quot;auto&quot;&gt;include&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;ignore&lt;/code&gt; have been replaced with a single &lt;code dir=&quot;auto&quot;&gt;includes&lt;/code&gt; field.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BREAKING:&lt;/strong&gt; Reworked some recommended rules recommended to be less pedantic and blocking. This is a breaking change if your project relied on those rules to block the CI in case of violations. If you used the &lt;code dir=&quot;auto&quot;&gt;migrate&lt;/code&gt; command, the behaviour should remain as before.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BREAKING:&lt;/strong&gt; The &lt;code dir=&quot;auto&quot;&gt;style&lt;/code&gt; rules aren’t recommended anymore. If you used the &lt;code dir=&quot;auto&quot;&gt;migrate&lt;/code&gt; command, the behaviour should remain as before.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BREAKING:&lt;/strong&gt; Removed deprecated rules:
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;noConsoleLog&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;noInvalidNewBuiltin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;noNewSymbol&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;useShorthandArrayType&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;useSingleCaseStatement&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BREAKING:&lt;/strong&gt; Many deprecated options, including some that still referenced the old Rome name, have been removed.&lt;/li&gt;
&lt;li&gt;Added a new option &lt;code dir=&quot;auto&quot;&gt;javascript.parser.jsxEverywhere&lt;/code&gt; to control whether Biome should expect JSX syntax in &lt;code dir=&quot;auto&quot;&gt;.js&lt;/code&gt;/&lt;code dir=&quot;auto&quot;&gt;.mjs&lt;/code&gt;/&lt;code dir=&quot;auto&quot;&gt;.cjs&lt;/code&gt; files.&lt;/li&gt;
&lt;li&gt;Improved monorepo support: The rule &lt;a href=&quot;https://biomejs.dev/linter/rules/no-undeclared-dependencies/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noUndeclaredDependencies&lt;/code&gt;&lt;/a&gt; now works correctly in monorepos by using the nearest &lt;code dir=&quot;auto&quot;&gt;package.json&lt;/code&gt; file, instead of only the root one.&lt;/li&gt;
&lt;li&gt;We have enabled support for &lt;code dir=&quot;auto&quot;&gt;.editorconfig&lt;/code&gt; files by default.&lt;/li&gt;
&lt;li&gt;Changed default formatting of &lt;code dir=&quot;auto&quot;&gt;package.json&lt;/code&gt; to align better with formatting by package managers.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;and-more&quot;&gt;And more!&lt;/h3&gt;&lt;a href=&quot;#and-more&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “And more!”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;For the full list of changes, please refer to our &lt;a href=&quot;https://biomejs.dev/internals/changelog/&quot;&gt;changelog&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Roadmap 2025 and Biome 2.0</title><link>https://biomejs.dev/zh-cn/blog/roadmap-2025/</link><guid isPermaLink="true">https://biomejs.dev/zh-cn/blog/roadmap-2025/</guid><pubDate>Wed, 22 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today we’re happy to share our plans for Biome 2.0 as well as the rest of our roadmap for 2025. But before we dive into what’s coming, let’s do a quick recap of the major developments in 2024.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-recap-biome-in-2024&quot;&gt;🎆 Recap: Biome in 2024&lt;/h2&gt;&lt;a href=&quot;#-recap-biome-in-2024&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “🎆 Recap: Biome in 2024”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;2024 was a great year for Biome. Let’s see what happened:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We released 4 new “minor” Biome versions, from 1.6 through 1.9, with plenty of useful features:
&lt;ul&gt;
&lt;li&gt;New &lt;code dir=&quot;auto&quot;&gt;biome search&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;biome explain&lt;/code&gt; commands, while the &lt;code dir=&quot;auto&quot;&gt;biome migrate&lt;/code&gt; command was significantly expanded to help users coming from ESLint and Prettier.&lt;/li&gt;
&lt;li&gt;Added support for &lt;strong&gt;CSS&lt;/strong&gt; and &lt;strong&gt;GraphQL&lt;/strong&gt; formatting and linting.&lt;/li&gt;
&lt;li&gt;Partial support for &lt;strong&gt;Astro&lt;/strong&gt;, &lt;strong&gt;Svelte&lt;/strong&gt; and &lt;strong&gt;Vue&lt;/strong&gt; files.&lt;/li&gt;
&lt;li&gt;The ability to let configuration files extend from one another, which is especially useful in monorepo and larger organizational setups.&lt;/li&gt;
&lt;li&gt;Custom &lt;a href=&quot;https://biomejs.dev/reference/reporters/&quot;&gt;reporters&lt;/a&gt; for better CI integration and machine-readable output.&lt;/li&gt;
&lt;li&gt;Support for &lt;code dir=&quot;auto&quot;&gt;.editorconfig&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;We added countless new lint rules and miscellaneous fixes and improvements, with a special shoutout to &lt;a href=&quot;https://biomejs.dev/linter/rules/use-sorted-classes/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;useSortedClasses&lt;/code&gt;&lt;/a&gt; that marks the beginning of dedicated &lt;strong&gt;Tailwind&lt;/strong&gt; support.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Our &lt;a href=&quot;https://github.com/biomejs/biome/blob/main/CONTRIBUTING.md#current-members&quot;&gt;team of maintainers&lt;/a&gt; has grown from 10 members at the start of 2024 to 18 today.&lt;/li&gt;
&lt;li&gt;We won the &lt;strong&gt;Productivity Booster&lt;/strong&gt; award of the &lt;a href=&quot;https://osawards.com/javascript/2024&quot;&gt;OS Awards 2024&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;We gained several new &lt;a href=&quot;https://github.com/biomejs/biome#sponsors&quot;&gt;sponsors&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;We improved our IDE support on multiple fronts:
&lt;ul&gt;
&lt;li&gt;A new Zed extension has been contributed to the project.&lt;/li&gt;
&lt;li&gt;Our VS Code extension has seen an overhaul that’s currently in Pre-Release.&lt;/li&gt;
&lt;li&gt;And even though this happened after the new year, we shouldn’t neglect to mention that our IDEA plugin has seen a major update too, which is now available in the nightly channel.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;-enterprise-support&quot;&gt;💳 Enterprise Support&lt;/h2&gt;&lt;a href=&quot;#-enterprise-support&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “💳 Enterprise Support”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;One more thing that we are happy to announce is that as of January 2025, we are also offering &lt;a href=&quot;https://biomejs.dev/enterprise&quot;&gt;Enterprise Support&lt;/a&gt; for Biome. Hopefully this will allow some of our contributors to spend more of their time and effort towards Biome!&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;️-biome-20&quot;&gt;⏭️ Biome 2.0&lt;/h2&gt;&lt;a href=&quot;#️-biome-20&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “⏭️ Biome 2.0”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Right now our team is busy preparing for the Biome 2.0 release. Because our project is still run by volunteer contributors, we do not have an ETA for you. But we can share some of the goodies that will be coming:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Plugins&lt;/strong&gt;. A long-requested feature, we started the development of Biome plugins after an &lt;a href=&quot;https://github.com/biomejs/biome/discussions/1762&quot;&gt;RFC process&lt;/a&gt; that started in January 2024. Biome 2.0 will feature the first fruits of this labor: Users will be able to create their own lint rules using &lt;a href=&quot;https://docs.grit.io/language/overview&quot;&gt;GritQL&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domains&lt;/strong&gt;. &lt;a href=&quot;https://github.com/biomejs/biome/blob/main/.changeset/introduce_the_domains_linter_feature.md&quot;&gt;Domains&lt;/a&gt; are a configuration feature that makes it easy for users to enable or disable all rules related to a specific domain, such as React, Next.js or testing frameworks. It also allows Biome to automatically enable recommended domain-specific rules based on the dependencies listed in your &lt;code dir=&quot;auto&quot;&gt;package.json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monorepo Support&lt;/strong&gt;. While support for monorepos was already improved with our &lt;code dir=&quot;auto&quot;&gt;extends&lt;/code&gt; feature in &lt;code dir=&quot;auto&quot;&gt;biome.json&lt;/code&gt;, many weak spots remained. Biome 2.0 has an improved architecture based on an internal &lt;code dir=&quot;auto&quot;&gt;ProjectLayout&lt;/code&gt; that should resolve most of these.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Suppressions&lt;/strong&gt;. Biome already allowed &lt;em&gt;suppression&lt;/em&gt; of linter diagnostics through the use of &lt;code dir=&quot;auto&quot;&gt;// biome-ignore&lt;/code&gt; suppression comments. With Biome 2.0 we’re adding support for &lt;code dir=&quot;auto&quot;&gt;// biome-ignore-all&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;// biome-ignore-start&lt;/code&gt;/&lt;code dir=&quot;auto&quot;&gt;biome-ignore-end&lt;/code&gt; comments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-file analysis&lt;/strong&gt;. Last but not least, we’re adding true &lt;a href=&quot;https://github.com/biomejs/biome/issues/3307&quot;&gt;Multi-file support&lt;/a&gt; to Biome 2.0. This means that our lint rules will be able to query information from other files, which will enable much more powerful lint rules.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;-2025-roadmap&quot;&gt;🌌 2025 roadmap&lt;/h2&gt;&lt;a href=&quot;#-2025-roadmap&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “🌌 2025 roadmap”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Again, we should preface a disclaimer here: We’re a community-driven project, so we cannot promise to deliver any of the features below. But that doesn’t mean we don’t have a wishlist of things we would like to work on in 2025 😉&lt;/p&gt;
&lt;p&gt;This year we will focus on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/biomejs/biome/issues/4726&quot;&gt;&lt;strong&gt;HTML support&lt;/strong&gt;&lt;/a&gt;. No toolchain for the web is complete without it, and we’re already working on it!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/biomejs/biome/issues/3334&quot;&gt;&lt;strong&gt;Embedded languages&lt;/strong&gt;&lt;/a&gt;. CSS or GraphQL snippets inside a template literal in a JavaScript file? JavaScript or CSS inside an HTML file? Biome should be able to handle these as well, and we’ll try to make it happen. This should also lead to better support for &lt;strong&gt;Astro&lt;/strong&gt;, &lt;strong&gt;Svelte&lt;/strong&gt;, and &lt;strong&gt;Vue&lt;/strong&gt; than we have today.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/biomejs/biome/issues/3187&quot;&gt;&lt;strong&gt;Type inference&lt;/strong&gt;&lt;/a&gt;. This was already a wish for 2024, and we’re busy filling in the prerequisites such as multi-file analysis. There’s even an &lt;a href=&quot;https://github.com/biomejs/biome/pull/4911&quot;&gt;early proof-of-concept&lt;/a&gt; for a &lt;code dir=&quot;auto&quot;&gt;noFloatingPromises&lt;/code&gt; rule. This year we want to ship a real version of &lt;code dir=&quot;auto&quot;&gt;noFloatingPromises&lt;/code&gt;, and hopefully dabble further into type inference.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.d.ts generation&lt;/strong&gt;. While we’re on the subject of types, we would also like to create our first transformation: generating &lt;code dir=&quot;auto&quot;&gt;.d.ts&lt;/code&gt; files from TypeScript sources. Initially we would only focus on TypeScript using &lt;a href=&quot;https://www.typescriptlang.org/tsconfig/#isolatedModules&quot;&gt;Isolated Modules&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSDoc support&lt;/strong&gt;. Can we use &lt;a href=&quot;https://jsdoc.app/&quot;&gt;JSDoc&lt;/a&gt; comments as a source of type information too? If we are able to do type inference, this seems an opportunity we cannot pass on.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markdown support&lt;/strong&gt;. Some work &lt;a href=&quot;https://github.com/biomejs/biome/issues/3718&quot;&gt;has already started&lt;/a&gt; for it and it would be a nice addition to round out our language support.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;More plugins&lt;/strong&gt;. While Biome 2.0 will launch with the ability to create lint rules in GritQL, that’s only the tip of the iceberg. We know our users want more, and we certainly have ideas for more types of plugins. We’ll first collect feedback from the 2.0 release, and then we’ll decide which plugin area we’ll focus on next.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;️-your-support&quot;&gt;❤️ Your Support&lt;/h2&gt;&lt;a href=&quot;#️-your-support&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “❤️ Your Support”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;We would like to thank our users and sponsors alike for their amazing support in 2024! Without you, this project would not be what it is today.&lt;/p&gt;
&lt;p&gt;Hopefully we can also count on your support for the coming year. If you would like to help out, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/biomejs/biome/blob/main/CONTRIBUTING.md&quot;&gt;Become a contributor&lt;/a&gt;. Please help us to build those features!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/biomejs/biome/tree/main#funding&quot;&gt;Sponsor us&lt;/a&gt;. Ask your company to sponsor us: Biome is so fast that it can reduce your company’s CI times, improve developer productivity, and save money. Sponsorships also create exposure for your company.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/enterprise/&quot;&gt;Hire us&lt;/a&gt;. Is Biome missing anything that prevents your company from adopting it? You can make it happen by hiring us! Any company that hires a contributor to work on Biome for 3 months or more automatically applies for sponsorship benefits.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/biomejs/website/&quot;&gt;Improve our documentation&lt;/a&gt;. Write guides or recipes, or help to keep our translations up-to-date for non-English speakers.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Biome v1.9 Anniversary Release</title><link>https://biomejs.dev/zh-cn/blog/biome-v1-9/</link><guid isPermaLink="true">https://biomejs.dev/zh-cn/blog/biome-v1-9/</guid><pubDate>Thu, 12 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today we’re excited to announce the release of Biome v1.9 and to celebrate the first anniversary of Biome 🎊 Let’s take a look back at the first year of Biome and then explore the new features in Biome 1.9.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;one-year-of-biome&quot;&gt;One year of Biome&lt;/h2&gt;&lt;a href=&quot;#one-year-of-biome&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “One year of Biome”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;We officially &lt;a href=&quot;https://biomejs.dev/blog/annoucing-biome/&quot;&gt;announced Biome&lt;/a&gt; on 29 August 2023. From its inception, Biome has been a free open source software driven by its community. We have a &lt;a href=&quot;https://github.com/biomejs/biome/blob/main/GOVERNANCE.md&quot;&gt;governance&lt;/a&gt; and a solid base of contributors to ensure the longevity of the project.&lt;/p&gt;
&lt;p&gt;In October 2023, one of the creators of &lt;a href=&quot;https://prettier.io/&quot;&gt;Prettier&lt;/a&gt; launched &lt;a href=&quot;https://console.algora.io/challenges/prettier&quot;&gt;the Prettier challenge&lt;/a&gt; that rewarded any project written in Rust that passes at least 95% of the Prettier tests for JavaScript. The aim of this challenge was to create a fast competitor to Prettier in order to stimulate improvements in Prettier’s performance. We quickly organized ourselves to get there as soon as possible. By the end of November, we &lt;a href=&quot;https://biomejs.dev/blog/biome-wins-prettier-challenge/&quot;&gt;surpassed this goal&lt;/a&gt; by passing 97% of the Prettier tests for JavaScript, as well as TypeScript, JSX and TSX!
The Biome formatter is really fast: it can format a large code base in less than 1 second. In the process, we identified several formatting issues in Prettier. This has also pushed contributions to Prettier that greatly improved its performance. This challenge was a win for the whole web ecosystem!&lt;/p&gt;
&lt;p&gt;By winning the challenge, we brought Biome to light. Many developers were excited to discover a fast alternative to Prettier, but also a fast alternative to &lt;a href=&quot;https://eslint.org/&quot;&gt;ESLint&lt;/a&gt;!
The approach of bundling both a formatter and a linter in one tool provides a unified and consistent experience with minimal configuration. Biome has been quickly adopted by many projects, including big ones such as &lt;a href=&quot;https://ant.design/&quot;&gt;Ant Design&lt;/a&gt;, &lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt;, &lt;a href=&quot;https://sentry.io/&quot;&gt;Sentry&lt;/a&gt;, &lt;a href=&quot;https://daisyui.com/&quot;&gt;daisyUI&lt;/a&gt;, &lt;a href=&quot;https://refine.dev/&quot;&gt;Refine&lt;/a&gt;, &lt;a href=&quot;https://discord.com/&quot;&gt;Discord&lt;/a&gt;, &lt;a href=&quot;https://www.pulumi.com/&quot;&gt;Pulumi&lt;/a&gt;, &lt;a href=&quot;https://labelstud.io/&quot;&gt;Label Studio&lt;/a&gt;, &lt;a href=&quot;https://spicetify.app/&quot;&gt;Spicetify&lt;/a&gt;, &lt;a href=&quot;https://apify.com/&quot;&gt;Apify&lt;/a&gt;, &lt;a href=&quot;https://slint.dev/&quot;&gt;Slint&lt;/a&gt;, &lt;a href=&quot;https://rspack.dev/&quot;&gt;Rspack&lt;/a&gt;, &lt;a href=&quot;https://fluidframework.com/&quot;&gt;FluidFramework&lt;/a&gt;, &lt;a href=&quot;https://sourcegraph.com/search?q=file:biome.json&amp;#x26;patternType=literal&amp;#x26;sm=0&quot;&gt;and others&lt;/a&gt;. Biome surpassed 2.7 million monthly NPM downloads in August 2024.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Biome monthly NPM downloads&quot; width=&quot;1062&quot; height=&quot;340&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://biomejs.dev/_astro/biome-monthly-npm-downloads.BDqAA5ti_Z1kngIa.svg&quot;&gt;&lt;/p&gt;
&lt;p&gt;We gained sponsorship, notably &lt;a href=&quot;https://shiguredo.jp/&quot;&gt;Shiguredo&lt;/a&gt;, &lt;a href=&quot;https://l2beat.com/&quot;&gt;l2BEAT&lt;/a&gt;, &lt;a href=&quot;https://www.phoenixlabs.dev/&quot;&gt;Phoenix Labs&lt;/a&gt;, &lt;a href=&quot;https://kanamekey.com/&quot;&gt;KANAME&lt;/a&gt;, &lt;a href=&quot;https://nanabit.dev/&quot;&gt;Nanabit&lt;/a&gt;, &lt;a href=&quot;https://vital.io/&quot;&gt;Vital&lt;/a&gt;, &lt;a href=&quot;https://coderabbit.ai/&quot;&gt;CodeRabbit&lt;/a&gt;, and &lt;a href=&quot;https://forge42.dev/&quot;&gt;Forge42&lt;/a&gt;. These sponsorships have helped move the project forward by rewarding contributors and even paying for maintenance work in recent months. We would like to reward and encourage more contributions, then if you use Biome, please consider &lt;a href=&quot;https://opencollective.com/biome&quot;&gt;sponsoring us&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;We also gained many new contributors. Contributors who have made a significant contribution are regularly invited to join the Biome team. We started with a team of 5 core contributors, and we are now a team of &lt;a href=&quot;https://github.com/biomejs/biome/blob/main/CONTRIBUTING.md#current-members&quot;&gt;8 core contributors and 10 maintainers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In June 2024, Biome won the &lt;a href=&quot;https://osawards.com/javascript/2024&quot;&gt;JSNation’s productivity booster Open Source Award&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;biome-v19&quot;&gt;Biome v1.9&lt;/h2&gt;&lt;a href=&quot;#biome-v19&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Biome v1.9”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;As we celebrate Biome’s first year, we’re pleased to announce the release of Biome 1.9, which brings many new features and bug fixes.&lt;/p&gt;
&lt;p&gt;Once you have upgraded to Biome v1.9.0, migrate your Biome configuration to the new version by running the &lt;code dir=&quot;auto&quot;&gt;migrate&lt;/code&gt; command:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;migrate&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--write&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;stable-css-formatter-and-linter&quot;&gt;Stable CSS formatter and linter&lt;/h3&gt;&lt;a href=&quot;#stable-css-formatter-and-linter&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Stable CSS formatter and linter”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;We are thrilled to announce that Biome’s CSS formatter and linter are now considered stable and are &lt;strong&gt;enabled by default&lt;/strong&gt;. Do note that Biome only parses &lt;strong&gt;standard CSS syntax&lt;/strong&gt; so far, and doesn’t yet handle CSS dialects such as SCSS. As this is brand new functionality, you may also still run into some rough edges. Please report any problems you encounter!&lt;/p&gt;
&lt;p&gt;The CSS linter provides 15 stable lint rules that were ported from &lt;a href=&quot;https://stylelint.io/&quot;&gt;stylelint&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-generic-font-names/&quot;&gt;a11y/useGenericFontNames&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-invalid-direction-in-linear-gradient/&quot;&gt;correctness/noInvalidDirectionInLinearGradient&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-invalid-grid-areas/&quot;&gt;correctness/noInvalidGridAreas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-invalid-position-at-import-rule/&quot;&gt;correctness/noInvalidPositionAtImportRule&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-unknown-function/&quot;&gt;correctness/noUnknownFunction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-unknown-media-feature-name/&quot;&gt;correctness/noUnknownMediaFeatureName&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-unknown-property/&quot;&gt;correctness/noUnknownProperty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-unknown-unit/&quot;&gt;correctness/noUnknownUnit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-unmatchable-anb-selector/&quot;&gt;correctness/noUnmatchableAnbSelector&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-duplicate-at-import-rules/&quot;&gt;suspicious/noDuplicateAtImportRules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-duplicate-font-names/&quot;&gt;suspicious/noDuplicateFontNames&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-duplicate-selectors-keyframe-block/&quot;&gt;suspicious/noDuplicateSelectorsKeyframeBlock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-empty-block/&quot;&gt;suspicious/noEmptyBlock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-important-in-keyframe/&quot;&gt;suspicious/noImportantInKeyframe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-shorthand-property-overrides/&quot;&gt;suspicious/noShorthandPropertyOverrides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It also provides the following nursery lint rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-duplicate-custom-properties/&quot;&gt;nursery/noDuplicateCustomProperties&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-irregular-whitespace/&quot;&gt;nursery/noIrregularWhitespace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-unknown-pseudo-class/&quot;&gt;nursery/noUnknownPseudoClass&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-unknown-pseudo-element/&quot;&gt;nursery/noUnknownPseudoElement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-value-at-rule/&quot;&gt;nursery/noValueAtRule&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you don’t want Biome to format and lint your CSS files, you can disable the CSS formatter and linter in the Biome configuration file:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;css&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;formatter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;linter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;or on the command line:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--css-formatter-enabled=false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;lint&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--css-linter-enabled=false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;check&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--css-formatter-enabled=false&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--css-linter-enabled=false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Special thanks to &lt;a href=&quot;https://github.com/denbezrukov&quot;&gt;Denis Bezrukov @denbezrukov&lt;/a&gt;, &lt;a href=&quot;https://github.com/faultyserver&quot;&gt;Jon Egeland @faultyserver&lt;/a&gt; and &lt;a href=&quot;https://github.com/togami2864&quot;&gt;Yoshiaki Togami @togami2864&lt;/a&gt; for coordinating and implementing most of the features related to CSS.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;stable-graphql-formatter-and-linter&quot;&gt;Stable GraphQL formatter and linter&lt;/h3&gt;&lt;a href=&quot;#stable-graphql-formatter-and-linter&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Stable GraphQL formatter and linter”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Another brand new feature: Biome now formats and lints &lt;a href=&quot;https://graphql.org/&quot;&gt;GraphQL&lt;/a&gt; files by default.&lt;/p&gt;
&lt;p&gt;For now, Biome provides only two nursery lint rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-duplicate-fields/&quot;&gt;nursery/noDuplicateFields&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-deprecated-reason/&quot;&gt;nursery/useDeprecatedReason&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you don’t want Biome to format and lint your GraphQL files, you can disable the GraphQL formatter and linter in the Biome configuration file:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;graphql&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;formatter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;linter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;or on the command line:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--graphql-formatter-enabled=false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;lint&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--graphql-linter-enabled=false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;check&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--graphql-formatter-enabled=false&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--css-linter-enabled=false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Special thanks to &lt;a href=&quot;https://www.swan.io/&quot;&gt;Swan&lt;/a&gt; that funded the implementation of the GraphQL formatter and to &lt;a href=&quot;https://github.com/vohoanglong0107&quot;&gt;Võ Hoàng Long @vohoanglong0107&lt;/a&gt; for implementing most of the features related to GraphQL.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;search-command&quot;&gt;Search command&lt;/h3&gt;&lt;a href=&quot;#search-command&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Search command”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Back in February, one of our Core Contributors published &lt;a href=&quot;https://github.com/biomejs/biome/discussions/1762&quot;&gt;a proposal for plugin support&lt;/a&gt;. One of the highlights was the use of GritQL as a foundation for our plugin system.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.grit.io/language/overview&quot;&gt;GritQL&lt;/a&gt; is a powerful query language that lets you do structural searches on your codebase. This means that trivia such as whitespace or even the type of string quotes used will be ignored in your search query. It also has many features for querying the structure of your code, making it much more elegant for searching code than regular expressions.&lt;/p&gt;
&lt;p&gt;Integrating a query language such as GritQL is no easy feat, and throughout the year we published &lt;a href=&quot;https://github.com/biomejs/biome/discussions/2286&quot;&gt;multiple&lt;/a&gt; &lt;a href=&quot;https://github.com/biomejs/biome/discussions/2585&quot;&gt;status&lt;/a&gt; &lt;a href=&quot;https://github.com/biomejs/biome/discussions/3392&quot;&gt;updates&lt;/a&gt;. Today, we release the first product of this effort: A new &lt;code dir=&quot;auto&quot;&gt;biome search&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;While we believe this command may already be useful to users in some situations (especially when it gets integrated in our IDE extensions!), this command is really a stepping stone towards our plugin efforts. By allowing our users to try it out in a first iteration, we hope to gain insight into the type of queries you want to do, as well as the bugs we need to focus on.&lt;/p&gt;
&lt;p&gt;For now, the &lt;code dir=&quot;auto&quot;&gt;search&lt;/code&gt; command is explicitly marked as &lt;strong&gt;EXPERIMENTAL&lt;/strong&gt;, since many limitations are yet to be fixed or explored. Keep this in mind when you try it out, and please let us know what you think!
For an overview of specific limitations, please see the &lt;a href=&quot;https://github.com/biomejs/biome/issues/2582&quot;&gt;dedicated issue&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Even though there are still plenty of limitations, we do believe the integration has progressed far enough that we can shift our focus towards the integration of actual plugins. We cannot yet promise a timeline, but we’ll keep you posted!&lt;/p&gt;
&lt;p&gt;PS.: GritQL escapes code snippets using backticks, but most shells interpret backticks as command invocations. To avoid this, it’s best to put single quotes around your Grit queries. For instance, the following command search for all &lt;code dir=&quot;auto&quot;&gt;console.log&lt;/code&gt; invocations:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;search&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;`console.$method($args)` where { $method &amp;#x3C;: or { `log`, `info` } }&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;./&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;./benchmark/bench.js:38:3 search ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  &lt;strong&gt;38 │ 	&lt;span style=&quot;color: #3aa0d7;&quot;&gt;console.info(`\n⌛ repository: ${name}`);&lt;/span&gt;&lt;/strong&gt;

./packages/@biomejs/js-api/scripts/update-nightly-version.mjs:27:1 search ━━━━━━━━━━━━━━

  &lt;strong&gt;27 │  &lt;span style=&quot;color: #3aa0d7;&quot;&gt;console.log(`version=${version}`);&lt;/span&gt;&lt;/strong&gt;

&lt;span style=&quot;color: #3aa0d7;&quot;&gt;Searched 67 files in 1034ms. Found 2 matches.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Special thanks to &lt;a href=&quot;https://grit.io&quot;&gt;Grit&lt;/a&gt; for open-sourcing GritQL, &lt;a href=&quot;https://github.com/arendjr&quot;&gt;Arend van Beelen @arendjr&lt;/a&gt; for integrating the GritQL engine into Biome, and to &lt;a href=&quot;https://github.com/BackupMiles/&quot;&gt;@BackupMiles&lt;/a&gt; for implementing the formatting of search results in the &lt;code dir=&quot;auto&quot;&gt;biome search&lt;/code&gt; command!&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;editorconfig-support&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;.editorconfig&lt;/code&gt; support&lt;/h3&gt;&lt;a href=&quot;#editorconfig-support&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “.editorconfig support”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Biome is now able to take the &lt;a href=&quot;https://editorconfig.org/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;.editorconfig&lt;/code&gt;&lt;/a&gt; of your project into account. This is an opt-in feature. You have to turn it on in your Biome configuration file:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;biome.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;formatter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;useEditorconfig&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Note that all options specified in the Biome configuration file override the ones specified in &lt;code dir=&quot;auto&quot;&gt;.editorconfig&lt;/code&gt;. For now, only the &lt;code dir=&quot;auto&quot;&gt;.editorconfig&lt;/code&gt; at the root of your project is taken into account.&lt;/p&gt;
&lt;p&gt;Special thanks to &lt;a href=&quot;https://github.com/dyc3&quot;&gt;Carson McManus @dyc3&lt;/a&gt; for implementing this feature!&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;javascript-formatter-and-linter&quot;&gt;JavaScript formatter and linter&lt;/h3&gt;&lt;a href=&quot;#javascript-formatter-and-linter&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “JavaScript formatter and linter”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;We updated the JavaScript formatter to match &lt;a href=&quot;https://github.com/prettier/prettier/blob/main/CHANGELOG.md#333&quot;&gt;Prettier v3.3&lt;/a&gt;. The most significant change is adding parentheses around nullish coalescing in ternaries. This change adds clarity to operator precedence.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#919F9F;--1:#5D6376&quot;&gt;// Input&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;baz&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#919F9F;--1:#5D6376&quot;&gt;// Biome 1.8.3 and Prettier 3.3.2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;baz&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#919F9F;--1:#5D6376&quot;&gt;// Biome 1.9 and Prettier 3.3.3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;baz&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Regarding the linter, we stabilized the following lint rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-label-without-control/&quot;&gt;a11y/noLabelWithoutControl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-focusable-interactive/&quot;&gt;a11y/useFocusableInteractive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-semantic-elements/&quot;&gt;accessibility/useSemanticElements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-useless-string-concat/&quot;&gt;complexity/noUselessStringConcat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-useless-undefined-initialization/&quot;&gt;complexity/noUselessUndefinedInitialization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-date-now/&quot;&gt;complexity/useDateNow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-undeclared-dependencies/&quot;&gt;correctness/noUndeclaredDependencies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-invalid-builtin-instantiation/&quot;&gt;correctness/noInvalidBuiltinInstantiation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-unused-function-parameters/&quot;&gt;correctness/noUnusedFunctionParameters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-import-extensions/&quot;&gt;correctness/useImportExtensions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-top-level-regex/&quot;&gt;performance/useTopLevelRegex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-done-callback/&quot;&gt;style/noDoneCallback&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-yoda-expression/&quot;&gt;style/noYodaExpression&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-consistent-builtin-instantiation/&quot;&gt;style/useConsistentBuiltinInstantiation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-default-switch-clause/&quot;&gt;style/useDefaultSwitchClause&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-explicit-length-check/&quot;&gt;style/useExplicitLengthCheck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-throw-new-error/&quot;&gt;style/useThrowNewError&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-throw-only-error/&quot;&gt;style/useThrowOnlyError&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-console/&quot;&gt;suspicious/noConsole&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-evolving-types/&quot;&gt;suspicious/noEvolvingTypes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-misplaced-assertion/&quot;&gt;suspicious/noMisplacedAssertion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-react-specific-props/&quot;&gt;suspicious/noReactSpecificProps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-error-message/&quot;&gt;suspicious/useErrorMessage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-number-to-fixed-digits-argument/&quot;&gt;suspicious/useNumberToFixedDigitsArgument&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We added the following new rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-common-js/&quot;&gt;nursery/noCommonJs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-duplicate-custom-properties/&quot;&gt;nursery/noDuplicateCustomProperties&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/no-dynamic-namespace-import-access/&quot;&gt;nursery/noDynamicNamespaceImportAccess&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-enum/&quot;&gt;nursery/noEnum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-irregular-whitespace&quot;&gt;nursery/noIrregularWhitespace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/no-restricted-types/&quot;&gt;nursery/noRestrictedTypes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-secrets/&quot;&gt;nursery/noSecrets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-useless-escape-in-regex/&quot;&gt;nursery/noUselessEscapeInRegex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-consistent-member-accessibility/&quot;&gt;nursery/useConsistentMemberAccessibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-trim-start-end/&quot;&gt;nursery/useTrimStartEnd&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And we deprecated the following rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;correctness/noInvalidNewBuiltin&lt;/code&gt;. Use &lt;a href=&quot;https://biomejs.dev/linter/rules/no-invalid-builtin-instantiation/&quot;&gt;correctness/noInvalidBuiltinInstantiation&lt;/a&gt; instead.&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;style/useSingleCaseStatement&lt;/code&gt;. Use &lt;a href=&quot;https://biomejs.dev/linter/rules/no-switch-declarations/&quot;&gt;correctness/noSwitchDeclarations&lt;/a&gt; instead.&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;suspicious/noConsoleLog&lt;/code&gt;. Use &lt;a href=&quot;https://biomejs.dev/linter/rules/no-console/&quot;&gt;suspicious/noConsole&lt;/a&gt; instead.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our linter has now more than 250 rules!
Most of the ESLint rules and rules from some plugins have been ported. We are close to completing the port of ESLint.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;and-more&quot;&gt;And more!&lt;/h3&gt;&lt;a href=&quot;#and-more&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “And more!”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;For the full list of changes, please refer to our &lt;a href=&quot;https://biomejs.dev/internals/changelog/&quot;&gt;changelog&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;whats-next&quot;&gt;What’s next&lt;/h2&gt;&lt;a href=&quot;#whats-next&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “What’s next”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;vscode-plugin-v3&quot;&gt;VSCode plugin v3&lt;/h3&gt;&lt;a href=&quot;#vscode-plugin-v3&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “VSCode plugin v3”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/nhedger&quot;&gt;Nicolas Hedger @nhedger&lt;/a&gt; is working on a new version of our first-party VSCode plugin. This new version will improve workspace support and fix some long-standing issues.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;biome-20&quot;&gt;Biome 2.0&lt;/h3&gt;&lt;a href=&quot;#biome-20&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Biome 2.0”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;During this first year, we have discovered a number of issues that cannot be solved without introducing small breaking changes. For example, we rely on a glob library that sometimes doesn’t behave as users expect. We feel it is time to address these long-standing issues. Following our &lt;a href=&quot;https://biomejs.dev/internals/versioning/&quot;&gt;versioning philosophy&lt;/a&gt;, these small breaking changes cannot be made without releasing a major release. Therefore, the next release of Biome will be a major release: Biome 2.0. We will use this opportunity to remove deprecated features. We will make the migration smooth by using the &lt;code dir=&quot;auto&quot;&gt;biome migrate&lt;/code&gt; command.&lt;/p&gt;</content:encoded></item><item><title>Biome v1.7</title><link>https://biomejs.dev/zh-cn/blog/biome-v1-7/</link><guid isPermaLink="true">https://biomejs.dev/zh-cn/blog/biome-v1-7/</guid><pubDate>Mon, 15 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today we’re excited to announce the release of Biome v1.7!&lt;/p&gt;
&lt;p&gt;This new version provides an easy path to migrate from ESLint and Prettier. It also introduces experimental machine-readable reports for the formatter and the linter, new linter rules, and many fixes.&lt;/p&gt;
&lt;p&gt;Update Biome using the following commands:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;npm install --save-dev --save-exact @biomejs/biome@latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#d6deeb;--1:#403f53&quot;&gt;npx @biomejs/biome migrate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;migrate-from-eslint-with-a-single-command&quot;&gt;Migrate from ESLint with a single command&lt;/h2&gt;&lt;a href=&quot;#migrate-from-eslint-with-a-single-command&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Migrate from ESLint with a single command”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;This release introduces a new subcommand
&lt;code dir=&quot;auto&quot;&gt;biome migrate eslint&lt;/code&gt;. This command will read your ESLint configuration and attempt to port their settings to Biome.&lt;/p&gt;
&lt;p&gt;The subcommand is able to handle both the legacy and the flat configuration files. It supports the
&lt;code dir=&quot;auto&quot;&gt;extends&lt;/code&gt; field of the legacy configuration and loads both shared and plugin configurations!
The subcommand also migrates &lt;code dir=&quot;auto&quot;&gt;.eslintignore&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Given the following ESLint configuration:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;.eslintrc.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;extends&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;plugin:unicorn/recommended&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;plugins&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;unicorn&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;ignore_patterns&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;dist/**&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;globals&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;Global1&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;readonly&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;rules&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;eqeqeq&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;overrides&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;tests/**&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;rules&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;eqeqeq&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;off&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;And the following Biome configuration:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;biome.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;linter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;rules&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;recommended&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Run
&lt;code dir=&quot;auto&quot;&gt;biome migrate eslint --write&lt;/code&gt; to migrate your ESLint configuration to Biome. The command overwrites your initial Biome configuration. For example, it disables
&lt;code dir=&quot;auto&quot;&gt;recommended&lt;/code&gt;. This results in the following Biome configuration:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;biome.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;organizeImports&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;linter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;rules&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;recommended&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;complexity&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;noForEach&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;noStaticOnlyClass&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;noUselessSwitchCase&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;useFlatMap&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;style&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;noNegationElse&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;off&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;useForOf&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;useNodejsImportProtocol&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;useNumberNamespace&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;suspicious&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;noDoubleEquals&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;noThenProperty&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;useIsArray&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;javascript&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;globals&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;Global1&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;overrides&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;include&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;tests/**&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;linter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;rules&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;suspicious&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;noDoubleEquals&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;off&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The subcommand needs Node.js to load and resolve all the plugins and
&lt;code dir=&quot;auto&quot;&gt;extends&lt;/code&gt; configured in the ESLint configuration file. For now,
&lt;code dir=&quot;auto&quot;&gt;biome migrate eslint&lt;/code&gt; doesn’t support configuration written in YAML.&lt;/p&gt;
&lt;p&gt;We have a &lt;a href=&quot;https://biomejs.dev/linter/rules-sources/&quot;&gt;dedicated page&lt;/a&gt; that lists the equivalent Biome rule of a given ESLint rule. We handle some ESLint plugins such as &lt;a href=&quot;https://typescript-eslint.io/&quot;&gt;TypeScript ESLint&lt;/a&gt;, &lt;a href=&quot;https://github.com/jsx-eslint/eslint-plugin-jsx-a11y&quot;&gt;ESLint JSX A11y&lt;/a&gt;, &lt;a href=&quot;https://github.com/jsx-eslint/eslint-plugin-react&quot;&gt;ESLint React&lt;/a&gt;, and &lt;a href=&quot;https://github.com/sindresorhus/eslint-plugin-unicorn&quot;&gt;ESLint Unicorn&lt;/a&gt;. Some rules are equivalent to their ESLint counterparts, while others are inspired. By default, Biome doesn’t migrate inspired rules. You can use the CLI flag
&lt;code dir=&quot;auto&quot;&gt;--include-inspired&lt;/code&gt; to migrate them.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;migrate-from-prettier-with-a-single-command&quot;&gt;Migrate from Prettier with a single command&lt;/h2&gt;&lt;a href=&quot;#migrate-from-prettier-with-a-single-command&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Migrate from Prettier with a single command”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/blog/biome-v1-6/#easier-migration-from-prettier&quot;&gt;Biome v1.6 introduced the subcommand &lt;code dir=&quot;auto&quot;&gt;biome migrate prettier&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In Biome v1.7, we add support of &lt;a href=&quot;https://prettier.io/docs/en/configuration.html#configuration-overrides&quot;&gt;Prettier’s
&lt;code dir=&quot;auto&quot;&gt;overrides&lt;/code&gt;&lt;/a&gt; and attempts to convert
&lt;code dir=&quot;auto&quot;&gt;.prettierignore&lt;/code&gt; glob patterns to globs supported by Biome.&lt;/p&gt;
&lt;p&gt;During the migration, Prettier’s &lt;code dir=&quot;auto&quot;&gt;overrides&lt;/code&gt; is translated to &lt;a href=&quot;https://biomejs.dev/reference/configuration/#overrides&quot;&gt;Biome’s
&lt;code dir=&quot;auto&quot;&gt;overrides&lt;/code&gt;&lt;/a&gt;. Given the following &lt;code dir=&quot;auto&quot;&gt;.prettierrc.json&lt;/code&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;.prettierrc.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;useTabs&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;singleQuote&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;overrides&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;*.json&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;options&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;tabWidth&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Run
&lt;code dir=&quot;auto&quot;&gt;biome migrate prettier --write&lt;/code&gt; to migrate your Prettier configuration to Biome. This results in the following Biome configuration:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;biome.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;formatter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;formatWithErrors&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;indentStyle&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;indentWidth&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;lineEnding&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;lf&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;lineWidth&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;80&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;attributePosition&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;organizeImports&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;linter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;rules&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;recommended&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;javascript&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;formatter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;jsxQuoteStyle&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;quoteProperties&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;asNeeded&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;trailingComma&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;all&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;semicolons&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;asNeeded&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;arrowParentheses&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;always&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;bracketSpacing&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;bracketSameLine&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;quoteStyle&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;single&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;attributePosition&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;overrides&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;include&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;*.json&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;formatter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;indentWidth&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The subcommand needs Node.js to load JavaScript configurations such as &lt;code dir=&quot;auto&quot;&gt;.prettierrc.js&lt;/code&gt;.
&lt;code dir=&quot;auto&quot;&gt;biome migrate prettier&lt;/code&gt; doesn’t support configuration written in JSON5, TOML, or YAML.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;emit-machine-readable-reports&quot;&gt;Emit machine-readable reports&lt;/h2&gt;&lt;a href=&quot;#emit-machine-readable-reports&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Emit machine-readable reports”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Biome is now able to output JSON reports detailing the diagnostics emitted by a command.&lt;/p&gt;
&lt;p&gt;For instance, you can emit a report when you lint a codebase:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;lint&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--reporter=json-pretty&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;For now, we support two report formats: &lt;code dir=&quot;auto&quot;&gt;json&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;json-pretty&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Note that the report format is **experimental
**, and it might change in the future. Please try this feature and let us know if any information needs to be added to the reports.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;check-git-staged-files&quot;&gt;Check &lt;code dir=&quot;auto&quot;&gt;git&lt;/code&gt; staged files&lt;/h2&gt;&lt;a href=&quot;#check-git-staged-files&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Check git staged files”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Biome v1.5 added the &lt;code dir=&quot;auto&quot;&gt;--changed&lt;/code&gt; to format and lint &lt;code dir=&quot;auto&quot;&gt;git&lt;/code&gt; tracked files that have been changed.&lt;/p&gt;
&lt;p&gt;Today we are introducing a new option &lt;code dir=&quot;auto&quot;&gt;--staged&lt;/code&gt; which allows you to check only files added to the &lt;em&gt;Git index&lt;/em&gt; (&lt;em&gt;staged
files&lt;/em&gt;). This is useful for checking that the files you want to commit are formatted and linted:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;check&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--staged&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This is handy for writing your own &lt;a href=&quot;https://biomejs.dev/recipes/git-hooks/#shell-script&quot;&gt;pre-commit script&lt;/a&gt;. Note that unstaged changes on a staged file are
&lt;strong&gt;not&lt;/strong&gt; ignored. Thus, we still recommend using a &lt;a href=&quot;https://biomejs.dev/recipes/git-hooks/&quot;&gt;dedicated pre-commit tool&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://github.com/castarco&quot;&gt;@castarco&lt;/a&gt; for implementing this feature!&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;linter&quot;&gt;Linter&lt;/h2&gt;&lt;a href=&quot;#linter&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Linter”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;new-nursery-rules&quot;&gt;New nursery rules&lt;/h3&gt;&lt;a href=&quot;#new-nursery-rules&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “New nursery rules”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Since &lt;em&gt;Biome
v1.6&lt;/em&gt;, we added several new rules. New rules are incubated in the nursery group. Nursery rules are exempt from semantic versioning.&lt;/p&gt;
&lt;p&gt;The new rules are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-constant-math-min-max-clamp/&quot;&gt;nursery/noConstantMathMinMaxClamp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-done-callback/&quot;&gt;nursery/noDoneCallback&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-duplicate-else-if/&quot;&gt;nursery/noDuplicateElseIf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-evolving-types/&quot;&gt;nursery/noEvolvingTypes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-flat-map-identity/&quot;&gt;nursery/noFlatMapIdentity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-misplaced-assertion/&quot;&gt;nursery/noMisplacedAssertion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;promoted-rules&quot;&gt;Promoted rules&lt;/h3&gt;&lt;a href=&quot;#promoted-rules&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Promoted rules”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Once stable, a nursery rule is promoted to a stable group. The following rules are promoted:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-excessive-nested-test-suites&quot;&gt;complexity/noExcessiveNestedTestSuites&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-useless-ternary/&quot;&gt;complexity/noUselessTernary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-jsx-key-in-iterable/&quot;&gt;correctness/useJsxKeyInIterable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-barrel-file/&quot;&gt;performance/noBarrelFile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-re-export-all/&quot;&gt;performance/noReExportAll&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-namespace-import/&quot;&gt;style/noNamespaceImport&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-node-assert-strict/&quot;&gt;style/useNodeAssertStrict&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-duplicate-test-hooks/&quot;&gt;suspicious/noDuplicateTestHooks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-exports-in-test/&quot;&gt;suspicious/noExportsInTest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-focused-tests/&quot;&gt;suspicious/noFocusedTests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-skipped-tests/&quot;&gt;suspicious/noSkippedTests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-suspicious-semicolon-in-jsx&quot;&gt;suspicious/noSuspiciousSemicolonInJsx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;/h2&gt;&lt;a href=&quot;#miscellaneous&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Miscellaneous”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;By default, Biome searches a configuration file in the working directory and parent directories if it doesn’t exist. Biome provides a CLI option
&lt;code dir=&quot;auto&quot;&gt;--config-path&lt;/code&gt; and an environment variable
&lt;code dir=&quot;auto&quot;&gt;BIOME_CONFIG_PATH&lt;/code&gt; that allows which can be used to override this behavior. Previously, they required a directory containing a Biome configuration file. For example, the following command uses the Biome configuration file in
&lt;code dir=&quot;auto&quot;&gt;./config/&lt;/code&gt;.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--config-path=./config/&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;./src&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This wasn’t very clear for many users who are used to specifying the configuration file path directly. They now accept a file, so the following command is valid:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--config-path=./config/biome.json&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;./src&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can now ignore
&lt;code dir=&quot;auto&quot;&gt;React&lt;/code&gt; imports in the rules &lt;a href=&quot;https://biomejs.dev/linter/rules/no-unused-imports/#options&quot;&gt;noUnusedImports&lt;/a&gt; and &lt;a href=&quot;https://biomejs.dev/linter/rules/use-import-type/#options&quot;&gt;useImportType&lt;/a&gt; by setting &lt;a href=&quot;https://biomejs.dev/reference/configuration/#javascriptjsxruntime&quot;&gt;
&lt;code dir=&quot;auto&quot;&gt;javascript.jsxRuntime&lt;/code&gt;&lt;/a&gt; to &lt;code dir=&quot;auto&quot;&gt;reactClassic&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Biome applies specific settings to &lt;a href=&quot;https://biomejs.dev/guides/configure-biome/#well-known-files&quot;&gt;well-known files&lt;/a&gt;. It now recognizes more files and distinguishes between JSON files that only allow comments and JSON files that allow both comments and trailing commas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the React ecosystem, files ending in
&lt;code dir=&quot;auto&quot;&gt;.js&lt;/code&gt; are allowed to contain JSX syntax. The Biome extension is now able to parse JSX syntax in files that are associated with the JavaScript language identifier.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-exhaustive-dependencies/&quot;&gt;useExhaustiveDependencies&lt;/a&gt; now supports Preact.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See the &lt;a href=&quot;https://biomejs.dev/internals/changelog/#170-2024-04-15&quot;&gt;changelog&lt;/a&gt; for more details.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;whats-next&quot;&gt;What’s Next?&lt;/h2&gt;&lt;a href=&quot;#whats-next&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “What’s Next?”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;We have started work on the CSS formatter and linter. Early implementation towards a &lt;a href=&quot;https://github.com/biomejs/biome/discussions/2286&quot;&gt;plugin system&lt;/a&gt; is also underway. Some of our contributors have started preliminary work for &lt;a href=&quot;https://github.com/biomejs/biome/issues/1927&quot;&gt;
&lt;em&gt;GraphQL&lt;/em&gt;&lt;/a&gt; and &lt;a href=&quot;https://github.com/biomejs/biome/issues/2365&quot;&gt;YAML&lt;/a&gt;. Any help is welcome!&lt;/p&gt;
&lt;p&gt;If Biome is valuable to you or your company, consider donating monthly to our &lt;a href=&quot;https://opencollective.com/biome&quot;&gt;Open Collective&lt;/a&gt;. You can also &lt;a href=&quot;https://github.com/sponsors/biomejs&quot;&gt;sponsor us on GitHub&lt;/a&gt;. This is important for the sustainability of the project.&lt;/p&gt;
&lt;p&gt;Follow us on &lt;a href=&quot;https://bsky.app/profile/biomejs.dev&quot;&gt;our BlueSky&lt;/a&gt; and join &lt;a href=&quot;https://biomejs.dev/chat&quot;&gt;our Discord community&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Biome v1.6</title><link>https://biomejs.dev/zh-cn/blog/biome-v1-6/</link><guid isPermaLink="true">https://biomejs.dev/zh-cn/blog/biome-v1-6/</guid><pubDate>Fri, 08 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Update Biome using the following commands:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--save-dev&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--save-exact&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;@biomejs/biome@latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;npx&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;@biomejs/biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;migrate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;partial-support-for-astro-svelte-and-vue-files&quot;&gt;Partial support for Astro, Svelte and Vue files&lt;/h2&gt;&lt;a href=&quot;#partial-support-for-astro-svelte-and-vue-files&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Partial support for Astro, Svelte and Vue files”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;In this release, we’re happy to provide partial support for Astro, Svelte and Vue files. What does &lt;strong&gt;partial&lt;/strong&gt; support mean?&lt;/p&gt;
&lt;p&gt;While the team is working on a &lt;a href=&quot;https://github.com/biomejs/biome/discussions/1726&quot;&gt;unified data structure&lt;/a&gt; for HTML-ish languages, we discovered that we could provide Biome functionalities to those files with just a few changes, albeit with some limitations.&lt;/p&gt;
&lt;p&gt;This means that Biome is able to analyze the JavaScript/TypeScript portion of said files, and all features are available: formatting, linting and import sorting! Here’s an example of what you should expect in terms of developer experience:&lt;/p&gt;
  
&lt;p&gt;Make sure to read the &lt;a href=&quot;https://biomejs.dev/internals/language-support#html-super-languages-support&quot;&gt;documentation about expectations and limitations&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;configuration-lighter-and-more-powerful&quot;&gt;Configuration, lighter and more powerful&lt;/h2&gt;&lt;a href=&quot;#configuration-lighter-and-more-powerful&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Configuration, lighter and more powerful”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;support-for-biomejsonc&quot;&gt;Support for &lt;code dir=&quot;auto&quot;&gt;biome.jsonc&lt;/code&gt;&lt;/h3&gt;&lt;a href=&quot;#support-for-biomejsonc&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Support for biome.jsonc”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Biome now accepts the &lt;code dir=&quot;auto&quot;&gt;biome.jsonc&lt;/code&gt; file as configuration! You can insert all the comments you want in there.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;extends-resolves-dependencies&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;extends&lt;/code&gt; resolves dependencies&lt;/h3&gt;&lt;a href=&quot;#extends-resolves-dependencies&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “extends resolves dependencies”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;From this version, Biome can use the &lt;code dir=&quot;auto&quot;&gt;extends&lt;/code&gt; property to &lt;em&gt;resolve&lt;/em&gt; other configuration files that are inside installed dependencies.&lt;/p&gt;
&lt;p&gt;There are few important steps in order to make the configuration discoverable. The file must be exported from a &lt;code dir=&quot;auto&quot;&gt;&quot;module&quot;&lt;/code&gt; package, and the file should be exported in your &lt;code dir=&quot;auto&quot;&gt;package.json&lt;/code&gt; like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;@shared-configs&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;module&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;exports&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;./biome&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;./biome.json&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This set up allows to expose a specifier &lt;code dir=&quot;auto&quot;&gt;@shared-configs/biome&lt;/code&gt;, which you use inside your &lt;code dir=&quot;auto&quot;&gt;biome.json&lt;/code&gt; file.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;extends&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;@shared-configs/biome&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The resolution of the dependencies is powered by the library &lt;a href=&quot;https://github.com/oxc-project/oxc-resolver&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;oxc-resolver&lt;/code&gt;&lt;/a&gt;, one of the many libraries provided by the &lt;a href=&quot;https://oxc-project.github.io/&quot;&gt;OXC project&lt;/a&gt;. It’s battle-tested and spec compliant!&lt;/p&gt;
&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;You can also export &lt;code dir=&quot;auto&quot;&gt;biome.jsonc&lt;/code&gt; files!&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;@shared-configs&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;module&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;exports&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;./biome&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;ins&gt;&lt;span style=&quot;--0:#d5a7e0;--1:#5d4165&quot;&gt;./biome.jsonc&lt;/span&gt;&lt;/ins&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;reduced-memory-footprint&quot;&gt;Reduced memory footprint&lt;/h3&gt;&lt;a href=&quot;#reduced-memory-footprint&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Reduced memory footprint”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;We &lt;strong&gt;reduced&lt;/strong&gt; the size our configuration &lt;strong&gt;by a factor of 6.5&lt;/strong&gt;! This change might not have massive effects on the speed of the program, but it greatly reduced the memory used when running the CLI or the LSP.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;new-formatting-options&quot;&gt;New formatting options&lt;/h2&gt;&lt;a href=&quot;#new-formatting-options&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “New formatting options”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Other than fixes, the formatter provides two new options that should improve the compatibility with Prettier.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;option-attributeposition&quot;&gt;Option &lt;code dir=&quot;auto&quot;&gt;attributePosition&lt;/code&gt;&lt;/h3&gt;&lt;a href=&quot;#option-attributeposition&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Option attributePosition”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;When &lt;code dir=&quot;auto&quot;&gt;formatter.attributePosition&lt;/code&gt; has the value &lt;code dir=&quot;auto&quot;&gt;multiline&lt;/code&gt;, all attributes of HTML-ish languages (JSX/TSX as for time of writing) will be collapsed on multiple lines regardless of their numbers:&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;p&gt;&lt;h4&gt;With variant &lt;code dir=&quot;auto&quot;&gt;auto&lt;/code&gt; (default)&lt;/h4&gt;
The attributes are automatically formatted, and they will collapse in multiple lines only when they hit certain criteria.&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;file.jsx&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;link&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;primary&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;https://example.com&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;Hit me&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt;    Hit me&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;h4&gt;With variant &lt;code dir=&quot;auto&quot;&gt;multiline&lt;/code&gt;&lt;/h4&gt;
The attributes are always formatted on multiple lines, regardless.&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;file.jsx&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;Button&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;link&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;primary&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;https://example.com&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;Hit me&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt;    Hit me&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The contributor &lt;a href=&quot;https://github.com/octoshikari&quot;&gt;@octoshikari&lt;/a&gt; implemented this new feature by themselves! Huge thank you for helping the Biome project.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;option-jsonformattertrailingcommas&quot;&gt;Option &lt;code dir=&quot;auto&quot;&gt;json.formatter.trailingCommas&lt;/code&gt;&lt;/h3&gt;&lt;a href=&quot;#option-jsonformattertrailingcommas&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Option json.formatter.trailingCommas”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Previously, Biome parser introduced an option that would allow to parse JSON and JSONC files that contained a trailing comma. This was required to ease the friction caused by other tools that
tolerate trailing commas by default (e.g. VSCode, Prettier, etc.).&lt;/p&gt;
&lt;p&gt;Unfortunately, our formatter wasn’t as tolerant. But with this release, we’ve introduced the option &lt;code dir=&quot;auto&quot;&gt;json.formatter.trailingCommas&lt;/code&gt;. It allows you to apply the same rules as with &lt;code dir=&quot;auto&quot;&gt;js.formatter.trailingComma&lt;/code&gt;.&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;p&gt;&lt;h4&gt;With variant &lt;code dir=&quot;auto&quot;&gt;none&lt;/code&gt; (default)&lt;/h4&gt;
The formatter removes the trailing comma upon formatting.&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;file.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;lorem&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;ipsum&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;lorem&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;ipsum&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;lorem&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;ipsum&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;lorem&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;ins&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#d5a7e0;--1:#5d4165&quot;&gt;ipsum_last&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;h4&gt;With variant &lt;code dir=&quot;auto&quot;&gt;all&lt;/code&gt;&lt;/h4&gt;
The formatter adds the trailing comma upon formatting.&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;file.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;lorem&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;ipsum&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;lorem&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;ipsum&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;lorem&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;ipsum&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;lorem&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;ins&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#d5a7e0;--1:#5d4165&quot;&gt;ipsum_last&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;easier-migration-from-prettier&quot;&gt;Easier migration from Prettier&lt;/h2&gt;&lt;a href=&quot;#easier-migration-from-prettier&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Easier migration from Prettier”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;This release introduces a new command called &lt;code dir=&quot;auto&quot;&gt;biome migrate prettier&lt;/code&gt;. This command will read your Prettier &lt;code dir=&quot;auto&quot;&gt;.prettierrc&lt;/code&gt;/&lt;code dir=&quot;auto&quot;&gt;prettier.json&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;.prettierignore&lt;/code&gt;, and attempt to port its options and globs in Biome.&lt;/p&gt;
&lt;p&gt;Given a &lt;code dir=&quot;auto&quot;&gt;prettier.json&lt;/code&gt; file, Biome will &lt;strong&gt;modify&lt;/strong&gt; the existing configuration file to match Prettier’s options:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;prettier.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;useTabs&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;semi&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;singleQuote&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;biome.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;formatter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;formatWithErrors&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;indentStyle&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;indentWidth&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;lineEnding&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;lf&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;lineWidth&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;80&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;attributePosition&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;linter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: { &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;javascript&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;formatter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;jsxQuoteStyle&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;quoteProperties&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;asNeeded&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;trailingCommas&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;all&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;semicolons&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;always&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;arrowParentheses&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;always&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;bracketSpacing&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;bracketSameLine&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;quoteStyle&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;single&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;attributePosition&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;Caution&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Caution&lt;/p&gt;&lt;div&gt;&lt;p&gt;Due to the different nature of &lt;code dir=&quot;auto&quot;&gt;.prettierignore&lt;/code&gt; globs and Biome’s globs, it’s &lt;strong&gt;highly advised&lt;/strong&gt; to make sure that those globs still work under Biome.
Prettier’s globs are &lt;strong&gt;git globs&lt;/strong&gt;, while Biome’s globs are &lt;strong&gt;unix-style&lt;/strong&gt; globs.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;linter&quot;&gt;Linter&lt;/h3&gt;&lt;a href=&quot;#linter&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Linter”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;h4 id=&quot;promoted-rules&quot;&gt;Promoted rules&lt;/h4&gt;&lt;a href=&quot;#promoted-rules&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Promoted rules”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;New rules are incubated in the nursery group.
Once stable, we promote them to a stable group.
The following rules are promoted:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-empty-type-parameters&quot;&gt;complexity/noEmptyTypeParameters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-useless-lone-block-statements&quot;&gt;complexity/noUselessLoneBlockStatements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-unused-imports&quot;&gt;correctness/noUnusedImports&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-invalid-use-before-declaration&quot;&gt;correctness/noInvalidUseBeforeDeclaration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-unused-private-class-members&quot;&gt;correctness/noUnusedPrivateClassMembers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-await&quot;&gt;suspicious/useAwait&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-global-eval&quot;&gt;security/noGlobalEval&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-consistent-array-type&quot;&gt;style/useConsistentArrayType&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-export-type&quot;&gt;style/useExportType&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-filenaming-convention&quot;&gt;style/useFilenamingConvention&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-for-of&quot;&gt;style/useForOf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-import-type&quot;&gt;style/useImportType&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-nodejs-import-protocol&quot;&gt;style/useNodejsImportProtocol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-number-namespace&quot;&gt;style/useNumberNamespace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-shorthand-function-type&quot;&gt;style/useShorthandFunctionType&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-empty-block-statements&quot;&gt;suspicious/noEmptyBlockStatements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-global-assign&quot;&gt;suspicious/noGlobalAssign&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-misleading-character-class&quot;&gt;suspicious/noMisleadingCharacterClass&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-then-property&quot;&gt;suspicious/noThenProperty&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additionally, the following rules are now recommended:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-approximative-numeric-constant&quot;&gt;suspicious/noApproximativeNumericConstant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-misrefactored-shorthand-assign&quot;&gt;suspicious/noMisrefactoredShorthandAssign&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h4 id=&quot;removed-rules&quot;&gt;Removed rules&lt;/h4&gt;&lt;a href=&quot;#removed-rules&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Removed rules”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Remove &lt;code dir=&quot;auto&quot;&gt;nursery/useGroupedTypeImport&lt;/code&gt;. The rule &lt;a href=&quot;https://biomejs.dev/linter/rules/use-import-type&quot;&gt;style/useImportType&lt;/a&gt; covers the behavior of this rule.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h4 id=&quot;new-rules&quot;&gt;New rules&lt;/h4&gt;&lt;a href=&quot;#new-rules&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “New rules”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;New rules are now available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-barrel-file&quot;&gt;nursery/noBarrelFile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-exports-in-test&quot;&gt;nursery/noExportsInTest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-focused-tests&quot;&gt;nursery/noFocusedTests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-namespace-import&quot;&gt;nursery/noNamespaceImport&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-semicolon-in-jsx&quot;&gt;nursery/noSemicolonInJsx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-skipped-tests&quot;&gt;nursery/noSkippedTests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-undeclared-dependencies&quot;&gt;nursery/noUndeclaredDependencies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-node-assert-strict&quot;&gt;nursery/useNodeAssertStrict&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-sorted-classes&quot;&gt;nursery/useSortedClasses&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;/h3&gt;&lt;a href=&quot;#miscellaneous&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Miscellaneous”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;We drastically reduced the number of protected files, which means you can now format your &lt;code dir=&quot;auto&quot;&gt;package.json&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;tsconfig.json&lt;/code&gt;, etc. with Biome. Lock files are still considered protected.&lt;/li&gt;
&lt;li&gt;The CLI now does a better job at reporting the total number of files and the files that were really changed.&lt;/li&gt;
&lt;li&gt;When a diagnostic shows a file name on the terminal that is integrated with your editor, you can click it and the editor will open the file for you.&lt;/li&gt;
&lt;li&gt;The command &lt;code dir=&quot;auto&quot;&gt;biome rage&lt;/code&gt; now accepts two nice options: &lt;code dir=&quot;auto&quot;&gt;--formatter&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;--linter&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;We removed some superfluous error diagnostic when running the &lt;code dir=&quot;auto&quot;&gt;biome check&lt;/code&gt; command.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Biome v1.5</title><link>https://biomejs.dev/zh-cn/blog/biome-v1-5/</link><guid isPermaLink="true">https://biomejs.dev/zh-cn/blog/biome-v1-5/</guid><pubDate>Mon, 08 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Along with the &lt;a href=&quot;https://biomejs.dev/blog/roadmap-2024&quot;&gt;Roadmap for 2024&lt;/a&gt;, the &lt;a href=&quot;https://biomejs.dev/blog/roadmap-2024#new-logo-and-homepage&quot;&gt;new logo and homepage&lt;/a&gt;, we also published a new version. This version has few features around the CLI and
&lt;strong&gt;many&lt;/strong&gt; fixes in our formatter. Our TypeScript, JSX and JavaScript formatting has surpassed the &lt;strong&gt;97% compatibility
rate&lt;/strong&gt; with Prettier. Biome now provides &lt;strong&gt;over 190 lint rules&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Update Biome using the following commands:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--save-dev&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--save-exact&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;@biomejs/biome@latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;npx&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;@biomejs/biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;migrate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;new-features&quot;&gt;New features&lt;/h2&gt;&lt;a href=&quot;#new-features&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “New features”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Process only the files that were changed.&lt;/li&gt;
&lt;li&gt;The command &lt;code dir=&quot;auto&quot;&gt;biome ci&lt;/code&gt; now prints diagnostics in GitHub PRs.&lt;/li&gt;
&lt;li&gt;A new command,&lt;code dir=&quot;auto&quot;&gt;biome explain&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The command &lt;code dir=&quot;auto&quot;&gt;biome migrate&lt;/code&gt; updates the &lt;code dir=&quot;auto&quot;&gt;$schema&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;New lint rules.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;process-only-the-files-that-were-changed&quot;&gt;Process only the files that were changed&lt;/h3&gt;&lt;a href=&quot;#process-only-the-files-that-were-changed&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Process only the files that were changed”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;If you enable the integration with VCS, you can tell Biome to process only the files that were changed. As for now, this feature computes the files that were changed by using a VCS, so Biome doesn’t know exactly which lines changed.&lt;/p&gt;
&lt;p&gt;This feature practically makes some utilities such as &lt;code dir=&quot;auto&quot;&gt;lint-staged&lt;/code&gt; obsolete.&lt;/p&gt;
&lt;p&gt;To take advantage of this feature, you have to tell Biome what’s the default branch in the configuration file, and then you’ll have to pass the option &lt;code dir=&quot;auto&quot;&gt;--changed&lt;/code&gt; via CLI:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;biome.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;vcs&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;clientKind&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#075457&quot;&gt;&quot;defaultBranch&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#d5a7e0;--1:#5d4165&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Once you modified some files, use the new option to the command you need, for example the &lt;code dir=&quot;auto&quot;&gt;format&lt;/code&gt; command:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;ins&gt;&lt;span style=&quot;--0:#94b6ff;--1:#2d4a87&quot;&gt;--changed&lt;/span&gt;&lt;/ins&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--write&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;the-command-biome-ci-now-prints-diagnostics-in-github-prs&quot;&gt;The command &lt;code dir=&quot;auto&quot;&gt;biome ci&lt;/code&gt; now prints diagnostics in GitHub PRs&lt;/h3&gt;&lt;a href=&quot;#the-command-biome-ci-now-prints-diagnostics-in-github-prs&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “The command biome ci now prints diagnostics in GitHub PRs”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;For quite some time, users were confused by the difference between the commands &lt;code dir=&quot;auto&quot;&gt;check&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;ci&lt;/code&gt;because, until now, their behaviours have been very similar. From this version, the command &lt;code dir=&quot;auto&quot;&gt;ci&lt;/code&gt; can detect the GitHub CI environment and print annotation in the PRs.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Screenshot of a GitHub annotation printed by Biome&quot; width=&quot;610&quot; height=&quot;170&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://biomejs.dev/_astro/github-annotation.B_unxUGt_Z25lKte.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;It’s possible that you would need to change your permissions of your workflow files in case you don’t see the annotations:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;.github/workflows/action.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#111111&quot;&gt;permissions&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#111111&quot;&gt;pull-requests&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;write&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;a-new-command-biome-explain&quot;&gt;A new command &lt;code dir=&quot;auto&quot;&gt;biome explain&lt;/code&gt;&lt;/h3&gt;&lt;a href=&quot;#a-new-command-biome-explain&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “A new command biome explain”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;This command will serve as an “offline” documentation tool. In this release, the command supports the explanation of all the lint rules; for example you can request documentation for &lt;code dir=&quot;auto&quot;&gt;noAccumulatingSpread&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;explain&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;noAccumulatingSpread&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Which will print the following Markdown:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82B1FF;--1:#3B61B0&quot;&gt;# noAccumulatingSpread&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;No fix available.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;This rule is recommended.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82B1FF;--1:#3B61B0&quot;&gt;# Description&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;Disallow the use of spread (&lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;`...`&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;) syntax on accumulators.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;Spread syntax allows an iterable to be expanded into its individual elements.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;Spread syntax should be avoided on accumulators (like those in &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;`.reduce`&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;because it causes a time complexity of &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;`O(n^2)`&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; instead of &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;`O(n)`&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;Source: https://prateeksurana.me/blog/why-using-object-spread-with-reduce-bad-idea/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82B1FF;--1:#3B61B0&quot;&gt;## Examples&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82B1FF;--1:#3B61B0&quot;&gt;### Invalid&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;```js,expect_diagnostic&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;var &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;reduce&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;acc&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;val&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;acc&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;], []);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;```&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;```js,expect_diagnostic&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;var &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;reduce&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;acc&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;val&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;acc&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;];}, []);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;```&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;```js,expect_diagnostic&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;var &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;reduce&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;acc&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;val&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; ({&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;acc&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;]: &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;}), {});&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;```&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82B1FF;--1:#3B61B0&quot;&gt;## Valid&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;```js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;var &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;reduce&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;acc&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;val&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;acc&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;acc&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;}, []);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;```&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt; [...acc, val], []);&amp;#x60;&amp;#x60;&amp;#x60;&amp;#x60;&amp;#x60;&amp;#x60;js,expect_diagnosticvar a = [&amp;#x27;a&amp;#x27;, &amp;#x27;b&amp;#x27;, &amp;#x27;c&amp;#x27;];a.reduce((acc, val) =&gt; {return [...acc, val];}, []);&amp;#x60;&amp;#x60;&amp;#x60;&amp;#x60;&amp;#x60;&amp;#x60;js,expect_diagnosticvar a = [&amp;#x27;a&amp;#x27;, &amp;#x27;b&amp;#x27;, &amp;#x27;c&amp;#x27;];a.reduce((acc, val) =&gt; ({...acc, [val]: val}), {});&amp;#x60;&amp;#x60;&amp;#x60;## Valid&amp;#x60;&amp;#x60;&amp;#x60;jsvar a = [&amp;#x27;a&amp;#x27;, &amp;#x27;b&amp;#x27;, &amp;#x27;c&amp;#x27;];a.reduce((acc, val) =&gt; {acc.push(val); return acc}, []);&amp;#x60;&amp;#x60;&amp;#x60;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;We plan to make this output more readable for terminals, as well as provide autocompletion for this command.&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;the-command-biome-migrate-updates-the-schema&quot;&gt;The command &lt;code dir=&quot;auto&quot;&gt;biome migrate&lt;/code&gt; updates the &lt;code dir=&quot;auto&quot;&gt;$schema&lt;/code&gt;&lt;/h4&gt;&lt;a href=&quot;#the-command-biome-migrate-updates-the-schema&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “The command biome migrate updates the $schema”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The command &lt;code dir=&quot;auto&quot;&gt;biome migrate&lt;/code&gt; now updates the &lt;code dir=&quot;auto&quot;&gt;$schema&lt;/code&gt; value inside the configuration file &lt;code dir=&quot;auto&quot;&gt;biome.json&lt;/code&gt; if you avail of the online schema. Run this command as soon as you update to Biome &lt;code dir=&quot;auto&quot;&gt;v1.5.0&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;biome.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#075356&quot;&gt;&quot;$schema&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#d4a4df;--1:#5d4165&quot;&gt;https://biomejs.dev/schemas/1.4.1/schema.json&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#d5a7e0;--1:#5d4165&quot;&gt;$schema&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#FFFFFF;--1:#723b3a&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#d5a7e0;--1:#5d4165&quot;&gt;https://biomejs.dev/schemas/&lt;/span&gt;&lt;ins&gt;&lt;span style=&quot;--0:#ddb8e6;--1:#533a5a&quot;&gt;1.5.0&lt;/span&gt;&lt;/ins&gt;&lt;span style=&quot;--0:#d5a7e0;--1:#5d4165&quot;&gt;/schema.json&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;new-rules&quot;&gt;New rules&lt;/h3&gt;&lt;a href=&quot;#new-rules&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “New rules”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;h4 id=&quot;useexporttype&quot;&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-export-type&quot;&gt;useExportType&lt;/a&gt;&lt;/h4&gt;&lt;a href=&quot;#useexporttype&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “useExportType”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;interface&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; I {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; {I};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/useExportType.js:2:8 &lt;a href=&quot;https://biomejs.dev/linter/rules/use-export-type&quot;&gt;lint/nursery/useExportType&lt;/a&gt; &lt;span style=&quot;color: #000; background-color: #ddd;&quot;&gt; FIXABLE &lt;/span&gt; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;✖&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;All exports are only types and should thus use &lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;export type&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;.&lt;/span&gt;

    &lt;strong&gt;1 │ &lt;/strong&gt;interface I {}
&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;2 │ &lt;/strong&gt;export { I };
   &lt;strong&gt;   │ &lt;/strong&gt;       &lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;3 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Using &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;export type&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; allows transpilers to safely drop exports of types without looking for their definition.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Safe fix&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;Use a grouped &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;export type&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;.&lt;/span&gt;

&lt;strong&gt;  &lt;/strong&gt;&lt;strong&gt;  2 │ &lt;/strong&gt;export&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;{&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;I&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;};
&lt;strong&gt;  &lt;/strong&gt;&lt;strong&gt;    │ &lt;/strong&gt;       &lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;+&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;h4 id=&quot;useimporttype&quot;&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-import-type&quot;&gt;useImportType&lt;/a&gt;&lt;/h4&gt;&lt;a href=&quot;#useimporttype&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “useImportType”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; {A} &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;./mod.js&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; TypeOfA &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;typeof&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;let &lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FFCB8B;--1:#111111&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/useImportType.js:1:1 &lt;a href=&quot;https://biomejs.dev/linter/rules/use-import-type&quot;&gt;lint/nursery/useImportType&lt;/a&gt; &lt;span style=&quot;color: #000; background-color: #ddd;&quot;&gt; FIXABLE &lt;/span&gt; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;✖&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;All these imports are only used as types.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;import { A } from &quot;./mod.js&quot;;
   &lt;strong&gt;   │ &lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;2 │ &lt;/strong&gt;type TypeOfA = typeof A;
    &lt;strong&gt;3 │ &lt;/strong&gt;let a: A;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Importing the types with &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;import type&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; ensures that they are removed by the transpilers and avoids loading unnecessary modules.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Safe fix&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;Use &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;import type&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;.&lt;/span&gt;

&lt;strong&gt;  &lt;/strong&gt;&lt;strong&gt;  1 │ &lt;/strong&gt;import&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;{&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;A&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;}&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;from&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&quot;./mod.js&quot;;
&lt;strong&gt;  &lt;/strong&gt;&lt;strong&gt;    │ &lt;/strong&gt;       &lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;+&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;h4 id=&quot;usefilenamingconvention&quot;&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-filenaming-convention&quot;&gt;useFilenamingConvention&lt;/a&gt;&lt;/h4&gt;&lt;a href=&quot;#usefilenamingconvention&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “useFilenamingConvention”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Enforces naming conventions for JavaScript and TypeScript filenames.&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;usenodejsimportprotocol&quot;&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-nodejs-import-protocol&quot;&gt;useNodejsImportProtocol&lt;/a&gt;&lt;/h4&gt;&lt;a href=&quot;#usenodejsimportprotocol&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “useNodejsImportProtocol”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; fs &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;fs&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/useNodejsImportProtocol.js:1:16 &lt;a href=&quot;https://biomejs.dev/linter/rules/use-node-import-protocol&quot;&gt;lint/nursery/useNodejsImportProtocol&lt;/a&gt; &lt;span style=&quot;color: #000; background-color: #ddd;&quot;&gt; FIXABLE &lt;/span&gt; ━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Orange;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Orange;&quot;&gt;⚠&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Orange;&quot;&gt;Import from Node.js builtin module &quot;&lt;/span&gt;&lt;span style=&quot;color: Orange;&quot;&gt;&lt;strong&gt;fs&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Orange;&quot;&gt;&quot; should use the &quot;&lt;/span&gt;&lt;span style=&quot;color: Orange;&quot;&gt;&lt;strong&gt;node:&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Orange;&quot;&gt;&quot; protocol.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;import fs from &apos;fs&apos;;
   &lt;strong&gt;   │ &lt;/strong&gt;               &lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;2 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Using the &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;node:&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; protocol is more explicit and signals that the imported module belongs to Node.js.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Unsafe fix&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;Change to &quot;node:fs&quot;.&lt;/span&gt;

    &lt;strong&gt;1&lt;/strong&gt;  &lt;strong&gt; │ &lt;/strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;&apos;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;f&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;s&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;&apos;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;;&lt;/span&gt;
      &lt;strong&gt;1&lt;/strong&gt;&lt;strong&gt; │ &lt;/strong&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;strong&gt;&quot;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;strong&gt;n&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;strong&gt;o&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;strong&gt;d&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;strong&gt;e&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;strong&gt;f&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;strong&gt;s&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;strong&gt;&quot;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;;&lt;/span&gt;
    &lt;strong&gt;2&lt;/strong&gt; &lt;strong&gt;2&lt;/strong&gt;&lt;strong&gt; │ &lt;/strong&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;h4 id=&quot;nonodejsmodules&quot;&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-nodejs-modules&quot;&gt;noNodejsModules&lt;/a&gt;&lt;/h4&gt;&lt;a href=&quot;#nonodejsmodules&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “noNodejsModules”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; fs &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;fs&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; path &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;node:path&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/noNodejsModules.js:1:16 &lt;a href=&quot;https://biomejs.dev/linter/rules/no-nodejs-modules&quot;&gt;lint/nursery/noNodejsModules&lt;/a&gt; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Orange;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Orange;&quot;&gt;⚠&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Orange;&quot;&gt;Using Node.js modules are forbidden.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;import fs from &quot;fs&quot;;
   &lt;strong&gt;   │ &lt;/strong&gt;               &lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;2 │ &lt;/strong&gt;import path from &quot;node:path&quot;;
    &lt;strong&gt;3 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Can be useful for client-side web projects that do not have access to those modules.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Remove the import module.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;h4 id=&quot;noinvalidusebeforedeclaration&quot;&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-invalid-use-before-declaration&quot;&gt;noInvalidUseBeforeDeclaration&lt;/a&gt;&lt;/h4&gt;&lt;a href=&quot;#noinvalidusebeforedeclaration&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “noInvalidUseBeforeDeclaration”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/noInvalidUseBeforeDeclaration.js:3:11 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;✖&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;Const declarations must have an initialized value.&lt;/span&gt;

    &lt;strong&gt;1 │ &lt;/strong&gt;function f() {
    &lt;strong&gt;2 │ &lt;/strong&gt;    console.log(x);
&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;3 │ &lt;/strong&gt;    const x;
   &lt;strong&gt;   │ &lt;/strong&gt;          &lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;4 │ &lt;/strong&gt;}
    &lt;strong&gt;5 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;This variable needs to be initialized.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;h4 id=&quot;noglobaleval&quot;&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-global-eval&quot;&gt;noGlobalEval&lt;/a&gt;&lt;/h4&gt;&lt;a href=&quot;#noglobaleval&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “noGlobalEval”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;var a = 0&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/noGlobalEval.js:1:1 &lt;a href=&quot;https://biomejs.dev/linter/rules/no-global-eval&quot;&gt;lint/nursery/noGlobalEval&lt;/a&gt; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;✖&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;eval()&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt; exposes to security risks and performance issues.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;eval(&quot;var a = 0&quot;);
   &lt;strong&gt;   │ &lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;2 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;See the &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#never_use_eval!&quot;&gt;MDN web docs&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; for more details.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Refactor the code so that it doesn&apos;t need to call &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;eval()&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;h4 id=&quot;noglobalassign&quot;&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-global-assign&quot;&gt;noGlobalAssign&lt;/a&gt;&lt;/h4&gt;&lt;a href=&quot;#noglobalassign&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “noGlobalAssign”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;Object&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/noGlobalAssign.js:1:1 &lt;a href=&quot;https://biomejs.dev/linter/rules/no-global-assign&quot;&gt;lint/nursery/noGlobalAssign&lt;/a&gt; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;✖&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;A global variable should not be reassigned.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;Object = null;
   &lt;strong&gt;   │ &lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;2 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Assigning to a global variable can override essential functionality.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;h4 id=&quot;nomisleadingcharacterclass&quot;&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-misleading-character-class&quot;&gt;noMisleadingCharacterClass&lt;/a&gt;&lt;/h4&gt;&lt;a href=&quot;#nomisleadingcharacterclass&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “noMisleadingCharacterClass”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;[Á]&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--0:#5CA7E4;--1:#3A688F&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/noMisleadingCharacterClass.js:1:1 &lt;a href=&quot;https://biomejs.dev/linter/rules/no-misleading-character-class&quot;&gt;lint/nursery/noMisleadingCharacterClass&lt;/a&gt; ━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Orange;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Orange;&quot;&gt;⚠&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Orange;&quot;&gt;Unexpected combined character in the character class.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;/^[Á]$/u;
   &lt;strong&gt;   │ &lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;2 │ &lt;/strong&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;h4 id=&quot;nothenproperty&quot;&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-then-property&quot;&gt;noThenProperty&lt;/a&gt;&lt;/h4&gt;&lt;a href=&quot;#nothenproperty&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “noThenProperty”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;then&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/noThenProperty.js:2:5 &lt;a href=&quot;https://biomejs.dev/linter/rules/no-then-property&quot;&gt;lint/nursery/noThenProperty&lt;/a&gt; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;✖&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;Do not add &lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;then&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt; to an object.&lt;/span&gt;

    &lt;strong&gt;1 │ &lt;/strong&gt;const foo = {
&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;2 │ &lt;/strong&gt;    then() {}
   &lt;strong&gt;   │ &lt;/strong&gt;    &lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;3 │ &lt;/strong&gt;};
    &lt;strong&gt;4 │ &lt;/strong&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;get &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;then&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h4 id=&quot;nouselessternary&quot;&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-useless-ternary&quot;&gt;noUselessTernary&lt;/a&gt;&lt;/h4&gt;&lt;a href=&quot;#nouselessternary&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “noUselessTernary”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;var &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; ? &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; : &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/noUselessTernary.js:1:9 &lt;a href=&quot;https://biomejs.dev/linter/rules/no-useless-ternary&quot;&gt;lint/nursery/noUselessTernary&lt;/a&gt; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;✖&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;Unnecessary use of boolean literals in conditional expression.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;var a = x ? true : true;
   &lt;strong&gt;   │ &lt;/strong&gt;        &lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;2 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Simplify your code by directly assigning the result without using a ternary operator.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; Check for more details about &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_NOT&quot;&gt;NOT&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; operator.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;</content:encoded></item><item><title>Roadmap 2024</title><link>https://biomejs.dev/zh-cn/blog/roadmap-2024/</link><guid isPermaLink="true">https://biomejs.dev/zh-cn/blog/roadmap-2024/</guid><pubDate>Mon, 08 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We are thrilled to share what the Core Contributors and Maintainers would like to focus on in 2024.&lt;/p&gt;
&lt;p&gt;We want to remind you that Biome is a community-driven project, so we can only promise that some of the ideas outlined below will be shipped.&lt;/p&gt;
&lt;p&gt;However, if you’re excited about some aspects of the project, and you want to see some of them developed faster than others, you can help us in many ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/biomejs&quot;&gt;&lt;strong&gt;Be involved in the project and the community&lt;/strong&gt;&lt;/a&gt;. Please help us to build those features.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/biome&quot;&gt;&lt;strong&gt;Sponsor us&lt;/strong&gt;&lt;/a&gt;. Ask your company to sponsor us. Biome is so fast that it can reduce your company’s CI times and save money. Performance is part of our mission. Plus, sponsorship is a good medium of
&lt;em&gt;advertisement&lt;/em&gt; for your company.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/guides/getting-started&quot;&gt;&lt;strong&gt;Improve our documentation with ideas, recipes, or guides&lt;/strong&gt;&lt;/a&gt;. Translate our documentation and help us to make Biome available to people who aren’t proficient in English.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;preface&quot;&gt;Preface&lt;/h2&gt;&lt;a href=&quot;#preface&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Preface”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The project is young and can’t compete against giants such as Prettier, ESLint, Webpack, Vite, ESBuild, etc. However, the recent events (sponsors, bounty challenge, Biome being a fork of Rome) showed that the users
&lt;strong&gt;have&lt;/strong&gt; interest in the project, and we showed those users that we have the tools to fulfil a need.&lt;/p&gt;
&lt;p&gt;Moving small projects from ESLint/Prettier is easy, but moving &lt;strong&gt;big&lt;/strong&gt; code bases is challenging and time-consuming; this is a big friction point in Biome.&lt;/p&gt;
&lt;p&gt;Users have different needs, though, so it will only be possible to satisfy some of them. We want to ensure that all features and contributions to our project &lt;a href=&quot;https://biomejs.dev/internals/philosophy/&quot;&gt;embrace our philosophy&lt;/a&gt; and provide the best experience by default.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;main-area-of-focus&quot;&gt;Main area of focus&lt;/h2&gt;&lt;a href=&quot;#main-area-of-focus&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Main area of focus”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Help users to move to Biome&lt;/li&gt;
&lt;li&gt;Expand Biome’s language support so Biome tools can span more of the web ecosystem&lt;/li&gt;
&lt;li&gt;Deepen Biome’s existing capabilities to offer more functionalities&lt;/li&gt;
&lt;li&gt;Plugins&lt;/li&gt;
&lt;li&gt;Transformations&lt;/li&gt;
&lt;li&gt;Community and content&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h2 id=&quot;help-users-to-move-to-biome&quot;&gt;Help users to move to Biome&lt;/h2&gt;&lt;a href=&quot;#help-users-to-move-to-biome&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Help users to move to Biome”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Offer guides on our website to users who want to migrate from Prettier (CLI commands and configuration)&lt;/li&gt;
&lt;li&gt;Offer guides on our website to users who want to migrate from ESlint (CLI commands and configuration)&lt;/li&gt;
&lt;li&gt;Offer a section on our website that shows a mapping of the ESLint rules to our rules&lt;/li&gt;
&lt;li&gt;Offer commands to ease the transition
&lt;ul&gt;
&lt;li&gt;A command called &lt;code dir=&quot;auto&quot;&gt;biome migrate prettier&lt;/code&gt; that will read &lt;code dir=&quot;auto&quot;&gt;.prettierrc&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;.prettierignore&lt;/code&gt; will update the &lt;code dir=&quot;auto&quot;&gt;biome.json&lt;/code&gt; file (or create it) with the configuration from the Prettier files.&lt;/li&gt;
&lt;li&gt;A command called &lt;code dir=&quot;auto&quot;&gt;biome migrate eslint&lt;/code&gt; will read the JSON configuration of Eslint and the ignore file. There will be expectations and limitations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;expand-biomes-language-support&quot;&gt;Expand Biome’s language support&lt;/h2&gt;&lt;a href=&quot;#expand-biomes-language-support&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Expand Biome’s language support”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;CSS is our next language of focus, and we are making good progress. HTML and Markdown will follow. Follow our &lt;a href=&quot;https://biomejs.dev/internals/language-support&quot;&gt;up-to-date page&lt;/a&gt; to keep up with the progress of our work.&lt;/p&gt;
&lt;p&gt;The CSS language will enable much work and experimentation: CSS formatting and linting, and we will port some of the lint rules from &lt;code dir=&quot;auto&quot;&gt;stylelint&lt;/code&gt;. A new area of experimentation is cross-linting.&lt;/p&gt;
&lt;p&gt;The idea of cross-linting can be explained with an example: compute the CSS styles/classes defined in a project and warn a user when said styles aren’t used inside JSX/HTML files.&lt;/p&gt;
&lt;p&gt;Plus, we unlock another area of experimentation, which is embedded formatting.&lt;/p&gt;
&lt;p&gt;HTML and Markdown will be our next languages of focus. HTML will enable us to parse other variants of HTML that are popular in the frontend ecosystem: &lt;a href=&quot;https://vuejs.org/&quot;&gt;Vue&lt;/a&gt;, &lt;a href=&quot;https://svelte.dev/&quot;&gt;Svelte&lt;/a&gt; and &lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt;, and this would require some exploration of how to represent super languages of HTML.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;deepen-biomes-existing-capabilities-to-offer-more-functionalities&quot;&gt;Deepen Biome’s existing capabilities to offer more functionalities.&lt;/h2&gt;&lt;a href=&quot;#deepen-biomes-existing-capabilities-to-offer-more-functionalities&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Deepen Biome’s existing capabilities to offer more functionalities.”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Project analysis and dependency resolution&lt;/li&gt;
&lt;li&gt;Type system&lt;/li&gt;
&lt;li&gt;CLI&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;project-analysis-and-dependency-resolution&quot;&gt;Project analysis and dependency resolution&lt;/h3&gt;&lt;a href=&quot;#project-analysis-and-dependency-resolution&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Project analysis and dependency resolution”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;We will provide lint rules to read the manifest and detect errors such as invalid licenses.&lt;/p&gt;
&lt;p&gt;With project resolution, we will be able to provide more lint rules, some of which will be able to detect unused modules.&lt;/p&gt;
&lt;p&gt;With dependency resolution, we can - for example - detect dependencies that aren’t used inside a project.&lt;/p&gt;
&lt;p&gt;With this infrastructure, our LSP is going to be more powerful and provide more features, for example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rename variables across a project;&lt;/li&gt;
&lt;li&gt;auto-complete for imports;&lt;/li&gt;
&lt;li&gt;in-line types&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;type-system&quot;&gt;Type system&lt;/h3&gt;&lt;a href=&quot;#type-system&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Type system”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Building a full-fledged type system such as TypeScript is a massive effort; that’s why we decided to take a different direction and start by building a subset of the type system that requires stricter typing. This approach would allow us to build some important lint rules that users have been asking for.&lt;/p&gt;
&lt;p&gt;This will come with a downside: we will have to rely on a stricter code and minimal type inference from the compiler.&lt;/p&gt;
&lt;p&gt;Once we have something we can rely on, we can slowly widen the capabilities of our type system.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;cli&quot;&gt;CLI&lt;/h3&gt;&lt;a href=&quot;#cli&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “CLI”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;More features for the command line tool, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add the &lt;code dir=&quot;auto&quot;&gt;explain&lt;/code&gt; command for offline documentation;&lt;/li&gt;
&lt;li&gt;Allow the output to be exported in different formats (JSON, etc.)&lt;/li&gt;
&lt;li&gt;Auto-completion for other shells such as &lt;code dir=&quot;auto&quot;&gt;zsh&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Implement the &lt;code dir=&quot;auto&quot;&gt;--modified&lt;/code&gt; argument, which allows to format - for example - only the modified lines of a document;&lt;/li&gt;
&lt;li&gt;Expose metrics for Biome’s operations and being able to track down possible performance bottlenecks;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;plugins&quot;&gt;Plugins&lt;/h2&gt;&lt;a href=&quot;#plugins&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Plugins”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;We will explore plugins and come up with a design that fits Biome. Biome is different from other tools because Biome is a toolchain that has multiple tools in it, so we have to think out of the box and propose a design that might differ from the tools people are used to.&lt;/p&gt;
&lt;p&gt;We don’t know yet what a Biome’s plugin will look like, although a plugin should be able to tap all the tools that Biome offers.&lt;/p&gt;
&lt;p&gt;Some ideas that we will consider:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DSL&lt;/li&gt;
&lt;li&gt;WASM&lt;/li&gt;
&lt;li&gt;A Runtime&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;transformations&quot;&gt;Transformations&lt;/h2&gt;&lt;a href=&quot;#transformations&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Transformations”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Transformations and code generation will be our first steps towards our compiler.&lt;/p&gt;
&lt;p&gt;We will provide the ability to transform TypeScript and JSX files into JavaScript files.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;community-and-content&quot;&gt;Community and content&lt;/h2&gt;&lt;a href=&quot;#community-and-content&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Community and content”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Biome has a growing ecosystem, with an official VSCode extension, an official IntelliJ extension, and a Discord bot. We want to grow the features these tools provide and welcome anyone who wants to help us.&lt;/p&gt;
&lt;p&gt;Our community is slowly growing, and we want to reward everyone who sticks around and contributes to Biome. At Biome, &lt;strong&gt;we value every contribution&lt;/strong&gt;, so you don’t need to be proficient in Rust to help us. Even participating in discussions and helping us to shape our features or helping other people are considered
&lt;em&gt;contributions&lt;/em&gt;. If you’d like to continue contributing to our ecosystem, we also encourage you to &lt;a href=&quot;https://github.com/biomejs/biome/blob/main/GOVERNANCE.md#maintainer-nomination&quot;&gt;nominate yourself as a maintainer of the project&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Recently Biome started its own &lt;a href=&quot;https://www.youtube.com/channel/UC6ssscaFgCSlbv1Pb6krGVw&quot;&gt;YouTube Channel&lt;/a&gt;. We will use this channel to share learning content with the community.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;new-logo-and-homepage&quot;&gt;New logo and homepage&lt;/h2&gt;&lt;a href=&quot;#new-logo-and-homepage&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “New logo and homepage”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;With this blog post, we also want to officially announce our new logo, homepage and rebranding of the website.&lt;/p&gt;
&lt;p&gt;With this new logo, we want to give a different meaning to the project. Biome &lt;strong&gt;isn’t&lt;/strong&gt; a fork of Rome anymore, but a self-sufficient project ready to bloom.&lt;/p&gt;
&lt;p&gt;The triangle of the logo represents the mountains - &lt;strong&gt;soil&lt;/strong&gt; -, and the curly shape on the bottom left represents a wave of the ocean - &lt;strong&gt;water&lt;/strong&gt;. Two elements that are important in creating a self-sufficient ecosystem, so it can thrive and grow.&lt;/p&gt;</content:encoded></item><item><title>Biome formatter wins the Prettier challenge</title><link>https://biomejs.dev/zh-cn/blog/biome-wins-prettier-challenge/</link><guid isPermaLink="true">https://biomejs.dev/zh-cn/blog/biome-wins-prettier-challenge/</guid><pubDate>Mon, 27 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;With the release of Biome **&lt;code dir=&quot;auto&quot;&gt;v1.4.0&lt;/code&gt;
**, we claim the bounty of the &lt;a href=&quot;https://console.algora.io/challenges/prettier&quot;&gt;Prettier challenge&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;With
&lt;code dir=&quot;auto&quot;&gt;v1.4.0&lt;/code&gt;, you’ll get a better formatter experience, more formatting options, new VSCode features, new sponsors and more!&lt;/p&gt;
&lt;p&gt;You can upgrade Biome by running the following command:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--save-dev&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--save-exact&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;@biomejs/biome@1.4.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;pnpm&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--save-exact&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;@biomejs/biome@1.4.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;yarn&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;upgrade&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--exact&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;@biomejs/biome@1.4.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;better-formatter&quot;&gt;Better formatter&lt;/h2&gt;&lt;a href=&quot;#better-formatter&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Better formatter”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Biome formatter has now **over 96% in terms of compatibility
** against &lt;a href=&quot;https://prettier.io/&quot;&gt;Prettier&lt;/a&gt;! This score is computed for JavaScript, TypeScript, and JSX formatting.&lt;/p&gt;
&lt;p&gt;Merit of challenge that was launched by &lt;a href=&quot;http://blog.vjeux.com/&quot;&gt;Christopher Chedeau&lt;/a&gt;, one of the Prettier’s creators.&lt;/p&gt;
&lt;p&gt;The challenge attracted the attention of many people, and some of them decided to contribute to Biome to claim part of the bounty. I did see something amazing: contributors had an amazing coordination, they took ownership of the tasks and delivered the solution in a matter of hours.&lt;/p&gt;
&lt;p&gt;I believe the main factors that made this possible are three:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Money. It’s a fact, and it’s completely fine if someone decides to contribute only for earning a small stipend out of it.&lt;/li&gt;
&lt;li&gt;Communication. We used &lt;a href=&quot;https://github.com/biomejs/biome/issues/720&quot;&gt;GitHub&lt;/a&gt; as only medium of coordination. We provided information, instructions and help on how to deliver.&lt;/li&gt;
&lt;li&gt;Infrastructure. Biome relies on a solid testing infrastructure, built by &lt;a href=&quot;https://github.com/MichaReiser&quot;&gt;previous&lt;/a&gt; Rome Tools &lt;a href=&quot;https://github.com/ematipico&quot;&gt;employees&lt;/a&gt; and &lt;a href=&quot;https://github.com/IWANABETHATGUY/&quot;&gt;contributors&lt;/a&gt;. It’s able to catch every reformat bug, provide granular diffs and warn the user if the emitted output is the different from the one emitted by Prettier.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Before the challenge, Biome had roughly a compatibility rate of 85%, based on our internal metrics (JavaScript, TypeScript and JSX, on options parity). Even though 85% might seem high, the impact of a low number such as 15% on big code bases is huge, and people might feel intimidated by so many changes, causing early adopters to receive frictions when bring Biome to their team. A member of our community shared some insights:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As a great example of how much even just that last 5% has improved things for large codebases (and specifically with
&lt;code dir=&quot;auto&quot;&gt;bracketSpacing&lt;/code&gt; and now &lt;code dir=&quot;auto&quot;&gt;bracketSameLine&lt;/code&gt; implemented) i ran it one project in our monorepo […].&lt;/p&gt;
&lt;p&gt;Just last week, this number
&lt;code dir=&quot;auto&quot;&gt;[diagnostics]&lt;/code&gt; was more than 6,000. Even with the bracket options ignored, it was still more than 1000, and now there are only 200 left!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Although the challenge is over, we are committed to improve even more the compatibility score with prettier. Any contribution in this regard is very welcome.&lt;/p&gt;
&lt;p&gt;The challenge has also uncovered some cases in Prettier’s emitted output that we decided to not follow. We have created a &lt;a href=&quot;https://biomejs.dev/formatter/differences-with-prettier&quot;&gt;new section&lt;/a&gt; in our website that explains them. Our hope is to make this section smaller with the time.&lt;/p&gt;
&lt;p&gt;If there’s a divergence that isn’t documented in our website, you should consider that a bug and file an issue.&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;new-formatting-options&quot;&gt;New formatting options&lt;/h4&gt;&lt;a href=&quot;#new-formatting-options&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “New formatting options”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;With this challenge, we added new options to the formatter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/reference/configuration#formatterlineending&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;lineEnding&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Use this option to match the line endings of your OS. We support &lt;code dir=&quot;auto&quot;&gt;lf&lt;/code&gt; (line feed - &lt;code dir=&quot;auto&quot;&gt;\n&lt;/code&gt;), &lt;code dir=&quot;auto&quot;&gt;cr&lt;/code&gt; (carriage return -
&lt;code dir=&quot;auto&quot;&gt;\r&lt;/code&gt;) and &lt;code dir=&quot;auto&quot;&gt;crlf&lt;/code&gt; (carriage return line feed - &lt;code dir=&quot;auto&quot;&gt;\r\n&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/reference/configuration#javascriptormatterbracketsameline&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;bracketSameLine&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;example.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#919F9F;--1:#5D6376&quot;&gt;// Existing behavior. Now also the default, meaning `bracketSameLine: false`.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;Foo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;className&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;somethingReallyLongThatForcesThisToWrap&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;anotherReallyLongAttribute&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;withAValueThatsSurelyTooLong&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;soThatEverythingWraps&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;Hello&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;Foo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;selfClosingTags&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;likeThisOne&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;stillPlaceTheBracket&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;onItsOwnLine&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;toIndicateThat&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;itClosesItself&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt;  Hello&lt;Foo  selfClosingTags={likeThisOne}  stillPlaceTheBracket={onItsOwnLine}  toIndicateThat={itClosesItself}/&gt;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;After formatting with &lt;code dir=&quot;auto&quot;&gt;&quot;bracketSameLine&quot;: true&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;example.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#919F9F;--1:#5D6376&quot;&gt;// New behavior, with `bracketSameLine: true`.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;Foo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;className&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;somethingReallyLongThatForcesThisToWrap&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;anotherReallyLongAttribute&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;withAValueThatsSurelyTooLong&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;soThatEverythingWraps&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;Hello&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;Foo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;selfClosingTags&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;likeThisOne&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;stillPlaceTheBracket&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;onItsOwnLine&lt;/span&gt;&lt;span style=&quot;--0:#E2817F;--1:#B23834&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt;  Hello&lt;Foo  selfClosingTags={likeThisOne}  stillPlaceTheBracket={onItsOwnLine}/&gt;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/reference/configuration#javascriptformatterbracketspacing&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;bracketSpacing&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;example.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; { sort } &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;sort.js&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; = { &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;After formatting with &lt;code dir=&quot;auto&quot;&gt;&quot;bracketSpacing&quot;: false&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;example.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; {sort} &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;sort.js&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; = {&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;vscode-extension-goodies&quot;&gt;VSCode extension goodies&lt;/h2&gt;&lt;a href=&quot;#vscode-extension-goodies&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “VSCode extension goodies”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The VSCode has been moved to a &lt;a href=&quot;https://github.com/biomejs/biome-vscode&quot;&gt;new repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We removed the bundled binary from the extension, and you’ll be able to download the version that you want. Here’s a small video of how it works:&lt;/p&gt;
&lt;video width=&quot;1200&quot; height=&quot;800&quot; controls=&quot;&quot;&gt;
  &lt;source src=&quot;https://github.com/biomejs/biome-vscode/assets/649677/c7c1bf81-10a5-4cd6-bbdf-019d983a2d6a&quot; type=&quot;video/mp4&quot;&gt;
&lt;/video&gt;
&lt;p&gt;From today, we release a &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=biomejs.biome-nightly&quot;&gt;**nightly
**&lt;/a&gt; version of the extension. This is a version meant for early adopters and to test things before they are officially released.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;some-cli-goodies&quot;&gt;Some CLI goodies&lt;/h2&gt;&lt;a href=&quot;#some-cli-goodies&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Some CLI goodies”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;People that rely on Biome LSP will be pleased that they can now pass a custom configuration to the command
&lt;code dir=&quot;auto&quot;&gt;lsp-proxy&lt;/code&gt;, using the option &lt;code dir=&quot;auto&quot;&gt;--config-path&lt;/code&gt;. The same option is accepted by the command &lt;code dir=&quot;auto&quot;&gt;start&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--config-path=../path/where/config/is&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;lsp-proxy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--config-path=../path/where/config/is&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;start&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The CLI now exposes the option &lt;code dir=&quot;auto&quot;&gt;--diagnostic-level&lt;/code&gt;, that allows to filter the kind of diagnostics printed to terminal.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;check&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--diagnostic-level=error&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;./src&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;new-lint-rules-and-promoted-rule&quot;&gt;New lint rules, and promoted rule&lt;/h2&gt;&lt;a href=&quot;#new-lint-rules-and-promoted-rule&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “New lint rules, and promoted rule”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Biome is a linter too, and it features &lt;a href=&quot;https://biomejs.dev/linter/rules/&quot;&gt;177 rules&lt;/a&gt;! In this release, some rules are promoted and new ones are available.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;new-rules&quot;&gt;New rules&lt;/h3&gt;&lt;a href=&quot;#new-rules&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “New rules”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-default-export&quot;&gt;noDefaultExport&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;default&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; {}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/noDefaultExport.js:1:8 &lt;a href=&quot;https://biomejs.dev/linter/rules/no-default-export&quot;&gt;lint/nursery/noDefaultExport&lt;/a&gt; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Orange;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Orange;&quot;&gt;⚠&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Orange;&quot;&gt;Avoid &lt;/span&gt;&lt;span style=&quot;color: Orange;&quot;&gt;&lt;strong&gt;default&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Orange;&quot;&gt; exports.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;export default function f() {};
   &lt;strong&gt;   │ &lt;/strong&gt;       &lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;2 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Default exports cannot be easily discovered inside an editor and don&apos;t encourage the use of consistent names through a code base.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Use a named export instead.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-aria-hidden-on-focusable&quot;&gt;noAriaHiddenOnFocusable&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--1:#8844AE&quot;&gt;&lt;span style=&quot;--0:#7FDBCA&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#CAECE6&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;aria-hidden&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;tabIndex&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt; /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt;&lt;/button&gt;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/noAriaHiddenOnFocusable.js:1:1 &lt;a href=&quot;https://biomejs.dev/linter/rules/no-aria-hidden-on-focusable&quot;&gt;lint/nursery/noAriaHiddenOnFocusable&lt;/a&gt; &lt;span style=&quot;color: #000; background-color: #ddd;&quot;&gt; FIXABLE &lt;/span&gt; ━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;✖&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;Disallow &lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;aria-hidden=&quot;true&quot;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt; from being set on focusable elements.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;&amp;#x3C;div aria-hidden=&quot;true&quot; tabIndex=&quot;0&quot; /&gt;
   &lt;strong&gt;   │ &lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;2 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;aria-hidden&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; should not be set to &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;true&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; on focusable elements because this can lead to confusing behavior for screen reader users.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Unsafe fix&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;Remove the aria-hidden attribute from the element.&lt;/span&gt;

&lt;strong&gt;  &lt;/strong&gt;&lt;strong&gt;  1 │ &lt;/strong&gt;&amp;#x3C;div&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;tabIndex=&quot;0&quot;&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;/&gt;
&lt;strong&gt;  &lt;/strong&gt;&lt;strong&gt;    │ &lt;/strong&gt;     &lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-implicit-any-let&quot;&gt;noImplicitAnyLet&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;var &lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;a;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;a &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/noImplicitAnyLet.js:1:5 &lt;a href=&quot;https://biomejs.dev/linter/rules/no-implicit-any-let&quot;&gt;lint/nursery/noImplicitAnyLet&lt;/a&gt; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;✖&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;This variable implicitly has the &lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;any&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt; type.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;var a;
   &lt;strong&gt;   │ &lt;/strong&gt;    &lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;2 │ &lt;/strong&gt;a = 2;
    &lt;strong&gt;3 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Variable declarations without type annotation and initialization have implicitly the &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;any&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; type. Declare type or initialize the variable with some value.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-await&quot;&gt;useAwait&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;fetchData&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#919F9F;--1:#5D6376&quot;&gt;// Missing `await` for the promise returned by `fetch`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;fetch&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;/data&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/useAwait.js:1:1 &lt;a href=&quot;https://biomejs.dev/linter/rules/use-await&quot;&gt;lint/nursery/useAwait&lt;/a&gt; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;✖&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;This &lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;async&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt; function lacks an &lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;await&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt; expression.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;async function fetchData() {
   &lt;strong&gt;   │ &lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;2 │ &lt;/strong&gt;// Missing `await` for the promise returned by `fetch`
&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;3 │ &lt;/strong&gt;  return fetch(&apos;/data&apos;);
&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;4 │ &lt;/strong&gt;}
   &lt;strong&gt;   │ &lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;5 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Remove this &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;async&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; modifier, or add an &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;await&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; expression in the function.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;async function fetchData() {
   &lt;strong&gt;   │ &lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;2 │ &lt;/strong&gt;// Missing `await` for the promise returned by `fetch`
&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;3 │ &lt;/strong&gt;  return fetch(&apos;/data&apos;);
&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;4 │ &lt;/strong&gt;}
   &lt;strong&gt;   │ &lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;5 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;Async&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; functions without &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;await&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; expressions may not need to be declared &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;async&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-valid-aria-role&quot;&gt;useValidAriaRole&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--1:#8844AE&quot;&gt;&lt;span style=&quot;--0:#7FDBCA&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#CAECE6&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;role&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;datepicker&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--1:#8844AE&quot;&gt;&lt;span style=&quot;--0:#7FDBCA&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#CAECE6&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/useValidAriaRole.js:1:1 &lt;a href=&quot;https://biomejs.dev/linter/rules/use-valid-aria-role&quot;&gt;lint/nursery/useValidAriaRole&lt;/a&gt; &lt;span style=&quot;color: #000; background-color: #ddd;&quot;&gt; FIXABLE &lt;/span&gt; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;✖&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;Enforce that elements with ARIA roles must use a valid, non-abstract ARIA role.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;&amp;#x3C;div role=&quot;datepicker&quot;&gt;&amp;#x3C;/div&gt;
   &lt;strong&gt;   │ &lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;2 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Check &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;a href=&quot;https://www.w3.org/TR/wai-aria/#namefromauthor&quot;&gt;WAI-ARIA&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; for valid roles or provide options accordingly.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Unsafe fix&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;Remove the invalid &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;role&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; attribute.
&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; Check the list of all &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;a href=&quot;https://www.w3.org/TR/wai-aria/#role_definitions&quot;&gt;valid&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; role attributes.&lt;/span&gt;

&lt;strong&gt;  &lt;/strong&gt;&lt;strong&gt;  1 │ &lt;/strong&gt;&amp;#x3C;div&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;k&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&quot;&lt;/span&gt;&gt;&amp;#x3C;/div&gt;
&lt;strong&gt;  &lt;/strong&gt;&lt;strong&gt;    │ &lt;/strong&gt;     &lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-regex-literals&quot;&gt;useRegexLiterals&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;RegExp&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;abc&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;nursery/useRegexLiterals.js:1:1 &lt;a href=&quot;https://biomejs.dev/linter/rules/use-regex-literals&quot;&gt;lint/nursery/useRegexLiterals&lt;/a&gt; &lt;span style=&quot;color: #000; background-color: #ddd;&quot;&gt; FIXABLE &lt;/span&gt; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Orange;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Orange;&quot;&gt;⚠&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Orange;&quot;&gt;Use a regular expression literal instead of the &lt;/span&gt;&lt;span style=&quot;color: Orange;&quot;&gt;&lt;strong&gt;RegExp&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Orange;&quot;&gt; constructor.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;new RegExp(&quot;abc&quot;, &quot;u&quot;);
   &lt;strong&gt;   │ &lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;2 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Regular expression literals avoid some escaping required in a string literal, and are easier to analyze statically.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Safe fix&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;Use a &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;literal notation&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; instead.&lt;/span&gt;

    &lt;strong&gt;1&lt;/strong&gt;  &lt;strong&gt; │ &lt;/strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;n&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;e&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;w&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;&lt;strong&gt;·&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;R&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;e&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;g&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;E&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;x&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;p&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;&quot;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;&quot;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;&lt;strong&gt;·&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;&quot;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;&quot;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;;&lt;/span&gt;
      &lt;strong&gt;1&lt;/strong&gt;&lt;strong&gt; │ &lt;/strong&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;strong&gt;/&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;strong&gt;/&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;;&lt;/span&gt;
    &lt;strong&gt;2&lt;/strong&gt; &lt;strong&gt;2&lt;/strong&gt;&lt;strong&gt; │ &lt;/strong&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;h3 id=&quot;recommended-rules&quot;&gt;Recommended rules&lt;/h3&gt;&lt;a href=&quot;#recommended-rules&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Recommended rules”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-access-key&quot;&gt;a11y/noAccessKey&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--1:#8844AE&quot;&gt;&lt;span style=&quot;--0:#7FDBCA&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#CAECE6&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;submit&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;accessKey&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;Submit&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt; /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt;&lt;/button&gt;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;a11y/noAccessKey.js:1:22 &lt;a href=&quot;https://biomejs.dev/linter/rules/no-access-key&quot;&gt;lint/a11y/noAccessKey&lt;/a&gt; &lt;span style=&quot;color: #000; background-color: #ddd;&quot;&gt; FIXABLE &lt;/span&gt; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;✖&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;Avoid the &lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;accessKey&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt; attribute to reduce inconsistencies between keyboard shortcuts and screen reader keyboard comments.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;&amp;#x3C;input type=&quot;submit&quot; accessKey=&quot;s&quot; value=&quot;Submit&quot; /&gt;
   &lt;strong&gt;   │ &lt;/strong&gt;                     &lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;2 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Assigning keyboard shortcuts using the &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;accessKey&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; attribute leads to inconsistent keyboard actions across applications.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Unsafe fix&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;Remove the &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;&lt;strong&gt;accessKey&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt; attribute.&lt;/span&gt;

&lt;strong&gt;  &lt;/strong&gt;&lt;strong&gt;  1 │ &lt;/strong&gt;&amp;#x3C;input&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;type=&quot;submit&quot;&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;K&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;value=&quot;Submit&quot;&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;/&gt;
&lt;strong&gt;  &lt;/strong&gt;&lt;strong&gt;    │ &lt;/strong&gt;                     &lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-heading-content&quot;&gt;a11y/useHeadingContent&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--1:#8844AE&quot;&gt;&lt;span style=&quot;--0:#7FDBCA&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#CAECE6&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA&quot;&gt; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt;&lt;/button&gt;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;a11y/useHeadingContent.js:1:1 &lt;a href=&quot;https://biomejs.dev/linter/rules/use-heading-content&quot;&gt;lint/a11y/useHeadingContent&lt;/a&gt; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;✖&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;Provide screen reader accessible content when using &lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;heading&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  elements.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;&amp;#x3C;h1 /&gt;
   &lt;strong&gt;   │ &lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;2 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;All headings on a page should have content that is accessible to screen readers.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-simple-number-keys&quot;&gt;complexity/useSimpleNumberKeys&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;0x1&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; });&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;complexity/useSimpleNumberKeys.js:1:4 &lt;a href=&quot;https://biomejs.dev/linter/rules/use-simple-number-keys&quot;&gt;lint/complexity/useSimpleNumberKeys&lt;/a&gt; &lt;span style=&quot;color: #000; background-color: #ddd;&quot;&gt; FIXABLE &lt;/span&gt; ━━━━━━━━━━━━━━━━

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;✖&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;Hexadecimal number literal is not allowed here.&lt;/span&gt;

&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&gt;&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;1 │ &lt;/strong&gt;({ 0x1: 1 });
   &lt;strong&gt;   │ &lt;/strong&gt;   &lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;^&lt;/span&gt;&lt;/strong&gt;
    &lt;strong&gt;2 │ &lt;/strong&gt;

&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;ℹ&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: lightgreen;&quot;&gt;Safe fix&lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: lightgreen;&quot;&gt;Replace 0x1 with 1&lt;/span&gt;

&lt;strong&gt;1&lt;/strong&gt;  &lt;strong&gt; │ &lt;/strong&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: Tomato;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;x&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: Tomato;&quot;&gt;;&lt;/span&gt;
  &lt;strong&gt;1&lt;/strong&gt;&lt;strong&gt; │ &lt;/strong&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;&lt;span style=&quot;opacity: 0.8;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: MediumSeaGreen;&quot;&gt;;&lt;/span&gt;
&lt;strong&gt;2&lt;/strong&gt; &lt;strong&gt;2&lt;/strong&gt;&lt;strong&gt; │ &lt;/strong&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;promoted-rules&quot;&gt;Promoted rules&lt;/h3&gt;&lt;a href=&quot;#promoted-rules&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Promoted rules”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-interactive-element-to-noninteractive-role&quot;&gt;a11y/noInteractiveElementToNoninteractiveRole&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-this-in-static&quot;&gt;complexity/noThisInStatic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-arrow-function&quot;&gt;complexity/useArrowFunction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-empty-character-class-in-regex&quot;&gt;correctness/noEmptyCharacterClassInRegex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-invalid-new-builtin&quot;&gt;correctness/noInvalidNewBuiltin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-useless-else&quot;&gt;style/noUselessElse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-as-const-assertion&quot;&gt;style/useAsConstAssertion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-shorthand-assign&quot;&gt;style/useShorthandAssign&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-approximative-numeric-constant&quot;&gt;suspicious/noApproximativeNumericConstant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-misleading-instantiator&quot;&gt;suspicious/noMisleadingInstantiator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-misrefactored-shorthand-assign&quot;&gt;suspicious/noMisrefactoredShorthandAssign&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;deprecated-rules&quot;&gt;Deprecated rules&lt;/h3&gt;&lt;a href=&quot;#deprecated-rules&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Deprecated rules”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-new-symbol&quot;&gt;correctness/noNewSymbol&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The rule is replaced by &lt;a href=&quot;https://biomejs.dev/linter/rules/no-invalid-new-builtin&quot;&gt;correctness/noInvalidNewBuiltin&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;homage-to-our-maintainers&quot;&gt;Homage to our maintainers&lt;/h2&gt;&lt;a href=&quot;#homage-to-our-maintainers&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Homage to our maintainers”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Since Biome was forked, new people joined the project. They have been helping with in so many ways that you can’t even imagine: new features, side projects, engaging with the community, support, documentation, and more. OSS is not just about coding.&lt;/p&gt;
&lt;p&gt;Thank you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SuperchupuDev&quot;&gt;Madeline Gurriarán @SuperchupuDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nhedger&quot;&gt;Nicolas Hedger @nhedger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/victor-teles&quot;&gt;Victor Teles @victor-teles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And a big welcome to our new joined maintainer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/faultyserver&quot;&gt;Jon Egeland @faultyserver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/TaKO8Ki&quot;&gt;Takayuki Maeda @TaKO8Ki&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;new-sponsors&quot;&gt;New sponsors&lt;/h2&gt;&lt;a href=&quot;#new-sponsors&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “New sponsors”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Last but not least, we are proud to announce that we have two new sponsors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gold: Shiguredō (&lt;a href=&quot;https://shiguredo.jp/&quot;&gt;https://shiguredo.jp/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Bronze: KANAME (&lt;a href=&quot;https://www.kanamekey.com/&quot;&gt;https://www.kanamekey.com/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to economically contribute to the project and help it to ship more features, you can do so from the &lt;a href=&quot;https://github.com/sponsors/biomejs/&quot;&gt;GitHub Sponsorship page&lt;/a&gt; or the &lt;a href=&quot;https://opencollective.com/biome&quot;&gt;Open Collective page&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;whats-next&quot;&gt;What’s next&lt;/h2&gt;&lt;a href=&quot;#whats-next&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “What’s next”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The project is thriving, with more people curious about the project and contributors that want to be involved.&lt;/p&gt;
&lt;p&gt;In the next months we will focus on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Publishing a Roadmap. &lt;strong&gt;Keep an eye on it&lt;/strong&gt;, it will involve a lot of &lt;strong&gt;interesting&lt;/strong&gt; work.&lt;/li&gt;
&lt;li&gt;Rebranding the website with a new logo.&lt;/li&gt;
&lt;li&gt;Translate the website in Japanese.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;translations&quot;&gt;Translations&lt;/h2&gt;&lt;a href=&quot;#translations&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Translations”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://juejin.cn/post/7308643782375768118&quot;&gt;中文翻译: Biome赢得了Prettier挑战&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Announcing Biome</title><link>https://biomejs.dev/zh-cn/blog/annoucing-biome/</link><guid isPermaLink="true">https://biomejs.dev/zh-cn/blog/annoucing-biome/</guid><pubDate>Tue, 29 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We are happy to announce Biome, &lt;em&gt;toolchain of the web&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Biome is the &lt;strong&gt;official&lt;/strong&gt; fork of Rome and it will continue to be Rome’s legacy.&lt;/p&gt;
&lt;p&gt;Biome is &lt;strong&gt;led and maintained&lt;/strong&gt; by the same people that maintained Rome so far.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Follow us&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/biomejs&quot;&gt;Github organization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/biomejs/biome&quot;&gt;Official repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/chat&quot;&gt;Official discord server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;background&quot;&gt;Background&lt;/h2&gt;&lt;a href=&quot;#background&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Background”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;I want to give you some background and context, which could help you to get why the core team created a new project with a new name. If you’re not interested, feel free to jump to the &lt;a href=&quot;#enters-biome&quot;&gt;next section&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;how-it-started&quot;&gt;How it started&lt;/h3&gt;&lt;a href=&quot;#how-it-started&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “How it started”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Before explaining the reasons for the fork, I’d like to give you some background and context; this would help you understand the reasons
that led to this decision.&lt;/p&gt;
&lt;p&gt;When I &lt;a href=&quot;https://github.com/rome/tools/pull/794&quot;&gt;joined&lt;/a&gt; the Rome project, the project was still young and written in &lt;a href=&quot;https://github.com/rome/tools/tree/archived-js&quot;&gt;TypeScript&lt;/a&gt;.
A long time passed, and the project underwent many transitions.&lt;/p&gt;
&lt;p&gt;Rome was initially released and licensed under the Meta OSS umbrella. Meta is an excellent incubator for OSS projects, but some people didn’t like it. At least, my impression was that they didn’t.&lt;/p&gt;
&lt;p&gt;The npm package &lt;code dir=&quot;auto&quot;&gt;rome&lt;/code&gt; belonged to another person, so when ownership changed, there were already a lot of version numbers used. The team always struggled with versioning. It shouldn’t be hard to version a software!&lt;/p&gt;
&lt;p&gt;After a few months, the project got out of Meta’s OSS umbrella. In six months, the creator Sebastian McKenzie created the company Rome Tools Inc., to keep working on the Rome project so to eventually became sustainable.&lt;/p&gt;
&lt;p&gt;I was excited about the news because I believed in Rome’s mission, so I decided to quit my job and join the adventure. In a few weeks, I joined Rome Tools Inc. as
a full-time employee to work on developer tools as my daily job. For me, it was like a dream coming true!&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;how-it-ended-or-did-it&quot;&gt;How it ended (or did it?)&lt;/h3&gt;&lt;a href=&quot;#how-it-ended-or-did-it&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “How it ended (or did it?)”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Not all startups manage to succeed, and Rome Tools Inc. wasn’t one of the lucky ones. Eventually, all the employees were laid off.&lt;/p&gt;
&lt;p&gt;My adventure with Rome Tools Inc. sadly ended, but fortunately, my career working with developer tools continued! A few months later, I joined the &lt;a href=&quot;https://astro.build/&quot;&gt;Astro Technology Company&lt;/a&gt; working full-time. It’s a great place to work, and I get to do what I love every day with fantastic people. I love it!&lt;/p&gt;
&lt;p&gt;Part of me was still charmed by Rome’s mission though. However, it wasn’t just that. I like working on parsers/compilers in my free time. I &lt;strong&gt;love&lt;/strong&gt; the &lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;Rust&lt;/a&gt; language, and Rome is the perfect OSS project where I can use it.&lt;/p&gt;
&lt;p&gt;So, in my free time, I continued with my contributions to Rome as much as possible; luckily, I still had some rights that allowed me to publish new versions of the project. Despite the unsuccessful adventure with Rome Tools Inc., I wanted to keep the project alive.&lt;/p&gt;
&lt;p&gt;A few new &lt;a href=&quot;#the-core-team&quot;&gt;OSS contributors&lt;/a&gt; joined the cause and helped in contributing to the project. I wasn’t alone, and that’s the great thing about OSS. You eventually find people who like the project and want to contribute too.&lt;/p&gt;
&lt;p&gt;In June, I &lt;a href=&quot;https://portal.gitnation.org/contents/rome-a-modern-toolchain&quot;&gt;gave a talk&lt;/a&gt; about Rome at JsNation 2023.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://biomejs.dev/_astro/JsNation_2023.Bny4KZ09_262Gct.webp&quot; alt=&quot;Emanuele Stoppa on the stage of JsNation&quot; width=&quot;2048&quot; height=&quot;1365&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/p&gt;
&lt;p&gt;So, the project is still alive, but maintaining it has become challenging:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I don’t have admin rights on Discord, so I can’t delegate moderation rights to other people;&lt;/li&gt;
&lt;li&gt;I don’t have access to the hosting platform of the website;&lt;/li&gt;
&lt;li&gt;I don’t have access to any registry (npm, VSCode, etc.);&lt;/li&gt;
&lt;li&gt;the project is still under the MIT license of Rome Tools Inc., which makes attributions and contributions seem foggy from a legal point of view (where’s the company? I don’t know).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Many attempts to reach out to the current owner were all void. There was only one thing I could do. &lt;strong&gt;&lt;a href=&quot;#the-core-team&quot;&gt;We could do&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;enters-biome&quot;&gt;Enters: Biome&lt;/h2&gt;&lt;a href=&quot;#enters-biome&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Enters: Biome”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;We created Biome. After weeks of discussions among the members of the core team and conversations with some friends, we thought that a clean slate was the best course of action.&lt;/p&gt;
&lt;p&gt;We pondered the idea of keeping the “rome” name in the new fork, but that was proven difficult:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sebastian has registered tons of stuff with the “rome” name (GitHub organizations, website domains, open collectives, npm organizations). Finding the right combination wasn’t easy;&lt;/li&gt;
&lt;li&gt;without the proper rights in the Discord server, we couldn’t delegate the moderation rights. Discord is a very important asset for community building;&lt;/li&gt;
&lt;li&gt;keeping the name would have caused some attribution to Rome Tools Inc., making things still foggy when it comes to the legal aspects of the source code;&lt;/li&gt;
&lt;li&gt;we don’t know if the “rome” name is registered; if it turns out it is, we could have incurred some legal troubles;&lt;/li&gt;
&lt;li&gt;“Rome” has a lot of historical baggage, as explained before (Meta and, fail as a startup);&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Given all these difficulties, the core team settled for a new project.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;new-is-always-better&quot;&gt;”New is always better.”&lt;/h3&gt;&lt;a href=&quot;#new-is-always-better&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “”New is always better.””&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;min-width:200px&quot;&gt;&lt;img src=&quot;https://media.giphy.com/media/7EamSGumESd0Y/giphy.gif&quot; width=&quot;100%&quot;&gt;&lt;/div&gt;
&lt;p&gt;Biome will embrace the same &lt;a href=&quot;https://biomejs.dev/internals/philosophy&quot;&gt;philosophy&lt;/a&gt; of the old Rome and the same mission. Although, the roadmap will likely change, and the core team could decide to focus on making the current features more stable instead of releasing new ones.&lt;/p&gt;
&lt;p&gt;Still, the primary mission is alive, and Biome wants to be a 360° toolchain; we recently started working on &lt;strong&gt;transformations&lt;/strong&gt;, which will eventually set up the foundations of the compiler.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;why-biome&quot;&gt;Why Biome&lt;/h3&gt;&lt;a href=&quot;#why-biome&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Why Biome”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The team wanted to create a second “Rome”, a second version of it. So we fused the words “Bis” and “Rome”. **Biome&quot;&quot;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;i-still-use-the-rome-package-what-should-i-do&quot;&gt;I still use the &lt;code dir=&quot;auto&quot;&gt;rome&lt;/code&gt; package. What should I do?&lt;/h2&gt;&lt;a href=&quot;#i-still-use-the-rome-package-what-should-i-do&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “I still use the rome package. What should I do?”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code dir=&quot;auto&quot;&gt;rome&lt;/code&gt; package &lt;strong&gt;&lt;em&gt;won’t be maintained anymore&lt;/em&gt;&lt;/strong&gt; by the core team, so you won’t get any more releases.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;You should use the &lt;code dir=&quot;auto&quot;&gt;@biomejs/biome&lt;/code&gt; package. Note that Biome also comes with a lot of new features and fixes. We’ve just prepared a &lt;a href=&quot;https://biomejs.dev/blog/biome-v1&quot;&gt;blog post&lt;/a&gt; for that.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;diff&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;&quot;rome&quot;: &quot;12.1.3&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;&quot;@biomejs/biome&quot;: &quot;1.0.0&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;And change the CLI name in your scripts:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;diff&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;&quot;scripts&quot;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;&quot;format&quot;: &quot;rome format --write ./src&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;&quot;format&quot;: &quot;biome format --write ./src&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In your &lt;code dir=&quot;auto&quot;&gt;rome.json&lt;/code&gt; file, update the URL of the &lt;code dir=&quot;auto&quot;&gt;$schema&lt;/code&gt; field:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;diff&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;&quot;$schema&quot;: &quot;https://docs.rome.tools/schemas/12.1.3/schema.json&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;&quot;$schema&quot;: &quot;https://biomejs.dev/schemas/1.0.0/schema.json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Then install the new official &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=biomejs.biome&quot;&gt;VSCode&lt;/a&gt; or &lt;a href=&quot;https://open-vsx.org/extension/biomejs/biome&quot;&gt;open VSX&lt;/a&gt; extension. That’s an important step if you use these extensions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;After the installation of the extension, open the &lt;code dir=&quot;auto&quot;&gt;settings.json&lt;/code&gt;. If you have some Rome related settings there, you’ll have to update them:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;diff&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;&quot;[javascript]&quot;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;&quot;editor.defaultFormatter&quot;: &quot;rome.rome&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;&quot;editor.defaultFormatter&quot;: &quot;biomejs.biome&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;&quot;editor.codeActionsOnSave&quot;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;&quot;quickfix.rome&quot;: true,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;&quot;source.organizeImports.rome&quot;: true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;&quot;quickfix.biome&quot;: true,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;&quot;source.organizeImports.biome&quot;: true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Biome &lt;strong&gt;still accepts the &lt;code dir=&quot;auto&quot;&gt;rome.json&lt;/code&gt; file&lt;/strong&gt; as a configuration, so you don’t need to do anything yet. Biome also takes &lt;code dir=&quot;auto&quot;&gt;biome.json&lt;/code&gt; as a configuration file.&lt;/p&gt;
&lt;p&gt;We will eventually sunset the &lt;code dir=&quot;auto&quot;&gt;rome.json&lt;/code&gt; configuration file for &lt;code dir=&quot;auto&quot;&gt;biome.json&lt;/code&gt;, but Biome will do that for you in the subsequent releases. So, don’t worry about updating everything unless you want to.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;the-core-team&quot;&gt;The core team&lt;/h2&gt;&lt;a href=&quot;#the-core-team&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “The core team”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ematipico&quot;&gt;Emanuele Stoppa&lt;/a&gt;: me, the lead of the project 🤓&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/denbezrukov&quot;&gt;Denis Bezrukov&lt;/a&gt;: Denis has contributed to the project for a long time He made contributions to many tools like formatter and parser;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Conaclos&quot;&gt;Victorien Elvinger&lt;/a&gt;: Victorien is very passionate, and he’s made tons of contributions to the Biome linter by creating new rules and optimising the ones that were already there when he joined;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nissy-dev&quot;&gt;Daiki Nishikawa&lt;/a&gt;: Daiki worked on linter and parser, by adding new rules, fixing the existing ones, improving the internal semantic model, and adding new grammar to the JavaScript/TypeScript parser;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/unvalley&quot;&gt;unvalley&lt;/a&gt;: unvalley added a lot of value to the linter and parser. They tackled some complex rules, for example, especially the ones around regex;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;special-thanks&quot;&gt;Special thanks&lt;/h2&gt;&lt;a href=&quot;#special-thanks&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Special thanks”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/strager&quot;&gt;Strager&lt;/a&gt;: his inputs and constructive criticisms to the project are what helped Biome to arrive to this point;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Boshen&quot;&gt;Boshen&lt;/a&gt;: one of the greatest admirers of the project since the Rust rewrite; he joined the Biome community to learn from us and contribute as much as possible. He now leads a similar project to Biome, &lt;a href=&quot;https://github.com/web-infra-dev/oxc&quot;&gt;oxc&lt;/a&gt;. Check it out.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MichaReiser&quot;&gt;Micha&lt;/a&gt;: ex-employee of Rome Tools Inc., he is now a full-time developer of the project &lt;a href=&quot;https://github.com/astral-sh/ruff&quot;&gt;Ruff&lt;/a&gt;, he gave a lot of good pieces of advice, and he was a good listener when I was struggling to make the right decisions.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;translations&quot;&gt;Translations&lt;/h2&gt;&lt;a href=&quot;#translations&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Translations”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://juejin.cn/post/7308539123538608165&quot;&gt;中文翻译: 宣布 Biome&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Biome v1</title><link>https://biomejs.dev/zh-cn/blog/biome-v1/</link><guid isPermaLink="true">https://biomejs.dev/zh-cn/blog/biome-v1/</guid><pubDate>Tue, 29 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In Biome v1, the formatter has options for JSX quotes and parentheses in the arrow functions; the CLI adds a new command &lt;code dir=&quot;auto&quot;&gt;biome lint&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;.jsonc&lt;/code&gt; files are supported, and it’s possible to extend the configuration file.&lt;/p&gt;
&lt;p&gt;You can upgrade Biome by running the following command:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--save-dev&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--save-exact&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;@biomejs/biome@1.0.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;pnpm&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--save-exact&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;@biomejs/biome@1.0.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;yarn&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;upgrade&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--exact&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;@biomejs/biome@1.0.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Or install the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=biomejs.biome&quot;&gt;VS Code extension&lt;/a&gt; to integrate Biome into your editor.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;new-formatter-options&quot;&gt;New formatter options&lt;/h2&gt;&lt;a href=&quot;#new-formatter-options&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “New formatter options”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Biome now supports two new, long-awaited options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;support for formatting the preferred quote kind in JSX;&lt;/li&gt;
&lt;li&gt;support for formatting parenthesis in arrow functions only when they are needed;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;jsx-quotes-style&quot;&gt;JSX quotes style&lt;/h3&gt;&lt;a href=&quot;#jsx-quotes-style&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “JSX quotes style”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;You can use this option via CLI or via &lt;code dir=&quot;auto&quot;&gt;biome.json&lt;/code&gt; file:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;biome.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;javascript&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;formatter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;jsxQuoteStyle&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;single&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--jsx-quote-style=single&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--write&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;./src&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;And Biome will apply single quotes when defining attributes in JSX code:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; Item &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;./item.jsx&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;Header&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; =&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;Item&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;Docs&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--1:#8844AE&quot;&gt;&lt;span style=&quot;--0:#7FDBCA&quot;&gt; /&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt; {  return ;};&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;arrow-function-parenthesis&quot;&gt;Arrow function parenthesis&lt;/h3&gt;&lt;a href=&quot;#arrow-function-parenthesis&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Arrow function parenthesis”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;You can decide not to print parenthesis in arrow functions. You can customize the option via CLI or via &lt;code dir=&quot;auto&quot;&gt;biome.json&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;biome.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;javascript&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;formatter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;arrowParentheses&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;asNeeded&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--arrow-parentheses=as-needed&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--write&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;./src&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;And Biome will print parenthesis only for those arrow functions that require them:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#919F9F;--1:#5D6376&quot;&gt;// no need for parentheses&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;term&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; =&gt; {}&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#919F9F;--1:#5D6376&quot;&gt;// needs parentheses&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;filterBy&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;term&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0;--1:#403F53&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; =&gt; {}&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt; {};// needs parenthesesconst filterBy = (term, fn) =&gt; {};&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;cli-improvements&quot;&gt;CLI improvements&lt;/h2&gt;&lt;a href=&quot;#cli-improvements&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “CLI improvements”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The CLI was heavily reworked to guarantee consistent behaviour when handling files, diagnostics emitted and commands.&lt;/p&gt;
&lt;p&gt;Among those changes, there are some &lt;strong&gt;breaking changes&lt;/strong&gt; in its behaviour.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The CLI exits with an error code if the configuration file contains errors; while Biome can parse the configuration successfully - even with errors - this was a hazard for our users.
A typo in the configuration file would have resulted in Biome applying its defaults, and executing Biome with a different behaviour compared to the one set by the user.&lt;/li&gt;
&lt;li&gt;The command &lt;code dir=&quot;auto&quot;&gt;biome check&lt;/code&gt; will now emit error diagnostics for &lt;em&gt;code not formatted&lt;/em&gt; and exits with an error code. This behaviour aligns with the semantics meant for this command.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;new-biome-lint-command&quot;&gt;New &lt;code dir=&quot;auto&quot;&gt;biome lint&lt;/code&gt; command&lt;/h3&gt;&lt;a href=&quot;#new-biome-lint-command&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “New biome lint command”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The command &lt;code dir=&quot;auto&quot;&gt;biome check&lt;/code&gt; is meant to run multiple tools, which sometimes can overwhelm the users. With &lt;code dir=&quot;auto&quot;&gt;biome lint&lt;/code&gt;, Biome will only run lint rules against files.&lt;/p&gt;
&lt;p&gt;As for now, the command accepts almost all the CLI arguments of the &lt;code dir=&quot;auto&quot;&gt;biome check&lt;/code&gt;. In the future, this command will specialize and tweak its behaviour around linting.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;more-control-over-errors&quot;&gt;More control over errors&lt;/h3&gt;&lt;a href=&quot;#more-control-over-errors&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “More control over errors”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;By default, when Biome sees a file that can’t handle, it fires a diagnostic and will exit with an error code.&lt;/p&gt;
&lt;p&gt;With &lt;code dir=&quot;auto&quot;&gt;--files-ignore-unknown&lt;/code&gt; option, the CLI won’t emit diagnostics and will continue processing files.&lt;/p&gt;
&lt;p&gt;You can define this behaviour in the &lt;code dir=&quot;auto&quot;&gt;biome.json&lt;/code&gt; too:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;biome.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;ignoreUnknown&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;When Biome doesn’t process files during a command, it exits with an error code and emits an error diagnostic.&lt;/p&gt;
&lt;p&gt;Now, with &lt;code dir=&quot;auto&quot;&gt;--no-errors-on-unmatched&lt;/code&gt;, Biome will exist with a successful code and doesn’t emit any diagnostics.&lt;/p&gt;
&lt;p&gt;This new option allows users to use Biome with tools like &lt;code dir=&quot;auto&quot;&gt;lint-staged&lt;/code&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;exit-on-warnings&quot;&gt;Exit on warnings&lt;/h3&gt;&lt;a href=&quot;#exit-on-warnings&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Exit on warnings”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;In Biome, you can change the configuration of rules and allow them to emit diagnostics. This behaviour was limited, and now with &lt;code dir=&quot;auto&quot;&gt;--error-on-warnings&lt;/code&gt; option, you can tell Biome to exit with an error code if a &lt;strong&gt;warning&lt;/strong&gt; is emitted.&lt;/p&gt;
&lt;p&gt;Here’s an example, let’s change the diagnostic level of a rule via &lt;code dir=&quot;auto&quot;&gt;biome.json&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;biome.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;linter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;recommended&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;rules&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;a11y&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;useAltText&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;warn&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Here’s a sample code that will trigger the rule:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;Image&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt; =&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#CAECE6;--1:#8844AE&quot;&gt;img&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#8844AE&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;https://example.com/image.png&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--1:#8844AE&quot;&gt;&lt;span style=&quot;--0:#7FDBCA&quot;&gt; /&gt;&lt;/span&gt;&lt;span style=&quot;--0:#C792EA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt; {  return &lt;img src=&quot;&quot;&gt;;};&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;And now, run the CLI using the new option:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;biome&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;lint&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--error-on-warnings&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;./src&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;jsonc-support-and-comments&quot;&gt;JSONC support and comments&lt;/h2&gt;&lt;a href=&quot;#jsonc-support-and-comments&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “JSONC support and comments”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Biome’s JSON parser now supports comments, so we enabled these exciting new features.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;jsonc-file-support&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;.jsonc&lt;/code&gt; file support&lt;/h3&gt;&lt;a href=&quot;#jsonc-file-support&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “.jsonc file support”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Biome can now format and lint &lt;code dir=&quot;auto&quot;&gt;.jsonc&lt;/code&gt; files.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;allow-comments-in-json-files&quot;&gt;Allow comments in JSON files&lt;/h3&gt;&lt;a href=&quot;#allow-comments-in-json-files&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Allow comments in JSON files”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Biome can parse comments inside JSON files. You can opt-in to this feature via the configuration file:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;biome.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;json&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;parser&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;allowComments&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;The &lt;code dir=&quot;auto&quot;&gt;biome.json&lt;/code&gt; file &lt;strong&gt;doesn’t&lt;/strong&gt; allow comments.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;aside aria-label=&quot;Caution&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Caution&lt;/p&gt;&lt;div&gt;&lt;p&gt;When enabling this feature, comments will be permitted in &lt;strong&gt;all&lt;/strong&gt; JSON files encountered by Biome.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;Plus, Biome now recognizes some &lt;strong&gt;known&lt;/strong&gt; files as “JSON files that can have comments”. For example, now Biome can
format your &lt;code dir=&quot;auto&quot;&gt;tsconfig.json&lt;/code&gt; file with comments without emitting errors!&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;extends-property&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;extends&lt;/code&gt; property&lt;/h2&gt;&lt;a href=&quot;#extends-property&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “extends property”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;You can now break down your configuration file into different files and join them using the new &lt;code dir=&quot;auto&quot;&gt;extends&lt;/code&gt; property.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;biome.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;extends&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;./formatter.json&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#C789D6;--1:#7C5686&quot;&gt;./linter.json&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Check the &lt;a href=&quot;https://biomejs.dev/reference/configuration#extends&quot;&gt;documentation&lt;/a&gt; to understand how it works.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;linter&quot;&gt;Linter&lt;/h2&gt;&lt;a href=&quot;#linter&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Linter”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;We &lt;strong&gt;deleted&lt;/strong&gt; two rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;useCamelCase&lt;/code&gt;, which is replaced by &lt;code dir=&quot;auto&quot;&gt;useNamingConvention&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;noExtraSemicolon&lt;/code&gt;, not needed; the formatter takes care of it;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;new-rules&quot;&gt;New Rules&lt;/h3&gt;&lt;a href=&quot;#new-rules&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “New Rules”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-duplicate-json-keys/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noDuplicateJsonKeys&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This rule disallows duplicate keys in a JSON object.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-excessive-cognitive-complexity/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noExcessiveComplexity&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This rule computes a complexity score and reports code with a score above a configurable threshold.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-fallthrough-switch-clause/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noFallthroughSwitchClause&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This rule disallows &lt;code dir=&quot;auto&quot;&gt;switch&lt;/code&gt; cases that fall through to the next &lt;code dir=&quot;auto&quot;&gt;case&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-global-is-finite/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noGlobalIsFinite&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This rule recommends using &lt;code dir=&quot;auto&quot;&gt;Number.isFinite&lt;/code&gt; instead of the global and unsafe &lt;code dir=&quot;auto&quot;&gt;isFinite&lt;/code&gt; that attempts a type of coercion.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-global-is-nan/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noGlobalIsNan&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This rule recommends using &lt;code dir=&quot;auto&quot;&gt;Number.isNaN&lt;/code&gt; instead of the global and unsafe &lt;code dir=&quot;auto&quot;&gt;isNaN&lt;/code&gt; that attempts a type of coercion.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-nonoctal-decimal-escape/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noNonoctalDecimalEscape&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This rule disallows &lt;code dir=&quot;auto&quot;&gt;\8&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;\9&lt;/code&gt; escape sequences in string literals.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-unsafe-declaration-merging/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noUnsafeDeclarationMerging&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This rule disallows declaration merging between an interface and a class.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-useless-empty-export/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noUselessEmptyExport&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This rule disallows useless &lt;code dir=&quot;auto&quot;&gt;export {}&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-useless-this-alias/&quot;&gt;noUselessThisAlias&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This rule disallows useless aliasing of &lt;code dir=&quot;auto&quot;&gt;this&lt;/code&gt; in arrow functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-void/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noVoid&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This rule disallows the use of &lt;code dir=&quot;auto&quot;&gt;void&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-arrow-function/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;useArrowFunction&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This rule proposes turning function expressions into arrow functions.
Function expressions that use &lt;code dir=&quot;auto&quot;&gt;this&lt;/code&gt; are ignored.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-getter-return/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;useGetterReturn&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This rule enforces &lt;code dir=&quot;auto&quot;&gt;get&lt;/code&gt; methods to always return a value.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-import-restrictions/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;useImportRestrictions&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enables restrictions on how local imports should be imported.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-is-array/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;useIsArray&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This rule proposes using &lt;code dir=&quot;auto&quot;&gt;Array.isArray()&lt;/code&gt; instead of &lt;code dir=&quot;auto&quot;&gt;instanceof Array&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-naming-convention/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;useNamingConvention&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The rule enforces wide-spread naming conventions of Javascript and TypeScript across a codebase.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h4 id=&quot;promoted-rules&quot;&gt;Promoted rules&lt;/h4&gt;&lt;a href=&quot;#promoted-rules&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Promoted rules”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;New rules are promoted, please check &lt;a href=&quot;https://github.com/rome/tools/discussions/4750&quot;&gt;#4750&lt;/a&gt; for more details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-duplicate-jsx-props/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;suspicious/noDuplicateJsxProps&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-console-log/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;suspicious/noConsoleLog&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-is-nan/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;correctness/useIsNan&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-simple-number-keys/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;complexity/useSimpleNumberKeys&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-literal-keys/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;complexity/useLiteralKeys&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-for-each/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;complexity/noForEach&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-heading-content/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;a11y/useHeadingContent&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following rules are now recommended:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/use-exponentiation-operator/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;useExponentiationOperator&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-useless-fragments/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noUselessFragments&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biomejs.dev/linter/rules/no-redundant-use-strict/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;noRedundantUseStrict&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;support-for-function-class-parameter-decorators&quot;&gt;Support for function class parameter decorators&lt;/h2&gt;&lt;a href=&quot;#support-for-function-class-parameter-decorators&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Support for function class parameter decorators”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;In the last release, Biome introduced support for Stage 3 decorators. Although, this final proposal doesn’t support the function class parameter decorators:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C792EA;--1:#8844AE&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FFCB8B;--1:#111111&quot;&gt;Controller&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;Param&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#984E4D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--1:#403F53&quot;&gt;&lt;span style=&quot;--0:#D6DEEB&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#D7DBE0&quot;&gt;id&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3B61B0&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; {}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#919F9F;--1:#5D6376&quot;&gt;// ^^^^^^^^^^^^ syntax not covered by the official and final decorators spec&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Some users were dissatisfied because they couldn’t use Biome inside their Angular/NestJS project. Now you can do it via configuration:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;biome.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;javascript&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;parser&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;&quot;unsafeParameterDecoratorsEnabled&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#FF6A83;--1:#A24848&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;acknowledgements&quot;&gt;Acknowledgements&lt;/h3&gt;&lt;a href=&quot;#acknowledgements&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Acknowledgements”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Big thank you to the following contributors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/denbezrukov&quot;&gt;denbezrukov&lt;/a&gt;, they implemented the new decorator parameter, the new option &lt;code dir=&quot;auto&quot;&gt;jsxQuoteStyle&lt;/code&gt; in the formatter, and started the works for our new CSS parser;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Conaclos&quot;&gt;Conaclos&lt;/a&gt;, they continued creating new rules, making the existing ones smarter and adding tons of value to Biome;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SuperchupuDev&quot;&gt;SuperchupuDev&lt;/a&gt;, they implemented the new option &lt;code dir=&quot;auto&quot;&gt;arrowParentheses&lt;/code&gt; in the formatter;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nissy-dev&quot;&gt;nissy-dev&lt;/a&gt;, they fixed a bunch of issues around the linter;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/unvalley&quot;&gt;unvalley&lt;/a&gt;, they fixed a bunch of issues around the linter and implemented new rules;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/arendjr&quot;&gt;arendjr&lt;/a&gt;, they implemented new rules in the linter and implemented the new import sorting strategy;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ddanielsantos&quot;&gt;ddanielsantos&lt;/a&gt;, for their first contribution to the project;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nikeee&quot;&gt;nikeee&lt;/a&gt;, for their first contribution to the project;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;translations&quot;&gt;Translations&lt;/h2&gt;&lt;a href=&quot;#translations&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Section titled “Translations”&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://juejin.cn/post/7308539123538624549&quot;&gt;中文翻译: Biome v1版本&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item></channel></rss>