Ir al contenido
verdict:

Biome 2.5.0

notable

note: la síntesis y las notas de la versión están en inglés

note: sin síntesis para esta release más antigua

Sintetizamos las releases recientes. Las notas de la versión originales de esta versión están aquí abajo.

release-notesgithub.com/biomejs/biome · 981 líneas
  1. ## 2.5.0
  2. ### Minor Changes
  3. - [#9539](https://github.com/biomejs/biome/pull/9539) [`f0615fd`](https://github.com/biomejs/biome/commit/f0615fdae80fa7257fc1d0448d2027cb1acff46e) Thanks [@ematipico](https://github.com/ematipico)! - Added a new reporter called `concise`. When `--reporter=concise` is passed the commands `format`, `lint`, `check` and `ci`, the diagnostics are printed in a compact manner:
  4. ```
  5. ! index.ts:2:10: lint/correctness/noUnusedImports: Several of these imports are unused.
  6. ! main.ts:9:7: lint/correctness/noUnusedVariables: This variable f is unused.
  7. × index.ts:8:5: lint/suspicious/noImplicitAnyLet: This variable implicitly has the any type.
  8. × main.ts:2:10: lint/suspicious/noRedeclare: Shouldn't redeclare 'z'. Consider to delete it or rename it.
  9. ```
  10. - [#9495](https://github.com/biomejs/biome/pull/9495) [`2056b23`](https://github.com/biomejs/biome/commit/2056b23812a17f9c9a9015e5b725faecb04647b5) Thanks [@aviraldua93](https://github.com/aviraldua93)! - Added the [`useKeyWithClickEvents`](https://biomejs.dev/linter/rules/use-key-with-click-events/) a11y lint rule for HTML files (`.html`, `.vue`, `.svelte`, `.astro`). This is a port of the existing JSX rule. The rule enforces that elements with an `onclick` handler also have at least one keyboard event handler (`onkeydown`, `onkeyup`, or `onkeypress`) to ensure keyboard accessibility.
  11. Inherently keyboard-accessible elements (`<a>`, `<button>`, `<input>`, `<select>`, `<textarea>`, `<option>`) are excluded, as are elements hidden from assistive technologies (`aria-hidden`) or with `role="presentation"` / `role="none"`.
  12. ```html
  13. <!-- Invalid: no keyboard handler -->
  14. <div onclick="handleClick()">Click me</div>
  15. <!-- Valid: has keyboard handler -->
  16. <div onclick="handleClick()" onkeydown="handleKeyDown()">Click me</div>
  17. <!-- Valid: inherently keyboard-accessible -->
  18. <button onclick="handleClick()">Submit</button>
  19. ```
  20. - [#9152](https://github.com/biomejs/biome/pull/9152) [`9ec8500`](https://github.com/biomejs/biome/commit/9ec8500dabc7305cbe04ecf27a84a1450f012c0b) Thanks [@ematipico](https://github.com/ematipico)! - Added new nursery lint rule [`noUndeclaredClasses`](https://biomejs.dev/linter/rules/no-undeclared-classes/) for HTML, JSX, and SFC files (Vue, Astro, Svelte). The rule detects CSS class names used in `class="..."` (or `className`) attributes that are not defined in any `<style>` block or linked stylesheet reachable from the file.
  21. ```html
  22. <!-- .typo is used but never defined -->
  23. <html>
  24. <head>
  25. <style>
  26. .button {
  27. color: blue;
  28. }
  29. </style>
  30. </head>
  31. <body>
  32. <div class="button typo"></div>
  33. </body>
  34. </html>
  35. ```
  36. - [#9152](https://github.com/biomejs/biome/pull/9152) [`9ec8500`](https://github.com/biomejs/biome/commit/9ec8500dabc7305cbe04ecf27a84a1450f012c0b) Thanks [@ematipico](https://github.com/ematipico)! - Added new nursery lint rule [`noUnusedClasses`](https://biomejs.dev/linter/rules/no-unused-classes/) for CSS. The rule detects CSS class selectors that are never referenced in any HTML or JSX file that imports the stylesheet. This is a project-domain rule that requires the module graph.
  37. ```css
  38. /* styles.css — .ghost is never used in any importing file */
  39. .button {
  40. color: blue;
  41. }
  42. .ghost {
  43. color: red;
  44. }
  45. ```
  46. ```jsx
  47. /* App.jsx */
  48. import "./styles.css";
  49. export default () => <div className="button" />;
  50. ```
  51. - [#9546](https://github.com/biomejs/biome/pull/9546) [`6567efa`](https://github.com/biomejs/biome/commit/6567efa51ba074436b017e49b1d2d369e7252e74) Thanks [@nhedger](https://github.com/nhedger)! - Added a `biome upgrade` command for standalone installations. It upgrades Homebrew installs with `brew upgrade biome`, updates manually installed binaries from the latest GitHub release, and tells npm users to upgrade with their package manager instead.
  52. - [#9716](https://github.com/biomejs/biome/pull/9716) [`701767a`](https://github.com/biomejs/biome/commit/701767a3c4de8bce032933588ef2b6e5e252919f) Thanks [@faizkhairi](https://github.com/faizkhairi)! - Added the HTML version of the [`useHeadingContent`](https://biomejs.dev/linter/rules/use-heading-content/) rule. The rule now enforces that heading elements (`h1`-`h6`) have content accessible to screen readers in HTML, Vue, Svelte, and Astro files.
  53. ```html
  54. <!-- Invalid: empty heading -->
  55. <h1></h1>
  56. <!-- Invalid: heading hidden from screen readers -->
  57. <h1 aria-hidden="true">invisible content</h1>
  58. <!-- Valid: heading with text content -->
  59. <h1>heading</h1>
  60. <!-- Valid: heading with accessible name -->
  61. <h1 aria-label="Screen reader content"></h1>
  62. ```
  63. - [#9582](https://github.com/biomejs/biome/pull/9582) [`f437ef8`](https://github.com/biomejs/biome/commit/f437ef8b6b0eb8f909d523950cf2c543042083d5) Thanks [@rahuld109](https://github.com/rahuld109)! - Added the HTML version of the [`useKeyWithMouseEvents`](https://biomejs.dev/linter/rules/use-key-with-mouse-events/) rule. The rule now enforces that `onmouseover` is accompanied by `onfocus` and `onmouseout` is accompanied by `onblur` in HTML, Vue, Svelte, and Astro files.
  64. ```html
  65. <!-- Invalid: onmouseover without onfocus -->
  66. <div onmouseover="handleMouseOver()"></div>
  67. <!-- Valid: onmouseover paired with onfocus -->
  68. <div onmouseover="handleMouseOver()" onfocus="handleFocus()"></div>
  69. ```
  70. - [#9275](https://github.com/biomejs/biome/pull/9275) [`1fdbcee`](https://github.com/biomejs/biome/commit/1fdbceea62d373f24da9c1e5cc0cdd169b573e84) Thanks [@ff1451](https://github.com/ff1451)! - Added the new assist action [`useSortedTypeFields`](https://biomejs.dev/assist/actions/use-sorted-type-fields/), which sorts the fields of GraphQL object types, interface types and input object types alphabetically, e.g. `name, age, id` becomes `age, id, name`.
  71. - [#10561](https://github.com/biomejs/biome/pull/10561) [`78075b7`](https://github.com/biomejs/biome/commit/78075b7c7cb7490c730a96f4ee9776c9e77826e7) Thanks [@Conaclos](https://github.com/Conaclos)! - Added a new `style` option to [useExportType](https://biomejs.dev/linter/rules/use-export-type/),
  72. which enforces a style for exporting types.
  73. This is the same option as the one provided by `useImportType`.
  74. - [#8987](https://github.com/biomejs/biome/pull/8987) [`d16e32b`](https://github.com/biomejs/biome/commit/d16e32b5b971a4ed9cd3bf5098782c8b752af69a) Thanks [@DerTimonius](https://github.com/DerTimonius)! - Ported the [`useValidAnchor`](https://biomejs.dev/linter/rules/use-valid-anchor/) rule to HTML. This rule enforces that all anchors are valid and that they are navigable elements.
  75. - [#9533](https://github.com/biomejs/biome/pull/9533) [`4d251d4`](https://github.com/biomejs/biome/commit/4d251d489cfd33a83e42d425476f8d6c66b72d9b) Thanks [@ematipico](https://github.com/ematipico)! - The `init` command now prints the Biome logo.
  76. - [#10069](https://github.com/biomejs/biome/pull/10069) [`0eb9310`](https://github.com/biomejs/biome/commit/0eb93109e1f9bfbb20744961681b4f0b9b781ad5) Thanks [@Netail](https://github.com/Netail)! - Added the HTML lint rule [`noStaticElementInteractions`](https://biomejs.dev/linter/rules/no-static-element-interactions/), which enforces that static, visible elements (such as `<div>`) that have click handlers use the valid role attribute.
  77. **Invalid**:
  78. ```html
  79. <div onclick="myFunction()"></div>
  80. ```
  81. - [#9134](https://github.com/biomejs/biome/pull/9134) [`2a43488`](https://github.com/biomejs/biome/commit/2a434882746d31e1bd3c8e0d711372a539ce88f8) Thanks [@ematipico](https://github.com/ematipico)! - Added the assist action [`useSortedPackageJson`](https://biomejs.dev/assist/actions/use-sorted-package-json).
  82. This action organizes package.json fields according to the same conventions as the popular [sort-package-json](https://github.com/keithamus/sort-package-json) tool.
  83. - [#9309](https://github.com/biomejs/biome/pull/9309) [`7daa18b`](https://github.com/biomejs/biome/commit/7daa18b07f7ab348942f4cb83b475e6a4b3d1125) Thanks [@Bertie690](https://github.com/Bertie690)! - The `allowDoubleNegation` option has been added to [`noImplicitCoercions`](https://biomejs.dev/linter/rules/no-implicit-coercions) to allow ignoring double negations inside code.
  84. With the option enabled, the following example is considered valid and is ignored by the rule:
  85. ```js
  86. const truthy = !!value;
  87. ```
  88. - [#9700](https://github.com/biomejs/biome/pull/9700) [`894f3fb`](https://github.com/biomejs/biome/commit/894f3fb4c664b12ff9abd1527b535621fe4e22f6) Thanks [@ematipico](https://github.com/ematipico)! - The Biome Language server now supports the "go-to definition" feature.
  89. When the cursor of the mouse is hovering an entity (variable, CSS class, type, etc.), and the command <kbd>CTRL</kbd> + click is triggered, the editor jumps to where this entity is defined, if the language server can find it.
  90. Here's what Biome is able to resolve:
  91. - Variables and types used in JavaScript modules, defined in the same file or imported from another module.
  92. - JSX Components used in JavaScript modules, defined in the same file or imported from another module.
  93. - CSS classes used in JSX and HTML-ish files (Vue, Svelte and Astro), and defined in CSS files.
  94. - Components used in HTML-ish files and defined in other HTML-ish.
  95. - Variables used in HTML-ish files and defined in the same file or imported from another module (JavaScript or HTML-ish).
  96. - [#10070](https://github.com/biomejs/biome/pull/10070) [`bae0710`](https://github.com/biomejs/biome/commit/bae071050f5a9c335b4483ee384f21ac1e6f0b4d) Thanks [@Conaclos](https://github.com/Conaclos)! - Added the `:STYLE:` group matcher for [`organizeImports`](https://biomejs.dev/assist/actions/organize-imports/) that matches style imports.
  97. For example, the following configuration...
  98. ```json
  99. {
  100. "assist": {
  101. "actions": {
  102. "source": {
  103. "organizeImports": {
  104. "level": "on",
  105. "options": {
  106. "groups": ["**", "!:STYLE:"],
  107. "sortBareImports": true
  108. }
  109. }
  110. }
  111. }
  112. }
  113. }
  114. ```
  115. ...places style imports last:
  116. ```diff
  117. - import "./style.css"
  118. import A from "./a.js"
  119. + import "./style.css"
  120. ```
  121. - [#9170](https://github.com/biomejs/biome/pull/9170) [`e3107de`](https://github.com/biomejs/biome/commit/e3107deedcff0f02b61702c6645d89e8d8635b49) Thanks [@mdrobny](https://github.com/mdrobny)! - Added `bundleDependencies` option to [NoUndeclaredDependencies](https://biomejs.dev/linter/rules/no-undeclared-dependencies) rule.
  122. This rule now supports imports of packages that are defined only in `bundleDependencies` and `bundledDependencies` arrays.
  123. - [#9547](https://github.com/biomejs/biome/pull/9547) [`01f8473`](https://github.com/biomejs/biome/commit/01f847317820f805698e1b8ba9eaa8fa6c26205c) Thanks [@mujpao](https://github.com/mujpao)! - Added new assist rule [`useSortedAttributes`](https://biomejs.dev/assist/actions/use-sorted-attributes/) for HTML, porting the existing JSX rule. This rule enforces sorted HTML attributes.
  124. **Invalid**
  125. ```html
  126. <input type="text" id="name" name="name" />
  127. ```
  128. - [#9366](https://github.com/biomejs/biome/pull/9366) [`2ca1117`](https://github.com/biomejs/biome/commit/2ca1117f1e63f6cd99c0ce8d4b82475625838e2e) Thanks [@dyc3](https://github.com/dyc3)! - Added the `html.parser.vue` configuration option. When enabled, it adds support for the parsing of Vue in `.html` files. Most Vue users don't need to enable this option since Vue files typically use the `.vue` extension, but it can be useful for projects that embed Vue syntax in regular HTML files.
  129. - [#9073](https://github.com/biomejs/biome/pull/9073) [`74b20ee`](https://github.com/biomejs/biome/commit/74b20eee556c9acc72ad5ea335b1bf0983d2eb2e) Thanks [@chocky335](https://github.com/chocky335)! - Added support for applying GritQL plugin rewrites as code actions. GritQL plugins that use the rewrite operator (`=>`) now produce fixable diagnostics for JavaScript, CSS, and JSON files. By default, plugin rewrites are treated as unsafe fixes and require `--write --unsafe` to apply. Plugin authors can pass `fix_kind = "safe"` to `register_diagnostic()` to mark a fix as safe, allowing it to be applied with just `--write`.
  130. **Example plugin** (`useConsoleInfo.grit`):
  131. ```grit
  132. language js
  133. `console.log($msg)` as $call where {
  134. register_diagnostic(span = $call, message = "Use console.info instead of console.log.", severity = "warn", fix_kind = "safe"),
  135. $call => `console.info($msg)`
  136. }
  137. ```
  138. Running `biome check --write` applies safe rewrites. Unsafe rewrites (the default, or `fix_kind = "unsafe"`) still require `--write --unsafe`.
  139. - [#9384](https://github.com/biomejs/biome/pull/9384) [`f4c9edc`](https://github.com/biomejs/biome/commit/f4c9edca8f8772a1e65d9e6701fdc3f604a9f3fe) Thanks [@Conaclos](https://github.com/Conaclos)! - Added the `sortBareImports` option to [`organizeImports`](https://biomejs.dev/assist/actions/organize-imports/),
  140. which allows bare imports to be sorted within other imports when set to `false`.
  141. ```json
  142. {
  143. "assist": {
  144. "actions": {
  145. "source": {
  146. "organizeImports": {
  147. "level": "on",
  148. "options": { "sortBareImports": true }
  149. }
  150. }
  151. }
  152. }
  153. }
  154. ```
  155. ```diff
  156. - import "b";
  157. import "a";
  158. + import "b";
  159. import { A } from "a";
  160. + import "./file";
  161. import { Local } from "./file";
  162. - import "./file";
  163. ```
  164. - [#8731](https://github.com/biomejs/biome/pull/8731) [`e7872bf`](https://github.com/biomejs/biome/commit/e7872bffba88f60d6c3cb6d0c2dd7a25452a0205) Thanks [@siketyan](https://github.com/siketyan)! - Added the watch mode (`--watch`) to the CLI for `check`/`format`/`lint` commands. By enabling this option, Biome will re-run the check automatically when any file in the workspace has changed after the first run.
  165. - [#10106](https://github.com/biomejs/biome/pull/10106) [`9b35f78`](https://github.com/biomejs/biome/commit/9b35f78e183edf44a3d8b7077ebb0c548a7e92f5) Thanks [@ematipico](https://github.com/ematipico)! - Biome can now format and lint `.svg` files.
  166. - [#9967](https://github.com/biomejs/biome/pull/9967) [`e9b6c17`](https://github.com/biomejs/biome/commit/e9b6c17cd6f7e870aea68da3b6c6474aa1a9b4f6) Thanks [@dyc3](https://github.com/dyc3)! - Added HTML support for [`noExcessiveLinesPerFile`](https://biomejs.dev/linter/rules/no-excessive-lines-per-file/). Biome now reports HTML files that exceed the configured line limit, including when `skipBlankLines` is enabled.
  167. - [#9491](https://github.com/biomejs/biome/pull/9491) [`b3eb63c`](https://github.com/biomejs/biome/commit/b3eb63c7e19e6ebd41e463289de098bb003686e1) Thanks [@IxxyDev](https://github.com/IxxyDev)! - Added the HTML lint rule [`noAriaUnsupportedElements`](https://biomejs.dev/linter/rules/no-aria-unsupported-elements/). This rule enforces that elements that do not support ARIA roles, states, and properties (`meta`, `html`, `script`, `style`) do not have `role` or `aria-*` attributes.
  168. ```html
  169. <!-- Invalid: meta does not support aria attributes -->
  170. <meta charset="UTF-8" role="meta" />
  171. ```
  172. - [#9306](https://github.com/biomejs/biome/pull/9306) [`afd57a6`](https://github.com/biomejs/biome/commit/afd57a634bdb6b0b161dc8a2522ac460503569b1) Thanks [@viraxslot](https://github.com/viraxslot)! - Added the [`noNoninteractiveTabindex`](https://biomejs.dev/linter/rules/no-noninteractive-tabindex/) lint rule for HTML. This rule enforces that `tabindex` is not used on non-interactive elements, as it can cause usability issues for keyboard users.
  173. ```html
  174. <div tabindex="0">Invalid: non-interactive element</div>
  175. `
  176. ```
  177. - [#9276](https://github.com/biomejs/biome/pull/9276) [`6d041d9`](https://github.com/biomejs/biome/commit/6d041d919e06595553093e084e6aad0d39fb8109) Thanks [@IxxyDev](https://github.com/IxxyDev)! - Added the HTML lint rule [`noRedundantRoles`](https://biomejs.dev/linter/rules/no-redundant-roles/). This rule enforces that explicit `role` attributes are not the same as the implicit/default role of an HTML element. It supports HTML, Vue, Svelte, and Astro files.
  178. ```html
  179. <!-- Invalid: role="button" is redundant on <button> -->
  180. <button role="button"></button>
  181. ```
  182. - [#9813](https://github.com/biomejs/biome/pull/9813) [`69aadc2`](https://github.com/biomejs/biome/commit/69aadc27741bb8a74c926e14a2a9777064cb1e03) Thanks [@ematipico](https://github.com/ematipico)! - Added a new linter configuration called `preset`. With the new option, users can enable different kinds of rules at once.
  183. The following presets are available:
  184. - `"recommended"`: it enables all Biome-recommended rules, or recommended rules of a group;
  185. - `"all"`: it enables all Biome rules, or enables all rules of a group;
  186. - `"none"`: it disables all Biome rules, or disable all rules of a group.
  187. You can enable recommended rules:
  188. ```json
  189. {
  190. "linter": {
  191. "rules": {
  192. "preset": "recommended"
  193. }
  194. }
  195. }
  196. ```
  197. You can enable **all rules** at once:
  198. ```json5
  199. {
  200. linter: {
  201. rules: {
  202. preset: "all", // enables all rules
  203. },
  204. },
  205. }
  206. ```
  207. Or enable all rules for a group:
  208. ```json5
  209. {
  210. linter: {
  211. rules: {
  212. style: {
  213. preset: "all", // enables all rules in the style group
  214. },
  215. },
  216. },
  217. }
  218. ```
  219. This new option, however, doesn't affect how nursery rules work. Nursery rules must be enabled singularly, due to their nature.
  220. This new option is meant to replace `recommended`, so make sure to run the `migrate` command.
  221. - [#10022](https://github.com/biomejs/biome/pull/10022) [`3422d71`](https://github.com/biomejs/biome/commit/3422d71bc5e9d7f07fd4e7509566427e1591d760) Thanks [@Netail](https://github.com/Netail)! - Added the HTML lint rule [`noNoninteractiveElementToInteractiveRole`](https://biomejs.dev/linter/rules/no-noninteractive-element-to-interactive-role/), which enforces that interactive ARIA roles are not assigned to non-interactive HTML elements.
  222. **Invalid**:
  223. ```html
  224. <h1 role="checkbox"></h1>
  225. ```
  226. - [#8396](https://github.com/biomejs/biome/pull/8396) [`13785fc`](https://github.com/biomejs/biome/commit/13785fc8f4be068eccff84a8ad90ac8530d5c992) Thanks [@apple-yagi](https://github.com/apple-yagi)! - Biome now supports pnpm catalogs (default and named) when resolving dependencies for linting. This behavior is opt-in and requires setting `javascript.resolver.experimentalPnpmCatalogs` to `true`.
  227. - [#10028](https://github.com/biomejs/biome/pull/10028) [`1009414`](https://github.com/biomejs/biome/commit/100941409f3ec5e6653e92b2cfbb4100df1becb0) Thanks [@Netail](https://github.com/Netail)! - Added the HTML lint rule [`noInteractiveElementToNoninteractiveRole`](https://biomejs.dev/linter/rules/no-interactive-element-to-noninteractive-role/), which enforces that non-interactive ARIA roles are not assigned to interactive HTML elements.
  228. **Invalid**:
  229. ```html
  230. <input role="img" />
  231. ```
  232. - [#9853](https://github.com/biomejs/biome/pull/9853) [`816302f`](https://github.com/biomejs/biome/commit/816302f8c8c9862585c283fce22ffd1817dedf9f) Thanks [@Netail](https://github.com/Netail)! - Added the new assist action [`useSortedSelectionSet`](https://biomejs.dev/assist/actions/use-sorted-selection-set/), which sorts GraphQL selection sets alphabetically, e.g. `name, age, id` becomes `age, id, name`.
  233. **Invalid**:
  234. ```graphql
  235. query {
  236. name
  237. age
  238. id
  239. }
  240. ```
  241. - [#10074](https://github.com/biomejs/biome/pull/10074) [`9c7c6eb`](https://github.com/biomejs/biome/commit/9c7c6eb99f6880aa87ae0e7aff357e978361c4a3) Thanks [@georgephillips](https://github.com/georgephillips)! - Added a `kind` field to the `ImportMatcher` used by the [`organizeImports`](https://biomejs.dev/assist/actions/organize-imports/) assist action. The new field selects imports by their syntactic kind and currently supports `bare` (matching side-effect imports such as `import "polyfill"`) with optional `!` negation (`!bare`). The matcher composes with the existing `type` and `source` fields, so users can express patterns such as "only bare imports that import a CSS file" (`{ "kind": "bare", "source": "**/*.css" }`).
  242. For example, with the following configuration:
  243. ```json
  244. {
  245. "assist": {
  246. "actions": {
  247. "source": {
  248. "organizeImports": {
  249. "level": "on",
  250. "options": {
  251. "sortBareImports": true,
  252. "groups": [
  253. { "kind": "!bare" },
  254. ":BLANK_LINE:",
  255. { "kind": "bare" }
  256. ]
  257. }
  258. }
  259. }
  260. }
  261. }
  262. }
  263. ```
  264. ...the following code:
  265. ```ts
  266. import "./register-my-component";
  267. import { render } from "react-dom";
  268. import "./polyfill";
  269. import { Button } from "@/components/Button";
  270. ```
  271. ...is organized as:
  272. ```ts
  273. import { render } from "react-dom";
  274. import { Button } from "@/components/Button";
  275. import "./polyfill";
  276. import "./register-my-component";
  277. ```
  278. - [#9171](https://github.com/biomejs/biome/pull/9171) [`ce65710`](https://github.com/biomejs/biome/commit/ce65710f591eb2676df6833e9cd00e310981692b) Thanks [@chocky335](https://github.com/chocky335)! - Added `includes` option for plugin file scoping. Plugins can now be configured with glob patterns to restrict which files they run on. Use negated globs for exclusions.
  279. ```json
  280. {
  281. "plugins": [
  282. "global-plugin.grit",
  283. {
  284. "path": "scoped-plugin.grit",
  285. "includes": ["src/**/*.ts", "!**/*.test.ts"]
  286. }
  287. ]
  288. }
  289. ```
  290. - [#9617](https://github.com/biomejs/biome/pull/9617) [`dcb99ef`](https://github.com/biomejs/biome/commit/dcb99ef0305d8431af40b526c449316bb8a70efa) Thanks [@faizkhairi](https://github.com/faizkhairi)! - Ported [`useAriaActivedescendantWithTabindex`](https://biomejs.dev/linter/rules/use-aria-activedescendant-with-tabindex/) a11y rule to HTML.
  291. - [#9496](https://github.com/biomejs/biome/pull/9496) [`1dfb829`](https://github.com/biomejs/biome/commit/1dfb8291a0a2340e7c9220f9126317a7490ec466) Thanks [@aviraldua93](https://github.com/aviraldua93)! - Added HTML support for the [`noAriaHiddenOnFocusable`](https://biomejs.dev/linter/rules/no-aria-hidden-on-focusable/) accessibility lint rule, which enforces that `aria-hidden="true"` is not set on focusable elements. Focusable elements include native interactive elements (`<button>`, `<input>`, `<select>`, `<textarea>`), elements with `href` (`<a>`, `<area>`), elements with `tabindex >= 0`, and editing hosts (`contenteditable`). Includes an unsafe fix to remove the `aria-hidden` attribute.
  292. ```html
  293. <!-- Invalid: aria-hidden on a focusable element -->
  294. <button aria-hidden="true">Submit</button>
  295. <!-- Valid: aria-hidden on a non-focusable element -->
  296. <div aria-hidden="true">decorative content</div>
  297. ```
  298. - [#9792](https://github.com/biomejs/biome/pull/9792) [`f516854`](https://github.com/biomejs/biome/commit/f51685404f015a5c6f0fc87b9070ac5d9f0a7b6b) Thanks [@Maximiliano-Zeballos](https://github.com/Maximiliano-Zeballos)! - Added the [`useSemanticElements`](https://biomejs.dev/linter/rules/use-semantic-elements/) lint rule for HTML. The rule now detects the use of `role` attributes in HTML elements and suggests using semantic elements instead.
  299. For example, the following code is now flagged:
  300. ```html
  301. <div role="navigation"></div>
  302. ```
  303. The rule suggests using `<nav>` instead.
  304. - [#9761](https://github.com/biomejs/biome/pull/9761) [`cbbb7d5`](https://github.com/biomejs/biome/commit/cbbb7d5bf21d8fb6db275da7adcc03c034538635) Thanks [@Maximiliano-Zeballos](https://github.com/Maximiliano-Zeballos)! - Ported the [`useValidAriaProps`](https://biomejs.dev/linter/rules/use-valid-aria-props/) lint rule to HTML. This rule checks that all `aria-*` attributes used in HTML elements are valid ARIA attributes as defined by the WAI-ARIA specification.
  305. - [#9928](https://github.com/biomejs/biome/pull/9928) [`aa82576`](https://github.com/biomejs/biome/commit/aa82576ff66e03924e07729051ac9bfc59cd5aa1) Thanks [@aviraldua93](https://github.com/aviraldua93)! - Ported [`useValidAriaValues`](https://biomejs.dev/linter/rules/use-valid-aria-values/) to HTML. Biome now validates static `aria-*` attribute values in HTML elements against WAI-ARIA types, catching invalid values such as `aria-hidden="yes"`.
  306. - [#10562](https://github.com/biomejs/biome/pull/10562) [`6642895`](https://github.com/biomejs/biome/commit/66428957e6ca393a802f365b8e643438f19a3039) Thanks [@ematipico](https://github.com/ematipico)! - Promoted 73 nursery rules to stable groups.
  307. Four rules were renamed as part of the promotion:
  308. - `noFloatingClasses` is now [`noUnusedInstantiation`](https://biomejs.dev/linter/rules/no-unused-instantiation/), because the rule checks any discarded `new` expression, not only classes.
  309. - `noMultiStr` is now [`noMultilineString`](https://biomejs.dev/linter/rules/no-multiline-string/).
  310. - `useFind` is now [`useArrayFind`](https://biomejs.dev/linter/rules/use-array-find/).
  311. - `useSpread` is now [`useSpreadOverApply`](https://biomejs.dev/linter/rules/use-spread-over-apply/), because the rule enforces spread call arguments over `Function.apply()`, not array or object spread.
  312. #### Correctness
  313. Promoted the following rules to the `correctness` group:
  314. - [`noBeforeInteractiveScriptOutsideDocument`](https://biomejs.dev/linter/rules/no-before-interactive-script-outside-document/)
  315. - [`noUnusedInstantiation`](https://biomejs.dev/linter/rules/no-unused-instantiation/)
  316. - [`useInlineScriptId`](https://biomejs.dev/linter/rules/use-inline-script-id/) (recommended, Next.js domain)
  317. - [`noVueVIfWithVFor`](https://biomejs.dev/linter/rules/no-vue-v-if-with-v-for/) (recommended, Vue domain)
  318. - [`useVueValidVBind`](https://biomejs.dev/linter/rules/use-vue-valid-v-bind/) (recommended, Vue domain)
  319. - [`useVueValidVElse`](https://biomejs.dev/linter/rules/use-vue-valid-v-else/) (recommended, Vue domain)
  320. - [`useVueValidVElseIf`](https://biomejs.dev/linter/rules/use-vue-valid-v-else-if/) (recommended, Vue domain)
  321. - [`useVueValidVHtml`](https://biomejs.dev/linter/rules/use-vue-valid-v-html/) (recommended, Vue domain)
  322. - [`useVueValidVIf`](https://biomejs.dev/linter/rules/use-vue-valid-v-if/) (recommended, Vue domain)
  323. - [`useVueValidVOn`](https://biomejs.dev/linter/rules/use-vue-valid-v-on/) (recommended, Vue domain)
  324. - [`useVueValidVText`](https://biomejs.dev/linter/rules/use-vue-valid-v-text/) (recommended, Vue domain)
  325. - [`useVueValidTemplateRoot`](https://biomejs.dev/linter/rules/use-vue-valid-template-root/) (recommended, Vue domain)
  326. - [`useVueValidVCloak`](https://biomejs.dev/linter/rules/use-vue-valid-v-cloak/) (recommended, Vue domain)
  327. - [`useVueValidVOnce`](https://biomejs.dev/linter/rules/use-vue-valid-v-once/) (recommended, Vue domain)
  328. - [`useVueValidVPre`](https://biomejs.dev/linter/rules/use-vue-valid-v-pre/) (recommended, Vue domain)
  329. - [`useVueVForKey`](https://biomejs.dev/linter/rules/use-vue-v-for-key/) (recommended, Vue domain)
  330. - [`noDuplicateAttributes`](https://biomejs.dev/linter/rules/no-duplicate-attributes/) (recommended)
  331. - [`noDuplicateArgumentNames`](https://biomejs.dev/linter/rules/no-duplicate-argument-names/) (recommended)
  332. - [`noDuplicateInputFieldNames`](https://biomejs.dev/linter/rules/no-duplicate-input-field-names/) (recommended)
  333. - [`noDuplicateVariableNames`](https://biomejs.dev/linter/rules/no-duplicate-variable-names/) (recommended)
  334. - [`noDuplicateEnumValueNames`](https://biomejs.dev/linter/rules/no-duplicate-enum-value-names/) (recommended)
  335. - [`useLoneAnonymousOperation`](https://biomejs.dev/linter/rules/use-lone-anonymous-operation/) (recommended)
  336. #### Suspicious
  337. Promoted the following rules to the `suspicious` group:
  338. - [`noShadow`](https://biomejs.dev/linter/rules/no-shadow/)
  339. - [`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/)
  340. - [`noParametersOnlyUsedInRecursion`](https://biomejs.dev/linter/rules/no-parameters-only-used-in-recursion/)
  341. - [`noUnknownAttribute`](https://biomejs.dev/linter/rules/no-unknown-attribute/)
  342. - [`useArraySortCompare`](https://biomejs.dev/linter/rules/use-array-sort-compare/)
  343. - [`noForIn`](https://biomejs.dev/linter/rules/no-for-in/)
  344. - [`noDuplicatedSpreadProps`](https://biomejs.dev/linter/rules/no-duplicated-spread-props/)
  345. - [`noEqualsToNull`](https://biomejs.dev/linter/rules/no-equals-to-null/)
  346. - [`noProto`](https://biomejs.dev/linter/rules/no-proto/) (recommended)
  347. - [`noUndeclaredEnvVars`](https://biomejs.dev/linter/rules/no-undeclared-env-vars/) (recommended, Turborepo domain)
  348. - [`noReturnAssign`](https://biomejs.dev/linter/rules/no-return-assign/) (default severity: `error`)
  349. - [`noDuplicateEnumValues`](https://biomejs.dev/linter/rules/no-duplicate-enum-values/) (recommended)
  350. - [`noVueArrowFuncInWatch`](https://biomejs.dev/linter/rules/no-vue-arrow-func-in-watch/) (recommended, Vue domain)
  351. - [`noNestedPromises`](https://biomejs.dev/linter/rules/no-nested-promises/)
  352. - [`noLeakedRender`](https://biomejs.dev/linter/rules/no-leaked-render/)
  353. - [`noDeprecatedMediaType`](https://biomejs.dev/linter/rules/no-deprecated-media-type/) (recommended)
  354. - [`noDuplicateGraphqlOperationName`](https://biomejs.dev/linter/rules/no-duplicate-graphql-operation-name/)
  355. - [`useRequiredScripts`](https://biomejs.dev/linter/rules/use-required-scripts/)
  356. #### Style
  357. Promoted the following rules to the `style` group:
  358. - [`useVueMultiWordComponentNames`](https://biomejs.dev/linter/rules/use-vue-multi-word-component-names/) (recommended, Vue domain)
  359. - [`useVueDefineMacrosOrder`](https://biomejs.dev/linter/rules/use-vue-define-macros-order/)
  360. - [`noIncrementDecrement`](https://biomejs.dev/linter/rules/no-increment-decrement/)
  361. - [`noContinue`](https://biomejs.dev/linter/rules/no-continue/)
  362. - [`useSpreadOverApply`](https://biomejs.dev/linter/rules/use-spread-over-apply/)
  363. - [`noTernary`](https://biomejs.dev/linter/rules/no-ternary/)
  364. - [`noMultilineString`](https://biomejs.dev/linter/rules/no-multiline-string/)
  365. - [`noMultiAssign`](https://biomejs.dev/linter/rules/no-multi-assign/)
  366. - [`noExcessiveClassesPerFile`](https://biomejs.dev/linter/rules/no-excessive-classes-per-file/)
  367. - [`noExcessiveLinesPerFile`](https://biomejs.dev/linter/rules/no-excessive-lines-per-file/)
  368. - [`noVueOptionsApi`](https://biomejs.dev/linter/rules/no-vue-options-api/)
  369. - [`useErrorCause`](https://biomejs.dev/linter/rules/use-error-cause/)
  370. - [`useConsistentEnumValueType`](https://biomejs.dev/linter/rules/use-consistent-enum-value-type/)
  371. - [`useConsistentMethodSignatures`](https://biomejs.dev/linter/rules/use-consistent-method-signatures/)
  372. - [`useGlobalThis`](https://biomejs.dev/linter/rules/use-global-this/) (default severity: `warn`)
  373. - [`useDestructuring`](https://biomejs.dev/linter/rules/use-destructuring/)
  374. - [`useVueHyphenatedAttributes`](https://biomejs.dev/linter/rules/use-vue-hyphenated-attributes/) (recommended, Vue domain)
  375. - [`useVueConsistentVBindStyle`](https://biomejs.dev/linter/rules/use-vue-consistent-v-bind-style/) (recommended, Vue domain)
  376. - [`useVueConsistentVOnStyle`](https://biomejs.dev/linter/rules/use-vue-consistent-v-on-style/) (recommended, Vue domain)
  377. - [`noHexColors`](https://biomejs.dev/linter/rules/no-hex-colors/)
  378. - [`useConsistentGraphqlDescriptions`](https://biomejs.dev/linter/rules/use-consistent-graphql-descriptions/)
  379. - [`noRootType`](https://biomejs.dev/linter/rules/no-root-type/)
  380. - [`useLoneExecutableDefinition`](https://biomejs.dev/linter/rules/use-lone-executable-definition/)
  381. - [`useInputName`](https://biomejs.dev/linter/rules/use-input-name/)
  382. #### Complexity
  383. Promoted the following rules to the `complexity` group:
  384. - [`useArrayFind`](https://biomejs.dev/linter/rules/use-array-find/)
  385. - [`noRedundantDefaultExport`](https://biomejs.dev/linter/rules/no-redundant-default-export/) (default severity: `warn`)
  386. - [`noUselessReturn`](https://biomejs.dev/linter/rules/no-useless-return/)
  387. - [`noDivRegex`](https://biomejs.dev/linter/rules/no-div-regex/)
  388. #### Performance
  389. Promoted the following rules to the `performance` group:
  390. - [`noSyncScripts`](https://biomejs.dev/linter/rules/no-sync-scripts/)
  391. - [`noJsxPropsBind`](https://biomejs.dev/linter/rules/no-jsx-props-bind/)
  392. - [`useVueVapor`](https://biomejs.dev/linter/rules/use-vue-vapor/)
  393. #### Security
  394. Promoted the following rules to the `security` group:
  395. - [`noScriptUrl`](https://biomejs.dev/linter/rules/no-script-url/) (recommended)
  396. #### A11y
  397. Promoted the following rules to the `a11y` group:
  398. - [`noAmbiguousAnchorText`](https://biomejs.dev/linter/rules/no-ambiguous-anchor-text/) (recommended)
  399. - [#10121](https://github.com/biomejs/biome/pull/10121) [`450f8e1`](https://github.com/biomejs/biome/commit/450f8e1c0a46e8c867a63a0842deaa50dee95176) Thanks [@jongwan56](https://github.com/jongwan56)! - Biome now applies Git's local exclude file when VCS ignore files are enabled. Files listed in `.git/info/exclude` are skipped the same way as files listed in `.gitignore`, including in linked worktrees.
  400. - [#9397](https://github.com/biomejs/biome/pull/9397) [`d5913c9`](https://github.com/biomejs/biome/commit/d5913c9d57b771b0b1c0097f8014017878cc14c2) Thanks [@mvarendorff](https://github.com/mvarendorff)! - Added `ignore` option to the [noUnusedVariables](https://biomejs.dev/linter/rules/no-unused-variables/) rule. The option allows excluding identifiers by providing a list of ignored names. It also allows excluding kinds of identifiers from this rule entirely, which may be useful when loading classes dynamically.
  401. For example, unused classes as well as all unused variables, functions, etc. called "unused" may be ignored entirely with the following configuration:
  402. ```json
  403. {
  404. "ignore": {
  405. "*": ["unused"],
  406. "class": ["*"]
  407. }
  408. }
  409. ```
  410. - [#10089](https://github.com/biomejs/biome/pull/10089) [`71a21f0`](https://github.com/biomejs/biome/commit/71a21f0ab4fd32739331d3b3068c6c1ae6392290) Thanks [@Netail](https://github.com/Netail)! - Added the lint rule [`noLabelWithoutControl`](https://biomejs.dev/linter/rules/no-label-without-control/) to HTML, which enforces that a label element or component has a text label and an associated input.
  411. ```html
  412. <label></label>
  413. ```
  414. - [#10015](https://github.com/biomejs/biome/pull/10015) [`1828261`](https://github.com/biomejs/biome/commit/182826178de9c1b23bad2e997c3567a9d5176ba2) Thanks [@Netail](https://github.com/Netail)! - Added the HTML lint rule [`useAriaPropsSupportedByRole`](https://biomejs.dev/linter/rules/use-aria-props-supported-by-role/), which enforces that ARIA properties are valid for the roles that are supported by the element.
  415. ```html
  416. <a href="#" aria-checked></a>
  417. ```
  418. - [#10234](https://github.com/biomejs/biome/pull/10234) [`1a51569`](https://github.com/biomejs/biome/commit/1a51569229936b9ad1191d081ed6742e8342badd) Thanks [@ematipico](https://github.com/ematipico)! - Added the `delimiterSpacing` formatter option. This option inserts spaces inside delimiters (after the opening delimiter and before the closing delimiter) when the content fits on a single line. Empty delimiters are not affected, and no space is added before the opening delimiter. The specific delimiters affected depend on the language. It can be configured globally via `formatter.delimiterSpacing` or per-language via `javascript.formatter.delimiterSpacing`, `json.formatter.delimiterSpacing`, and `css.formatter.delimiterSpacing`. Defaults to `false`.
  419. ```diff
  420. - callFn(foo)
  421. + callFn( foo )
  422. ```
  423. ```diff
  424. - const arr = [1, 2, 3];
  425. + const arr = [ 1, 2, 3 ];
  426. ```
  427. ##### JavaScript
  428. When enabled, Biome inserts spaces inside parentheses (e.g., `foo( a, b )`), square brackets (e.g., `[ a, b ]`), template literal interpolations (e.g., `${ expr }`), and the logical NOT operator (e.g., `! x`, but in chains only after the last one: `!! x`). Only applies when the content fits on a single line. Empty delimiters and the space before the opening delimiter are not affected.
  429. ```diff
  430. - if (condition) {}
  431. + if ( condition ) {}
  432. ```
  433. ```diff
  434. - `Hello ${name}!`
  435. + `Hello ${ name }!`
  436. ```
  437. ##### JSX
  438. When enabled, Biome inserts spaces inside JSX expression braces (e.g., `attr={ value }`) and spread attributes (e.g., `{ ...props }`). Only applies when the content fits on a single line. Empty delimiters are not affected.
  439. ```diff
  440. - <Foo bar={value} />
  441. + <Foo bar={ value } />
  442. ```
  443. ##### TypeScript
  444. When enabled, Biome inserts spaces inside TypeScript angle brackets (e.g., `foo< T >()`), indexed access types (e.g., `T[ K ]`), mapped types, tuple types, type parameters, and index signatures. Only applies when the content fits on a single line. Empty delimiters are not affected.
  445. ```diff
  446. - type Result = Map<string, number>;
  447. + type Result = Map< string, number >;
  448. ```
  449. ##### JSON
  450. When enabled, Biome inserts spaces inside square brackets when the content fits on a single line. Empty brackets are not affected.
  451. ```diff
  452. - [1, 2, 3]
  453. + [ 1, 2, 3 ]
  454. ```
  455. ##### CSS
  456. When enabled, Biome inserts spaces inside parentheses and square brackets when the content fits on a single line. Empty delimiters are not affected.
  457. ```diff
  458. - rgba(0, 0, 0, 1)
  459. + rgba( 0, 0, 0, 1 )
  460. ```
  461. ```diff
  462. - [data-attr]
  463. + [ data-attr ]
  464. ```
  465. - [#10461](https://github.com/biomejs/biome/pull/10461) [`6bac1c3`](https://github.com/biomejs/biome/commit/6bac1c3457d396215e4daed5fc59eaf23b42f4eb) Thanks [@TXWSLYF](https://github.com/TXWSLYF)! - Implements [#9445](https://github.com/biomejs/biome/issues/9445). Added the `allowImplicit` option to [`useIterableCallbackReturn`](https://biomejs.dev/linter/rules/use-iterable-callback-return/). When enabled, callbacks can use `return;` to implicitly return `undefined`, matching ESLint's `array-callback-return` rule.
  466. - [#9571](https://github.com/biomejs/biome/pull/9571) [`5a8eb75`](https://github.com/biomejs/biome/commit/5a8eb755fe07b38760d2b72ec46e24cd108f6619) Thanks [@dyc3](https://github.com/dyc3)! - Added configurable options to the [`useNumericSeparators`](https://biomejs.dev/linter/rules/use-numeric-separators/) rule. Users can now customize the minimum number of digits required before adding separators and the group length for each type of numeric literal (`binary`, `octal`, `decimal`, `hexadecimal`).
  467. ```json
  468. {
  469. "linter": {
  470. "rules": {
  471. "style": {
  472. "useNumericSeparators": {
  473. "level": "error",
  474. "options": {
  475. "decimal": {
  476. "minimumDigits": 7,
  477. "groupLength": 3
  478. },
  479. "hexadecimal": {
  480. "minimumDigits": 4,
  481. "groupLength": 2
  482. }
  483. }
  484. }
  485. }
  486. }
  487. }
  488. }
  489. ```
  490. - [#10067](https://github.com/biomejs/biome/pull/10067) [`6064312`](https://github.com/biomejs/biome/commit/60643120b5593104b311e184cf9581b9c7c2254d) Thanks [@Netail](https://github.com/Netail)! - Added the lint rule [`useFocusableInteractive`](https://biomejs.dev/linter/rules/use-focusable-interactive/) to HTML, which enforces elements with an interactive role and interaction handler to be focusable.
  491. **Invalid**:
  492. ```html
  493. <div role="button"></div>
  494. ```
  495. - [#10026](https://github.com/biomejs/biome/pull/10026) [`fb42ac4`](https://github.com/biomejs/biome/commit/fb42ac42079ec7b8e699a507bce332f4446ac7f2) Thanks [@Netail](https://github.com/Netail)! - Added the HTML lint rule [`noNoninteractiveElementInteractions`](https://biomejs.dev/linter/rules/no-noninteractive-element-interactions/), which disallows use event handlers on non-interactive elements.
  496. **Invalid**:
  497. ```html
  498. <div onclick="myFunction()">button</div>
  499. ```
  500. - [#10000](https://github.com/biomejs/biome/pull/10000) [`2093e3e`](https://github.com/biomejs/biome/commit/2093e3ee2a615abecae159d35a5a17fe0df5f506) Thanks [@Netail](https://github.com/Netail)! - Added the new assist action [`useSortedEnumMembers`](https://biomejs.dev/assist/actions/use-sorted-enum-members/), which sorts TypeScript & GraphQL enum members.
  501. **Invalid**:
  502. ```graphql
  503. enum Role {
  504. SUPER_ADMIN
  505. ADMIN
  506. USER
  507. GOD
  508. }
  509. ```
  510. - [#10013](https://github.com/biomejs/biome/pull/10013) [`ad01d3d`](https://github.com/biomejs/biome/commit/ad01d3d882276b070433822f01cdf6afed63ca4e) Thanks [@Netail](https://github.com/Netail)! - Added the HTML lint rule [`useValidAutocomplete`](https://biomejs.dev/linter/rules/use-valid-autocomplete/), which enforces using valid values for the `autocomplete` attribute on `input` elements.
  511. ```html
  512. <input autocomplete="incorrect" />
  513. ```
  514. ### Patch Changes
  515. - [#10498](https://github.com/biomejs/biome/pull/10498) [`995c1ff`](https://github.com/biomejs/biome/commit/995c1ffeca039787c93370fed8b970a057e9c073) Thanks [@citadelgrad](https://github.com/citadelgrad)! - Added the nursery rule [`useReactFunctionComponentDefinition`](https://biomejs.dev/linter/rules/use-react-function-component-definition), which enforces a consistent function type for named React function components.
  516. For example, the following snippet triggers the rule by default.
  517. ```jsx
  518. const MyComponent = (props) => {
  519. return <div>{props.name}</div>;
  520. };
  521. ```
  522. - [#9974](https://github.com/biomejs/biome/pull/9974) [`ff635a9`](https://github.com/biomejs/biome/commit/ff635a90da3567a9006ae947b6c5983d87dfbb9f) Thanks [@pkallos](https://github.com/pkallos)! - Added `ignoreMixedLogicalExpressions` to [useNullishCoalescing](https://biomejs.dev/linter/rules/use-nullish-coalescing/), partially addressing [#9232](https://github.com/biomejs/biome/issues/9232). When enabled, Biome ignores `||` and `||=` mixed with `&&` in the same expression tree.
  523. - [#10503](https://github.com/biomejs/biome/pull/10503) [`c656679`](https://github.com/biomejs/biome/commit/c656679d1f9e725a42e5d60fb3b9e76bb03d7f88) Thanks [@Mokto](https://github.com/Mokto)! - Added the new nursery rule `useSvelteRequireEachKey`, a Svelte lint rule that reports `{#each}` blocks with item bindings that are missing a key.
  524. - [#10516](https://github.com/biomejs/biome/pull/10516) [`0f29b83`](https://github.com/biomejs/biome/commit/0f29b8361ba3cd11bdbfb91f8ff722184cfadf08) Thanks [@Dotify71](https://github.com/Dotify71)! - Added [`useIncludes`](https://biomejs.dev/linter/rules/use-includes/) to the nursery group. This rule flags comparisons of `String.prototype.indexOf()` or `Array.prototype.indexOf()` against `-1` and suggests replacing them with the clearer `includes()` / `!includes()` form.
  525. - [#10487](https://github.com/biomejs/biome/pull/10487) [`0c03ee3`](https://github.com/biomejs/biome/commit/0c03ee3deee068220175c3599e6bc3c4ed8ad247) Thanks [@Mokto](https://github.com/Mokto)! - Fixed a Svelte parser error that incorrectly required a binding variable after `{:then}` and `{:catch}`. Biome now correctly accepts `{:then}` and `{:catch}` without a binding, as well as the `{#await expr then}` and `{#await expr catch}` shorthand forms.
  526. - [#10566](https://github.com/biomejs/biome/pull/10566) [`a4a294c`](https://github.com/biomejs/biome/commit/a4a294c3c1128fc5b38634262d499d3d2601bf3b) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [`useVueHyphenatedAttributes`](https://biomejs.dev/linter/rules/use-vue-hyphenated-attributes/): The rule now only reports diagnostics in Vue files and ignores SVG elements.
  527. - [#10565](https://github.com/biomejs/biome/pull/10565) [`72ccf3b`](https://github.com/biomejs/biome/commit/72ccf3b042c4258f9871ff5b99d87f879cecccde) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [`useVueConsistentVBindStyle`](https://biomejs.dev/linter/rules/use-vue-consistent-v-bind-style/): The rule no longer reports argument-less `v-bind` directives because they cannot be converted to shorthand syntax.
  528. - [#10591](https://github.com/biomejs/biome/pull/10591) [`6e8557b`](https://github.com/biomejs/biome/commit/6e8557b1b8e49ce2383f6089a46624eb030178ad) Thanks [@xsourabhsharma](https://github.com/xsourabhsharma)! - Fixed [#10563](https://github.com/biomejs/biome/issues/10563): Biome now parses comma-separated CSS Modules `composes` values, such as `composes: classA from "./a.css", classB from "./b.css";`.
  529. - [#10603](https://github.com/biomejs/biome/pull/10603) [`174b21b`](https://github.com/biomejs/biome/commit/174b21b52993fc3e0237ceefe97c0d71c9b5264e) Thanks [@denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatting for `grid-template-areas` declarations with comments before multiline values. Biome now keeps grid area rows aligned instead of adding an extra declaration-boundary indent.
  530. ```diff
  531. .grid {
  532. grid-template-areas:
  533. /* row */
  534. - "header header"
  535. - "footer footer";
  536. + "header header"
  537. + "footer footer";
  538. }
  539. ```
  540. - [#10542](https://github.com/biomejs/biome/pull/10542) [`c3f07f7`](https://github.com/biomejs/biome/commit/c3f07f773edeb7f098c778392c5e2d6bb92b78fb) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#10513](https://github.com/biomejs/biome/issues/10513): Biome no longer rejects literal `\u` sequences in quoted HTML attribute values.
  541. - [#10108](https://github.com/biomejs/biome/pull/10108) [`24e51d6`](https://github.com/biomejs/biome/commit/24e51d6edebaee0ffb938bc20633d9c3403110c9) Thanks [@IxxyDev](https://github.com/IxxyDev)! - Fixed [#6611](https://github.com/biomejs/biome/issues/6611): [`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/) now uses type information to detect more redundant conditions, including `?.`, `??`, `||`, `&&`, comparisons against `null`/`undefined` on non-nullish operands, and `case` clauses that can never match the `switch` value.
  542. - [#10568](https://github.com/biomejs/biome/pull/10568) [`eb1ed0e`](https://github.com/biomejs/biome/commit/eb1ed0e90395a07e64ee763fe15ae00fb77682e0) Thanks [@harsha-cpp](https://github.com/harsha-cpp)! - Fixed [#10564](https://github.com/biomejs/biome/issues/10564): `useAriaPropsForRole` no longer reports false positives for Vue v-bind shorthand bindings (`:aria-checked`, `:aria-level`, etc.).
  543. - [#10570](https://github.com/biomejs/biome/pull/10570) [`2ceb4fe`](https://github.com/biomejs/biome/commit/2ceb4fe437b77b08a60ad48efde2a6c311b7d2e3) Thanks [@Conaclos](https://github.com/Conaclos)! - Improved [`noTsIgnore`](https://biomejs.dev/linter/rules/no-ts-ignore/).
  544. The rule now reports more precisely the range of the `@ts-ignore` comment.
  545. - [#10520](https://github.com/biomejs/biome/pull/10520) [`b55d10f`](https://github.com/biomejs/biome/commit/b55d10f5e8f3099b3f246911ca19cc79758d55e0) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#10519](https://github.com/biomejs/biome/issues/10519): Vue `v-on` event handlers with multiple inline statements are now parsed consistently with Vue.
  546. - [#10204](https://github.com/biomejs/biome/pull/10204) [`ebbf0bd`](https://github.com/biomejs/biome/commit/ebbf0bd382059936ac00de29fc58931728f854d9) Thanks [@ematipico](https://github.com/ematipico)! - Improved the performance of the Biome linter. The improvements are more visible in bigger projects that have more than ~1k files. Early tests showed that in a code base with ~2k files, Biome took less than 26% of time to finish the command.
  547. - [#10546](https://github.com/biomejs/biome/pull/10546) [`e39bb2c`](https://github.com/biomejs/biome/commit/e39bb2c23063ad0384a12e01d666909fd6b26735) Thanks [@tim-we](https://github.com/tim-we)! - Fixed [`#10536`](https://github.com/biomejs/biome/issues/10536): [noUnknownFunction](https://biomejs.dev/linter/rules/no-unknown-function/) no longer flagged CSS `contrast-color()` as unknown. `contrast-color()` is Baseline 2026.
  548. - [#8012](https://github.com/biomejs/biome/pull/8012) [`2be0264`](https://github.com/biomejs/biome/commit/2be02648a090153a93cf71fb63ef68feefd495c2) Thanks [@denbezrukov](https://github.com/denbezrukov)! - Improved the performance of the formatter in some cases. The formatter is now up to ~20% faster at formatting files.
  549. - [#10467](https://github.com/biomejs/biome/pull/10467) [`9a5855e`](https://github.com/biomejs/biome/commit/9a5855e4191c98149f8278289569b2272b992684) Thanks [@Netail](https://github.com/Netail)! - Added a new nursery rule [`noRestrictedDependencies`](https://biomejs.dev/linter/rules/no-restricted-dependencies/), which flags imports and `package.json` dependency entries that have better alternatives in e18e's module replacement data.
  550. For example, the package `globby` is reported because there's a better alternative:
  551. ```js
  552. import glob from "globby";
  553. ```
  554. ```json
  555. {
  556. "dependencies": {
  557. "globby": "x.x.x"
  558. }
  559. }
  560. ```
  561. - [#10470](https://github.com/biomejs/biome/pull/10470) [`84b43c5`](https://github.com/biomejs/biome/commit/84b43c5969569cb3eea3d51ea6c602276723306b) Thanks [@ShaharAviram1](https://github.com/ShaharAviram1)! - Fixed [#10447](https://github.com/biomejs/biome/issues/10447): now the rule [`noProcessEnv`](https://biomejs.dev/linter/rules/no-process-env) detects the use of `env` when it's imported from `process` and `node:process`.
  562. - [#10556](https://github.com/biomejs/biome/pull/10556) [`7ff6b16`](https://github.com/biomejs/biome/commit/7ff6b165f2f62a0836446dee889d9868f12fb06e) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#10492](https://github.com/biomejs/biome/issues/10492): Biome no longer crashes with a stack overflow on certain code when a type-aware rule such as [`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/), [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/), or [`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/) is enabled. For example, the following code used to crash Biome:
  563. ```js
  564. function f(visitor) {
  565. let ctrl = visitor();
  566. for (const x of [0]) ctrl = ctrl();
  567. }
  568. ```
  569. - [#10532](https://github.com/biomejs/biome/pull/10532) [`1da3c75`](https://github.com/biomejs/biome/commit/1da3c7573cdb1d097fc1773fee686140d95f3f35) Thanks [@denbezrukov](https://github.com/denbezrukov)! - CSS declarations with comments before `:` or after `!important` now preserve spaces before `:` and `;`.
  570. ```diff
  571. .selector {
  572. - padding/* name */: 1px;
  573. - color: red !important /* note */;
  574. + padding/* name */ : 1px;
  575. + color: red !important /* note */ ;
  576. }
  577. ```
  578. - [#10491](https://github.com/biomejs/biome/pull/10491) [`a1b5834`](https://github.com/biomejs/biome/commit/a1b5834d4968fd518cc4adfa0e8b4b65b2232637) Thanks [@Mokto](https://github.com/Mokto)! - Fixed the Svelte parser rejecting `{#each}` blocks where the binding uses object destructuring with property renaming, e.g. `{#each items as { id, component: Filter }}`. Biome now correctly parses and formats these rename bindings.
  579. - [#10490](https://github.com/biomejs/biome/pull/10490) [`99bc7df`](https://github.com/biomejs/biome/commit/99bc7df1d1cbb599e9713da56c29763cd04bb53c) Thanks [@Mokto](https://github.com/Mokto)! - Fixed the CSS parser rejecting comma-separated selector lists inside `:global()` and `:local()` pseudo-class functions. Biome now correctly parses `:global(.foo, .bar)`.
  580. - [#10543](https://github.com/biomejs/biome/pull/10543) [`c394fae`](https://github.com/biomejs/biome/commit/c394faeaa27f9f7db8ba075afc6657c0245d8276) Thanks [@mangod12](https://github.com/mangod12)! - Fixed [#10477](https://github.com/biomejs/biome/issues/10477): The RDJSON reporter now emits code replacement text for fix suggestions instead of the human-readable fix description.
  581. - [#10530](https://github.com/biomejs/biome/pull/10530) [`e8e1e6a`](https://github.com/biomejs/biome/commit/e8e1e6aa1b39d1e19d33c12d4b56d6d3fd01a7ce) Thanks [@Conaclos](https://github.com/Conaclos)! - Fixed [#10493](https://github.com/biomejs/biome/issues/10493): [`useImportType`](https://biomejs.dev/linter/rules/use-import-type/) now correctly separates types from a default named import when all imports are types and the `style` option is set to `separatedType`.
  582. - [#10555](https://github.com/biomejs/biome/pull/10555) [`263c7cc`](https://github.com/biomejs/biome/commit/263c7ccd12cd8c0d4527fdf4797c652a223df012) Thanks [@Mokto](https://github.com/Mokto)! - Improved Svelte lint rule accuracy for quoted attribute values containing `{expression}` interpolations.
  583. - [`noRedundantAlt`](https://biomejs.dev/linter/rules/no-redundant-alt/) no longer emits false positives when the alt text contains an interpolation, e.g. `alt="image of {person}"`.
  584. - [`useButtonType`](https://biomejs.dev/linter/rules/use-button-type/) no longer emits false positives for dynamic button types written as `type="{dynamicType}"`.
  585. - [`noScriptUrl`](https://biomejs.dev/linter/rules/no-script-url/) no longer emits false positives for dynamic hrefs such as `href="{url}"`.
  586. - [#10489](https://github.com/biomejs/biome/pull/10489) [`96ef9a4`](https://github.com/biomejs/biome/commit/96ef9a4c2647a71d917485f6791e151cf8b88c96) Thanks [@Mokto](https://github.com/Mokto)! - Fixed Svelte `{#each}` parser incorrectly rejecting TypeScript `as const` type assertions in the iterable expression. Biome now correctly parses `{#each arr as const as item}`.
  587. - [#10539](https://github.com/biomejs/biome/pull/10539) [`935c59a`](https://github.com/biomejs/biome/commit/935c59a6657022c37c9b9933c66cc29c236e5aff) Thanks [@dyc3](https://github.com/dyc3)! - Improved how diagnostics print long lines of code, for example minified files where the entire source code is printed in one line.
  588. ## What's Changed
  589. * feat(css): support SCSS qualified names in values and function calls by @denbezrukov in https://github.com/biomejs/biome/pull/9096
  590. * feat(css): add unary expression parsing by @denbezrukov in https://github.com/biomejs/biome/pull/9093
  591. * feat(css): support scss nesting declarations in declaration lists by @denbezrukov in https://github.com/biomejs/biome/pull/9135
  592. * feat(css): allow scss declarations in @page blocks by @denbezrukov in https://github.com/biomejs/biome/pull/9139
  593. * feat(css): allow delimiters in bracketed value lists by @denbezrukov in https://github.com/biomejs/biome/pull/9145
  594. * feat(analyze/json): useSortedPackageJson by @ematipico in https://github.com/biomejs/biome/pull/9134
  595. * feat: two new cross language rules by @ematipico in https://github.com/biomejs/biome/pull/9152
  596. * feat(js-api): add spanInBytesToSpanInCodeUnits helper function by @ash1day in https://github.com/biomejs/biome/pull/8944
  597. * feat: collect local and global styles for `noUndeclearedClasses` by @ematipico in https://github.com/biomejs/biome/pull/9297
  598. * feat(organizeImports): add `sortBareImports` option by @Conaclos in https://github.com/biomejs/biome/pull/9384
  599. * chore: merge main to next by @ematipico in https://github.com/biomejs/biome/pull/9443
  600. * feat(linter): add includes option for plugin file scoping by @chocky335 in https://github.com/biomejs/biome/pull/9171
  601. * feat(cli): add ANSI art Biome logo by @ematipico in https://github.com/biomejs/biome/pull/9533
  602. * feat(biome_service): support applying GritQL plugin rewrites via --write by @chocky335 in https://github.com/biomejs/biome/pull/9073
  603. * feat(lint): add ignore option to no-unused-variables by @mvarendorff in https://github.com/biomejs/biome/pull/9397
  604. * feat(biome_html_analyze): port noRedundantRoles a11y rule to HTML in https://github.com/biomejs/biome/pull/9564
  605. * revert: feat(biome_html_analyze): port noRedundantRoles a11y rule to HTML by @dyc3 in https://github.com/biomejs/biome/pull/9587
  606. * feat(html/a11y): add noRedundantRoles rule for HTML by @IxxyDev in https://github.com/biomejs/biome/pull/9276
  607. * feat(cli): concise reporter by @ematipico in https://github.com/biomejs/biome/pull/9539
  608. * feat(biome_html_analyze): port useKeyWithMouseEvents a11y rule to HTML by @rahuld109 in https://github.com/biomejs/biome/pull/9582
  609. * chore: fix `next` failures by @dyc3 in https://github.com/biomejs/biome/pull/9633
  610. * feat(biome_html_analyze): port useAriaActivedescendantWithTabindex to HTML by @faizkhairi in https://github.com/biomejs/biome/pull/9617
  611. * feat(lint): port useValidAnchor to html by @DerTimonius in https://github.com/biomejs/biome/pull/8987
  612. * feat: improve noUndeclaredClasses by @ematipico in https://github.com/biomejs/biome/pull/9503
  613. * feat(biome_html_analyze): port useHeadingContent a11y rule to HTML by @faizkhairi in https://github.com/biomejs/biome/pull/9716
  614. * feat(formatter): add delimiterSpacing option by @luisherranz in https://github.com/biomejs/biome/pull/9718
  615. * feat(assist): implement useSortedAttributes for HTML by @mujpao in https://github.com/biomejs/biome/pull/9547
  616. * feat(html/a11y): port noAriaUnsupportedElements to HTML by @IxxyDev in https://github.com/biomejs/biome/pull/9491
  617. * feat(assist): use sorted type fields 9137 by @ff1451 in https://github.com/biomejs/biome/pull/9275
  618. * feat(html_analyze): port useValidAriaProps rule to HTML by @Maximiliano-Zeballos in https://github.com/biomejs/biome/pull/9761
  619. * feat(html): port noAriaHiddenOnFocusable a11y rule to HTML by @aviraldua93 in https://github.com/biomejs/biome/pull/9496
  620. * docs: remove duplicate sentence by @Netail in https://github.com/biomejs/biome/pull/9832
  621. * fix: assist generator by @Netail in https://github.com/biomejs/biome/pull/9831
  622. * feat(cli): add watch mode (--watch) to the CLI for check/format/lint commands by @siketyan in https://github.com/biomejs/biome/pull/8731
  623. * refactor: improve watch mode by @ematipico in https://github.com/biomejs/biome/pull/9859
  624. * feat(cli): add `upgrade` command by @nhedger in https://github.com/biomejs/biome/pull/9546
  625. * chore: extra rule sources by @Netail in https://github.com/biomejs/biome/pull/9872
  626. * feat(graphql_analyze): implement useSortedSelectionSet by @Netail in https://github.com/biomejs/biome/pull/9853
  627. * feat(html): port useValidAriaValues a11y rule to HTML by @aviraldua93 in https://github.com/biomejs/biome/pull/9928
  628. * chore: merge `main` into `next` by @dyc3 in https://github.com/biomejs/biome/pull/9945
  629. * feat(lint/html): port noExcessiveLinesPerFile to html by @dyc3 in https://github.com/biomejs/biome/pull/9967
  630. * docs(organizeImports): revamp user-facing docs by @Conaclos in https://github.com/biomejs/biome/pull/9887
  631. * ci: update snapshots by @Conaclos in https://github.com/biomejs/biome/pull/9986
  632. * chore: abstract html tag matcher (main into next) by @Netail in https://github.com/biomejs/biome/pull/9993
  633. * feat(linter): add noNonInteractiveTabIndex for HTML by @viraxslot in https://github.com/biomejs/biome/pull/9306
  634. * feat(html_analyze): implement noNoninteractiveElementToInteractiveRole by @Netail in https://github.com/biomejs/biome/pull/10022
  635. * feat(html_analyze): implement noInteractiveElementToNoninteractiveRole by @Netail in https://github.com/biomejs/biome/pull/10028
  636. * feat(html_analyze): implement useValidAutocomplete by @Netail in https://github.com/biomejs/biome/pull/10013
  637. * feat(html_analyze): implement noNoninteractiveElementInteractions by @Netail in https://github.com/biomejs/biome/pull/10026
  638. * feat(js-formatter): implement delimiterSpacing for JavaScript by @luisherranz in https://github.com/biomejs/biome/pull/9719
  639. * fix: next branch ci (+ main into next) by @Netail in https://github.com/biomejs/biome/pull/10051
  640. * feat(html_analyze): implement useAriaPropsSupportedByRole by @Netail in https://github.com/biomejs/biome/pull/10015
  641. * feat(linter): preset by @ematipico in https://github.com/biomejs/biome/pull/9813
  642. * feat(organizeImports): add :STYLE: group matcher by @Conaclos in https://github.com/biomejs/biome/pull/10070
  643. * feat(lint): support pnpm catalogs by @apple-yagi in https://github.com/biomejs/biome/pull/8396
  644. * feat(html_analyze): implement useFocusableInteractive by @Netail in https://github.com/biomejs/biome/pull/10067
  645. * feat(html): port useKeyWithClickEvents a11y rule to HTML by @aviraldua93 in https://github.com/biomejs/biome/pull/9495
  646. * feat(html_analyze): port useSemanticElements a11y rule to HTML by @Maximiliano-Zeballos in https://github.com/biomejs/biome/pull/9792
  647. * feat(js-formatter): implement delimiterSpacing for JSX by @luisherranz in https://github.com/biomejs/biome/pull/9720
  648. * feat(js-formatter): implement delimiterSpacing for TypeScript by @luisherranz in https://github.com/biomejs/biome/pull/9721
  649. * feat(json-formatter): implement delimiterSpacing for JSON by @luisherranz in https://github.com/biomejs/biome/pull/9723
  650. * feat(html_analyze): port noLabelWithoutControl by @Netail in https://github.com/biomejs/biome/pull/10089
  651. * chore: merge main into next by @Netail in https://github.com/biomejs/biome/pull/10104
  652. * feat(migrate): map ESLint spacing rules to delimiterSpacing by @luisherranz in https://github.com/biomejs/biome/pull/9724
  653. * feat(css-formatter): implement delimiterSpacing for CSS by @luisherranz in https://github.com/biomejs/biome/pull/9722
  654. * feat(biome_js_analyze): add `bundleDependencies` option to `NoUndeclaredDependencies` rule by @mdrobny in https://github.com/biomejs/biome/pull/9170
  655. * fix: workspace generation by @Netail in https://github.com/biomejs/biome/pull/10107
  656. * feat(html_analyze): implement noStaticElementInteractions by @Netail in https://github.com/biomejs/biome/pull/10069
  657. * feat: implement useSortedEnumMembers by @Netail in https://github.com/biomejs/biome/pull/10000
  658. * feat(organizeImports): add `kind` field to import matcher by @georgephillips in https://github.com/biomejs/biome/pull/10074
  659. * chore: main into next by @Netail in https://github.com/biomejs/biome/pull/10142
  660. * chore: changeset corrections by @Netail in https://github.com/biomejs/biome/pull/10145
  661. * fix: align HTML & JS a11y sources by @Netail in https://github.com/biomejs/biome/pull/10120
  662. * feat(lint): add rule options for `noImplicitCoercions` to ignore double negations by @Bertie690 in https://github.com/biomejs/biome/pull/9309
  663. * docs: incorrect markdown by @ematipico in https://github.com/biomejs/biome/pull/10186
  664. * feat(core): handle svg files by @ematipico in https://github.com/biomejs/biome/pull/10106
  665. * feat(config): expose `html.parser.vue` by @dyc3 in https://github.com/biomejs/biome/pull/9366
  666. * chore: refactor delimiterSpacing changesets by @ematipico in https://github.com/biomejs/biome/pull/10234
  667. * perf(core): cache analyzer visitor by @ematipico in https://github.com/biomejs/biome/pull/10204
  668. * feat: go-to definition (#9619) by @ematipico in https://github.com/biomejs/biome/pull/9700
  669. * chore: merge main into next by @ematipico in https://github.com/biomejs/biome/pull/10316
  670. * feat(core): respect git info exclude files by @jongwan56 in https://github.com/biomejs/biome/pull/10121
  671. * feat(useNumericSeparators): add options for minimum digits and group length by @dyc3 in https://github.com/biomejs/biome/pull/9571
  672. * chore: merge into next by @ematipico in https://github.com/biomejs/biome/pull/10435
  673. * refactor: use salsa by @ematipico in https://github.com/biomejs/biome/pull/10315
  674. * chore: merge main into next by @ematipico in https://github.com/biomejs/biome/pull/10453
  675. * chore: enable unstable features on preview builds for playground by @siketyan in https://github.com/biomejs/biome/pull/10485
  676. * ci: enable automation jobs by @ematipico in https://github.com/biomejs/biome/pull/10443
  677. * feat(lint): add ignoreMixedLogicalExpressions option to useNullishCoa… by @pkallos in https://github.com/biomejs/biome/pull/9974
  678. * fix(parser/yaml): correctly lex anchor/tag properties followed by a sequence by @siketyan in https://github.com/biomejs/biome/pull/10481
  679. * fix(markdown_parser): keep loose list across empty item before blank line by @jfmcdowell in https://github.com/biomejs/biome/pull/10483
  680. * fix(lint/noUnnecessaryConditions): extend detection coverage by @IxxyDev in https://github.com/biomejs/biome/pull/10108
  681. * chore: merge main into next by @ematipico in https://github.com/biomejs/biome/pull/10500
  682. * fix(html-parser): allow omitting binding in Svelte {:then} and {:catch} blocks by @Mokto in https://github.com/biomejs/biome/pull/10487
  683. * ci: correct token for removing label by @ematipico in https://github.com/biomejs/biome/pull/10511
  684. * fix(css_parser): parse semicolonless scss rules by @denbezrukov in https://github.com/biomejs/biome/pull/10509
  685. * chore(deps): update rust crate jiff to 0.2.28 by @renovate[bot] in https://github.com/biomejs/biome/pull/10521
  686. * chore(deps): update rust crate serde_json to 1.0.150 by @renovate[bot] in https://github.com/biomejs/biome/pull/10522
  687. * chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/10524
  688. * chore(deps): update pnpm to v11.4.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/10525
  689. * ci: remove cli benchmark by @ematipico in https://github.com/biomejs/biome/pull/10526
  690. * fix(css_parser): support interpolated dashed identifiers in function at-rules by @denbezrukov in https://github.com/biomejs/biome/pull/10518
  691. * fix(parser/yaml): lex DIRECTIVE_END in stream by @siketyan in https://github.com/biomejs/biome/pull/10480
  692. * fix(parser/yaml): lex directives by @siketyan in https://github.com/biomejs/biome/pull/10484
  693. * fix(parse/js/vue): allow v-on directives with multiple inline statements by @dyc3 in https://github.com/biomejs/biome/pull/10520
  694. * feat(core): implement YAML file handler by @siketyan in https://github.com/biomejs/biome/pull/10527
  695. * fix(useImportType): always separate types from default named imports by @Conaclos in https://github.com/biomejs/biome/pull/10530
  696. * fix(css_formatter): preserve declaration comment boundaries by @denbezrukov in https://github.com/biomejs/biome/pull/10532
  697. * feat(formatter/yaml): initial implementation for simple block mappings by @siketyan in https://github.com/biomejs/biome/pull/10528
  698. * feat(formatter/yaml): initial implementation for block sequences by @siketyan in https://github.com/biomejs/biome/pull/10529
  699. * feat(tailwind_parser): parse Tailwind variant expressions by @jiwon79 in https://github.com/biomejs/biome/pull/10448
  700. * chore(deps): update github-actions (major) by @renovate[bot] in https://github.com/biomejs/biome/pull/10538
  701. * fix(svelte_parser): support destructuring rename bindings in {#each} blocks by @Mokto in https://github.com/biomejs/biome/pull/10491
  702. * perf: reduce allocations in noExcessiveLinesPerFile rules by @ematipico in https://github.com/biomejs/biome/pull/10506
  703. * feat(html/nursery): add useSvelteRequireEachKey rule by @Mokto in https://github.com/biomejs/biome/pull/10503
  704. * fix(diagnostics): truncate diagnostics that are super long to keep output readable by @dyc3 in https://github.com/biomejs/biome/pull/10539
  705. * feat(lint/useIterableCallbackReturn): add allowImplicit option #9445 by @TXWSLYF in https://github.com/biomejs/biome/pull/10461
  706. * fix(css-parser): allow comma-separated selector lists inside :global() and :local() by @Mokto in https://github.com/biomejs/biome/pull/10490
  707. * fix(linter): recognize contrast-color() as a known CSS function by @tim-we in https://github.com/biomejs/biome/pull/10546
  708. * fix(parse/html): don't bother tracking unicode escape sequences by @dyc3 in https://github.com/biomejs/biome/pull/10542
  709. * fix(cli): emit rdjson code suggestion replacements by @mangod12 in https://github.com/biomejs/biome/pull/10543
  710. * refactor(organizeImports): require `sortBareImports` for bare matchers by @Conaclos in https://github.com/biomejs/biome/pull/10517
  711. * feat(linter): implement useIncludes rule by @Dotify71 in https://github.com/biomejs/biome/pull/10516
  712. * fix(html-parser): allow TypeScript as const in Svelte {#each} expressions by @Mokto in https://github.com/biomejs/biome/pull/10489
  713. * chore: add SCSS in unstable wasm build by @denbezrukov in https://github.com/biomejs/biome/pull/10551
  714. * test(css_formatter): sync Prettier CSS and SCSS fixtures by @denbezrukov in https://github.com/biomejs/biome/pull/10554
  715. * chore: merge main into next by @ematipico in https://github.com/biomejs/biome/pull/10553
  716. * chore: biome v2.5 by @ematipico in https://github.com/biomejs/biome/pull/9277
  717. * fix: avoid infinite recursion by passing depth to resolve_callee_to_function by @ematipico in https://github.com/biomejs/biome/pull/10556
  718. * fix(css_formatter): add spacing SCSS binary expressions by @denbezrukov in https://github.com/biomejs/biome/pull/10537
  719. * feat: noRestrictedDependencies by @Netail in https://github.com/biomejs/biome/pull/10467
  720. * feat: rule promotion for v2.5 by @ematipico in https://github.com/biomejs/biome/pull/10562
  721. * fix(useVueConsistentVBindStyle): don't flag v-bind directives that don't have arguments by @dyc3 in https://github.com/biomejs/biome/pull/10565
  722. * fix(useVueHyphenatedAttributes): only run in vue files, exclude svgs and their children by @dyc3 in https://github.com/biomejs/biome/pull/10566
  723. * docs: replace "allows to" with "allows you to" in formatter comments by @dfedoryshchev in https://github.com/biomejs/biome/pull/10507
  724. * feat(useExportType): add style option by @Conaclos in https://github.com/biomejs/biome/pull/10561
  725. * refactor(useExportType): improve docs and code by @Conaclos in https://github.com/biomejs/biome/pull/10569
  726. * refactor(noTsIgnore): avoid one alloc, improve range reporting by @Conaclos in https://github.com/biomejs/biome/pull/10570
  727. * fix(css_parser): parse SCSS bracketed expression lists by @denbezrukov in https://github.com/biomejs/biome/pull/10567
  728. * fix(a11y): useAriaPropsForRole no longer false-positives on Vue v-bind shorthand 🤖🤖🤖 by @harsha-cpp in https://github.com/biomejs/biome/pull/10568
  729. * fix(css_formatter): indent broken SCSS string concatenation by @denbezrukov in https://github.com/biomejs/biome/pull/10571
  730. * fix(css_formatter): preserve SCSS grid template rows by @denbezrukov in https://github.com/biomejs/biome/pull/10572
  731. * feat(css_parser): parse interpolated scss media conditions by @denbezrukov in https://github.com/biomejs/biome/pull/10573
  732. * feat(css_formatter): expand compound SCSS variable lists by @denbezrukov in https://github.com/biomejs/biome/pull/10577
  733. * fix: docs and readme by @ematipico in https://github.com/biomejs/biome/pull/10584
  734. * feat(css): parse dynamic SCSS keyframes names by @denbezrukov in https://github.com/biomejs/biome/pull/10587
  735. * fix(markdown): remove unused hard_line slot from MdParagraph by @jfmcdowell in https://github.com/biomejs/biome/pull/10593
  736. * feat(css_parser): parse SCSS variables in keyframes by @denbezrukov in https://github.com/biomejs/biome/pull/10598
  737. * feat(css_formatter): improve SCSS variable declaration formatting by @denbezrukov in https://github.com/biomejs/biome/pull/10597
  738. * chore(deps): update dependency @types/node to v24.13.1 by @renovate[bot] in https://github.com/biomejs/biome/pull/10579
  739. * chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/10580
  740. * chore(deps): update rust to v1.96.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/10582
  741. * chore(deps): update pnpm to v11.5.2 by @renovate[bot] in https://github.com/biomejs/biome/pull/10581
  742. * test(md): cover loose list + mixed space-tab sublist in fuzz corpus by @jfmcdowell in https://github.com/biomejs/biome/pull/10594
  743. * feat(css_formatter): keep SCSS scalar parentheses inline by @denbezrukov in https://github.com/biomejs/biome/pull/10599
  744. * fix(markdown): remove dead syntax kinds and fix bogus node handling by @jfmcdowell in https://github.com/biomejs/biome/pull/10600
  745. * fix(markdown): reset link-definition continuation when a block quote opens by @jfmcdowell in https://github.com/biomejs/biome/pull/10601
  746. * fix(css_parser): parse comma-separated composes values by @xsourabhsharma in https://github.com/biomejs/biome/pull/10591
  747. * fix(biome_configuration): avoid Markdown links in JSON schema descriptions by @mvanhorn in https://github.com/biomejs/biome/pull/10589
  748. * fix(lint): detect imported process env usage by @ShaharAviram1 in https://github.com/biomejs/biome/pull/10470
  749. * feat(fmt/md): improve formatting of list against prettier by @ematipico in https://github.com/biomejs/biome/pull/10383
  750. * feat(html_parser): parse Svelte interpolations in quoted attribute values by @Mokto in https://github.com/biomejs/biome/pull/10555
  751. * refactor: removes mutex from salsa db by @ematipico in https://github.com/biomejs/biome/pull/10608
  752. * feat(css_parser): parse interpolated SCSS supports conditions by @denbezrukov in https://github.com/biomejs/biome/pull/10602
  753. * fix(css_formatter): align grid-template-areas rows after comments by @denbezrukov in https://github.com/biomejs/biome/pull/10603
  754. * refactor(formatter): introduce the SourcePosition element and remove source position from Text and LocatedTokenText variant by @denbezrukov in https://github.com/biomejs/biome/pull/8012
  755. * feat(lint): add useFunctionComponentDefinition rule by @citadelgrad in https://github.com/biomejs/biome/pull/10498
  756. * ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/10499
  757. ## New Contributors
  758. * @ash1day made their first contribution in https://github.com/biomejs/biome/pull/8944
  759. * @mvarendorff made their first contribution in https://github.com/biomejs/biome/pull/9397
  760. * @IxxyDev made their first contribution in https://github.com/biomejs/biome/pull/9276
  761. * @faizkhairi made their first contribution in https://github.com/biomejs/biome/pull/9617
  762. * @luisherranz made their first contribution in https://github.com/biomejs/biome/pull/9718
  763. * @Maximiliano-Zeballos made their first contribution in https://github.com/biomejs/biome/pull/9761
  764. * @aviraldua93 made their first contribution in https://github.com/biomejs/biome/pull/9496
  765. * @apple-yagi made their first contribution in https://github.com/biomejs/biome/pull/8396
  766. * @mdrobny made their first contribution in https://github.com/biomejs/biome/pull/9170
  767. * @georgephillips made their first contribution in https://github.com/biomejs/biome/pull/10074
  768. * @jongwan56 made their first contribution in https://github.com/biomejs/biome/pull/10121
  769. * @Mokto made their first contribution in https://github.com/biomejs/biome/pull/10487
  770. * @TXWSLYF made their first contribution in https://github.com/biomejs/biome/pull/10461
  771. * @mangod12 made their first contribution in https://github.com/biomejs/biome/pull/10543
  772. * @harsha-cpp made their first contribution in https://github.com/biomejs/biome/pull/10568
  773. * @xsourabhsharma made their first contribution in https://github.com/biomejs/biome/pull/10591
  774. * @ShaharAviram1 made their first contribution in https://github.com/biomejs/biome/pull/10470
  775. * @citadelgrad made their first contribution in https://github.com/biomejs/biome/pull/10498
  776. **Full Changelog**: https://github.com/biomejs/biome/compare/@biomejs/biome@2.4.16...@biomejs/biome@2.5.0

ver en githubimported 2026-09-28 vía npm